diff options
| author | Rosa <rosaontheweb@proton.me> | 2026-06-20 17:11:08 -0400 |
|---|---|---|
| committer | Rosa <rosaontheweb@proton.me> | 2026-06-20 17:11:08 -0400 |
| commit | d47d1c3cff82fe7b61801ddacb5045f5493922ae (patch) | |
| tree | 43d690847d72d202f3084f2e76849747ff9ac83f /src/main/java | |
| parent | d4a72688aec13196c6cce81e6f810e5e4529785b (diff) | |
port to 26.2
Diffstat (limited to 'src/main/java')
3 files changed, 105 insertions, 113 deletions
diff --git a/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java index f7fea4f..8b137b8 100644 --- a/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java +++ b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java @@ -1,22 +1,23 @@ package net.inyourwalls.customlevelcolour; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.gui.layouts.CommonLayouts; +import net.minecraft.client.gui.layouts.HeaderAndFooterLayout; +import net.minecraft.client.gui.layouts.LinearLayout; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextColor; +import net.minecraft.util.ARGB; import java.util.regex.Pattern; -import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_HEIGHT; -import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_WIDTH; -import static net.minecraft.client.gui.widget.ButtonWidget.DEFAULT_WIDTH_SMALL; - public class ConfigScreen extends Screen { - private static final Text TITLE = Text.translatable("gui.customlevelcolour.title"); - private static final Text OUTLINE_COLOUR_LABEL = Text.translatable("gui.customlevelcolour.outlineColour"); - private static final Text TEXT_COLOUR_LABEL = Text.translatable("gui.customlevelcolour.textColour"); - private static final Pattern HEX_COLOUR_REGEX = Pattern.compile("[0-9a-fA-F]{0,6}"); + private static final Component TITLE = Component.translatable("gui.customlevelcolour.title"); + private static final Component OUTLINE_COLOUR_LABEL = Component.translatable("gui.customlevelcolour.outlineColour"); + private static final Component TEXT_COLOUR_LABEL = Component.translatable("gui.customlevelcolour.textColour"); + private static final Component BACK_BUTTON_LABEL = Component.translatable("gui.back"); + private static final Component SAVE_BUTTON_LABEL = Component.translatable("gui.customlevelcolour.saveConfig"); private final Screen previous; private final CustomLevelColourConfig config; private int previewOutlineColour; @@ -34,75 +35,65 @@ public class ConfigScreen extends Screen { @Override public void init() { - TextFieldWidget outlineField = new TextFieldWidget( - this.textRenderer, - this.width / 2 + 4, - 25, - DEFAULT_WIDTH_SMALL, - DEFAULT_HEIGHT, - OUTLINE_COLOUR_LABEL - ); - outlineField.setTextPredicate(HEX_COLOUR_REGEX.asMatchPredicate()); - outlineField.setChangedListener(text -> { - try { - this.previewOutlineColour = Integer.parseInt(text, 16); - } catch (NumberFormatException ex) { - // fail silently - } - }); - outlineField.setText(String.format("%x", config.outlineColour)); - TextFieldWidget textField = new TextFieldWidget( - this.textRenderer, - this.width / 2 + 4, - 55, - DEFAULT_WIDTH_SMALL, - DEFAULT_HEIGHT, - TEXT_COLOUR_LABEL - ); - textField.setTextPredicate(HEX_COLOUR_REGEX.asMatchPredicate()); - textField.setChangedListener(text -> { - try { - this.previewTextColour = Integer.parseInt(text, 16); - } catch (NumberFormatException ex) {} - }); - textField.setText(String.format("%x", config.textColour)); + this.previewOutlineColour = this.config.outlineColour; + this.previewTextColour = this.config.textColour; + Button saveButton = Button.builder(SAVE_BUTTON_LABEL, btn -> { + this.config.textColour = this.previewTextColour; + this.config.outlineColour = this.previewOutlineColour; + CustomLevelColour.saveConfig(); + }).build(); - ButtonWidget backButton = ButtonWidget.builder(Text.translatable("gui.back"), thisButton -> this.close()) - .size(DEFAULT_WIDTH, DEFAULT_HEIGHT) - .position(this.width / 2 - DEFAULT_WIDTH - 4, this.height - 28) - .build(); - ButtonWidget saveButton = ButtonWidget.builder(Text.translatable("selectWorld.edit.save"), thisButton -> { - try { - config.outlineColour = Integer.parseInt(outlineField.getText(), 16); - config.textColour = Integer.parseInt(textField.getText(), 16); - } catch (NumberFormatException ex) {} - CustomLevelColour.saveConfig(); - }) - .size(DEFAULT_WIDTH, DEFAULT_HEIGHT) - .position(this.width / 2 + 4, this.height - 28) - .build(); + Button backButton = Button.builder(BACK_BUTTON_LABEL, btn -> { + this.onClose(); + }).build(); - this.addDrawableChild(outlineField); - this.addDrawableChild(textField); - this.addDrawableChild(backButton); - this.addDrawableChild(saveButton); - } + EditBox textColourInput = new EditBox(this.font, TEXT_COLOUR_LABEL); + textColourInput.setValue(String.format("%x", this.previewTextColour)); + textColourInput.setResponder(v -> { + try { + this.previewTextColour = Integer.parseInt(v, 16); + textColourInput.setTextColor(ARGB.white(1.0f)); + if (!v.matches("[0-9a-fA-F]{6}")) { + textColourInput.setTextColor(ARGB.opaque(TextColor.YELLOW.getValue())); + } + } catch (NumberFormatException ex) { + textColourInput.setTextColor(ARGB.opaque(TextColor.RED.getValue())); + } + }); - @Override - public void close() { - this.client.setScreen(this.previous); + EditBox outlineColourInput = new EditBox(this.font, OUTLINE_COLOUR_LABEL); + outlineColourInput.setValue(String.format("%x", this.previewOutlineColour)); + outlineColourInput.setResponder(v -> { + try { + this.previewOutlineColour = Integer.parseInt(v, 16); + textColourInput.setTextColor(ARGB.white(1.0f)); + if (!v.matches("[0-9a-fA-F]{6}")) { + outlineColourInput.setTextColor(ARGB.opaque(TextColor.YELLOW.getValue())); + } + } catch (NumberFormatException ex) { + outlineColourInput.setTextColor(ARGB.opaque(TextColor.RED.getValue())); + } + }); + + HeaderAndFooterLayout root = new HeaderAndFooterLayout(this); + root.addTitleHeader(TITLE, this.font); + + LinearLayout contents = LinearLayout.vertical().spacing(4); + contents.addChild(CommonLayouts.labeledElement(this.font, textColourInput, TEXT_COLOUR_LABEL)); + contents.addChild(CommonLayouts.labeledElement(this.font, outlineColourInput, OUTLINE_COLOUR_LABEL)); + root.addToContents(contents); + + LinearLayout footer = LinearLayout.horizontal().spacing(4); + footer.addChild(backButton); + footer.addChild(saveButton); + root.addToFooter(footer); + + root.arrangeElements(); + root.visitWidgets(elem -> this.addRenderableWidget(elem)); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - super.render(context, mouseX, mouseY, delta); - context.drawCenteredTextWithShadow(this.textRenderer, TITLE, this.width / 2, 5, 0xffffff); - - int labelX = this.width / 2 - Math.max( - this.textRenderer.getWidth(TEXT_COLOUR_LABEL), - this.textRenderer.getWidth(OUTLINE_COLOUR_LABEL) - ) - 4; - context.drawTextWithShadow(this.textRenderer, OUTLINE_COLOUR_LABEL, labelX, 30, 0xffffff); - context.drawTextWithShadow(this.textRenderer, TEXT_COLOUR_LABEL, labelX, 60, 0xffffff); + public void onClose() { + this.minecraft.setScreenAndShow(this.previous); } } diff --git a/src/main/java/net/inyourwalls/customlevelcolour/mixin/ContextualBarMixin.java b/src/main/java/net/inyourwalls/customlevelcolour/mixin/ContextualBarMixin.java new file mode 100644 index 0000000..365cde2 --- /dev/null +++ b/src/main/java/net/inyourwalls/customlevelcolour/mixin/ContextualBarMixin.java @@ -0,0 +1,37 @@ +package net.inyourwalls.customlevelcolour.mixin; + +import net.inyourwalls.customlevelcolour.CustomLevelColour; +import net.minecraft.client.gui.contextualbar.ContextualBar; +import net.minecraft.util.ARGB; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(ContextualBar.class) +public interface ContextualBarMixin { + @ModifyArg( + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;text(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)V" + ), + method = "extractExperienceLevel", + index = 4, + require = 4 + ) + private static int modifyExperienceOutline(int originalColour) { + return ARGB.opaque(CustomLevelColour.getConfig().outlineColour); + } + + @ModifyArg( + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;text(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)V", + ordinal = 4 + ), + method = "extractExperienceLevel", + index = 4 + ) + private static int modifyExperienceColour(int originalColour) { + return ARGB.opaque(CustomLevelColour.getConfig().textColour); + } +} diff --git a/src/main/java/net/inyourwalls/customlevelcolour/mixin/InGameHudMixin.java b/src/main/java/net/inyourwalls/customlevelcolour/mixin/InGameHudMixin.java deleted file mode 100644 index 328f319..0000000 --- a/src/main/java/net/inyourwalls/customlevelcolour/mixin/InGameHudMixin.java +++ /dev/null @@ -1,36 +0,0 @@ -// InGameHudMixin: Changes the colour of the level text & outline. -package net.inyourwalls.customlevelcolour.mixin; - -import net.inyourwalls.customlevelcolour.CustomLevelColour; -import net.minecraft.client.gui.hud.InGameHud; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@Mixin(InGameHud.class) -public class InGameHudMixin { - @ModifyArg( - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/gui/DrawContext;drawText(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;IIIZ)I" - ), - method = "renderExperienceLevel", - index = 4 - ) - private int overwriteOutlineColour(int oldColour) { - return CustomLevelColour.getConfig().outlineColour; - } - - @ModifyArg( - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/gui/DrawContext;drawText(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;IIIZ)I", - ordinal = 4 - ), - method = "renderExperienceLevel", - index = 4 - ) - private int overwriteTextColour(int oldColour) { - return CustomLevelColour.getConfig().textColour; - } -} |
