diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml new file mode 100644 index 0000000..e3d62a2 --- /dev/null +++ b/.forgejo/workflows/build.yaml @@ -0,0 +1,38 @@ +on: + push: + tags: + - '*' + +jobs: + build: + runs-on: docker + + steps: + - name: checkout repository + uses: actions/checkout@v3 + + - name: make gradle wrapper executable + run: chmod +x ./gradlew + + - name: set up jdk + run: | + INSTALL_DIR="/opt/java" + mkdir -p "$INSTALL_DIR" + + JDK8_URL="https://cdn.azul.com/zulu/bin/zulu8.84.0.15-ca-jdk8.0.442-linux_x64.tar.gz" + JRE17_URL="https://cdn.azul.com/zulu/bin/zulu17.56.15-ca-jre17.0.14-linux_x64.tar.gz" + + echo "Downloading JDK8 from $JDK8_URL" + curl -L "$JDK8_URL" | tar -xz -C "$INSTALL_DIR" + + echo "Downloading JRE17 from $JRE17_URL" + curl -L "$JRE17_URL" | tar -xz -C "$INSTALL_DIR" + + - name: build + run: JDK8=/opt/java/zulu8.84.0.15-ca-jdk8.0.442-linux_x64 JAVA_HOME=/opt/java/zulu17.56.15-ca-jre17.0.14-linux_x64 ./gradlew build + + - name: capture build artifacts + uses: https://code.forgejo.org/forgejo/upload-artifact@v3 + with: + name: Artifacts + path: 'build/libs' diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ae0eec1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +gradlew* linguist-vendored +gradle/wrapper/* linguist-vendored +*.bat text eol=crlf + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 98febc9..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Run Gradle Build -on: [push, pull_request] -jobs: - gradle: - runs-on: ubuntu-latest - steps: - - name: Checkout source - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - name: Setup Java - with: - distribution: temurin - java-version: 17 - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - - name: Execute Gradle build - run: ./gradlew build - - uses: actions/upload-artifact@v3 - name: Upload built mod JAR - with: - name: latest-autobuild - path: build/libs/*.jar diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml deleted file mode 100644 index 91e75b3..0000000 --- a/.github/workflows/gradle-wrapper-validation.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: "Validate Gradle Wrapper" -on: [push, pull_request] - -jobs: - validation: - name: "Validation" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: gradle/wrapper-validation-action@v1 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 69fa48a..3e72c7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -.idea/ -.vscode/ run/ build/ .gradle/ - diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 2eaa2e8..0000000 --- a/TODO.md +++ /dev/null @@ -1 +0,0 @@ -- Distinguishing Escape \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 44500d5..e7702ee 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +import org.apache.commons.lang3.SystemUtils + plugins { idea java @@ -8,11 +10,12 @@ plugins { //Constants: -val baseGroup = "com.github.stachelbeere1248.zombiesutils" +val baseGroup: String by project val mcVersion: String by project val version: String by project val mixinGroup = "$baseGroup.mixin" val modid: String by project +val transformerFile = file("src/main/resources/accesstransformer.cfg") // Toolchains: java { @@ -26,14 +29,26 @@ loom { "client" { // If you don't want mixins, remove these lines property("mixin.debug", "true") - property("asmhelper.verbose", "true") arg("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker") } } + runConfigs { + "client" { + if (SystemUtils.IS_OS_MAC_OSX) { + // This argument causes a crash on macOS + vmArgs.remove("-XstartOnFirstThread") + } + } + remove(getByName("server")) + } forge { pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter()) // If you don't want mixins, remove this lines mixinConfig("mixins.$modid.json") + if (transformerFile.exists()) { + println("Installing access transformer") + accessTransformer(transformerFile) + } } // If you don't want mixins, remove these lines mixin { @@ -50,8 +65,6 @@ sourceSets.main { repositories { mavenCentral() maven("https://repo.spongepowered.org/maven/") - // If you don't want to log in with your real minecraft account, remove this line - maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") } val shadowImpl: Configuration by configurations.creating { @@ -68,10 +81,6 @@ dependencies { isTransitive = false } annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT") - - // If you don't want to log in with your real minecraft account, remove this line - runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.2") - } // Tasks: @@ -80,7 +89,7 @@ tasks.withType(JavaCompile::class) { options.encoding = "UTF-8" } -tasks.withType(Jar::class) { +tasks.withType(org.gradle.jvm.tasks.Jar::class) { archiveBaseName.set(modid) manifest.attributes.run { this["FMLCorePluginContainsFMLMod"] = "true" @@ -89,6 +98,8 @@ tasks.withType(Jar::class) { // If you don't want mixins, remove these lines this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker" this["MixinConfigs"] = "mixins.$modid.json" + if (transformerFile.exists()) + this["FMLAT"] = "${modid}_at.cfg" } } @@ -96,13 +107,13 @@ tasks.processResources { inputs.property("version", project.version) inputs.property("mcversion", mcVersion) inputs.property("modid", modid) - inputs.property("mixinGroup", mixinGroup) + inputs.property("basePackage", baseGroup) filesMatching(listOf("mcmod.info", "mixins.$modid.json")) { expand(inputs.properties) } - rename("(.+_at.cfg)", "META-INF/$1") + rename("accesstransformer.cfg", "META-INF/${modid}_at.cfg") } @@ -114,16 +125,16 @@ val remapJar by tasks.named("remapJar") { tasks.jar { archiveClassifier.set("without-deps") - destinationDirectory.set(layout.buildDirectory.dir("badjars")) + destinationDirectory.set(layout.buildDirectory.dir("intermediates")) } tasks.shadowJar { - destinationDirectory.set(layout.buildDirectory.dir("badjars")) - archiveClassifier.set("all-dev") + destinationDirectory.set(layout.buildDirectory.dir("intermediates")) + archiveClassifier.set("non-obfuscated-with-deps") configurations = listOf(shadowImpl) doLast { configurations.forEach { - println("Copying jars into mod: ${it.files}") + println("Copying dependencies into mod: ${it.files}") } } diff --git a/gradle.properties b/gradle.properties index 351e3a0..b4d8813 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,7 @@ loom.platform=forge org.gradle.jvmargs=-Xmx2g -baseGroup=com.github.stachelbeere1248.zombiesutils -mcVersion=1.8.9 -modid=zombiesutils -version=1.3.7 \ No newline at end of file +baseGroup = xyz.stachel.zombiesutils +mcVersion = 1.8.9 +modid = zombiesutils +version = 1.4.0 +org.gradle.java.installations.fromEnv=JDK8,JRE17 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 033e24c..e644113 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac72c34..a441313 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index fcb6fca..b740cf1 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..25da30d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/log4j2.xml b/log4j2.xml index 294b37b..af9b1b7 100644 --- a/log4j2.xml +++ b/log4j2.xml @@ -1,6 +1,5 @@ - + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 386d64d..29d1892 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,7 +7,7 @@ pluginManagement { maven("https://maven.fabricmc.net") maven("https://maven.minecraftforge.net/") maven("https://repo.spongepowered.org/maven/") - maven("https://repo.sk1er.club/repository/maven-releases/") + maven("https://repo.essential.gg/repository/maven-releases/") } resolutionStrategy { eachPlugin { @@ -19,7 +19,7 @@ pluginManagement { } plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version ("0.6.0") + id("org.gradle.toolchains.foojay-resolver-convention") version("0.6.0") } diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/ResourceLoader.java b/src/main/java/xyz/stachel/zombiesutils/ResourceLoader.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/ResourceLoader.java rename to src/main/java/xyz/stachel/zombiesutils/ResourceLoader.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java b/src/main/java/xyz/stachel/zombiesutils/ZombiesUtils.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/ZombiesUtils.java rename to src/main/java/xyz/stachel/zombiesutils/ZombiesUtils.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java b/src/main/java/xyz/stachel/zombiesutils/commands/CategoryCommand.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CategoryCommand.java rename to src/main/java/xyz/stachel/zombiesutils/commands/CategoryCommand.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CommandRegistry.java b/src/main/java/xyz/stachel/zombiesutils/commands/CommandRegistry.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/commands/CommandRegistry.java rename to src/main/java/xyz/stachel/zombiesutils/commands/CommandRegistry.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/QuickZombiesCommand.java b/src/main/java/xyz/stachel/zombiesutils/commands/QuickZombiesCommand.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/commands/QuickZombiesCommand.java rename to src/main/java/xyz/stachel/zombiesutils/commands/QuickZombiesCommand.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/SlaCommand.java b/src/main/java/xyz/stachel/zombiesutils/commands/SlaCommand.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/commands/SlaCommand.java rename to src/main/java/xyz/stachel/zombiesutils/commands/SlaCommand.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/commands/ZombiesUtilsCommand.java b/src/main/java/xyz/stachel/zombiesutils/commands/ZombiesUtilsCommand.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/commands/ZombiesUtilsCommand.java rename to src/main/java/xyz/stachel/zombiesutils/commands/ZombiesUtilsCommand.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/config/CustomConfigElement.java b/src/main/java/xyz/stachel/zombiesutils/config/CustomConfigElement.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/config/CustomConfigElement.java rename to src/main/java/xyz/stachel/zombiesutils/config/CustomConfigElement.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/config/GuiConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/GuiConfig.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/config/GuiConfig.java rename to src/main/java/xyz/stachel/zombiesutils/config/GuiConfig.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/config/GuiFactory.java b/src/main/java/xyz/stachel/zombiesutils/config/GuiFactory.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/config/GuiFactory.java rename to src/main/java/xyz/stachel/zombiesutils/config/GuiFactory.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/config/Hotkeys.java b/src/main/java/xyz/stachel/zombiesutils/config/Hotkeys.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/config/Hotkeys.java rename to src/main/java/xyz/stachel/zombiesutils/config/Hotkeys.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/config/ZombiesUtilsConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/config/ZombiesUtilsConfig.java rename to src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameData.java b/src/main/java/xyz/stachel/zombiesutils/game/GameData.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameData.java rename to src/main/java/xyz/stachel/zombiesutils/game/GameData.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java b/src/main/java/xyz/stachel/zombiesutils/game/GameMode.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/GameMode.java rename to src/main/java/xyz/stachel/zombiesutils/game/GameMode.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/enums/Difficulty.java b/src/main/java/xyz/stachel/zombiesutils/game/enums/Difficulty.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/enums/Difficulty.java rename to src/main/java/xyz/stachel/zombiesutils/game/enums/Difficulty.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/enums/Map.java b/src/main/java/xyz/stachel/zombiesutils/game/enums/Map.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/enums/Map.java rename to src/main/java/xyz/stachel/zombiesutils/game/enums/Map.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/sla/QuickSLA.java b/src/main/java/xyz/stachel/zombiesutils/game/sla/QuickSLA.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/sla/QuickSLA.java rename to src/main/java/xyz/stachel/zombiesutils/game/sla/QuickSLA.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Prefix.java b/src/main/java/xyz/stachel/zombiesutils/game/waves/Prefix.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Prefix.java rename to src/main/java/xyz/stachel/zombiesutils/game/waves/Prefix.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Round.java b/src/main/java/xyz/stachel/zombiesutils/game/waves/Round.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Round.java rename to src/main/java/xyz/stachel/zombiesutils/game/waves/Round.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Wave.java b/src/main/java/xyz/stachel/zombiesutils/game/waves/Wave.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/Wave.java rename to src/main/java/xyz/stachel/zombiesutils/game/waves/Wave.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/WaveTiming.java b/src/main/java/xyz/stachel/zombiesutils/game/waves/WaveTiming.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/waves/WaveTiming.java rename to src/main/java/xyz/stachel/zombiesutils/game/waves/WaveTiming.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/Room.java b/src/main/java/xyz/stachel/zombiesutils/game/windows/Room.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/Room.java rename to src/main/java/xyz/stachel/zombiesutils/game/windows/Room.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/SLA.java b/src/main/java/xyz/stachel/zombiesutils/game/windows/SLA.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/SLA.java rename to src/main/java/xyz/stachel/zombiesutils/game/windows/SLA.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/Window.java b/src/main/java/xyz/stachel/zombiesutils/game/windows/Window.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/game/windows/Window.java rename to src/main/java/xyz/stachel/zombiesutils/game/windows/Window.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java b/src/main/java/xyz/stachel/zombiesutils/handlers/ChatHandler.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/ChatHandler.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/ChatHandler.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/Handlers.java b/src/main/java/xyz/stachel/zombiesutils/handlers/Handlers.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/Handlers.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/Handlers.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/KeyInputHandler.java b/src/main/java/xyz/stachel/zombiesutils/handlers/KeyInputHandler.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/KeyInputHandler.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/KeyInputHandler.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/RenderGameOverlayHandler.java b/src/main/java/xyz/stachel/zombiesutils/handlers/RenderGameOverlayHandler.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/RenderGameOverlayHandler.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/RenderGameOverlayHandler.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/RenderPlayerHandler.java b/src/main/java/xyz/stachel/zombiesutils/handlers/RenderPlayerHandler.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/RenderPlayerHandler.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/RenderPlayerHandler.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/Round1Correction.java b/src/main/java/xyz/stachel/zombiesutils/handlers/Round1Correction.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/Round1Correction.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/Round1Correction.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java b/src/main/java/xyz/stachel/zombiesutils/handlers/TickHandler.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/handlers/TickHandler.java rename to src/main/java/xyz/stachel/zombiesutils/handlers/TickHandler.java diff --git a/src/main/java/xyz/stachel/zombiesutils/init/AutoDiscoveryMixinPlugin.java b/src/main/java/xyz/stachel/zombiesutils/init/AutoDiscoveryMixinPlugin.java new file mode 100644 index 0000000..34f5384 --- /dev/null +++ b/src/main/java/xyz/stachel/zombiesutils/init/AutoDiscoveryMixinPlugin.java @@ -0,0 +1,188 @@ +package xyz.stachel.zombiesutils.init; + +import org.spongepowered.asm.lib.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Stream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +/** + * A mixin plugin to automatically discover all mixins in the current JAR. + *

