aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRosa <rosaontheweb@proton.me>2026-06-20 17:11:08 -0400
committerRosa <rosaontheweb@proton.me>2026-06-20 17:11:08 -0400
commitd47d1c3cff82fe7b61801ddacb5045f5493922ae (patch)
tree43d690847d72d202f3084f2e76849747ff9ac83f /src
parentd4a72688aec13196c6cce81e6f810e5e4529785b (diff)
port to 26.2
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java145
-rw-r--r--src/main/java/net/inyourwalls/customlevelcolour/mixin/ContextualBarMixin.java37
-rw-r--r--src/main/java/net/inyourwalls/customlevelcolour/mixin/InGameHudMixin.java36
-rw-r--r--src/main/resources/assets/customlevelcolour/lang/en_ca.json5
-rw-r--r--src/main/resources/assets/customlevelcolour/lang/en_gb.json1
-rw-r--r--src/main/resources/assets/customlevelcolour/lang/en_us.json1
-rw-r--r--src/main/resources/customlevelcolour.mixins.json4
-rw-r--r--src/main/resources/fabric.mod.json5
8 files changed, 114 insertions, 120 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;
- }
-}
diff --git a/src/main/resources/assets/customlevelcolour/lang/en_ca.json b/src/main/resources/assets/customlevelcolour/lang/en_ca.json
index 0426618..2b627b2 100644
--- a/src/main/resources/assets/customlevelcolour/lang/en_ca.json
+++ b/src/main/resources/assets/customlevelcolour/lang/en_ca.json
@@ -1,5 +1,6 @@
{
- "gui.customlevelcolour.title": "Custom Level Colour",
"gui.customlevelcolour.outlineColour": "Outline Colour",
- "gui.customlevelcolour.textColour": "Text Colour"
+ "gui.customlevelcolour.saveConfig": "Save",
+ "gui.customlevelcolour.textColour": "Text Colour",
+ "gui.customlevelcolour.title": "Custom Level Colour"
}
diff --git a/src/main/resources/assets/customlevelcolour/lang/en_gb.json b/src/main/resources/assets/customlevelcolour/lang/en_gb.json
index 0426618..1ded891 100644
--- a/src/main/resources/assets/customlevelcolour/lang/en_gb.json
+++ b/src/main/resources/assets/customlevelcolour/lang/en_gb.json
@@ -1,5 +1,6 @@
{
"gui.customlevelcolour.title": "Custom Level Colour",
+ "gui.customlevelcolour.saveConfig": "Save",
"gui.customlevelcolour.outlineColour": "Outline Colour",
"gui.customlevelcolour.textColour": "Text Colour"
}
diff --git a/src/main/resources/assets/customlevelcolour/lang/en_us.json b/src/main/resources/assets/customlevelcolour/lang/en_us.json
index a69d843..b118f0f 100644
--- a/src/main/resources/assets/customlevelcolour/lang/en_us.json
+++ b/src/main/resources/assets/customlevelcolour/lang/en_us.json
@@ -1,5 +1,6 @@
{
"gui.customlevelcolour.title": "Custom Level Color",
+ "gui.customlevelcolour.saveConfig": "Save",
"gui.customlevelcolour.outlineColour": "Outline Color",
"gui.customlevelcolour.textColour": "Text Color"
}
diff --git a/src/main/resources/customlevelcolour.mixins.json b/src/main/resources/customlevelcolour.mixins.json
index ca078b3..b6d2399 100644
--- a/src/main/resources/customlevelcolour.mixins.json
+++ b/src/main/resources/customlevelcolour.mixins.json
@@ -2,9 +2,9 @@
"required": true,
"minVersion": "0.8",
"package": "net.inyourwalls.customlevelcolour.mixin",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_25",
"client": [
- "InGameHudMixin"
+ "ContextualBarMixin"
],
"injectors": {
"defaultRequire": 1
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index cdcc279..de27338 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -25,8 +25,7 @@
"customlevelcolour.mixins.json"
],
"depends": {
- "fabricloader": ">=0.14.22",
- "java": ">=17",
- "minecraft": "~1.21"
+ "fabricloader": ">=0.17.3",
+ "minecraft": ">=26.2"
}
}