add config system and window dragging
This commit is contained in:
parent
6e584de0e6
commit
a18cb2a137
22 changed files with 354 additions and 104 deletions
|
@ -1,7 +1,7 @@
|
||||||
# Moonlight Meadows Utility Mod for Minecraft 1.20
|
# Moonlight Meadows Utility Mod for Minecraft 1.20.1
|
||||||
|
|
||||||
Please use this mod at your own risk
|
Please use this mod at your own risk
|
||||||
Requires Fabric API and Minecraft 1.20
|
Requires Fabric API and Minecraft 1.20.1
|
||||||
|
|
||||||
Default ClickGUI Key is Right Alt
|
Default ClickGUI Key is Right Alt
|
||||||
|
|
||||||
|
|
107
src/main/java/me/kawaiizenbo/moonlight/Config.java
Normal file
107
src/main/java/me/kawaiizenbo/moonlight/Config.java
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
package me.kawaiizenbo.moonlight;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
|
import me.kawaiizenbo.moonlight.module.Module_;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
||||||
|
public class Config
|
||||||
|
{
|
||||||
|
MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
|
public File configDir = new File(mc.runDirectory.getPath() + "/moonlight");
|
||||||
|
public File configFile = new File(configDir, "config.json");
|
||||||
|
public Map<String, Object> config = new HashMap<>();
|
||||||
|
protected static Gson gson = new Gson();
|
||||||
|
|
||||||
|
public Config()
|
||||||
|
{
|
||||||
|
configDir.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean doesConfigExist()
|
||||||
|
{
|
||||||
|
return !Files.exists(configFile.toPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadDefaultConfig()
|
||||||
|
{
|
||||||
|
ModuleManager.INSTANCE = new ModuleManager();
|
||||||
|
Map<String, Object> mi = new HashMap<>();
|
||||||
|
for (Module_ m : ModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
Map<String, Object> mo = new HashMap<>();
|
||||||
|
mo.put("enabled", m.enabled);
|
||||||
|
for (Setting s : m.settings)
|
||||||
|
{
|
||||||
|
mo.put(s.name, s.value);
|
||||||
|
}
|
||||||
|
mi.put(m.name, mo);
|
||||||
|
}
|
||||||
|
config.put("modules", mi);
|
||||||
|
int xOffset = 4;
|
||||||
|
int yOffset = 4;
|
||||||
|
Map<String, Object> pi = new HashMap<>();
|
||||||
|
for (Category category : Category.values())
|
||||||
|
{
|
||||||
|
Map<String, Object> po = new HashMap<>();
|
||||||
|
if (xOffset > 400)
|
||||||
|
{
|
||||||
|
xOffset = 4;
|
||||||
|
yOffset = 128;
|
||||||
|
}
|
||||||
|
po.put("x", xOffset);
|
||||||
|
po.put("y", yOffset);
|
||||||
|
po.put("collapsed", false);
|
||||||
|
pi.put(category.name, po);
|
||||||
|
xOffset += 100;
|
||||||
|
}
|
||||||
|
config.put("panes", pi);
|
||||||
|
ClickGUIScreen.INSTANCE = new ClickGUIScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String configText = new String(Files.readAllBytes(configFile.toPath()));
|
||||||
|
config = (Map<String, Object>)gson.fromJson(configText, Map.class);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!doesConfigExist()) configFile.createNewFile();
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String configText = gson.toJson(config);
|
||||||
|
FileWriter writer = new FileWriter(configFile);
|
||||||
|
writer.write(configText);
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,8 +3,16 @@ package me.kawaiizenbo.moonlight;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
|
import me.kawaiizenbo.moonlight.module.Module_;
|
||||||
|
import me.kawaiizenbo.moonlight.module.settings.Setting;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.clickgui.CategoryPane;
|
||||||
|
import me.kawaiizenbo.moonlight.ui.clickgui.ClickGUIScreen;
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
|
||||||
public class Moonlight implements ModInitializer
|
public class Moonlight implements ModInitializer
|
||||||
|
@ -13,6 +21,7 @@ public class Moonlight implements ModInitializer
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger("Moonlight");
|
public static final Logger LOGGER = LoggerFactory.getLogger("Moonlight");
|
||||||
public static final String clientTag = ColorUtils.aqua + "Moonlight Meadows";
|
public static final String clientTag = ColorUtils.aqua + "Moonlight Meadows";
|
||||||
public static final String versionTag = ColorUtils.magenta + "v0.dev";
|
public static final String versionTag = ColorUtils.magenta + "v0.dev";
|
||||||
|
public static Config CONFIG = new Config();
|
||||||
public static int uiColorA = 0xFF55FFFF;
|
public static int uiColorA = 0xFF55FFFF;
|
||||||
public static int uiColor = 0x55FFFF;
|
public static int uiColor = 0x55FFFF;
|
||||||
|
|
||||||
|
@ -20,5 +29,53 @@ public class Moonlight implements ModInitializer
|
||||||
public void onInitialize()
|
public void onInitialize()
|
||||||
{
|
{
|
||||||
LOGGER.info("Moonlight loading...");
|
LOGGER.info("Moonlight loading...");
|
||||||
|
loadConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadConfig()
|
||||||
|
{
|
||||||
|
LOGGER.info("Loading config...");
|
||||||
|
if (CONFIG.doesConfigExist())
|
||||||
|
{
|
||||||
|
CONFIG.loadDefaultConfig();
|
||||||
|
CONFIG.save();
|
||||||
|
}
|
||||||
|
CONFIG.load();
|
||||||
|
for (Module_ m : ModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
m.enabled = (boolean)((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get("enabled");
|
||||||
|
for (Setting s : m.settings)
|
||||||
|
{
|
||||||
|
s.value = ((Map<String, Object>)((Map<String, Object>)CONFIG.config.get("modules")).get(m.name)).get(s.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveConfig()
|
||||||
|
{
|
||||||
|
LOGGER.info("Saving config...");
|
||||||
|
Map<String, Object> mi = new HashMap<>();
|
||||||
|
for (Module_ m : ModuleManager.INSTANCE.modules)
|
||||||
|
{
|
||||||
|
Map<String, Object> mo = new HashMap<>();
|
||||||
|
mo.put("enabled", m.enabled);
|
||||||
|
for (Setting s : m.settings)
|
||||||
|
{
|
||||||
|
mo.put(s.name, s.value);
|
||||||
|
}
|
||||||
|
mi.put(m.name, mo);
|
||||||
|
}
|
||||||
|
CONFIG.config.put("modules", mi);
|
||||||
|
Map<String, Object> pi = new HashMap<>();
|
||||||
|
for (CategoryPane c : ClickGUIScreen.INSTANCE.categoryPanes)
|
||||||
|
{
|
||||||
|
Map<String, Object> po = new HashMap<>();
|
||||||
|
po.put("x", c.x);
|
||||||
|
po.put("y", c.y);
|
||||||
|
po.put("collapsed", c.collapsed);
|
||||||
|
pi.put(c.category.name, po);
|
||||||
|
}
|
||||||
|
CONFIG.config.put("panes", pi);
|
||||||
|
CONFIG.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package me.kawaiizenbo.moonlight.command.commands;
|
||||||
|
|
||||||
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import me.kawaiizenbo.moonlight.command.Command;
|
||||||
|
import net.minecraft.command.CommandSource;
|
||||||
|
|
||||||
|
public class Reset extends Command
|
||||||
|
{
|
||||||
|
public Reset()
|
||||||
|
{
|
||||||
|
super("reset", "Resets all config options.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void build(LiteralArgumentBuilder<CommandSource> builder)
|
||||||
|
{
|
||||||
|
builder.executes(context ->
|
||||||
|
{
|
||||||
|
Moonlight.CONFIG.loadDefaultConfig();
|
||||||
|
return SINGLE_SUCCESS;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module_;
|
import me.kawaiizenbo.moonlight.module.Module_;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.network.ClientPlayerEntity;
|
import net.minecraft.client.network.ClientPlayerEntity;
|
||||||
import net.minecraft.entity.MovementType;
|
import net.minecraft.entity.MovementType;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
@ -14,12 +15,30 @@ import net.minecraft.util.math.Vec3d;
|
||||||
@Mixin(ClientPlayerEntity.class)
|
@Mixin(ClientPlayerEntity.class)
|
||||||
public class ClientPlayerEntityMixin
|
public class ClientPlayerEntityMixin
|
||||||
{
|
{
|
||||||
@Inject(method = "move", at = @At(value = "HEAD"), cancellable = true)
|
@Inject(method = "move", at = @At(value = "TAIL"), cancellable = true)
|
||||||
public void onMotion(MovementType type, Vec3d movement, CallbackInfo ci)
|
public void onMove(MovementType type, Vec3d movement, CallbackInfo ci)
|
||||||
{
|
{
|
||||||
for (Module_ m : ModuleManager.INSTANCE.getEnabledModules())
|
for (Module_ m : ModuleManager.INSTANCE.getEnabledModules())
|
||||||
{
|
{
|
||||||
m.onMotion(type, movement);
|
m.onMotion(type, movement);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true)
|
||||||
|
public void onTick(CallbackInfo ci)
|
||||||
|
{
|
||||||
|
for (Module_ m : ModuleManager.INSTANCE.getEnabledModules())
|
||||||
|
{
|
||||||
|
if (MinecraftClient.getInstance().player != null) m.tick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "init", at = @At(value = "TAIL"), cancellable = true)
|
||||||
|
public void onInit(CallbackInfo ci)
|
||||||
|
{
|
||||||
|
for (Module_ m : ModuleManager.INSTANCE.getEnabledModules())
|
||||||
|
{
|
||||||
|
m.onEnable();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
package me.kawaiizenbo.moonlight.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.module.Module_;
|
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
@Mixin(LivingEntity.class)
|
|
||||||
public class LivingEntityMixin
|
|
||||||
{
|
|
||||||
@Inject(at = @At("HEAD"), method = "tick()V")
|
|
||||||
private void init(CallbackInfo info)
|
|
||||||
{
|
|
||||||
for (Module_ mod : ModuleManager.INSTANCE.getEnabledModules())
|
|
||||||
{
|
|
||||||
if (MinecraftClient.getInstance().player != null) mod.tick();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package me.kawaiizenbo.moonlight.mixin;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
||||||
|
@Mixin(MinecraftClient.class)
|
||||||
|
public class MinecraftClientMixin
|
||||||
|
{
|
||||||
|
@Inject(at = @At("TAIL"), method = "scheduleStop")
|
||||||
|
public void onShutdown(CallbackInfo ci) {
|
||||||
|
Moonlight.INSTANCE.saveConfig();
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,8 +6,8 @@ public enum Category
|
||||||
MOVEMENT("Movement", 0xFFFF55FF),
|
MOVEMENT("Movement", 0xFFFF55FF),
|
||||||
RENDER("Render", 0xFF5555FF),
|
RENDER("Render", 0xFF5555FF),
|
||||||
WORLD("World", 0xFF55FF55),
|
WORLD("World", 0xFF55FF55),
|
||||||
PLAYER("Player", 0xFFFFFFFF),
|
PLAYER("Player", 0xFF00AAAA),
|
||||||
CHAT("Chat", 0xFFFFFF55);
|
CHAT("Chat", 0xFFFFAA00);
|
||||||
|
|
||||||
public String name;
|
public String name;
|
||||||
public int color;
|
public int color;
|
||||||
|
|
|
@ -17,7 +17,6 @@ public abstract class Module_
|
||||||
public Category category;
|
public Category category;
|
||||||
public boolean enabled;
|
public boolean enabled;
|
||||||
public ArrayList<Setting> settings;
|
public ArrayList<Setting> settings;
|
||||||
public int keyBind;
|
|
||||||
|
|
||||||
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
|
public BooleanSetting showInModulesList = new BooleanSetting("Show in Modules List", true);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
@ -14,9 +15,9 @@ public class BooleanSetting extends Setting
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
|
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+8, 0xFFFFFF);
|
||||||
drawContext.fill(x+175, y+7, x+185, y+17, 0xFFFFFFFF);
|
drawContext.fill(x+175, y+7, x+185, y+17, 0xFFFFFFFF);
|
||||||
drawContext.fill(x+176, y+8, x+184, y+16, 0xFF222222);
|
drawContext.fill(x+176, y+8, x+184, y+16, 0xFF222222);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
@ -23,9 +24,9 @@ public class ColorSetting extends Setting
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF);
|
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF);
|
||||||
int redDisplayStartColor = ColorUtils.rgbaToInt(0, g, b, 255);
|
int redDisplayStartColor = ColorUtils.rgbaToInt(0, g, b, 255);
|
||||||
int redDisplayEndColor = ColorUtils.rgbaToInt(255, g, b, 255);
|
int redDisplayEndColor = ColorUtils.rgbaToInt(255, g, b, 255);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
package me.kawaiizenbo.moonlight.module.settings;
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.util.MathUtils;
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
@ -22,9 +23,9 @@ public class DoubleSetting extends Setting
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
super.render(drawContext, x, y, mouseX, mouseY);
|
super.render(drawContext, x, y, mouseX, mouseY, textRenderer);
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF);
|
drawContext.drawTextWithShadow(textRenderer, Text.literal(name), x+2, y+2, 0xFFFFFF);
|
||||||
double diff = Math.min(100, Math.max(0, (mouseX - x)/1.9));
|
double diff = Math.min(100, Math.max(0, (mouseX - x)/1.9));
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,16 @@
|
||||||
package me.kawaiizenbo.moonlight.module.settings;
|
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.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
public class Setting
|
public class Setting
|
||||||
{
|
{
|
||||||
public String name;
|
public String name;
|
||||||
public Method onValueChanged;
|
|
||||||
protected TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
|
||||||
public int height = 24;
|
public int height = 24;
|
||||||
|
public Object value;
|
||||||
|
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
|
|
|
@ -7,7 +7,6 @@ import me.kawaiizenbo.moonlight.util.ColorUtils;
|
||||||
import me.kawaiizenbo.moonlight.util.MathUtils;
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.font.TextRenderer;
|
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
@ -15,7 +14,6 @@ public class HUDOverlay
|
||||||
{
|
{
|
||||||
public static HUDOverlay INSTANCE = new HUDOverlay();
|
public static HUDOverlay INSTANCE = new HUDOverlay();
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
private MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
TextRenderer textRenderer = mc.textRenderer;
|
|
||||||
public boolean showClientTag = ((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).clientTag.value;
|
public boolean showClientTag = ((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).clientTag.value;
|
||||||
public int hudColor = ColorUtils.rgbaToInt(
|
public int hudColor = ColorUtils.rgbaToInt(
|
||||||
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).r.value,
|
(int)((HUDModule)ModuleManager.INSTANCE.getModuleByName("HUD")).r.value,
|
||||||
|
@ -29,12 +27,12 @@ public class HUDOverlay
|
||||||
if (mc.options.debugEnabled) return;
|
if (mc.options.debugEnabled) return;
|
||||||
|
|
||||||
// draw stats
|
// draw stats
|
||||||
drawContext.drawTextWithShadow(textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, Moonlight.uiColorA);
|
drawContext.drawTextWithShadow(mc.textRenderer, "FPS: " + ColorUtils.gray + mc.fpsDebugString.split(" ")[0], 2, 2, Moonlight.uiColorA);
|
||||||
drawContext.drawTextWithShadow(textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, Moonlight.uiColorA);
|
drawContext.drawTextWithShadow(mc.textRenderer, "Ping: " + ColorUtils.gray + (mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()) == null ? 0 : mc.getNetworkHandler().getPlayerListEntry(mc.player.getUuid()).getLatency()), 2, 12, Moonlight.uiColorA);
|
||||||
drawContext.drawTextWithShadow(textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, Moonlight.uiColorA);
|
drawContext.drawTextWithShadow(mc.textRenderer, "Meters/s: " + ColorUtils.gray + MathUtils.round(moveSpeed(), 2), 2, scaledHeight - 20, Moonlight.uiColorA);
|
||||||
|
|
||||||
// draw coordinates
|
// draw coordinates
|
||||||
drawContext.drawTextWithShadow(textRenderer,
|
drawContext.drawTextWithShadow(mc.textRenderer,
|
||||||
"X: " + ColorUtils.gray + MathUtils.round(mc.player.getX(), 1) + ColorUtils.reset +
|
"X: " + ColorUtils.gray + MathUtils.round(mc.player.getX(), 1) + ColorUtils.reset +
|
||||||
" Y: " + ColorUtils.gray + MathUtils.round(mc.player.getY(), 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, Moonlight.uiColorA
|
" Z: " + ColorUtils.gray + MathUtils.round(mc.player.getZ(), 1), 2, scaledHeight - 10, Moonlight.uiColorA
|
||||||
|
@ -43,8 +41,8 @@ public class HUDOverlay
|
||||||
// draw client tag (if enabled)
|
// draw client tag (if enabled)
|
||||||
if (showClientTag)
|
if (showClientTag)
|
||||||
{
|
{
|
||||||
drawContext.drawTextWithShadow(textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
|
drawContext.drawTextWithShadow(mc.textRenderer, Moonlight.clientTag + " " + Moonlight.versionTag,
|
||||||
scaledWidth - textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
|
scaledWidth - mc.textRenderer.getWidth(Moonlight.clientTag + " " + Moonlight.versionTag) - 2, scaledHeight - 10, 16777215);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
package me.kawaiizenbo.moonlight.ui;
|
package me.kawaiizenbo.moonlight.ui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
import me.kawaiizenbo.moonlight.Moonlight;
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module_;
|
import me.kawaiizenbo.moonlight.module.Module_;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
|
||||||
import net.minecraft.client.font.TextRenderer;
|
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
public class ModulesListOverlay
|
public class ModulesListOverlay
|
||||||
{
|
{
|
||||||
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
|
public static ModulesListOverlay INSTANCE = new ModulesListOverlay();
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
private MinecraftClient mc = MinecraftClient.getInstance();
|
||||||
TextRenderer textRenderer = mc.textRenderer;
|
|
||||||
private ArrayList<Module_> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
|
private ArrayList<Module_> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
|
||||||
|
|
||||||
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
|
public void render(DrawContext drawContext, int scaledWidth, int scaledHeight)
|
||||||
|
@ -27,10 +24,10 @@ public class ModulesListOverlay
|
||||||
for (Module_ m : enabledModules)
|
for (Module_ m : enabledModules)
|
||||||
{
|
{
|
||||||
if (!m.showInModulesList.value) continue;
|
if (!m.showInModulesList.value) continue;
|
||||||
int nameWidth = textRenderer.getWidth(m.name);
|
int nameWidth = mc.textRenderer.getWidth(m.name);
|
||||||
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x55222222);
|
drawContext.fill(scaledWidth - nameWidth - 8, yOffset, scaledWidth, yOffset+12, 0x55222222);
|
||||||
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, Moonlight.uiColorA);
|
drawContext.fill(scaledWidth - 2, yOffset, scaledWidth, yOffset+12, Moonlight.uiColorA);
|
||||||
drawContext.drawText(textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
|
drawContext.drawText(mc.textRenderer, m.name, scaledWidth - nameWidth - 4, yOffset + 2, 0xFFFFFFFF, false);
|
||||||
yOffset += 12;
|
yOffset += 12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class TextButton
|
||||||
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, TextRenderer textRenderer, int mouseX, int mouseY)
|
||||||
{
|
{
|
||||||
width = textRenderer.getWidth(text);
|
width = textRenderer.getWidth(text);
|
||||||
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0xFF444444 : 0xFF222222);
|
drawContext.fill(x-1, y-1, x + width + 1, y + 10, hovered(mouseX, mouseY) ? 0x55FFFFFF : 0);
|
||||||
drawContext.drawText(textRenderer, Text.literal(text), x, y, color, true);
|
drawContext.drawText(textRenderer, Text.literal(text), x, y, color, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,56 +5,57 @@ import java.util.ArrayList;
|
||||||
import me.kawaiizenbo.moonlight.module.Category;
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
import me.kawaiizenbo.moonlight.module.ModuleManager;
|
||||||
import me.kawaiizenbo.moonlight.module.Module_;
|
import me.kawaiizenbo.moonlight.module.Module_;
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.font.TextRenderer;
|
import net.minecraft.client.font.TextRenderer;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
|
||||||
public class CategoryPane
|
public class CategoryPane
|
||||||
{
|
{
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
|
||||||
private TextRenderer textRenderer = mc.textRenderer;
|
|
||||||
|
|
||||||
public Category category;
|
public Category category;
|
||||||
public int x;
|
public int x, y, height, width = 96;
|
||||||
public int y;
|
int startX, startY;
|
||||||
private int height;
|
boolean dragging = false;
|
||||||
private int width = 96;
|
public boolean collapsed = false;
|
||||||
private boolean collapsed = false;
|
ArrayList<ModuleButton> moduleButtons;
|
||||||
private ArrayList<ModuleButton> moduleButtons;
|
|
||||||
|
|
||||||
public CategoryPane(Category category, int initialX, int initialY)
|
public CategoryPane(Category category, int initialX, int initialY, boolean collapsed)
|
||||||
{
|
{
|
||||||
this.category = category;
|
this.category = category;
|
||||||
this.x = initialX;
|
this.x = initialX;
|
||||||
this.y = initialY;
|
this.y = initialY;
|
||||||
int buttonYOffset = y+16;
|
this.collapsed = collapsed;
|
||||||
moduleButtons = new ArrayList<ModuleButton>();
|
moduleButtons = new ArrayList<ModuleButton>();
|
||||||
for (Module_ m : ModuleManager.INSTANCE.getModulesByCategory(category))
|
for (Module_ m : ModuleManager.INSTANCE.getModulesByCategory(category))
|
||||||
{
|
{
|
||||||
moduleButtons.add(new ModuleButton(m, x+2, buttonYOffset));
|
moduleButtons.add(new ModuleButton(m));
|
||||||
buttonYOffset += 12;
|
|
||||||
}
|
}
|
||||||
if (moduleButtons.size() == 0) collapsed = true;
|
if (moduleButtons.size() == 0) collapsed = true;
|
||||||
height = (moduleButtons.size()*12) + 18;
|
height = (moduleButtons.size()*12) + 18;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
|
if (dragging)
|
||||||
|
{
|
||||||
|
x = mouseX - startX;
|
||||||
|
y = mouseY - startY;
|
||||||
|
}
|
||||||
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, category.color);
|
drawContext.fill(x, y, x+width, collapsed ? y+16 : y+height, category.color);
|
||||||
drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
|
drawContext.fill(x+2, y+2, x+(width-2), y+14, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
|
||||||
drawContext.drawText(textRenderer, category.name, x+4, y+4, 0xFFFFFFFF, false);
|
drawContext.drawText(textRenderer, category.name, x+4, y+4, 0xFFFFFFFF, false);
|
||||||
if (!collapsed)
|
if (!collapsed)
|
||||||
{
|
{
|
||||||
|
int buttonYOffset = y+16;
|
||||||
for (ModuleButton m : moduleButtons)
|
for (ModuleButton m : moduleButtons)
|
||||||
{
|
{
|
||||||
m.render(drawContext, mouseX, mouseY);
|
m.render(drawContext, mouseX, mouseY, x+2, buttonYOffset, textRenderer);
|
||||||
|
buttonYOffset += 12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hovered(int mouseX, int mouseY)
|
public boolean hovered(int mouseX, int mouseY)
|
||||||
{
|
{
|
||||||
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height;
|
return mouseX >= x+2 && mouseX <= x+(width-2) && mouseY >= y+2 && mouseY <= y+14;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mouseClicked(int mouseX, int mouseY, int button)
|
public void mouseClicked(int mouseX, int mouseY, int button)
|
||||||
|
@ -63,6 +64,17 @@ public class CategoryPane
|
||||||
{
|
{
|
||||||
if (moduleButton.mouseClicked(mouseX, mouseY, button)) return;
|
if (moduleButton.mouseClicked(mouseX, mouseY, button)) return;
|
||||||
}
|
}
|
||||||
if (hovered(mouseX, mouseY)) collapsed = !collapsed;
|
if (hovered(mouseX, mouseY) && button == 1) collapsed = !collapsed;
|
||||||
|
else if (hovered(mouseX, mouseY) && button == 0)
|
||||||
|
{
|
||||||
|
startX = (int)mouseX-x;
|
||||||
|
startY = (int)mouseY-y;
|
||||||
|
dragging = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseReleased(int mouseX, int mouseY, int button)
|
||||||
|
{
|
||||||
|
dragging = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package me.kawaiizenbo.moonlight.ui.clickgui;
|
package me.kawaiizenbo.moonlight.ui.clickgui;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import me.kawaiizenbo.moonlight.Moonlight;
|
||||||
import me.kawaiizenbo.moonlight.module.Category;
|
import me.kawaiizenbo.moonlight.module.Category;
|
||||||
|
import me.kawaiizenbo.moonlight.util.MathUtils;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
@ -10,23 +13,19 @@ import net.minecraft.text.Text;
|
||||||
public class ClickGUIScreen extends Screen
|
public class ClickGUIScreen extends Screen
|
||||||
{
|
{
|
||||||
public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
|
public static ClickGUIScreen INSTANCE = new ClickGUIScreen();
|
||||||
public static ArrayList<CategoryPane> categoryPanes;
|
public ArrayList<CategoryPane> categoryPanes;
|
||||||
|
|
||||||
public ClickGUIScreen()
|
public ClickGUIScreen()
|
||||||
{
|
{
|
||||||
super(Text.literal("ClickGUI"));
|
super(Text.literal("ClickGUI"));
|
||||||
int xOffset = 4;
|
|
||||||
int yOffset = 4;
|
|
||||||
categoryPanes = new ArrayList<CategoryPane>();
|
categoryPanes = new ArrayList<CategoryPane>();
|
||||||
|
Map<String, Object> panePos = ((Map<String, Object>)Moonlight.INSTANCE.CONFIG.config.get("panes"));
|
||||||
for (Category category : Category.values())
|
for (Category category : Category.values())
|
||||||
{
|
{
|
||||||
if (xOffset > 400)
|
int xOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("x"));
|
||||||
{
|
int yOffset = MathUtils.d2iSafe(((Map<String, Object>)panePos.get(category.name)).get("y"));
|
||||||
xOffset = 4;
|
boolean collapsed = (boolean)((Map<String, Object>)panePos.get(category.name)).get("collapsed");
|
||||||
yOffset = 128;
|
categoryPanes.add(new CategoryPane(category, xOffset, yOffset, collapsed));
|
||||||
}
|
|
||||||
categoryPanes.add(new CategoryPane(category, xOffset, yOffset));
|
|
||||||
xOffset += 100;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ public class ClickGUIScreen extends Screen
|
||||||
this.renderBackground(drawContext);
|
this.renderBackground(drawContext);
|
||||||
for (CategoryPane category : categoryPanes)
|
for (CategoryPane category : categoryPanes)
|
||||||
{
|
{
|
||||||
category.render(drawContext, mouseX, mouseY, delta);
|
category.render(drawContext, mouseX, mouseY, delta, textRenderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +49,16 @@ public class ClickGUIScreen extends Screen
|
||||||
return super.mouseClicked(mouseX, mouseY, button);
|
return super.mouseClicked(mouseX, mouseY, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean mouseReleased(double mouseX, double mouseY, int button)
|
||||||
|
{
|
||||||
|
for (CategoryPane category : categoryPanes)
|
||||||
|
{
|
||||||
|
category.mouseReleased((int) mouseX, (int) mouseY, button);
|
||||||
|
}
|
||||||
|
return super.mouseReleased(mouseX, mouseY, button);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldPause()
|
public boolean shouldPause()
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,20 +10,18 @@ public class ModuleButton
|
||||||
{
|
{
|
||||||
public Module_ module;
|
public Module_ module;
|
||||||
public int x, y, width, height = 0;
|
public int x, y, width, height = 0;
|
||||||
private MinecraftClient mc = MinecraftClient.getInstance();
|
|
||||||
private TextRenderer textRenderer = mc.textRenderer;
|
|
||||||
|
|
||||||
public ModuleButton(Module_ module, int initialX, int initialY)
|
public ModuleButton(Module_ module)
|
||||||
{
|
{
|
||||||
this.module = module;
|
this.module = module;
|
||||||
this.x = initialX;
|
|
||||||
this.y = initialY;
|
|
||||||
this.width = 92;
|
this.width = 92;
|
||||||
this.height = 12;
|
this.height = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(DrawContext drawContext, int mouseX, int mouseY)
|
public void render(DrawContext drawContext, int mouseX, int mouseY, int x, int y, TextRenderer textRenderer)
|
||||||
{
|
{
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
|
drawContext.fill(x, y, x + width, y + height, hovered(mouseX, mouseY) ? 0xFF333333 : 0xFF222222);
|
||||||
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.uiColor : 0xFFFFFF, false);
|
drawContext.drawText(textRenderer, module.name, x+2, y+2, module.enabled ? Moonlight.uiColor : 0xFFFFFF, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,10 @@ public class SettingsScreen extends Screen
|
||||||
private Module_ module;
|
private Module_ module;
|
||||||
private TextButton backButton;
|
private TextButton backButton;
|
||||||
|
|
||||||
protected SettingsScreen(Module_ module)
|
boolean dragging = false;
|
||||||
|
int startX, startY, x = 4, y = 4, windowWidth = 224, windowHeight = 192;
|
||||||
|
|
||||||
|
public SettingsScreen(Module_ module)
|
||||||
{
|
{
|
||||||
super(Text.literal("Settings"));
|
super(Text.literal("Settings"));
|
||||||
this.module = module;
|
this.module = module;
|
||||||
|
@ -23,19 +26,33 @@ public class SettingsScreen extends Screen
|
||||||
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
|
||||||
{
|
{
|
||||||
this.renderBackground(drawContext);
|
this.renderBackground(drawContext);
|
||||||
drawContext.fill((width/2)-112, (height/2)-96, (width/2)+112, (height/2)+96, 0xFF222222);
|
|
||||||
drawContext.drawCenteredTextWithShadow(textRenderer, module.name, width/2, (height/2)-88, 0xFFFFFF);
|
// move window if dragging
|
||||||
drawContext.drawTextWithShadow(textRenderer, Text.literal(module.description), (width/2)-104, (height/2)-72, 0xFFFFFF);
|
if (dragging)
|
||||||
backButton = new TextButton(ColorUtils.underline + "< Back", (width/2)-104, (height/2)-88, 0xFFFFFF);
|
{
|
||||||
|
x = mouseX - startX;
|
||||||
|
y = mouseY - startY;
|
||||||
|
}
|
||||||
|
drawContext.fill(x, y, x+windowWidth, y+windowHeight, 0xFF222222);
|
||||||
|
drawContext.fill(x, y, x+windowWidth, y+16, module.category.color);
|
||||||
|
drawContext.fill(x+2, y+2, x+(windowWidth-2), y+14, 0xFF222222);
|
||||||
|
drawContext.drawCenteredTextWithShadow(textRenderer, "Module Settings: "+module.name, x+(windowWidth/2), y+4, 0xFFFFFF);
|
||||||
|
drawContext.drawText(textRenderer, module.description, x+8, y+24, 0xFFFFFF, true);
|
||||||
|
backButton = new TextButton(ColorUtils.underline + "< Back", x+4, y+4, 0xFFFFFF);
|
||||||
backButton.render(drawContext, textRenderer, mouseX, mouseY);
|
backButton.render(drawContext, textRenderer, mouseX, mouseY);
|
||||||
int yOffset = (height/2)-56;
|
int yOffset = y+40;
|
||||||
for (Setting setting : module.settings)
|
for (Setting setting : module.settings)
|
||||||
{
|
{
|
||||||
setting.render(drawContext, (width/2)-96, yOffset, mouseX, mouseY);
|
setting.render(drawContext, x+16, yOffset, mouseX, mouseY, textRenderer);
|
||||||
yOffset += setting.height + 1;
|
yOffset += setting.height + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean barHovered(int mouseX, int mouseY)
|
||||||
|
{
|
||||||
|
return mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + 16;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldPause()
|
public boolean shouldPause()
|
||||||
{
|
{
|
||||||
|
@ -45,6 +62,12 @@ public class SettingsScreen extends Screen
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseClicked(double mouseX, double mouseY, int button)
|
public boolean mouseClicked(double mouseX, double mouseY, int button)
|
||||||
{
|
{
|
||||||
|
if (barHovered((int)mouseX, (int)mouseY))
|
||||||
|
{
|
||||||
|
startX = (int)mouseX-x;
|
||||||
|
startY = (int)mouseY-y;
|
||||||
|
dragging = true;
|
||||||
|
}
|
||||||
backButton.mouseClicked((int)mouseX, (int)mouseY);
|
backButton.mouseClicked((int)mouseX, (int)mouseY);
|
||||||
for (Setting setting : module.settings)
|
for (Setting setting : module.settings)
|
||||||
{
|
{
|
||||||
|
@ -56,6 +79,7 @@ public class SettingsScreen extends Screen
|
||||||
@Override
|
@Override
|
||||||
public boolean mouseReleased(double mouseX, double mouseY, int button)
|
public boolean mouseReleased(double mouseX, double mouseY, int button)
|
||||||
{
|
{
|
||||||
|
dragging = false;
|
||||||
for (Setting setting : module.settings)
|
for (Setting setting : module.settings)
|
||||||
{
|
{
|
||||||
setting.mouseReleased(mouseX, mouseY, button);
|
setting.mouseReleased(mouseX, mouseY, button);
|
||||||
|
|
|
@ -17,6 +17,19 @@ public class MathUtils
|
||||||
return bd.doubleValue();
|
return bd.doubleValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int d2iSafe(Object value)
|
||||||
|
{
|
||||||
|
int out = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
out = (int)Math.floor((double)value);
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
out = (int)value;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
public static double length2D(Vec3d vec3d)
|
public static double length2D(Vec3d vec3d)
|
||||||
{
|
{
|
||||||
return MathHelper.sqrt((float)(vec3d.x * vec3d.x + vec3d.z * vec3d.z));
|
return MathHelper.sqrt((float)(vec3d.x * vec3d.x + vec3d.z * vec3d.z));
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
"InGameHudMixin",
|
"InGameHudMixin",
|
||||||
"ChatInputSuggestorMixin",
|
"ChatInputSuggestorMixin",
|
||||||
"ClientConnectionMixin",
|
"ClientConnectionMixin",
|
||||||
"LivingEntityMixin",
|
|
||||||
"KeyboardMixin",
|
"KeyboardMixin",
|
||||||
"SimpleOptionMixin"
|
"SimpleOptionMixin",
|
||||||
|
"MinecraftClientMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue