From 327be47178bebb323f618c6a6d36a12d3b15dbe4 Mon Sep 17 00:00:00 2001 From: inyourwalls Date: Mon, 19 Feb 2024 17:46:42 -0500 Subject: create config class, start working on config screen --- build.gradle.kts | 11 +++++--- flake.lock | 6 ++--- .../customlevelcolour/ConfigScreen.java | 27 +++++++++++++++++++ .../customlevelcolour/CustomLevelColour.java | 30 ++++++++++++++++++++++ .../customlevelcolour/CustomLevelColourConfig.java | 26 +++++++++++++++++++ .../customlevelcolour/ModMenuIntegration.java | 13 ++++++++++ src/main/resources/fabric.mod.json | 14 +++++++--- 7 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java create mode 100644 src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColour.java create mode 100644 src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColourConfig.java create mode 100644 src/main/java/net/inyourwalls/customlevelcolour/ModMenuIntegration.java diff --git a/build.gradle.kts b/build.gradle.kts index 34112f6..4404f53 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,14 +6,19 @@ plugins { version = "0.1.0" group = "net.inyourwalls" +repositories { + maven("https://maven.terraformersmc.com/") +} + dependencies { - val minecraftVersion = "1.20.4" - val yarnBuild = "3" - val fabricLoaderVersion = "0.15.0" + val minecraftVersion = "1.20.1" + val yarnBuild = "10" + 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") } tasks.processResources { diff --git a/flake.lock b/flake.lock index 0716ea3..a73a958 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1705856552, - "narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=", + "lastModified": 1708296515, + "narHash": "sha256-FyF489fYNAUy7b6dkYV6rGPyzp+4tThhr80KNAaF/yY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d", + "rev": "b98a4e1746acceb92c509bc496ef3d0e5ad8d4aa", "type": "github" }, "original": { diff --git a/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java new file mode 100644 index 0000000..a901b50 --- /dev/null +++ b/src/main/java/net/inyourwalls/customlevelcolour/ConfigScreen.java @@ -0,0 +1,27 @@ +package net.inyourwalls.customlevelcolour; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.text.Text; + +public class ConfigScreen extends Screen { + private static final Text TITLE = Text.translatable("gui.customlevelcolour.title"); + private final Screen previous; + + public ConfigScreen() { + super(TITLE); + this.previous = null; + } + + public ConfigScreen(Screen previous) { + super(TITLE); + this.previous = previous; + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderBackground(context); + super.render(context, mouseX, mouseY, delta); + context.drawCenteredTextWithShadow(this.textRenderer, TITLE, this.width / 2, 5, 0xffffff); + } +} diff --git a/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColour.java b/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColour.java new file mode 100644 index 0000000..f80e0f4 --- /dev/null +++ b/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColour.java @@ -0,0 +1,30 @@ +package net.inyourwalls.customlevelcolour; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.loader.api.FabricLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.nio.file.Path; + +public class CustomLevelColour implements ClientModInitializer { + public static final Logger LOGGER = LoggerFactory.getLogger(CustomLevelColour.class); + private static final Path CONFIG_PATH = FabricLoader.getInstance().getConfigDir().resolve("customlevelcolour.json"); + private static CustomLevelColourConfig config; + + @Override + public void onInitializeClient() { + try { + config = CustomLevelColourConfig.load(CONFIG_PATH); + } catch (IOException ex) { + LOGGER.debug("Failed to load config", ex); + config = new CustomLevelColourConfig(); + } + } + + public static CustomLevelColourConfig getConfig() { + if (config == null) throw new IllegalStateException("Attempted to get the configuration before it was loaded"); + return config; + } +} diff --git a/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColourConfig.java b/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColourConfig.java new file mode 100644 index 0000000..b963f02 --- /dev/null +++ b/src/main/java/net/inyourwalls/customlevelcolour/CustomLevelColourConfig.java @@ -0,0 +1,26 @@ +package net.inyourwalls.customlevelcolour; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Path; + +public class CustomLevelColourConfig { + private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); + public int outlineColour = 0x000000; + public int textColour = 0x80ff20; + + public static CustomLevelColourConfig load(Path path) throws IOException { + FileReader reader = new FileReader(path.toFile()); + return GSON.fromJson(reader, CustomLevelColourConfig.class); + } + + public static void save(Path path) throws IOException { + FileWriter writer = new FileWriter(path.toFile()); + GSON.toJson(writer); + writer.close(); + } +} diff --git a/src/main/java/net/inyourwalls/customlevelcolour/ModMenuIntegration.java b/src/main/java/net/inyourwalls/customlevelcolour/ModMenuIntegration.java new file mode 100644 index 0000000..f1270c2 --- /dev/null +++ b/src/main/java/net/inyourwalls/customlevelcolour/ModMenuIntegration.java @@ -0,0 +1,13 @@ +package net.inyourwalls.customlevelcolour; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; + +public class ModMenuIntegration implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return parent -> { + return new ConfigScreen(parent); + }; + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 13347a3..64444f6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -3,7 +3,7 @@ "id": "customlevelcolour", "name": "Custom Level Colour", "version": "${version}", - "description": "One-shot mod that changes the level colour on the XP bar.", + "description": "Allows customizing the colour of the level text above the XP bar.", "authors": [ "InYourWalls" ], @@ -13,12 +13,20 @@ "license": "Unlicense", "icon": "assets/customlevelcolour/icon.png", "environment": "client", + "entrypoints": { + "client": [ + "net.inyourwalls.customlevelcolour.CustomLevelColour" + ], + "modmenu": [ + "net.inyourwalls.customlevelcolour.ModMenuIntegration" + ] + }, "mixins": [ "customlevelcolour.mixins.json" ], "depends": { - "minecraft": "1.20.4", + "fabricloader": ">=0.14.22", "java": ">=17", - "fabricloader": ">=0.15.0" + "minecraft": "~1.20.1" } } -- cgit v1.3.1