diff --git a/.drone.yml b/.drone.yml index 3ea70281..6c4afb43 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,7 +7,6 @@ pipeline: commands: - curl --fail --create-dirs -o $HOME/.gradle/init.d/mirror.gradle https://maven.johni0702.de/config/gradle - curl --fail --create-dirs -o $HOME/.m2/settings.xml https://maven.johni0702.de/config/maven - - JAVA_OPTS=-Xmx1516M ./gradlew setupDecompWorkspace - ./gradlew :build archive: image: plugins/s3 diff --git a/.drone.yml.sig b/.drone.yml.sig index 95a141a6..9cdc53b7 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1 +1 @@ -eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICBidWlsZDoKICAgIGltYWdlOiBtYXZlbjozLjMuOS1qZGstOAogICAgY29tbWFuZHM6CiAgICAgIC0gY3VybCAtLWZhaWwgLS1jcmVhdGUtZGlycyAtbyAkSE9NRS8uZ3JhZGxlL2luaXQuZC9taXJyb3IuZ3JhZGxlIGh0dHBzOi8vbWF2ZW4uam9obmkwNzAyLmRlL2NvbmZpZy9ncmFkbGUKICAgICAgLSBjdXJsIC0tZmFpbCAtLWNyZWF0ZS1kaXJzIC1vICRIT01FLy5tMi9zZXR0aW5ncy54bWwgaHR0cHM6Ly9tYXZlbi5qb2huaTA3MDIuZGUvY29uZmlnL21hdmVuCiAgICAgIC0gSkFWQV9PUFRTPS1YbXgxNTE2TSAuL2dyYWRsZXcgc2V0dXBEZWNvbXBXb3Jrc3BhY2UKICAgICAgLSAuL2dyYWRsZXcgOmJ1aWxkCiAgYXJjaGl2ZToKICAgIGltYWdlOiBwbHVnaW5zL3MzCiAgICBhY2w6IHB1YmxpYy1yZWFkCiAgICByZWdpb246ICJ1cy1lYXN0LTEiCiAgICBidWNrZXQ6ICJyZXBsYXltb2QiCiAgICBwYXRoX3N0eWxlOiB0cnVlCiAgICBzb3VyY2U6IGJ1aWxkL2xpYnMvKgogICAgc3RyaXBfcHJlZml4OiBidWlsZC9saWJzLwogICAgdGFyZ2V0OiAvCg.nzPW0_TpMIjnFZZ5Ci439QDKlaDo1a3DCH-VCYUgpx8 \ No newline at end of file +eyJhbGciOiJIUzI1NiJ9.cGlwZWxpbmU6CiAgY2xvbmU6CiAgICBpbWFnZTogcGx1Z2lucy9naXQKICAgIHRhZ3M6IHRydWUKICBidWlsZDoKICAgIGltYWdlOiBtYXZlbjozLjMuOS1qZGstOAogICAgY29tbWFuZHM6CiAgICAgIC0gY3VybCAtLWZhaWwgLS1jcmVhdGUtZGlycyAtbyAkSE9NRS8uZ3JhZGxlL2luaXQuZC9taXJyb3IuZ3JhZGxlIGh0dHBzOi8vbWF2ZW4uam9obmkwNzAyLmRlL2NvbmZpZy9ncmFkbGUKICAgICAgLSBjdXJsIC0tZmFpbCAtLWNyZWF0ZS1kaXJzIC1vICRIT01FLy5tMi9zZXR0aW5ncy54bWwgaHR0cHM6Ly9tYXZlbi5qb2huaTA3MDIuZGUvY29uZmlnL21hdmVuCiAgICAgIC0gLi9ncmFkbGV3IDpidWlsZAogIGFyY2hpdmU6CiAgICBpbWFnZTogcGx1Z2lucy9zMwogICAgYWNsOiBwdWJsaWMtcmVhZAogICAgcmVnaW9uOiAidXMtZWFzdC0xIgogICAgYnVja2V0OiAicmVwbGF5bW9kIgogICAgcGF0aF9zdHlsZTogdHJ1ZQogICAgc291cmNlOiBidWlsZC9saWJzLyoKICAgIHN0cmlwX3ByZWZpeDogYnVpbGQvbGlicy8KICAgIHRhcmdldDogLwo.Z6rpaLplJKQ4pzB8AjCnplgci42qEu7L4LeS0fGm4SY \ No newline at end of file diff --git a/build.gradle b/build.gradle index dd4550ee..ed22a545 100755 --- a/build.gradle +++ b/build.gradle @@ -200,6 +200,57 @@ setupDecompWorkspace.dependsOn copySrg setupDevWorkspace.dependsOn copySrg project.tasks.idea.dependsOn copySrg + +import org.objectweb.asm.* + +import java.util.zip.ZipEntry +import java.util.zip.ZipFile +import java.util.zip.ZipOutputStream + +import static org.objectweb.asm.Opcodes.ASM5 + +// MC binaries were complied with a java version that produces invalid class files under certain circumstances +// This causes setupCIWorkspace to be insufficient for compiling. +// Related JDK bug: https://bugs.openjdk.java.net/browse/JDK-8066725 +// As a workaround, to use setupCIWorkspace on Drone, we modify the bin jar in-place and remove all parameter annotations. +// WARNING: This piece of code ignores any and all gradle conventions and will probably fail horribly when run outside +// of a single-use environment (e.g. Drone). Use setupDecompWorkspace for normal use. +tasks.deobfMcMCP.doLast { + println "Applying RuntimeInvisibleParameterAnnotations workaround..." + File jar = getOutJar() + File tmp = new File((File) getTemporaryDir(), "workaround.jar") + tmp.withOutputStream { + new ZipOutputStream(it).withStream { dst -> + new ZipFile(jar).withCloseable { src -> + src.entries().each { + if (it.name.startsWith("net/minecraft/") && it.name.endsWith(".class")) { + def cw = new ClassWriter(0) + def cv = new ClassVisitor(ASM5, cw) { + @Override + MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + return new MethodVisitor(ASM5, cv.visitMethod(access, name, desc, signature, exceptions)) { + @Override + AnnotationVisitor visitParameterAnnotation(int parameter, String pdesc, boolean visible) { + return null // Strip all parameter annotations + } + } + } + } + new ClassReader(src.getInputStream(it)).accept(cv, 0) + dst.putNextEntry(new ZipEntry(it.name)) + dst.write(cw.toByteArray()) + } else { + dst.putNextEntry(it) + dst.write(src.getInputStream(it).bytes) + } + } + } + } + } + jar.delete() + tmp.renameTo(jar) +} + def generateVersionsJson() { // List all tags def stdout = new ByteArrayOutputStream()