diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 63f9241..0000000 --- a/build.gradle +++ /dev/null @@ -1,140 +0,0 @@ -buildscript { - repositories { - mavenCentral() - maven { - name = "forge" - url = "https://files.minecraftforge.net/maven" - } - maven { - name = "sonatype" - url = "https://oss.sonatype.org/content/repositories/snapshots/" - } - flatDir dirs: "$projectDir/proguard/lib/" - } - dependencies { - classpath "net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT" - classpath ":proguard:" - } -} - -apply plugin: "forge" - -sourceCompatibility = "1.8" -targetCompatibility = "1.8" -[compileJava, compileTestJava]*.options*.encoding = "UTF-8" - -version = "1.0.0" -group = "forgefuck.team.xenobyte" -archivesBaseName = "xenobyte" - -minecraft { - version = "1.7.10-10.13.4.1614-1.7.10" - runDir = "minecraft-debug" -} - -configurations { - bundle - compile.extendsFrom bundle -} - -repositories { - jcenter() -} - -dependencies { - bundle fileTree(dir: "libs", includes: ["*.jar"]) -} - -jar { - from { - configurations.bundle.collect { it.isDirectory() ? it : zipTree(it); } - } -} - -processResources { - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version - - from(sourceSets.main.resources.srcDirs) { - include "mcmod.info" - - expand "version" : project.version, "mcversion" : project.minecraft.version - } - - from(sourceSets.main.resources.srcDirs) { - exclude "mcmod.info" - } -} - -def generateString(String alphabet, int n) { - return new Random().with { - (1..n).collect { alphabet[nextInt(alphabet.length())] }.join() - } -} - -def generateDictionaryFile(String name) { - File dictionaryFile = new File(name) - if (dictionaryFile.exists()) - return; - String outputData = "" - for (int i = 0; i < 10000; i++) - outputData += generateString((('a'..'z') + ('A'..'Z') + ('0'..'9')).join(), 16) + "\n" - dictionaryFile.getParentFile().mkdirs() - dictionaryFile.delete() - dictionaryFile.write outputData -} - -task generateDictionary { - doFirst { - generateDictionaryFile("$buildDir/proguard/class-dictionary.txt") - generateDictionaryFile("$buildDir/proguard/package-dictionary.txt") - generateDictionaryFile("$buildDir/proguard/fieldmethod-dictionary.txt") - } -} - -task obfuscateProGuard(type: proguard.gradle.ProGuardTask) { - doFirst { - injars "$buildDir/libs/" + project.tasks["jar"].archiveName - outjars "$buildDir/libs/final-" + project.tasks["jar"].archiveName - libraryjars "${System.getProperty("java.home")}/lib/rt.jar" - libraryjars "${System.getProperty("java.home")}/lib/jce.jar" - libraryjars sourceSets.main.compileClasspath - keepattributes "RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeVisibleTypeAnnotations" - keep "class !forgefuck.team.xenobyte.** { *; }" - classobfuscationdictionary "$buildDir/proguard/class-dictionary.txt" - packageobfuscationdictionary "$buildDir/proguard/package-dictionary.txt" - obfuscationdictionary "$buildDir/proguard/fieldmethod-dictionary.txt" - dontshrink - dontoptimize - printmapping "$buildDir/libs/proguard-" + project.tasks["jar"].archiveName + ".map" - } -} - -task createJavaInjectorComment { - doFirst { - File mainClassFile = new File("$projectDir/mainclass.txt") - if (mainClassFile.exists()) - mainClassFile.delete() - String mappingsText = new File("$buildDir/libs/proguard-" + project.tasks["jar"].archiveName + ".map").text - java.util.regex.Pattern p = java.util.regex.Pattern.compile("forgefuck\\.team\\.xenobyte\\.api\\.integration\\.JavaInjector -> (.*?):") - java.util.regex.Matcher m = p.matcher(mappingsText) - m.find(); - new File("$projectDir/mainclass.txt").write m.group(1); - } -} - -task copyJar { - doFirst { - copy { - from "$buildDir/libs" - include "final-" + project.tasks["jar"].archiveName - into "$buildDir/libs" - rename "final-" + project.tasks["jar"].archiveName, project.tasks["jar"].archiveName - } - } -} - -obfuscateProGuard.dependsOn generateDictionary -createJavaInjectorComment.dependsOn obfuscateProGuard -copyJar.dependsOn createJavaInjectorComment -reobf.dependsOn copyJar diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..53e7880 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,190 @@ +import proguard.gradle.ProGuardTask +import java.util.Random +import java.util.regex.Pattern + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath("com.guardsquare:proguard-gradle:7.1.0") + } +} + +plugins { + id("java-library") + id("maven-publish") + id("org.jetbrains.gradle.plugin.idea-ext") version "1.1.8" + id("com.gtnewhorizons.retrofuturagradle") version "1.4.0" +} + +group = "forgefuck.team" +version = "1.0.0" + +minecraft { + mcVersion.set("1.7.10") +} + +tasks.processResources.configure { + val projVersion = project.version.toString() + + filesMatching("mcmod.info") { + expand(mapOf("modVersion" to projVersion)) + } +} + +tasks.injectTags.configure { + enabled = false + doFirst { + throw StopExecutionException("Task injectTags is disabled") + } +} + +tasks.injectedTagsClasses.configure { + enabled = false + doFirst { + throw StopExecutionException("Task injectTags is disabled") + } +} + +tasks.jar { + archiveVersion.set(version.toString()) + archiveClassifier.set("") +} + +val runtimeOnlyNonPublishable: Configuration by configurations.creating { + description = "Runtime only dependencies that are not published alongside the jar" + isCanBeConsumed = false + isCanBeResolved = true + +} +listOf(configurations.runtimeClasspath, configurations.testRuntimeClasspath).forEach { + it.configure { + extendsFrom( + runtimeOnlyNonPublishable + ) + } +} + +repositories { + maven { + name = "GTNH Maven" + url = uri("https://nexus.gtnewhorizons.com/repository/public/") + } + maven("https://cursemaven.com") + flatDir { + dirs("libs") + } + +} + +dependencies { +} + +fun generateString(alphabet: String, n: Int): String { + val random = Random() + return (1..n).map { alphabet[random.nextInt(alphabet.length)] }.joinToString("") +} + +fun generateClassDictionaryFile(name: String) { + val dictionaryFile = File(name) + if (dictionaryFile.exists()) return + + val alphabet = (('a'..'z') + ('A'..'Z') + ('0'..'9')).joinToString("") + val outputData = (1..10000).joinToString("\n") { + val firstPart = generateString(alphabet, Random().nextInt(8) + 1) + val secondPart = generateString(alphabet, Random().nextInt(8) + 1) + "$firstPart$$secondPart" + } + "\n" + + dictionaryFile.parentFile.mkdirs() + dictionaryFile.delete() + dictionaryFile.writeText(outputData) +} + +fun generateDictionaryFile(name: String) { + val dictionaryFile = File(name) + if (dictionaryFile.exists()) return + + val alphabet = (('a'..'z') + ('A'..'Z') + ('0'..'9')).joinToString("") + val outputData = (1..10000).joinToString("\n") { generateString(alphabet, 16) } + "\n" + + dictionaryFile.parentFile.mkdirs() + dictionaryFile.delete() + dictionaryFile.writeText(outputData) +} + +val generateDictionary by tasks.registering { + doFirst { + generateClassDictionaryFile("$buildDir/proguard/class-dictionary.txt") + generateDictionaryFile("$buildDir/proguard/package-dictionary.txt") + generateDictionaryFile("$buildDir/proguard/fieldmethod-dictionary.txt") + } +} + + +val obfuscateProGuard by tasks.registering(ProGuardTask::class) { + dependsOn(generateDictionary) + + outputs.upToDateWhen { false } + + doFirst { + val jarTask = tasks.jar.get() + val archName = jarTask.archiveFileName.get() + println(archName) + injars("$buildDir/libs/$archName") + outjars("$buildDir/libs/final-$archName") + libraryjars("${System.getProperty("java.home")}/lib/rt.jar") + libraryjars("${System.getProperty("java.home")}/lib/jce.jar") + libraryjars(sourceSets.main.get().compileClasspath) + + keepattributes("RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeVisibleTypeAnnotations") + keep("class !forgefuck.team.xenobyte.** { *; }") + + classobfuscationdictionary("$buildDir/proguard/class-dictionary.txt") + packageobfuscationdictionary("$buildDir/proguard/package-dictionary.txt") + obfuscationdictionary("$buildDir/proguard/fieldmethod-dictionary.txt") + + dontshrink() + dontoptimize() + printmapping("$buildDir/libs/proguard-$archName.map") + } +} + + +val createJavaInjectorComment by tasks.registering { + dependsOn(obfuscateProGuard) + doFirst { + val mainClassFile = File("$projectDir/mainclass.txt") + if (mainClassFile.exists()) { + mainClassFile.delete() + } + + val jarTask = tasks.jar.get() + val mappingsText = File("$buildDir/libs/proguard-${jarTask.archiveFileName.get()}.map").readText() + val pattern = Pattern.compile("forgefuck\\.team\\.xenobyte\\.api\\.integration\\.JavaInjector -> (.*?):") + val matcher = pattern.matcher(mappingsText) + + if (matcher.find()) { + File("$projectDir/mainclass.txt").writeText(matcher.group(1)) + } + + } +} + +val copyJar by tasks.registering { + dependsOn(createJavaInjectorComment) + doFirst { + val jarTask = tasks.jar.get() + copy { + from("$buildDir/libs") + include("final-${jarTask.archiveFileName.get()}") + into("$buildDir/libs") + rename("final-${jarTask.archiveFileName.get()}", jarTask.archiveFileName.get()) + } + } +} + +tasks.named("reobfJar") { + dependsOn(copyJar) +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7ae550c..c56d740 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jul 02 15:54:47 CDT 2014 +#Wed Jun 25 14:48:15 MSK 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip diff --git a/proguard/lib/annotations.jar b/proguard/lib/annotations.jar deleted file mode 100644 index 9b21c27..0000000 Binary files a/proguard/lib/annotations.jar and /dev/null differ diff --git a/proguard/lib/proguard.jar b/proguard/lib/proguard.jar deleted file mode 100644 index a09a607..0000000 Binary files a/proguard/lib/proguard.jar and /dev/null differ diff --git a/proguard/lib/proguardgui.jar b/proguard/lib/proguardgui.jar deleted file mode 100644 index abb9fb5..0000000 Binary files a/proguard/lib/proguardgui.jar and /dev/null differ diff --git a/proguard/lib/retrace.jar b/proguard/lib/retrace.jar deleted file mode 100644 index ff2b7ac..0000000 Binary files a/proguard/lib/retrace.jar and /dev/null differ diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..b9aafc7 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,22 @@ +pluginManagement { + repositories { + maven { + name = "GTNH Maven" + url = uri("https://nexus.gtnewhorizons.com/repository/public/") + mavenContent { + includeGroupByRegex("com\\.gtnewhorizons\\..+") + includeGroup("com.gtnewhorizons") + } + } + gradlePluginPortal() + mavenCentral() + mavenLocal() + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" +} + +rootProject.name = "Xenobyte" +