+ * This mixin plugin automatically scans your entire JAR (or class directory, in case of an in-IDE launch) for classes inside of your + * mixin package and registers those. It does this recursively for sub packages of the mixin package as well. This means you will need + * to only have mixin classes inside of your mixin package, which is good style anyway. + * + * @author Linnea Gräf + */ +public class AutoDiscoveryMixinPlugin implements IMixinConfigPlugin { + private static final List mixinPlugins = new ArrayList<>(); + + public static List getMixinPlugins() { + return mixinPlugins; + } + + private String mixinPackage; + + @Override + public void onLoad(String mixinPackage) { + this.mixinPackage = mixinPackage; + mixinPlugins.add(this); + } + + /** + * Resolves the base class root for a given class URL. This resolves either the JAR root, or the class file root. + * In either case the return value of this + the class name will resolve back to the original class url, or to other + * class urls for other classes. + */ + public URL getBaseUrlForClassUrl(URL classUrl) { + String string = classUrl.toString(); + if (classUrl.getProtocol().equals("jar")) { + try { + return new URL(string.substring(4).split("!")[0]); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + if (string.endsWith(".class")) { + try { + return new URL(string.replace("\\", "/") + .replace(getClass().getCanonicalName() + .replace(".", "/") + ".class", "")); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + return classUrl; + } + + /** + * Get the package that contains all the mixins. This value is set by mixin itself using {@link #onLoad}. + */ + public String getMixinPackage() { + return mixinPackage; + } + + /** + * Get the path inside the class root to the mixin package + */ + public String getMixinBaseDir() { + return mixinPackage.replace(".", "/"); + } + + /** + * A list of all discovered mixins. + */ + private List mixins = null; + + /** + * Try to add mixin class ot the mixins based on the filepath inside of the class root. + * Removes the {@code .class} file suffix, as well as the base mixin package. + *

This method cannot be called after mixin initialization.

+ * + * @param className the name or path of a class to be registered as a mixin. + */ + public void tryAddMixinClass(String className) { + String norm = (className.endsWith(".class") ? className.substring(0, className.length() - ".class".length()) : className) + .replace("\\", "/") + .replace("/", "."); + if (norm.startsWith(getMixinPackage() + ".") && !norm.endsWith(".")) { + mixins.add(norm.substring(getMixinPackage().length() + 1)); + } + } + + /** + * Search through the JAR or class directory to find mixins contained in {@link #getMixinPackage()} + */ + @Override + public List getMixins() { + if (mixins != null) return mixins; + System.out.println("Trying to discover mixins"); + mixins = new ArrayList<>(); + URL classUrl = getClass().getProtectionDomain().getCodeSource().getLocation(); + System.out.println("Found classes at " + classUrl); + Path file; + try { + file = Paths.get(getBaseUrlForClassUrl(classUrl).toURI()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + System.out.println("Base directory found at " + file); + if (Files.isDirectory(file)) { + walkDir(file); + } else { + walkJar(file); + } + System.out.println("Found mixins: " + mixins); + + return mixins; + } + + /** + * Search through directory for mixin classes based on {@link #getMixinBaseDir}. + * + * @param classRoot The root directory in which classes are stored for the default package. + */ + private void walkDir(Path classRoot) { + System.out.println("Trying to find mixins from directory"); + try (Stream classes = Files.walk(classRoot.resolve(getMixinBaseDir()))) { + classes.map(it -> classRoot.relativize(it).toString()) + .forEach(this::tryAddMixinClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Read through a JAR file, trying to find all mixins inside. + */ + private void walkJar(Path file) { + System.out.println("Trying to find mixins from jar file"); + try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(file))) { + ZipEntry next; + while ((next = zis.getNextEntry()) != null) { + tryAddMixinClass(next.getName()); + zis.closeEntry(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } +} diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java b/src/main/java/xyz/stachel/zombiesutils/mixin/MixinNetHandlerPlayClient.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/mixin/MixinNetHandlerPlayClient.java rename to src/main/java/xyz/stachel/zombiesutils/mixin/MixinNetHandlerPlayClient.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/Game.java b/src/main/java/xyz/stachel/zombiesutils/timer/Game.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/Game.java rename to src/main/java/xyz/stachel/zombiesutils/timer/Game.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/GameManager.java b/src/main/java/xyz/stachel/zombiesutils/timer/GameManager.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/GameManager.java rename to src/main/java/xyz/stachel/zombiesutils/timer/GameManager.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordMessageSender.java b/src/main/java/xyz/stachel/zombiesutils/timer/RecordMessageSender.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/RecordMessageSender.java rename to src/main/java/xyz/stachel/zombiesutils/timer/RecordMessageSender.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/Timer.java b/src/main/java/xyz/stachel/zombiesutils/timer/Timer.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/Timer.java rename to src/main/java/xyz/stachel/zombiesutils/timer/Timer.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/Category.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/Category.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/Category.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/Category.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/FileManager.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/FileManager.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/FileManager.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/FileManager.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/ISplitsData.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/ISplitsData.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/ISplitsData.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/ISplitsData.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/data/CategoryData.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/data/CategoryData.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/data/CategoryData.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/data/CategoryData.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/data/GameData.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/data/GameData.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/data/GameData.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/data/GameData.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/files/CategoryFile.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/files/CategoryFile.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/files/CategoryFile.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/files/CategoryFile.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/files/GameFile.java b/src/main/java/xyz/stachel/zombiesutils/timer/recorder/files/GameFile.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/timer/recorder/files/GameFile.java rename to src/main/java/xyz/stachel/zombiesutils/timer/recorder/files/GameFile.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/utils/InvalidMapException.java b/src/main/java/xyz/stachel/zombiesutils/utils/InvalidMapException.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/utils/InvalidMapException.java rename to src/main/java/xyz/stachel/zombiesutils/utils/InvalidMapException.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/utils/LanguageSupport.java b/src/main/java/xyz/stachel/zombiesutils/utils/LanguageSupport.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/utils/LanguageSupport.java rename to src/main/java/xyz/stachel/zombiesutils/utils/LanguageSupport.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/utils/ScoardboardException.java b/src/main/java/xyz/stachel/zombiesutils/utils/ScoardboardException.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/utils/ScoardboardException.java rename to src/main/java/xyz/stachel/zombiesutils/utils/ScoardboardException.java diff --git a/src/main/java/com/github/stachelbeere1248/zombiesutils/utils/Scoreboard.java b/src/main/java/xyz/stachel/zombiesutils/utils/Scoreboard.java similarity index 100% rename from src/main/java/com/github/stachelbeere1248/zombiesutils/utils/Scoreboard.java rename to src/main/java/xyz/stachel/zombiesutils/utils/Scoreboard.java diff --git a/src/main/resources/accesstransformer.cfg b/src/main/resources/accesstransformer.cfg new file mode 100644 index 0000000..1a7a2b3 --- /dev/null +++ b/src/main/resources/accesstransformer.cfg @@ -0,0 +1,2 @@ + +public net.minecraft.client.renderer.GlStateManager$Color diff --git a/src/main/resources/mixins.zombiesutils.json b/src/main/resources/mixins.zombiesutils.json index d213283..5ea0c57 100644 --- a/src/main/resources/mixins.zombiesutils.json +++ b/src/main/resources/mixins.zombiesutils.json @@ -1,11 +1,8 @@ { - "package": "com.github.stachelbeere1248.zombiesutils.mixin", + "package": "${basePackage}.mixin", + "plugin": "${basePackage}.init.AutoDiscoveryMixinPlugin", "refmap": "mixins.${modid}.refmap.json", "minVersion": "0.7", "compatibilityLevel": "JAVA_8", - "mixins": [ - ], - "client": [ - "MixinNetHandlerPlayClient" - ] + "__comment": "You do not need to manually register mixins in this template. Check the auto discovery mixin plugin for more info." }