From 5ccad6b10ad4678c1d33ae4361404297ed5d51a4 Mon Sep 17 00:00:00 2001 From: kawaiizenbo <48113593+kawaiizenbo@users.noreply.github.com> Date: Sun, 11 Jun 2023 10:59:20 -0700 Subject: [PATCH] broken shit --- README.md | 9 ++++- .../moonlight/mixin/KeyboardMixin.java | 2 +- .../moonlight/mixin/SimpleOptionMixin.java | 34 ++++++++++++++++++ .../moonlight/module/modules/Fullbright.java | 4 +-- .../moonlight/module/modules/HUDModule.java | 21 ++++++++--- .../moonlight/module/modules/Step.java | 2 +- .../module/settings/BooleanSetting.java | 7 +++- .../module/settings/ColorSetting.java | 18 ++++++---- .../module/settings/DoubleSetting.java | 7 +++- .../moonlight/module/settings/Setting.java | 3 ++ .../java/me/kawaiizenbo/moonlight/ui/HUD.java | 15 +++++--- .../moonlight/util/ColorUtils.java | 5 +++ .../moonlight/util/ISimpleOption.java | 6 ++++ .../moonlight/util/ReflectionUtils.java | 35 +++++++++++++++++++ src/main/resources/fabric.mod.json | 2 +- src/main/resources/moonlight.mixins.json | 3 +- 16 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 src/main/java/me/kawaiizenbo/moonlight/mixin/SimpleOptionMixin.java create mode 100644 src/main/java/me/kawaiizenbo/moonlight/util/ISimpleOption.java create mode 100644 src/main/java/me/kawaiizenbo/moonlight/util/ReflectionUtils.java diff --git a/README.md b/README.md index 2146f3c..0118465 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ -# Moonlight Meadows Utility Mod for Minecraft 1.19.3 +# Moonlight Meadows Utility Mod for Minecraft 1.20 + +Please use this mod at your own risk +Requires Fabric API and Minecraft 1.20 + +Default ClickGUI Key is Right Alt + +Grab the latest build [here](https://nightly.link/kawaiizenbo/MoonlightMeadows/workflows/build/main/Artifacts.zip) diff --git a/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java b/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java index 3773df0..daef586 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java +++ b/src/main/java/me/kawaiizenbo/moonlight/mixin/KeyboardMixin.java @@ -18,6 +18,6 @@ public abstract class KeyboardMixin { @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) public void onKey(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) { - if (key == GLFW.GLFW_KEY_RIGHT_SHIFT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE); + if (key == GLFW.GLFW_KEY_RIGHT_ALT) MinecraftClient.getInstance().setScreen(ClickGUIScreen.INSTANCE); } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/mixin/SimpleOptionMixin.java b/src/main/java/me/kawaiizenbo/moonlight/mixin/SimpleOptionMixin.java new file mode 100644 index 0000000..5ff254b --- /dev/null +++ b/src/main/java/me/kawaiizenbo/moonlight/mixin/SimpleOptionMixin.java @@ -0,0 +1,34 @@ +package me.kawaiizenbo.moonlight.mixin; + +import java.util.Objects; +import java.util.function.Consumer; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import me.kawaiizenbo.moonlight.util.ISimpleOption; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.option.SimpleOption; + +@Mixin(SimpleOption.class) +public class SimpleOptionMixin implements ISimpleOption +{ + @Shadow T value; + @Shadow @Final private Consumer changeCallback; + + @Override + public void setValueUnrestricted(T object) + { + if (!MinecraftClient.getInstance().isRunning()) + { + this.value = object; + return; + } + if (!Objects.equals(this.value, object)) + { + this.value = object; + this.changeCallback.accept(this.value); + } + } +} diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/modules/Fullbright.java b/src/main/java/me/kawaiizenbo/moonlight/module/modules/Fullbright.java index f56eba3..6135a5e 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/modules/Fullbright.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/modules/Fullbright.java @@ -2,6 +2,7 @@ package me.kawaiizenbo.moonlight.module.modules; import me.kawaiizenbo.moonlight.module.Category; import me.kawaiizenbo.moonlight.module.Module_; +import me.kawaiizenbo.moonlight.util.ISimpleOption; public class Fullbright extends Module_ { @@ -13,8 +14,7 @@ public class Fullbright extends Module_ @Override public void onEnable() { - // i dont know why but this makes it darker than 1.0 - mc.options.getGamma().setValue(100.0); + ((ISimpleOption)(Object)mc.options.getGamma()).setValueUnrestricted(100.0); } @Override diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/modules/HUDModule.java b/src/main/java/me/kawaiizenbo/moonlight/module/modules/HUDModule.java index ee2c3e6..7576d97 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/modules/HUDModule.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/modules/HUDModule.java @@ -2,15 +2,28 @@ package me.kawaiizenbo.moonlight.module.modules; import me.kawaiizenbo.moonlight.module.Category; import me.kawaiizenbo.moonlight.module.Module_; -import me.kawaiizenbo.moonlight.module.settings.ColorSetting; +import me.kawaiizenbo.moonlight.module.settings.DoubleSetting; +import me.kawaiizenbo.moonlight.ui.HUD; +import me.kawaiizenbo.moonlight.util.ReflectionUtils; -public class HUDModule extends Module_ +public class HUDModule extends Module_ { - public ColorSetting color = new ColorSetting("Color", 0x55FFFF); + public DoubleSetting r = new DoubleSetting("Red", 0x55, 0, 255, 0, ReflectionUtils.tryGetMethod("updateHUD", getClass())); + public DoubleSetting g = new DoubleSetting("Green", 255, 0, 255, 0, ReflectionUtils.tryGetMethod("updateHUD", getClass())); + public DoubleSetting b = new DoubleSetting("Blue", 255, 0, 255, 0, ReflectionUtils.tryGetMethod("updateHUD", getClass())); + //public ColorSetting color = new ColorSetting("Color", 0x55FFFF, ReflectionUtils.tryGetMethod("updateHUD", getClass())); public HUDModule() { super("HUD", "Enables or disables the Moonlight HUD.", Category.RENDER); this.enabled = true; - settings.add(color); + settings.add(r); + settings.add(g); + settings.add(b); + //settings.add(color); } + + public static void updateHUD() + { + HUD.INSTANCE = new HUD(); + } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/modules/Step.java b/src/main/java/me/kawaiizenbo/moonlight/module/modules/Step.java index 8ef4080..c0d725a 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/modules/Step.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/modules/Step.java @@ -6,7 +6,7 @@ import me.kawaiizenbo.moonlight.module.settings.DoubleSetting; public class Step extends Module_ { - DoubleSetting stepHeight = new DoubleSetting("Height", 1, 1, 10, 0); + DoubleSetting stepHeight = new DoubleSetting("Height", 1, 1, 10, 0, null); public Step() { diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/settings/BooleanSetting.java b/src/main/java/me/kawaiizenbo/moonlight/module/settings/BooleanSetting.java index 758f91f..c8cf87d 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/settings/BooleanSetting.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/settings/BooleanSetting.java @@ -1,5 +1,8 @@ package me.kawaiizenbo.moonlight.module.settings; +import java.lang.reflect.Method; + +import me.kawaiizenbo.moonlight.util.ReflectionUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; @@ -7,10 +10,11 @@ public class BooleanSetting extends Setting { public boolean value; - public BooleanSetting(String name, boolean value) + public BooleanSetting(String name, boolean value, Method onValueChanged) { this.name = name; this.value = value; + this.onValueChanged = onValueChanged; } @Override @@ -29,6 +33,7 @@ public class BooleanSetting extends Setting if (hovered((int)mouseX, (int)mouseY) && button == 0) { this.value = !value; + ReflectionUtils.tryCallMethod(onValueChanged, new Object[0]); } } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/settings/ColorSetting.java b/src/main/java/me/kawaiizenbo/moonlight/module/settings/ColorSetting.java index 34aabde..a2c1e94 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/settings/ColorSetting.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/settings/ColorSetting.java @@ -1,5 +1,8 @@ package me.kawaiizenbo.moonlight.module.settings; +import java.lang.reflect.Method; + +import me.kawaiizenbo.moonlight.util.ColorUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; @@ -11,11 +14,12 @@ public class ColorSetting extends Setting public int b; - public ColorSetting(String name, int value) + public ColorSetting(String name, int value, Method onValueChanged) { this.name = name; this.value = value; this.height = 64; + this.onValueChanged = onValueChanged; this.r = (value >> 16) & 0xFF; this.g = (value >> 8) & 0xFF; this.b = value & 0xFF; @@ -26,12 +30,12 @@ public class ColorSetting extends Setting { super.render(drawContext, x, y, mouseX, mouseY); drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF); - int redDisplayStartColor = ((255&0x0ff)<<24)|((0&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff); - int redDisplayEndColor = ((255&0x0ff)<<24)|((255&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff); - int greenDisplayStartColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((0&0x0ff)<<8)|(b&0x0ff); - int greenDisplayEndColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((255&0x0ff)<<8)|(b&0x0ff); - int blueDisplayStartColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(0&0x0ff); - int blueDisplayEndColor = ((255&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(255&0x0ff); + int redDisplayStartColor = ColorUtils.rgbaToInt(0, g, b, 255); + int redDisplayEndColor = ColorUtils.rgbaToInt(255, g, b, 255); + int greenDisplayStartColor = ColorUtils.rgbaToInt(r, 0, b, 255); + int greenDisplayEndColor = ColorUtils.rgbaToInt(r, 255, b, 255); + int blueDisplayStartColor = ColorUtils.rgbaToInt(r, g, 0, 255); + int blueDisplayEndColor = ColorUtils.rgbaToInt(r, g, 255, 255); drawContext.fillGradient(x+80, y+2, x+92, y+62, redDisplayEndColor, redDisplayStartColor, 0); drawContext.fillGradient(x+95, y+2, x+107, y+62, greenDisplayEndColor, greenDisplayStartColor, 0); drawContext.fillGradient(x+110, y+2, x+122, y+62, blueDisplayEndColor, blueDisplayStartColor, 0); diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/settings/DoubleSetting.java b/src/main/java/me/kawaiizenbo/moonlight/module/settings/DoubleSetting.java index 5798855..c7f73b9 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/settings/DoubleSetting.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/settings/DoubleSetting.java @@ -1,6 +1,9 @@ package me.kawaiizenbo.moonlight.module.settings; +import java.lang.reflect.Method; + import me.kawaiizenbo.moonlight.util.MathUtils; +import me.kawaiizenbo.moonlight.util.ReflectionUtils; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; @@ -12,10 +15,11 @@ public class DoubleSetting extends Setting boolean sliding = false; - public DoubleSetting(String name, double value, double min, double max, int roundingPlace) + public DoubleSetting(String name, double value, double min, double max, int roundingPlace, Method onValueChanged) { this.name = name; this.value = value; + this.onValueChanged = onValueChanged; this.min = min; this.max = max; this.roundingPlace = roundingPlace; @@ -62,6 +66,7 @@ public class DoubleSetting extends Setting public void mouseReleased(double mouseX, double mouseY, int button) { sliding = false; + ReflectionUtils.tryCallMethod(onValueChanged, new Object[0]); } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/module/settings/Setting.java b/src/main/java/me/kawaiizenbo/moonlight/module/settings/Setting.java index 019944c..ab80836 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/module/settings/Setting.java +++ b/src/main/java/me/kawaiizenbo/moonlight/module/settings/Setting.java @@ -1,5 +1,7 @@ package me.kawaiizenbo.moonlight.module.settings; +import java.lang.reflect.Method; + import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -7,6 +9,7 @@ import net.minecraft.client.gui.DrawContext; public class Setting { public String name; + public Method onValueChanged; protected TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; public int height = 24; diff --git a/src/main/java/me/kawaiizenbo/moonlight/ui/HUD.java b/src/main/java/me/kawaiizenbo/moonlight/ui/HUD.java index 4020842..108e722 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/ui/HUD.java +++ b/src/main/java/me/kawaiizenbo/moonlight/ui/HUD.java @@ -1,6 +1,8 @@ package me.kawaiizenbo.moonlight.ui; import me.kawaiizenbo.moonlight.Moonlight; +import me.kawaiizenbo.moonlight.module.ModuleManager; +import me.kawaiizenbo.moonlight.module.modules.HUDModule; import me.kawaiizenbo.moonlight.util.ColorUtils; import me.kawaiizenbo.moonlight.util.MathUtils; @@ -14,6 +16,11 @@ public class HUD public static HUD INSTANCE = new HUD(); private MinecraftClient mc = MinecraftClient.getInstance(); TextRenderer textRenderer = mc.textRenderer; + public int hudColor = ColorUtils.rgbaToInt( + (int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).r.value, + (int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).g.value, + (int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).b.value, + 255 ); public void renderHUD(DrawContext drawContext, int scaledWidth, int scaledHeight) { @@ -22,14 +29,14 @@ public class HUD // draw stats drawContext.drawTextWithShadow(textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag, 2, 2, 16777215); - drawContext.drawTextWithShadow(textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 12, 0x55FFFF); - drawContext.drawTextWithShadow(textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 22, 0x55FFFF); - drawContext.drawTextWithShadow(textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, 0x55FFFF); + drawContext.drawTextWithShadow(textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 12, hudColor); + drawContext.drawTextWithShadow(textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 22, hudColor); + drawContext.drawTextWithShadow(textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, hudColor); // draw coordinates drawContext.drawTextWithShadow(textRenderer, "X: " + ColorUtils.gray + MathUtils.round(mc.player.getX(), 1) + ColorUtils.reset + " Y: " + ColorUtils.gray + MathUtils.round(mc.player.getY(), 1) + - ColorUtils.reset + " Z: " + ColorUtils.gray + MathUtils.round(mc.player.getZ(), 1), 2, scaledHeight - 10, 0x55FFFF); + ColorUtils.reset + " Z: " + ColorUtils.gray + MathUtils.round(mc.player.getZ(), 1), 2, scaledHeight - 10, hudColor); } private double moveSpeed() diff --git a/src/main/java/me/kawaiizenbo/moonlight/util/ColorUtils.java b/src/main/java/me/kawaiizenbo/moonlight/util/ColorUtils.java index b398b8c..8b966b0 100644 --- a/src/main/java/me/kawaiizenbo/moonlight/util/ColorUtils.java +++ b/src/main/java/me/kawaiizenbo/moonlight/util/ColorUtils.java @@ -27,4 +27,9 @@ public class ColorUtils public static String strikethrough = "\247m"; public static String obfuscated = "\247k"; public static String reset = "\247r"; + + public static int rgbaToInt(int r, int g, int b, int a) + { + return ((a&0x0ff)<<24)|((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff); + } } diff --git a/src/main/java/me/kawaiizenbo/moonlight/util/ISimpleOption.java b/src/main/java/me/kawaiizenbo/moonlight/util/ISimpleOption.java new file mode 100644 index 0000000..38ff2b7 --- /dev/null +++ b/src/main/java/me/kawaiizenbo/moonlight/util/ISimpleOption.java @@ -0,0 +1,6 @@ +package me.kawaiizenbo.moonlight.util; + +public interface ISimpleOption +{ + public void setValueUnrestricted(T value); +} diff --git a/src/main/java/me/kawaiizenbo/moonlight/util/ReflectionUtils.java b/src/main/java/me/kawaiizenbo/moonlight/util/ReflectionUtils.java new file mode 100644 index 0000000..37f1e86 --- /dev/null +++ b/src/main/java/me/kawaiizenbo/moonlight/util/ReflectionUtils.java @@ -0,0 +1,35 @@ +package me.kawaiizenbo.moonlight.util; + +import java.lang.reflect.Method; + +public class ReflectionUtils +{ + public static Method tryGetMethod(String methodName, Class class1) + { + // safety be damned this is my own code i get to control when it crashes + try + { + return class1.getDeclaredMethod(methodName, new Class[1]); + } + catch (Exception e) + { + e.printStackTrace(); + return (Method)null; + } + } + + public static void tryCallMethod(Method method, Object... parameters) + { + // hope that shits static + try + { + method.invoke(null, parameters); + } + catch (Exception e) + { + // go fuck yourself + e.printStackTrace(); + } + + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 6a9d27e..31a03d5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -7,7 +7,7 @@ "description": "Utility mod with a focus on stability.", "authors": [ "KawaiiZenbo", - "BadGamesInc" + "BadGamesInc (re-used Hypnotic Code)" ], "contact": { "homepage": "https://kawaiizenbo.me/", diff --git a/src/main/resources/moonlight.mixins.json b/src/main/resources/moonlight.mixins.json index 67d7385..bcdd68e 100644 --- a/src/main/resources/moonlight.mixins.json +++ b/src/main/resources/moonlight.mixins.json @@ -12,7 +12,8 @@ "ChatInputSuggestorMixin", "ClientConnectionMixin", "LivingEntityMixin", - "KeyboardMixin" + "KeyboardMixin", + "SimpleOptionMixin" ], "injectors": { "defaultRequire": 1