2017-05-01 13:32:39 +00:00
|
|
|
|
|
|
|
// For those who want the bleeding edge
|
|
|
|
buildscript {
|
|
|
|
repositories {
|
|
|
|
jcenter()
|
|
|
|
maven {
|
|
|
|
name = "forge"
|
|
|
|
url = "http://files.minecraftforge.net/maven"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dependencies {
|
2019-02-14 10:53:18 +00:00
|
|
|
classpath 'com.google.code.gson:gson:2.8.1'
|
2017-06-12 08:14:57 +00:00
|
|
|
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
|
2019-02-14 10:53:18 +00:00
|
|
|
classpath 'net.sf.proguard:proguard-gradle:6.1.0beta1'
|
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 {
|
2018-04-19 21:36:00 +00:00
|
|
|
id 'com.matthewprenger.cursegradle' version '1.0.10'
|
2017-05-01 13:32:39 +00:00
|
|
|
}
|
|
|
|
|
2017-12-01 20:05:26 +00:00
|
|
|
apply plugin: 'net.minecraftforge.gradle.forge'
|
|
|
|
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-02-19 14:49:13 +00:00
|
|
|
def mc_version = "1.12.2"
|
2019-02-24 08:20:22 +00:00
|
|
|
def main_version = "1.81.1"
|
2019-02-23 12:46:09 +00:00
|
|
|
version = "${mc_version}-${main_version}"
|
2019-02-19 14:49:13 +00:00
|
|
|
|
2017-11-15 16:25:10 +00:00
|
|
|
group = "org.squiddev"
|
2019-02-23 12:46:09 +00:00
|
|
|
archivesBaseName = "cc-tweaked"
|
2017-05-01 13:32:39 +00:00
|
|
|
|
|
|
|
minecraft {
|
2019-02-19 14:49:13 +00:00
|
|
|
version = "${mc_version}-14.23.4.2749"
|
2017-05-01 13:32:39 +00:00
|
|
|
runDir = "run"
|
2019-02-23 12:46:09 +00:00
|
|
|
replace '${version}', main_version
|
2017-07-06 16:23:35 +00:00
|
|
|
|
2017-05-01 13:32:39 +00:00
|
|
|
// the mappings can be changed at any time, and must be in the following format.
|
|
|
|
// snapshot_YYYYMMDD snapshot are built nightly.
|
|
|
|
// stable_# stables are built at the discretion of the MCP team.
|
|
|
|
// Use non-default mappings at your own risk. they may not allways work.
|
|
|
|
// simply re-run your setup task after changing the mappings to update your workspace.
|
2018-07-24 08:27:05 +00:00
|
|
|
mappings = "snapshot_20180724"
|
2017-05-01 13:32:39 +00:00
|
|
|
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
|
|
|
|
}
|
|
|
|
|
2017-10-25 12:40:35 +00:00
|
|
|
repositories {
|
|
|
|
maven {
|
|
|
|
name = "JEI"
|
2017-11-14 22:37:37 +00:00
|
|
|
url = "http://dvs1.progwml6.com/files/maven"
|
2017-10-25 12:40:35 +00:00
|
|
|
}
|
2017-05-01 16:49:22 +00:00
|
|
|
maven {
|
|
|
|
name = "squiddev"
|
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
|
|
|
url = "https://squiddev.cc/maven"
|
2017-05-01 16:49:22 +00:00
|
|
|
}
|
2018-08-11 09:48:41 +00:00
|
|
|
|
|
|
|
ivy { artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]" }
|
2019-03-14 21:19:55 +00:00
|
|
|
maven { url "http://maven.amadornes.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-03-16 01:49:02 +00:00
|
|
|
deobfProvided "mezz.jei:jei_1.12.2:4.15.0.269:api"
|
2018-08-11 09:48:41 +00:00
|
|
|
deobfProvided "pl.asie:Charset-Lib:0.5.4.6"
|
2019-03-14 21:19:55 +00:00
|
|
|
deobfProvided "MCMultiPart2:MCMultiPart:2.5.3"
|
2018-08-11 09:48:41 +00:00
|
|
|
|
2019-03-16 01:49:02 +00:00
|
|
|
runtime "mezz.jei:jei_1.12.2:4.15.0.269"
|
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-03-01 23:48:32 +00:00
|
|
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
|
|
|
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
|
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
|
|
|
}
|
|
|
|
|
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 {
|
|
|
|
attributes('FMLAT': 'computercraft_at.cfg')
|
|
|
|
}
|
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-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
|
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"
|
|
|
|
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.
|
|
|
|
keepdirectories 'assets/computercraft/lua**'
|
|
|
|
|
|
|
|
// Preserve ComputerCraft classes - we only want to strip shadowed files.
|
|
|
|
keep 'class dan200.computercraft.** { *; }'
|
|
|
|
|
|
|
|
// Preserve the constructors in Cobalt library class, as we init them via reflection
|
|
|
|
keepclassmembers 'class org.squiddev.cobalt.lib.** { <init>(...); }'
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
reobfJar.dependsOn proguardMove
|
2017-05-24 16:35:41 +00:00
|
|
|
|
|
|
|
processResources {
|
2019-02-23 12:46:09 +00:00
|
|
|
inputs.property "version", main_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) {
|
|
|
|
include 'mcmod.info'
|
2017-05-24 17:20:46 +00:00
|
|
|
include 'assets/computercraft/lua/rom/help/credits.txt'
|
|
|
|
|
2019-02-23 12:46:09 +00:00
|
|
|
expand 'version': main_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) {
|
|
|
|
exclude 'mcmod.info'
|
2017-05-24 17:20:46 +00:00
|
|
|
exclude 'assets/computercraft/lua/rom/help/credits.txt'
|
2017-05-01 13:32:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-14 10:53:18 +00:00
|
|
|
task compressJson(dependsOn: extractAnnotationsJar) {
|
|
|
|
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 ->
|
|
|
|
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
|
|
|
|
|
|
|
curseforge {
|
|
|
|
apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
|
|
|
|
project {
|
|
|
|
id = '282001'
|
2019-02-23 10:35:15 +00:00
|
|
|
releaseType = 'release'
|
2018-10-24 11:49:35 +00:00
|
|
|
changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${project.version})."
|
2017-12-01 20:05:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-19 21:36:00 +00:00
|
|
|
publishing {
|
|
|
|
publications {
|
|
|
|
mavenJava(MavenPublication) {
|
|
|
|
from components.java
|
|
|
|
artifact sourceJar
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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'
|
|
|
|
description 'A fork of ComputerCraft which aims to provide earlier access to the more experimental and in-development features of the mod.'
|
|
|
|
url 'https://github.com/SquidDev-CC/CC-Tweaked'
|
|
|
|
|
|
|
|
scm {
|
|
|
|
url 'https://github.com/dan200/ComputerCraft.git'
|
|
|
|
}
|
|
|
|
|
|
|
|
issueManagement {
|
|
|
|
system 'github'
|
|
|
|
url 'https://github.com/dan200/ComputerCraft/issues'
|
|
|
|
}
|
|
|
|
|
|
|
|
licenses {
|
|
|
|
license {
|
|
|
|
name 'ComputerCraft Public License, Version 1.0'
|
|
|
|
url 'https://github.com/dan200/ComputerCraft/blob/master/LICENSE'
|
|
|
|
distribution 'repo'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pom.whenConfigured { pom ->
|
|
|
|
pom.dependencies.clear()
|
|
|
|
}
|
2018-04-19 21:36:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-01 23:48:32 +00:00
|
|
|
test {
|
|
|
|
useJUnitPlatform()
|
|
|
|
testLogging {
|
|
|
|
events "passed", "skipped", "failed"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-07 00:42:32 +00:00
|
|
|
gradle.projectsEvaluated {
|
|
|
|
tasks.withType(JavaCompile) {
|
|
|
|
options.compilerArgs << "-Xlint"
|
|
|
|
}
|
|
|
|
}
|
2017-05-24 16:35:41 +00:00
|
|
|
|
2017-11-14 22:37:37 +00:00
|
|
|
runClient.outputs.upToDateWhen { false }
|
|
|
|
runServer.outputs.upToDateWhen { false }
|