aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--build.gradle.kts19
-rw-r--r--flake.lock44
-rw-r--r--flake.nix47
-rw-r--r--gradle/wrapper/gradle-wrapper.properties2
-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
13 files changed, 197 insertions, 150 deletions
diff --git a/.gitignore b/.gitignore
index 52c5038..ab14938 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ bin
/.direnv
/.envrc
+/run
diff --git a/build.gradle.kts b/build.gradle.kts
index cf52534..9206992 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,31 +1,24 @@
plugins {
- java
- id("fabric-loom") version "1.6-SNAPSHOT"
+ id("net.fabricmc.fabric-loom") version "1.17-SNAPSHOT"
}
-val minecraftVersion = "1.21"
+val minecraftVersion = "26.2"
version = "1.0.0+$minecraftVersion"
-group = "net.inyourwalls"
+group = "club.eviltransgenders"
repositories {
maven("https://maven.terraformersmc.com/")
}
dependencies {
- val yarnBuild = "1"
- val fabricLoaderVersion = "0.14.22"
-
minecraft("com.mojang:minecraft:$minecraftVersion")
- mappings("net.fabricmc:yarn:$minecraftVersion+build.$yarnBuild:v2")
- modImplementation("net.fabricmc:fabric-loader:$fabricLoaderVersion")
- modImplementation("com.terraformersmc:modmenu:9.0.0")
+ implementation("net.fabricmc:fabric-loader:0.17.3")
+ implementation("com.terraformersmc:modmenu:20.0.0-beta.3")
}
tasks.processResources {
inputs.property("version", project.version)
filesMatching("fabric.mod.json") {
- expand(mapOf(
- "version" to project.version
- ))
+ expand("version" to project.version)
}
}
diff --git a/flake.lock b/flake.lock
index 3a0d285..bc7dbb5 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,16 +1,34 @@
{
"nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
- "lastModified": 1713714899,
- "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=",
- "owner": "NixOS",
+ "lastModified": 1781577229,
+ "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=",
+ "owner": "nixos",
"repo": "nixpkgs",
- "rev": "6143fc5eeb9c4f00163267708e26191d1e918932",
+ "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f",
"type": "github"
},
"original": {
- "owner": "NixOS",
+ "owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
@@ -18,8 +36,24 @@
},
"root": {
"inputs": {
+ "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index bac42ae..070ff36 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,15 +1,40 @@
{
- description = "A mod for Minecraft, using the Fabric modloader.";
+ description = "Minecraft fabric mod dev env";
+ inputs = {
+ flake-utils.url = "github:numtide/flake-utils";
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ };
- inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ outputs =
+ {
+ self,
+ flake-utils,
+ nixpkgs,
+ }:
+ flake-utils.lib.eachDefaultSystem (
+ system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+ in
+ {
+ devShells.default = pkgs.mkShellNoCC rec {
+ buildInputs = with pkgs; [
+ flite
+ libglvnd
+ libpulseaudio
+ pipewire
+ vulkan-loader
+ ];
- outputs = { self, nixpkgs }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in {
- devShells.${system}.default = pkgs.mkShell {
- nativeBuildInputs = with pkgs; [
- gradle
- jdk21
- jdt-language-server
- ];
- };
- };
+ LD_LIBRARY_PATH = nixpkgs.lib.makeLibraryPath buildInputs;
+ nativeBuildInputs = with pkgs; [
+ gradle_9
+ jdk25
+ jdt-language-server
+ ];
+ };
+
+ formatter = pkgs.nixfmt;
+ }
+ );
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b82aa23..1a70468 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.7-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
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"
}
}