simple mods

This commit is contained in:
2025-03-18 16:11:54 +01:00
parent 623c8b67b7
commit 1e803528b5
12 changed files with 348 additions and 20 deletions
@@ -6,6 +6,7 @@ import net.minecraft.util.math.ColorHelper;
import org.saturnclient.saturnclient.cloaks.Cloaks;
import org.saturnclient.saturnclient.event.KeyInputHandler;
import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnclient.auth.SaturnSocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,11 +19,13 @@ public class SaturnClient implements ModInitializer {
public static final String MOD_ID = "saturnclient";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static int COLOR = ColorHelper.getArgb(255, 251, 60, 79);
public static int WHITE = ColorHelper.getArgb(255, 255, 255, 255);
public static TextRenderer textRenderer = null;
@Override
public void onInitialize() {
LOGGER.info("Initializing " + MOD_ID);
ModManager.init();
KeyInputHandler.register();
if (SaturnSocket.authenticate()) {
@@ -0,0 +1,87 @@
package org.saturnclient.saturnclient.menus;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import org.saturnclient.saturnmods.HudMod;
import org.saturnclient.saturnmods.ModDimensions;
import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnmods.SaturnMod;
import java.util.ArrayList;
import java.util.List;
public class HudEditor extends Screen {
private List<HudMod> hudMods = new ArrayList<>();
private HudMod draggingMod = null;
private int offsetX, offsetY;
public HudEditor() {
super(Text.literal("HUD Editor"));
for (SaturnMod m : ModManager.MODS) {
if (m.isEnabled() && m instanceof HudMod) {
HudMod mod = (HudMod) m;
hudMods.add(mod);
}
}
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
if (button == 0) {
for (int m = hudMods.size() - 1; m >= 0; m--) {
HudMod mod = hudMods.get(m);
ModDimensions dim = mod.getDimensions();
if (isInside(mouseX, mouseY, dim)) {
draggingMod = mod;
offsetX = (int) (mouseX - dim.x);
offsetY = (int) (mouseY - dim.y);
return true;
}
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public boolean mouseReleased(double mouseX, double mouseY, int button) {
if (button == 0) {
draggingMod = null;
}
return super.mouseReleased(mouseX, mouseY, button);
}
@Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
if (draggingMod != null) {
ModDimensions dim = draggingMod.getDimensions();
dim.x = (int) mouseX - offsetX;
dim.y = (int) mouseY - offsetY;
}
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
}
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
for (HudMod mod : hudMods) {
ModDimensions dim = mod.getDimensions();
MatrixStack matrices = context.getMatrices();
matrices.push();
matrices.translate(dim.x, dim.y, 0);
matrices.scale(dim.scale, dim.scale, 1.0f);
mod.renderDummy(context);
matrices.pop();
}
}
private boolean isInside(double mouseX, double mouseY, ModDimensions dim) {
return mouseX >= dim.x && mouseX <= dim.x + (dim.width * dim.scale) && mouseY >= dim.y
&& mouseY <= dim.y + (dim.height * dim.scale);
}
}
@@ -34,7 +34,7 @@ public class MainMenu extends SaturnUi {
draw(
new SaturnImageButton(Textures.EMOTE, 14, 14,
() -> {
client.setScreen(new SettingsMenu());
client.setScreen(new HudEditor());
})
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
.setY((height - buttonHeight) / 2)
@@ -1,16 +1,15 @@
package org.saturnclient.saturnclient.menus;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnmods.ModManager;
import org.saturnclient.saturnmods.SaturnMod;
import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.Textures;
import org.saturnclient.ui.animations.FadeIn;
import org.saturnclient.ui.animations.Slide;
import org.saturnclient.ui.components.SaturnModComp;
import org.saturnclient.ui.widgets.SaturnClickableImage;
import org.saturnclient.ui.widgets.SaturnScroll;
import org.saturnclient.ui.widgets.SaturnSprite;
import org.saturnclient.ui.widgets.SaturnText;
import net.minecraft.text.Text;
public class SettingsMenu extends SaturnUi {
@@ -81,18 +80,12 @@ public class SettingsMenu extends SaturnUi {
SaturnScroll modsScroll = new SaturnScroll();
for (SaturnMod mod : ModManager.MODS) {
modsScroll.draw(new SaturnClickableImage(Textures.MOD, (m) -> {
})
.setSelected(mod.isEnabled())
modsScroll.draw(new SaturnModComp(mod)
.setX(modX)
.setY(modY)
.setWidth(86)
.setHeight(20));
modsScroll.draw(new SaturnText(mod.getName()).setX(modX + 27)
.setY(modY + (21 - SaturnClient.textRenderer.fontHeight) / 2));
col++;
if (col < 3) {
@@ -0,0 +1,13 @@
package org.saturnclient.saturnmods;
import net.minecraft.client.gui.DrawContext;
public interface HudMod {
public void setDimensions(ModDimensions dimensions);
public ModDimensions getDimensions();
public void renderDummy(DrawContext context);
public void render(DrawContext context);
}
@@ -0,0 +1,24 @@
package org.saturnclient.saturnmods;
public class ModDimensions {
public int x = 0;
public int y = 0;
public float scale = 1.0f;
public int width = 0;
public int height = 0;
public ModDimensions() {
}
public ModDimensions(int x, int y) {
this.x = x;
this.y = y;
}
public ModDimensions(int x, int y, float scale) {
this.x = x;
this.y = y;
this.scale = scale;
}
}
@@ -1,9 +1,43 @@
package org.saturnclient.saturnmods;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnmods.mods.ArmorDisplay;
import org.saturnclient.saturnmods.mods.Coordinates;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.util.math.MatrixStack;
public class ModManager {
public static SaturnMod[] MODS = {
new Coordinates()
new Coordinates(),
new ArmorDisplay()
};
public static void init() {
HudRenderCallback.EVENT.register((context, tickDelta) -> {
TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
if (textRenderer != null) {
SaturnClient.textRenderer = textRenderer;
for (SaturnMod m : MODS) {
if (m instanceof HudMod && m.isEnabled()) {
ModDimensions dim = ((HudMod) m).getDimensions();
MatrixStack matrices = context.getMatrices();
matrices.push();
matrices.translate(dim.x, dim.y, 0);
matrices.scale(dim.scale, dim.scale, 1.0f);
((HudMod) m).render(context);
matrices.pop();
}
}
}
});
}
}
@@ -1,11 +1,9 @@
package org.saturnclient.saturnmods;
public interface SaturnMod {
public static boolean enabled = false;
public boolean isEnabled();
default public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean e);
public String getName();
}
@@ -0,0 +1,93 @@
package org.saturnclient.saturnmods.mods;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnmods.HudMod;
import org.saturnclient.saturnmods.ModDimensions;
import org.saturnclient.saturnmods.SaturnMod;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
public class ArmorDisplay implements SaturnMod, HudMod {
private static ModDimensions dimensions = new ModDimensions(120, 40);
public static boolean enabled = false;
private boolean renderItem(DrawContext context, ItemStack item, int y) {
if (item.isEmpty()) {
return false;
}
context.drawItem(item, 0, y);
context.drawText(SaturnClient.textRenderer, "" + (item.getMaxDamage() - item.getDamage()),
16, y + 4, SaturnClient.WHITE, false);
return true;
}
@Override
public void render(DrawContext context) {
PlayerEntity player = MinecraftClient.getInstance().player;
ItemStack[] items = {
player.getEquippedStack(EquipmentSlot.FEET),
player.getEquippedStack(EquipmentSlot.LEGS),
player.getEquippedStack(EquipmentSlot.CHEST),
player.getEquippedStack(EquipmentSlot.HEAD),
player.getEquippedStack(EquipmentSlot.MAINHAND),
};
int y = 75;
for (ItemStack item : items) {
if (renderItem(context, item, y)) {
y -= 15;
}
}
}
@Override
public void renderDummy(DrawContext context) {
ItemStack[] items = {
new ItemStack(Items.DIAMOND_BOOTS),
new ItemStack(Items.DIAMOND_LEGGINGS),
new ItemStack(Items.DIAMOND_CHESTPLATE),
new ItemStack(Items.DIAMOND_HELMET),
new ItemStack(Items.DIAMOND_SWORD),
};
int y = 75;
for (ItemStack item : items) {
if (renderItem(context, item, y)) {
y -= 15;
}
}
dimensions.width = 28;
dimensions.height = 100;
}
public String getName() {
return "Armor display";
}
public void setDimensions(ModDimensions d) {
dimensions = d;
}
public ModDimensions getDimensions() {
return dimensions;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean e) {
enabled = e;
}
}
@@ -1,9 +1,60 @@
package org.saturnclient.saturnmods.mods;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnmods.HudMod;
import org.saturnclient.saturnmods.ModDimensions;
import org.saturnclient.saturnmods.SaturnMod;
public class Coordinates implements SaturnMod {
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.entity.player.PlayerEntity;
public class Coordinates implements SaturnMod, HudMod {
private static ModDimensions dimensions = new ModDimensions();
public static boolean enabled = false;
public Coordinates() {
}
public void renderDummy(DrawContext context) {
int playerX = 124;
int playerY = 69;
int playerZ = 83;
context.drawText(SaturnClient.textRenderer, playerX + " " + playerY + " " + playerZ,
0, 0, SaturnClient.WHITE, false);
dimensions.width = SaturnClient.textRenderer.getWidth(playerX + " " + playerY + " " + playerZ);
dimensions.height = SaturnClient.textRenderer.fontHeight;
}
public void render(DrawContext context) {
PlayerEntity player = MinecraftClient.getInstance().player;
int playerX = (int) player.getX();
int playerY = (int) player.getY();
int playerZ = (int) player.getZ();
context.drawText(SaturnClient.textRenderer, playerX + " " + playerY + " " + playerZ,
0, 0, SaturnClient.WHITE, false);
}
public String getName() {
return "Coords";
}
public void setDimensions(ModDimensions d) {
dimensions = d;
}
public ModDimensions getDimensions() {
return dimensions;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean e) {
enabled = e;
}
}
@@ -0,0 +1,35 @@
package org.saturnclient.ui.components;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.saturnmods.SaturnMod;
import org.saturnclient.ui.SaturnWidget;
import org.saturnclient.ui.Textures;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.math.ColorHelper;
public class SaturnModComp extends SaturnWidget {
SaturnMod mod;
public SaturnModComp(SaturnMod mod) {
this.mod = mod;
}
@Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) {
int color = mod.isEnabled() || hovering ? SaturnClient.COLOR : ColorHelper.getWhite(alpha);
context.drawText(SaturnClient.textRenderer, mod.getName(), x + 27,
y + (21 - SaturnClient.textRenderer.fontHeight) / 2,
color, false);
context.drawTexture(RenderLayer::getGuiTextured, Textures.MOD, x, y, 0, 0, 86, 20, width,
height, color);
}
@Override
public void click(int mouseX, int mouseY) {
mod.setEnabled(!mod.isEnabled());
}
}
@@ -5,11 +5,9 @@ import org.saturnclient.ui.SaturnUi;
import org.saturnclient.ui.SaturnWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.util.math.ColorHelper;
import net.minecraft.util.math.MathHelper;
public class SaturnText extends SaturnWidget {
private String text;
private int color = ColorHelper.getWhite(1.0f);
public SaturnText(String text) {
this.text = text;
@@ -19,13 +17,12 @@ public class SaturnText extends SaturnWidget {
public SaturnText(String text, int color) {
this(text);
this.color = color;
}
@Override
public void render(DrawContext context, boolean hovering, int mouseX, int mouseY) {
context.drawText(SaturnClient.textRenderer,
SaturnUi.text(text), x, y,
color | MathHelper.ceil(this.alpha * 255.0F) << 24, false);
ColorHelper.getWhite(alpha), false);
}
}