diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9fc6c1b..f1616a3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,6 +15,8 @@ jobs: java-version: '21' - name: Build with Gradle run: gradle build + - name: Detonate JARs + run: python ./ci/hissboom.py "./build/libs/*.jar" - name: Upload build artifacts uses: actions/upload-artifact@v4 with: diff --git a/build.gradle b/build.gradle index 53680d7..6990111 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ group = project.maven_group repositories { maven { url 'https://maven.terraformersmc.com/releases/' } - maven { url 'https://www.jitpack.io' } + maven { url 'https://maven.uuid.gg/releases' } } loom { @@ -38,7 +38,7 @@ dependencies { modImplementation(libs.mod.menu) { transitive = false } - modImplementation libs.wrench.wrapper + modCompileOnly libs.wrench.wrapper implementation libs.quilt.parsers.json shadow(libs.quilt.parsers.json) { diff --git a/ci/hissboom.py b/ci/hissboom.py new file mode 100644 index 0000000..9b1279b --- /dev/null +++ b/ci/hissboom.py @@ -0,0 +1,35 @@ +# Copyright © 2024 Ennui Langeweile, All rights reserved. +# +# ..It ain't rocket science though, expect this to be open-sourced somewhere else + +from typing import IO +import argparse +import glob +import tempfile +import zipfile + +def hissboomify_zip(origin: IO[bytes], target: IO[bytes], is_jij: bool): + zip = zipfile.ZipFile(file=origin, mode="r") + new_zip = zipfile.ZipFile(file=target, mode="w", compression=zipfile.ZIP_DEFLATED, compresslevel=0 if is_jij else 9, allowZip64=False) + for file in zip.filelist: + if file.is_dir(): + new_zip.mkdir(file.filename) + else: + data = zip.open(file.filename) + if file.filename.endswith(".jar"): + hissboomify_zip(data, new_zip.open(file.filename, "w"), True) + else: + new_zip.open(file.filename, "w").write(data.read()) + zip.close() + +parser = argparse.ArgumentParser() +parser.add_argument("path", help="The path of the files you want to detonate") +args = parser.parse_args() + +for path in glob.glob(args.path): + input = open(file=path, mode="r+b").read() + input_temp = tempfile.TemporaryFile() + input_temp.write(input) + + output = open(file=path, mode="w+b") + hissboomify_zip(input_temp, output, False) diff --git a/gradle.properties b/gradle.properties index 2be2402..cbebf06 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs = -Xmx1G org.gradle.parallel = true # Mod Properties -version = 1.1.0 +version = 1.2.0 maven_group = io.github.ennuil archives_base_name = boring_default_game_rules diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 411f35b..4e579c0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,16 +1,16 @@ # The latest versions are available at https://quiltmc.org/en/usage/latest-versions [versions] -minecraft = "1.20.6" -quilt_mappings = "1.20.6+build.6" +minecraft = "1.21.1" +quilt_mappings = "1.21.1+build.3" -quilt_loom = "1.6.8" -quilt_loader = "0.26.0" +quilt_loom = "1.8.4" +quilt_loader = "0.27.0-beta.1" shadow = "8.1.7" -fabric_api = "0.100.0+1.20.6" -mod_menu = "10.0.0-beta.1" +fabric_api = "0.106.0+1.21.1" +mod_menu = "11.0.3" quilt_parsers_json = "0.3.0" -wrench_wrapper = "a29721e25d" # 0.1.0+1.20.4 +wrench_wrapper = "0.5.0" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } @@ -20,7 +20,7 @@ quilt_loader = { module = "org.quiltmc:quilt-loader", version.ref = "quilt_loade quilted_fabric_api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric_api" } mod_menu = { module = "com.terraformersmc:modmenu", version.ref = "mod_menu" } quilt_parsers_json = { module = "org.quiltmc.parsers:json", version.ref = "quilt_parsers_json" } -wrench_wrapper = { module = "com.github.Up-Mods:wrench_wrapper", version.ref = "wrench_wrapper" } +wrench_wrapper = { module = "io.github.ennuil:wrench_wrapper", version.ref = "wrench_wrapper" } [plugins] quilt_loom = { id = "org.quiltmc.loom", version.ref = "quilt_loom" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e644113..a4b76b9 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 a441313..df97d72 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.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf1..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # 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 +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30d..9d21a21 100755 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/src/main/java/io/github/ennuil/boring_default_game_rules/config/ModConfigManager.java b/src/main/java/io/github/ennuil/boring_default_game_rules/config/ModConfigManager.java index 9bb2dae..d8e9e6e 100644 --- a/src/main/java/io/github/ennuil/boring_default_game_rules/config/ModConfigManager.java +++ b/src/main/java/io/github/ennuil/boring_default_game_rules/config/ModConfigManager.java @@ -34,8 +34,9 @@ public class ModConfigManager { public static final String GENERATE_ME = "GENERATE_ME"; public static final String GENERATE_ME_MAYBE = "GENERATE_ME_MAYBE"; + public static final String SCHEMA_FILE_NAME = "config.schema.json"; public static final Path SCHEMA_DIRECTORY_PATH = WrenchWrapper.getConfigDir().resolve("boring_default_game_rules"); - public static final Path SCHEMA_PATH = SCHEMA_DIRECTORY_PATH.resolve("config.schema.json"); + public static final Path SCHEMA_PATH = SCHEMA_DIRECTORY_PATH.resolve(SCHEMA_FILE_NAME); private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); public static final ModConfig CONFIG = WrenchWrapper.create("boring_default_game_rules", "config", ModConfig.class); @@ -82,8 +83,8 @@ public static void prepareSchema(boolean client) { } switch (CONFIG.schema.value()) { - case GENERATE_ME -> CONFIG.schema.setValue(SCHEMA_PATH.toUri().toString(), false); - case GENERATE_ME_MAYBE -> CONFIG.schema.setValue(CONFIG.generateJsonSchema.value() ? SCHEMA_PATH.toUri().toString() : "", false); + case GENERATE_ME -> CONFIG.schema.setValue(SCHEMA_FILE_NAME, false); + case GENERATE_ME_MAYBE -> CONFIG.schema.setValue(CONFIG.generateJsonSchema.value() ? SCHEMA_FILE_NAME : "", false); } if (generateNewSchema) { diff --git a/src/main/java/io/github/ennuil/boring_default_game_rules/mixin/client/EditGameRulesScreenMixin.java b/src/main/java/io/github/ennuil/boring_default_game_rules/mixin/client/EditGameRulesScreenMixin.java index 484e707..fc6793e 100644 --- a/src/main/java/io/github/ennuil/boring_default_game_rules/mixin/client/EditGameRulesScreenMixin.java +++ b/src/main/java/io/github/ennuil/boring_default_game_rules/mixin/client/EditGameRulesScreenMixin.java @@ -1,5 +1,6 @@ package io.github.ennuil.boring_default_game_rules.mixin.client; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import io.github.ennuil.boring_default_game_rules.config.ModConfigManager; import io.github.ennuil.boring_default_game_rules.screen.EditDefaultGameRulesScreen; import net.minecraft.client.gui.Element; @@ -29,12 +30,7 @@ private EditGameRulesScreenMixin(Text text) { } @Shadow - private EditGameRulesScreen.GameRuleElementListWidget field_49903; - - @Shadow - @Final - @Mutable - private GameRules gameRules; + public EditGameRulesScreen.GameRuleElementListWidget rulesList; @Shadow @Final @@ -44,11 +40,11 @@ private EditGameRulesScreenMixin(Text text) { private void addEditDefaultsButton(CallbackInfo ci) { // Don't let the button appear on screens that extends this screen if (((EditGameRulesScreen) (Object) this).getClass() == EditGameRulesScreen.class) { - this.field_49903.children().add(new EditDefaultsButtonWidget()); + this.rulesList.children().add(new EditDefaultsButtonWidget()); } } - @ModifyArg(method = "init()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/layout/HeaderFooterLayoutWidget;method_57726(Lnet/minecraft/text/Text;Lnet/minecraft/client/font/TextRenderer;)V")) + @ModifyExpressionValue(method = "init()V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screen/world/EditGameRulesScreen;TITLE:Lnet/minecraft/text/Text;")) private Text modifyTitle(Text original) { return this.title; } diff --git a/src/main/java/io/github/ennuil/boring_default_game_rules/modmenu/ModMenuFakeScreen.java b/src/main/java/io/github/ennuil/boring_default_game_rules/modmenu/ModMenuFakeScreen.java index 05339eb..69afef7 100644 --- a/src/main/java/io/github/ennuil/boring_default_game_rules/modmenu/ModMenuFakeScreen.java +++ b/src/main/java/io/github/ennuil/boring_default_game_rules/modmenu/ModMenuFakeScreen.java @@ -6,7 +6,7 @@ import net.minecraft.text.Text; import net.minecraft.world.GameRules; -// By having a fake screen, the screen caching, which is undesirable for us, is busted. Thanks for the code, ARRFAB! +// By having a fake screen, the screen caching, which is undesirable for us, is busted. public class ModMenuFakeScreen extends Screen { private final Screen parent; diff --git a/src/main/java/io/github/ennuil/boring_default_game_rules/screen/EditDefaultGameRulesScreen.java b/src/main/java/io/github/ennuil/boring_default_game_rules/screen/EditDefaultGameRulesScreen.java index a63804e..70204ee 100644 --- a/src/main/java/io/github/ennuil/boring_default_game_rules/screen/EditDefaultGameRulesScreen.java +++ b/src/main/java/io/github/ennuil/boring_default_game_rules/screen/EditDefaultGameRulesScreen.java @@ -26,7 +26,7 @@ public EditDefaultGameRulesScreen(GameRules gameRules, Consumer { - double scrollAmount = EditDefaultGameRulesScreen.this.field_49903.getScrollAmount(); + double scrollAmount = EditDefaultGameRulesScreen.this.rulesList.getScrollAmount(); ModConfigManager.resetDefaults(); EditDefaultGameRulesScreen.this.gameRules = new GameRules(); EditDefaultGameRulesScreen.this.repositionElements(); - EditDefaultGameRulesScreen.this.field_49903.setScrollAmount(scrollAmount); + EditDefaultGameRulesScreen.this.rulesList.setScrollAmount(scrollAmount); } ).position(10, 5) .size(150, 20) diff --git a/src/main/resources/boring_default_game_rules.accesswidener b/src/main/resources/boring_default_game_rules.accesswidener index 90ef5a6..8353d25 100644 --- a/src/main/resources/boring_default_game_rules.accesswidener +++ b/src/main/resources/boring_default_game_rules.accesswidener @@ -1,6 +1,6 @@ accessWidener v2 named -accessible field net/minecraft/client/gui/screen/world/EditGameRulesScreen field_49903 Lnet/minecraft/client/gui/screen/world/EditGameRulesScreen$GameRuleElementListWidget; +accessible field net/minecraft/client/gui/screen/world/EditGameRulesScreen rulesList Lnet/minecraft/client/gui/screen/world/EditGameRulesScreen$GameRuleElementListWidget; accessible field net/minecraft/client/gui/screen/world/EditGameRulesScreen gameRules Lnet/minecraft/world/GameRules; accessible field net/minecraft/client/gui/screen/Screen title Lnet/minecraft/text/Text; accessible field net/minecraft/world/GameRules GAME_RULE_TYPES Ljava/util/Map;