2017-05-01 13:32:39 +00:00
buildscript {
repositories {
jcenter ( )
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
mavenCentral ( )
2017-05-01 13:32:39 +00:00
maven {
name = "forge"
2019-06-21 15:51:55 +00:00
url = "https://files.minecraftforge.net/maven"
2017-05-01 13:32:39 +00:00
}
}
dependencies {
2019-02-14 10:53:18 +00:00
classpath 'com.google.code.gson:gson:2.8.1'
2020-04-10 20:17:31 +00:00
classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.169'
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
2019-01-28 14:05:30 +00:00
classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
2017-05-01 13:32:39 +00:00
}
}
plugins {
2019-06-07 23:28:03 +00:00
id "checkstyle"
id "com.github.hierynomus.license" version "0.15.0"
id "com.matthewprenger.cursegradle" version "1.3.0"
2019-04-07 14:30:27 +00:00
id "com.github.breadmoirai.github-release" version "2.2.4"
2017-05-01 13:32:39 +00:00
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
apply plugin: 'net.minecraftforge.gradle'
2017-12-01 20:05:26 +00:00
apply plugin: 'org.ajoberstar.grgit'
2018-04-19 21:36:00 +00:00
apply plugin: 'maven-publish'
apply plugin: 'maven'
2017-12-01 20:05:26 +00:00
2019-03-19 11:47:12 +00:00
version = mod_version
2019-02-19 14:49:13 +00:00
2017-11-15 16:25:10 +00:00
group = "org.squiddev"
2019-03-19 11:47:12 +00:00
archivesBaseName = "cc-tweaked-${mc_version}"
2017-05-01 13:32:39 +00:00
minecraft {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
runs {
client {
workingDirectory project . file ( 'run' )
property 'forge.logging.markers' , 'REGISTRIES'
property 'forge.logging.console.level' , 'debug'
mods {
computercraft {
source sourceSets . main
}
}
}
server {
workingDirectory project . file ( 'run' )
property 'forge.logging.markers' , 'SCAN,REGISTRIES,REGISTRYDUMP'
property 'forge.logging.console.level' , 'debug'
mods {
computercraft {
source sourceSets . main
}
}
}
}
2019-03-19 11:47:12 +00:00
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
mappings channel: 'snapshot' , version: "${mappings_version}" . toString ( )
accessTransformer file ( 'src/main/resources/META-INF/accesstransformer.cfg' )
2017-05-01 13:32:39 +00:00
}
2017-10-25 12:40:35 +00:00
repositories {
maven {
2019-03-19 11:47:12 +00:00
name "JEI"
2019-06-21 15:51:55 +00:00
url "https://dvs1.progwml6.com/files/maven"
2017-10-25 12:40:35 +00:00
}
2017-05-01 16:49:22 +00:00
maven {
2019-03-19 11:47:12 +00:00
name "SquidDev"
url "https://squiddev.cc/maven"
}
2019-12-18 15:29:24 +00:00
maven {
name "CraftTweaker"
url "https://maven.blamejared.com/"
}
2017-05-01 16:49:22 +00:00
}
configurations {
shade
compile . extendsFrom shade
2018-04-19 21:36:00 +00:00
deployerJars
2017-10-25 12:40:35 +00:00
}
2017-05-01 13:32:39 +00:00
2017-10-25 12:40:35 +00:00
dependencies {
2019-10-27 15:16:47 +00:00
checkstyle "com.puppycrawl.tools:checkstyle:8.25"
2019-06-07 23:28:03 +00:00
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
2020-01-22 11:14:30 +00:00
compileOnly fg . deobf ( "mezz.jei:jei-1.15.2:6.0.0.2:api" )
runtimeOnly fg . deobf ( "mezz.jei:jei-1.15.2:6.0.0.2" )
2018-08-11 09:48:41 +00:00
Bump Cobalt version to enable single-threading
The latest version of Cobalt has several major changes, which I'm
looking forward to taking advantage of in the coming months:
- The Lua interpreter has been split up from the actual LuaClosure
instance. It now runs multiple functions within one loop, handling
pushing/popping and resuming method calls correctly.
This means we have a theoretically infinite call depth, as we're no
longer bounded by Java's stack size. In reality, this is limited to
32767 (Short.MAX_VALUE), as that's a mostly equivalent to the limits
PUC Lua exposes.
- The stack is no longer unwound in the event of errors. This both
simplifies error handling (not that CC:T needs to care about that)
but also means one can call debug.traceback on a now-dead coroutine
(which is more useful for debugging than using xpcall).
- Most significantly, coroutines are no longer each run on a dedicated
thread. Instead, yielding or resuming throws an exception to unwind
the Java stack and switches to a different coroutine.
In order to preserve compatability with CC's assumption about LuaJ's
threading model (namely that yielding blocks the thread), we also
provide a yieldBlock method (which CC:T consumes). This suspends the
current thread and switches execution to a new thread (see
SquidDev/Cobalt@b5ddf164f1c77bc2657f096f39dd167c19270f6d for more
details). While this does mean we need to use more than 1 thread,
it's still /substantially/ less than would otherwise be needed.
We've been running these changes on SwitchCraft for a few days now and
haven't seen any issues. One nice thing to observe is that the number of
CC thread has gone down from ~1.9k to ~100 (of those, ~70 are dedicated
to running coroutines). Similarly, the server has gone from generating
~15k threads over its lifetime, to ~3k. While this is still a lot, it's
a substantial improvement.
2019-02-10 21:46:52 +00:00
shade 'org.squiddev:Cobalt:0.5.0-SNAPSHOT'
2018-02-21 15:29:34 +00:00
2019-06-15 10:05:45 +00:00
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.2'
2018-04-19 21:36:00 +00:00
deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
2017-05-01 13:32:39 +00:00
}
2020-01-22 11:14:30 +00:00
sourceSets {
main {
java {
exclude 'dan200/computercraft/client/render_old'
exclude 'dan200/computercraft/shared/integration/crafttweaker'
}
}
}
2019-06-15 10:05:45 +00:00
// Compile tasks
2017-11-14 22:37:37 +00:00
javadoc {
include "dan200/computercraft/api/**/*.java"
}
2017-05-14 16:00:14 +00:00
jar {
2017-11-14 22:37:37 +00:00
dependsOn javadoc
2017-05-14 16:00:14 +00:00
manifest {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
attributes ( [ "Specification-Title" : "computercraft" ,
"Specification-Vendor" : "SquidDev" ,
2019-07-21 08:41:58 +00:00
"Specification-Version" : "1" ,
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
"Implementation-Title" : "CC: Tweaked" ,
"Implementation-Version" : "${mod_version}" ,
"Implementation-Vendor" : "SquidDev" ,
"Implementation-Timestamp" : new Date ( ) . format ( "yyyy-MM-dd'T'HH:mm:ssZ" ) ] )
2017-05-14 16:00:14 +00:00
}
2017-11-14 21:48:47 +00:00
2019-02-19 14:49:13 +00:00
from ( sourceSets . main . allSource ) {
2017-11-14 22:37:37 +00:00
include "dan200/computercraft/api/**/*.java"
2019-02-19 14:49:13 +00:00
}
2017-11-14 22:37:37 +00:00
2017-11-14 21:48:47 +00:00
from configurations . shade . collect { it . isDirectory ( ) ? it : zipTree ( it ) }
2017-05-14 16:00:14 +00:00
}
2019-06-15 10:05:45 +00:00
[ compileJava , compileTestJava ] . forEach {
it . configure {
2019-12-24 19:16:06 +00:00
options . compilerArgs < < "-Xlint" < < "-Xlint:-processing"
2019-06-15 10:05:45 +00:00
}
}
2019-02-14 10:53:18 +00:00
import java.nio.charset.StandardCharsets
import java.nio.file.*
import java.util.zip.*
import com.google.gson.GsonBuilder
import com.google.gson.JsonElement
2019-06-07 23:28:03 +00:00
import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat
2017-05-24 16:35:41 +00:00
import org.ajoberstar.grgit.Grgit
2019-02-14 10:53:18 +00:00
import proguard.gradle.ProGuardTask
task proguard ( type: ProGuardTask , dependsOn: jar ) {
description "Removes unused shadowed classes from the jar"
2019-02-16 15:57:35 +00:00
group "compact"
2019-02-14 10:53:18 +00:00
injars jar . archivePath
outjars "${jar.archivePath.absolutePath.replace(" . jar ", " ")}-min.jar"
2019-02-16 15:57:35 +00:00
// Add the main runtime jar and all non-shadowed dependencies
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
2019-12-23 18:54:19 +00:00
libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
2019-02-16 15:57:35 +00:00
doFirst {
sourceSets . main . compileClasspath
. filter { ! it . name . contains ( "Cobalt" ) }
. each { libraryjars it }
}
2019-02-14 10:53:18 +00:00
// We want to avoid as much obfuscation as possible. We're only doing this to shrink code size.
dontobfuscate ; dontoptimize ; keepattributes ; keepparameternames
// Proguard will remove directories by default, but that breaks JarMount.
2019-06-02 15:46:45 +00:00
keepdirectories 'data/computercraft/lua**'
2019-02-14 10:53:18 +00:00
// Preserve ComputerCraft classes - we only want to strip shadowed files.
keep 'class dan200.computercraft.** { *; }'
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
// LWJGL and Apache bundle Java 9 versions, which is great, but rather breaks Proguard
dontwarn 'module-info'
dontwarn 'org.apache.**,org.lwjgl.**'
2019-02-14 10:53:18 +00:00
}
task proguardMove ( dependsOn: proguard ) {
description "Replace the original jar with the minified version"
group "compact"
doLast {
Files . move (
file ( "${jar.archivePath.absolutePath.replace(" . jar ", " ")}-min.jar" ) . toPath ( ) ,
file ( jar . archivePath ) . toPath ( ) ,
StandardCopyOption . REPLACE_EXISTING
)
}
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
2017-05-24 16:35:41 +00:00
processResources {
2019-03-19 11:47:12 +00:00
inputs . property "version" , mod_version
2019-02-20 09:48:16 +00:00
inputs . property "mcversion" , mc_version
2017-05-01 13:32:39 +00:00
2019-01-28 14:05:30 +00:00
def hash = 'none'
2017-05-24 17:20:46 +00:00
Set < String > contributors = [ ]
2019-01-28 14:05:30 +00:00
try {
def grgit = Grgit . open ( dir: '.' )
hash = grgit . head ( ) . id
def blacklist = [ 'GitHub' , 'dan200' , 'Daniel Ratcliffe' ]
grgit . log ( ) . each {
if ( ! blacklist . contains ( it . author . name ) ) contributors . add ( it . author . name )
if ( ! blacklist . contains ( it . committer . name ) ) contributors . add ( it . committer . name )
}
} catch ( Exception ignored ) { }
2017-07-06 16:23:35 +00:00
2019-01-28 14:05:30 +00:00
inputs . property "commithash" , hash
2017-05-24 17:20:46 +00:00
2017-05-01 13:32:39 +00:00
from ( sourceSets . main . resources . srcDirs ) {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
include 'META-INF/mods.toml'
include 'data/computercraft/lua/rom/help/credits.txt'
2017-05-24 17:20:46 +00:00
2019-03-19 11:47:12 +00:00
expand 'version' : mod_version ,
2019-02-20 09:48:16 +00:00
'mcversion' : mc_version ,
'gitcontributors' : contributors . sort ( false , String . CASE_INSENSITIVE_ORDER ) . join ( '\n' )
2017-07-06 16:23:35 +00:00
}
2017-05-01 13:32:39 +00:00
from ( sourceSets . main . resources . srcDirs ) {
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
exclude 'META-INF/mods.toml'
exclude 'data/computercraft/lua/rom/help/credits.txt'
2017-05-01 13:32:39 +00:00
}
}
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
task compressJson ( dependsOn: jar ) {
2019-02-14 10:53:18 +00:00
group "compact"
description "Minifies all JSON files, stripping whitespace"
def jarPath = file ( jar . archivePath )
def tempPath = File . createTempFile ( "input" , ".jar" , temporaryDir )
tempPath . deleteOnExit ( )
def gson = new GsonBuilder ( ) . create ( )
doLast {
// Copy over all files in the current jar to the new one, running json files from GSON. As pretty printing
// is turned off, they should be minified.
new ZipFile ( jarPath ) . withCloseable { inJar - >
2019-06-02 17:48:36 +00:00
tempPath . getParentFile ( ) . mkdirs ( )
2019-02-14 10:53:18 +00:00
new ZipOutputStream ( new BufferedOutputStream ( new FileOutputStream ( tempPath ) ) ) . withCloseable { outJar - >
inJar . entries ( ) . each { entry - >
if ( entry . directory ) {
outJar . putNextEntry ( entry )
} else if ( ! entry . name . endsWith ( ".json" ) ) {
outJar . putNextEntry ( entry )
inJar . getInputStream ( entry ) . withCloseable { outJar < < it }
} else {
ZipEntry newEntry = new ZipEntry ( entry . name )
newEntry . setTime ( entry . time )
outJar . putNextEntry ( newEntry )
def element = inJar . getInputStream ( entry ) . withCloseable { gson . fromJson ( it . newReader ( "UTF8" ) , JsonElement . class ) }
outJar . write ( gson . toJson ( element ) . getBytes ( StandardCharsets . UTF_8 ) )
}
}
}
}
// And replace the original jar again
Files . move ( tempPath . toPath ( ) , jarPath . toPath ( ) , StandardCopyOption . REPLACE_EXISTING )
}
}
assemble . dependsOn compressJson
2017-12-01 20:05:26 +00:00
2019-06-15 10:05:45 +00:00
// Check tasks
test {
useJUnitPlatform ( )
testLogging {
events "skipped" , "failed"
}
}
2019-06-07 23:28:03 +00:00
license {
mapping ( "java" , "SLASHSTAR_STYLE" )
strictCheck true
ext . year = Calendar . getInstance ( ) . get ( Calendar . YEAR )
}
[ licenseMain , licenseFormatMain ] . forEach {
it . configure {
include ( "**/*.java" )
exclude ( "dan200/computercraft/api/**" )
header rootProject . file ( 'config/license/main.txt' )
}
}
[ licenseTest , licenseFormatTest ] . forEach {
it . configure {
include ( "**/*.java" )
header rootProject . file ( 'config/license/main.txt' )
}
}
2019-06-15 10:05:45 +00:00
gradle . projectsEvaluated {
tasks . withType ( LicenseFormat ) {
outputs . upToDateWhen { false }
}
}
2019-06-07 23:28:03 +00:00
task licenseAPI ( type: LicenseCheck ) ;
task licenseFormatAPI ( type: LicenseFormat ) ;
[ licenseAPI , licenseFormatAPI ] . forEach {
it . configure {
source = sourceSets . main . java
include ( "dan200/computercraft/api/**" )
header rootProject . file ( 'config/license/api.txt' )
}
}
2019-06-15 10:05:45 +00:00
// Upload tasks
2019-06-07 23:28:03 +00:00
2019-06-02 15:11:18 +00:00
task checkRelease {
2019-05-31 09:19:24 +00:00
group "upload"
description "Verifies that everything is ready for a release"
inputs . property "version" , mod_version
2019-06-02 15:46:45 +00:00
inputs . file ( "src/main/resources/data/computercraft/lua/rom/help/changelog.txt" )
inputs . file ( "src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt" )
2019-05-31 09:19:24 +00:00
doLast {
def ok = true
// Check we're targetting the current version
2019-06-02 15:46:45 +00:00
def whatsnew = new File ( "src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt" ) . readLines ( )
2019-05-31 09:19:24 +00:00
if ( whatsnew [ 0 ] ! = "New features in CC: Tweaked $mod_version" ) {
ok = false
project . logger . error ( "Expected `whatsnew.txt' to target $mod_version." )
}
// Check "read more" exists and trim it
def idx = whatsnew . findIndexOf { it = = 'Type "help changelog" to see the full version history.' }
if ( idx = = - 1 ) {
ok = false
project . logger . error ( "Must mention the changelog in whatsnew.txt" )
} else {
whatsnew = whatsnew . getAt ( 0 . . < idx )
}
// Check whatsnew and changelog match.
def versionChangelog = "# " + whatsnew . join ( "\n" )
2019-06-02 15:46:45 +00:00
def changelog = new File ( "src/main/resources/data/computercraft/lua/rom/help/changelog.txt" ) . getText ( )
2019-05-31 09:19:24 +00:00
if ( ! changelog . startsWith ( versionChangelog ) ) {
ok = false
project . logger . error ( "whatsnew and changelog are not in sync" )
}
if ( ! ok ) throw new IllegalStateException ( "Could not check release" )
}
}
2019-10-30 17:07:29 +00:00
check . dependsOn checkRelease
2019-05-31 09:19:24 +00:00
2017-12-01 20:05:26 +00:00
curseforge {
apiKey = project . hasProperty ( 'curseForgeApiKey' ) ? project . curseForgeApiKey : ''
project {
id = '282001'
2020-01-22 11:14:30 +00:00
releaseType = 'alpha'
2019-04-02 20:33:55 +00:00
changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
2019-05-01 12:48:33 +00:00
relations {
incompatible "computercraft"
}
2017-12-01 20:05:26 +00:00
}
}
2018-04-19 21:36:00 +00:00
publishing {
publications {
mavenJava ( MavenPublication ) {
from components . java
Update CC: Tweaked to 1.13
Look, I originally had this split into several commits, but lots of
other cleanups got mixed in. I then backported some of the cleanups to
1.12, did other tidy ups there, and eventually the web of merges was
unreadable.
Yes, this is a horrible mess, but it's still nicer than it was. Anyway,
changes:
- Flatten everything. For instance, there are now three instances of
BlockComputer, two BlockTurtle, ItemPocketComputer. There's also no
more BlockPeripheral (thank heavens) - there's separate block classes
for each peripheral type.
- Remove pretty much all legacy code. As we're breaking world
compatibility anyway, we can remove all the code to load worlds from
1.4 days.
- The command system is largely rewriten to take advantage of 1.13's
new system. It's very fancy!
- WidgetTerminal now uses Minecraft's "GUI listener" system.
- BREAKING CHANGE: All the codes in keys.lua are different, due to the
move to LWJGL 3. Hopefully this won't have too much of an impact.
I don't want to map to the old key codes on the Java side, as there
always ends up being small but slight inconsistencies. IMO it's
better to make a clean break - people should be using keys rather
than hard coding the constants anyway.
- commands.list now allows fetching sub-commands. The ROM has already
been updated to allow fancy usage such as commands.time.set("noon").
- Turtles, modems and cables can be waterlogged.
2019-04-02 12:27:27 +00:00
// artifact sourceJar
2018-04-19 21:36:00 +00:00
}
}
}
uploadArchives {
repositories {
if ( project . hasProperty ( 'mavenUploadUrl' ) ) {
mavenDeployer {
configuration = configurations . deployerJars
2018-04-20 18:39:53 +00:00
2018-04-19 21:36:00 +00:00
repository ( url: project . property ( 'mavenUploadUrl' ) ) {
authentication (
userName: project . property ( 'mavenUploadUser' ) ,
privateKey: project . property ( 'mavenUploadKey' ) )
}
2018-04-20 18:39:53 +00:00
pom . project {
name 'CC: Tweaked'
packaging 'jar'
2019-03-19 11:47:12 +00:00
description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
2018-04-20 18:39:53 +00:00
url 'https://github.com/SquidDev-CC/CC-Tweaked'
scm {
2019-03-19 11:47:12 +00:00
url 'https://github.com/SquidDev-CC/CC-Tweaked.git'
2018-04-20 18:39:53 +00:00
}
issueManagement {
system 'github'
2019-03-19 11:47:12 +00:00
url 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
2018-04-20 18:39:53 +00:00
}
licenses {
license {
name 'ComputerCraft Public License, Version 1.0'
2019-03-19 11:47:12 +00:00
url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE'
2018-04-20 18:39:53 +00:00
distribution 'repo'
}
}
}
pom . whenConfigured { pom - >
pom . dependencies . clear ( )
}
2018-04-19 21:36:00 +00:00
}
}
}
}
2019-04-07 14:30:27 +00:00
githubRelease {
token project . hasProperty ( 'githubApiKey' ) ? project . githubApiKey : ''
owner 'SquidDev-CC'
repo 'CC-Tweaked'
2019-10-30 17:07:29 +00:00
try {
targetCommitish = Grgit . open ( dir: '.' ) . branch . current ( ) . name
} catch ( Exception ignored ) { }
2019-04-07 14:30:27 +00:00
tagName "v${mc_version}-${mod_version}"
releaseName "[${mc_version}] ${mod_version}"
2019-05-31 09:19:24 +00:00
body {
2019-06-02 15:46:45 +00:00
"## " + new File ( "src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt" )
2019-05-31 09:19:24 +00:00
. readLines ( )
. takeWhile { it ! = 'Type "help changelog" to see the full version history.' }
. join ( "\n" ) . trim ( )
}
2020-01-22 11:14:30 +00:00
prerelease true
2019-04-07 14:30:27 +00:00
}
2019-06-01 08:23:18 +00:00
def uploadTasks = [ "uploadArchives" , "curseforge" , "githubRelease" ]
uploadTasks . forEach { tasks . getByName ( it ) . dependsOn checkRelease }
task uploadAll ( dependsOn: uploadTasks ) {
2019-04-16 09:32:49 +00:00
group "upload"
description "Uploads to all repositories (Maven, Curse, GitHub release)"
}