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"
2020-05-11 14:41:39 +00:00
id "jacoco"
2019-06-07 23:28:03 +00:00
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 {
2020-04-22 10:04:29 +00:00
workingDirectory project . file ( "run/server-${mc_version}" )
2020-04-24 15:41:46 +00:00
property 'forge.logging.markers' , 'REGISTRIES,REGISTRYDUMP'
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
property 'forge.logging.console.level' , 'debug'
mods {
computercraft {
source sourceSets . main
}
}
}
2020-01-29 16:41:26 +00:00
data {
workingDirectory project . file ( 'run' )
2020-04-24 15:41:46 +00:00
property 'forge.logging.markers' , 'REGISTRIES,REGISTRYDUMP'
2020-01-29 16:41:26 +00:00
property 'forge.logging.console.level' , 'debug'
args '--mod' , 'computercraft' , '--all' , '--output' , file ( 'src/generated/resources/' ) , '--existing' , file ( 'src/main/resources/' )
mods {
computercraft {
source sourceSets . main
}
}
}
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
}
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
}
2020-01-29 16:41:26 +00:00
sourceSets . main . resources {
srcDir 'src/generated/resources'
}
2017-10-25 12:40:35 +00:00
repositories {
2017-05-01 16:49:22 +00:00
maven {
2019-03-19 11:47:12 +00:00
name "SquidDev"
url "https://squiddev.cc/maven"
}
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-04-22 10:04:29 +00:00
compileOnly fg . deobf ( "mezz.jei:jei-1.15.2:6.0.0.3:api" )
2020-04-22 10:11:02 +00:00
compileOnly fg . deobf ( "com.blamejared.crafttweaker:CraftTweaker-1.15.2:6.0.0.9" )
2020-04-22 10:04:29 +00:00
runtimeOnly fg . deobf ( "mezz.jei:jei-1.15.2:6.0.0.3" )
2018-08-11 09:48:41 +00:00
2020-04-16 09:48:26 +00:00
shade 'org.squiddev:Cobalt:0.5.1-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'
Replace getMethodNames/callMethod with annotations (#447)
When creating a peripheral or custom Lua object, one must implement two
methods:
- getMethodNames(): String[] - Returns the name of the methods
- callMethod(int, ...): Object[] - Invokes the method using an index in
the above array.
This has a couple of problems:
- It's somewhat unwieldy to use - you need to keep track of array
indices, which leads to ugly code.
- Functions which yield (for instance, those which run on the main
thread) are blocking. This means we need to spawn new threads for
each CC-side yield.
We replace this system with a few changes:
- @LuaFunction annotation: One may annotate a public instance method
with this annotation. This then exposes a peripheral/lua object
method.
Furthermore, this method can accept and return a variety of types,
which often makes functions cleaner (e.g. can return an int rather
than an Object[], and specify and int argument rather than
Object[]).
- MethodResult: Instead of returning an Object[] and having blocking
yields, functions return a MethodResult. This either contains an
immediate return, or an instruction to yield with some continuation
to resume with.
MethodResult is then interpreted by the Lua runtime (i.e. Cobalt),
rather than our weird bodgey hacks before. This means we no longer
spawn new threads when yielding within CC.
- Methods accept IArguments instead of a raw Object array. This has a
few benefits:
- Consistent argument handling - people no longer need to use
ArgumentHelper (as it doesn't exist!), or even be aware of its
existence - you're rather forced into using it.
- More efficient code in some cases. We provide a Cobalt-specific
implementation of IArguments, which avoids the boxing/unboxing when
handling numbers and binary strings.
2020-05-15 12:21:16 +00:00
testImplementation 'org.hamcrest:hamcrest:2.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
}
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
)
}
}
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
2020-05-11 14:41:39 +00:00
jacocoTestReport {
reports {
xml . enabled true
html . enabled true
}
}
check . dependsOn jacocoTestReport
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-06-16 08:45:42 +00:00
releaseType = 'release'
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-06-16 08:45:42 +00:00
prerelease false
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)"
}