diff --git a/settings.gradle.kts b/settings.gradle.kts index 73f0b00..fa47d35 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,8 +15,8 @@ plugins { stonecutter { create(rootProject) { // See https://stonecutter.kikugie.dev/wiki/start/#choosing-minecraft-versions - versions("26.1", "26.1.1", "26.1.2") - vcsVersion = "26.1.2" + versions("26.1", "26.1.1", "26.1.2", "26.2") + vcsVersion = "26.2" } } diff --git a/src/main/java/sh/ndy/ToggleNametagsClient.java b/src/main/java/sh/ndy/ToggleNametagsClient.java index c5857e7..24db879 100644 --- a/src/main/java/sh/ndy/ToggleNametagsClient.java +++ b/src/main/java/sh/ndy/ToggleNametagsClient.java @@ -55,7 +55,10 @@ public void onInitializeClient() { // TODO: prettify ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { dispatcher.register(ClientCommands.literal("ntconfig").executes(context -> { - context.getSource().getClient().schedule(() -> c.setScreen(new ConfigScreen(null, null))); + //? if < 26.2 { + // context.getSource().getClient().schedule(() -> c.setScreen(new ConfigScreen(null, null))); + //?} else + context.getSource().getClient().schedule(() -> c.setScreenAndShow(new ConfigScreen(null, null))); return 1; })); diff --git a/src/main/java/sh/ndy/config/Options.java b/src/main/java/sh/ndy/config/Options.java index 0a3fd02..617a94b 100644 --- a/src/main/java/sh/ndy/config/Options.java +++ b/src/main/java/sh/ndy/config/Options.java @@ -8,6 +8,7 @@ public class Options { public boolean renderSelfNametag = false; public boolean renderBossbar = true; private double nametagOpacity = 1 * Constants.NAMETAG_OPACITY_MULTIPLIER; + private boolean nametagBackgroundEnabled = true; private boolean renderNametagTextShadow = false; public boolean getRenderNametags() { @@ -43,6 +44,14 @@ public void setNametagOpacity(float newOpacity) { this.nametagOpacity = (Math.floor(newOpacity * 100.0) / 100.0) * Constants.NAMETAG_OPACITY_MULTIPLIER; } + public boolean getNametagBackgroundEnabled() { + return this.nametagBackgroundEnabled; + } + + public void setNametagBackgroundEnabled(boolean enabled) { + this.nametagBackgroundEnabled = enabled; + } + public boolean getRenderNametagTextShadow() { return this.renderNametagTextShadow; } diff --git a/src/main/java/sh/ndy/mixin/client/MixinNametagsBackgroundOpacity.java b/src/main/java/sh/ndy/mixin/client/MixinNametagsBackgroundOpacity.java index 98ad21e..a2a7995 100644 --- a/src/main/java/sh/ndy/mixin/client/MixinNametagsBackgroundOpacity.java +++ b/src/main/java/sh/ndy/mixin/client/MixinNametagsBackgroundOpacity.java @@ -1,17 +1,51 @@ package sh.ndy.mixin.client; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +//? if < 26.2 { +/* import com.llamalad7.mixinextras.injector.ModifyExpressionValue; */ +//?} import net.minecraft.client.renderer.feature.NameTagFeatureRenderer; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; import sh.ndy.config.Config; - -@Mixin(NameTagFeatureRenderer.Storage.class) +//? if < 26.2 { +/* @Mixin(NameTagFeatureRenderer.Storage.class) */ +//?} else { +@Mixin(NameTagFeatureRenderer.class) +//?} public class MixinNametagsBackgroundOpacity { - @ModifyExpressionValue(method = "add", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/state/OptionsRenderState;getBackgroundOpacity(F)F")) - private float submitLabel(float original) { + //? if < 26.2 { + /* @Unique private static final String TARGET = "Lnet/minecraft/client/renderer/state/OptionsRenderState;getBackgroundOpacity(F)F"; */ + //?} else + @Unique private static final String TARGET = "Lnet/minecraft/client/gui/Font;prepareText(Lnet/minecraft/util/FormattedCharSequence;FFIZZI)Lnet/minecraft/client/gui/Font$PreparedText;"; + + //? if < 26.2 { + /* @ModifyExpressionValue( + method = "add", + at = @At( + value = "INVOKE", + target = TARGET + ) + ) + private float changeOpacity(float original) { return (float) Config.getOptions().getNametagOpacity(); } -} + *///?} else { + @ModifyArg( + method = "prepareText", + at = @At( + value = "INVOKE", + target = TARGET + ), + index = 6 + ) + private static int disableNametag(int originalColor) { + if (!Config.getOptions().getNametagBackgroundEnabled()) { + return 0; + } + return originalColor; + } + //?} +} \ No newline at end of file diff --git a/src/main/java/sh/ndy/mixin/client/MixinNametagsTextShadow.java b/src/main/java/sh/ndy/mixin/client/MixinNametagsTextShadow.java index 3a95e37..a2f0e4a 100644 --- a/src/main/java/sh/ndy/mixin/client/MixinNametagsTextShadow.java +++ b/src/main/java/sh/ndy/mixin/client/MixinNametagsTextShadow.java @@ -9,13 +9,31 @@ @Mixin(NameTagFeatureRenderer.class) public class MixinNametagsTextShadow { - @Unique - private final String TEXT_RENDERER_TARGET = + //? if < 26.2 { + /* @Unique private static final String TARGET = "Lnet/minecraft/client/gui/Font;drawInBatch(Lnet/minecraft/network/chat/Component;FFIZLorg/joml/Matrix4fc;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)V"; + *///?} else { + @Unique private static final String TARGET = + "Lnet/minecraft/client/gui/Font;prepareText(Lnet/minecraft/util/FormattedCharSequence;FFIZZI)Lnet/minecraft/client/gui/Font$PreparedText;"; + //?} + private static final NametagsTextShadowListener listener = new NametagsTextShadowListener(); - @ModifyArg(method = "renderTranslucent", at = @At(value = "INVOKE", target = TEXT_RENDERER_TARGET)) + //? if < 26.2 { + /* + @ModifyArg(method = "renderTranslucent", at = @At(value = "INVOKE", target = TARGET)) private boolean render(boolean original) { return listener.handleMixin(); } + */ + //?} else { + @ModifyArg(method = "prepareText", + at = @At(value = "INVOKE", target = TARGET), + index = 4 + ) + private static boolean render(boolean drawShadow) { + return listener.handleMixin(); + } + //?} + } diff --git a/src/main/java/sh/ndy/screens/ConfigScreen.java b/src/main/java/sh/ndy/screens/ConfigScreen.java index 754559d..61f9e60 100644 --- a/src/main/java/sh/ndy/screens/ConfigScreen.java +++ b/src/main/java/sh/ndy/screens/ConfigScreen.java @@ -54,6 +54,10 @@ private Component getRenderNametagShadowText() { "Show nametag text shadow: " + (Config.getOptions().getRenderNametagTextShadow() ? "§aYes" : "§cNo")); } + private Component getEnableNametagBackground() { + return Component.nullToEmpty("Show nametag background: " + (Config.getOptions().getNametagBackgroundEnabled() ? "§aYes" : "§cNo")); + } + protected void init() { GridLayout grid = new GridLayout(); grid.defaultCellSetting().padding(4, 4, 4, 2); @@ -104,6 +108,13 @@ protected void applyValue() { } }; + Button renderNametagBackground = Button.builder(getEnableNametagBackground(), (btn) -> { + Config.getOptions().setNametagBackgroundEnabled(!Config.getOptions().getNametagBackgroundEnabled()); + Config.saveConfig(); + btn.setFocused(false); + btn.setMessage(getEnableNametagBackground()); + }).width(STANDARD_BTN_WIDTH).build(); + // TODO: Find a way to remove Essential's padding around the nametags, so we don't have to disable // this option when Essential is loaded. if (ToggleNametagsClient.isEssentialModLoaded) { @@ -115,7 +126,12 @@ protected void applyValue() { adder.addChild(renderNametagsBtnWidget); adder.addChild(renderSelfNametagsBtnWidget); adder.addChild(renderNametagShadowBtnWidget); - adder.addChild(nametagOpacitySlider); + + //? if < 26.2 { + /* adder.addChild(nametagOpacitySlider); */ + //?} else + adder.addChild(renderNametagBackground); + adder.addChild(renderBossbarBtnWidget, 2); grid.arrangeElements(); @@ -135,6 +151,9 @@ public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mo @Override public void onClose() { - this.minecraft.setScreen(parent); + //? if < 26.2 { + // this.minecraft.setScreen(parent); + //?} else + this.minecraft.setScreenAndShow(parent); } } diff --git a/src/main/resources/togglenametags.client.mixins.json b/src/main/resources/togglenametags.client.mixins.json index 3083379..8b0ca77 100644 --- a/src/main/resources/togglenametags.client.mixins.json +++ b/src/main/resources/togglenametags.client.mixins.json @@ -3,11 +3,11 @@ "package": "sh.ndy.mixin.client", "compatibilityLevel": "JAVA_17", "client": [ + "MixinNametagsBackgroundOpacity", + "MixinNametagsTextShadow", "MixinRenderBossBar", "MixinRenderNameTag", - "MixinRenderSelfNameTag", - "MixinNametagsTextShadow", - "MixinNametagsBackgroundOpacity" + "MixinRenderSelfNameTag" ], "injectors": { "defaultRequire": 1 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 2d0fcb2..8de5a9b 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -4,7 +4,7 @@ plugins { // id("me.modmuss50.mod-publish-plugin") version "1.0.+" apply false } -stonecutter active "26.1.1" +stonecutter active "26.2" // Make newer versions be published last stonecutter tasks { diff --git a/versions/26.2/gradle.properties b/versions/26.2/gradle.properties new file mode 100644 index 0000000..ef8aefb --- /dev/null +++ b/versions/26.2/gradle.properties @@ -0,0 +1,11 @@ +deps.fabric_api=0.156.0+26.2 +deps.modmenu=20.0.1 + +# Minecraft dependency for fabric.mod.json +mod.mc_dep=>=26.2 + +# Release title for Modrinth and Curseforge +mod.mc_title=26.2 + +# Space-separated compatible versions for publishing +mod.mc_targets=26.2 \ No newline at end of file