Armor display mod

This commit is contained in:
2026-03-06 23:10:58 +01:00
parent 6eb7fa4c8b
commit c93b0e049d
5 changed files with 250 additions and 124 deletions
@@ -8,24 +8,24 @@ import org.saturnclient.modules.mods.*;
public class ModManager { public class ModManager {
public static final List<Module> ENABLED_MODS = new ArrayList<>(); public static final List<Module> ENABLED_MODS = new ArrayList<>();
public static final Module[] ALL_MODS = { public static final Module[] ALL_MODS = {
new Crosshair(), // new Crosshair(),
new AutoSprint(), // new AutoSprint(),
new ArmorDisplay(), new ArmorDisplay(),
new Fps(), // new Fps(),
new StatusEffects(), // new StatusEffects(),
new Coordinates(), // new Coordinates(),
new Freelook(), // new Freelook(),
new Keystrokes(), // new Keystrokes(),
new Fullbright(), // new Fullbright(),
new NoFog(), // new NoFog(),
new DayCounter(), // new DayCounter(),
new Speedometer(), // new Speedometer(),
new Zoom(), // new Zoom(),
new HealthDisplay(), // new HealthDisplay(),
new Nametags(), // new Nametags(),
new Ping(), // new Ping(),
new Tps(), // new Tps(),
new Clock() // new Clock()
}; };
public static void init() { public static void init() {
@@ -45,8 +45,4 @@ public class ModManager {
public static Module[] getAllMods() { public static Module[] getAllMods() {
return ALL_MODS; return ALL_MODS;
} }
public static void refreshEnabledModules() {
updateEnabledModules();
}
} }
@@ -0,0 +1,32 @@
package org.saturnclient.modules.interfaces;
import org.saturnclient.common.minecraft.bindings.SaturnItemStack;
public interface ArmorDisplayInterface {
SaturnItemStack getMainHand();
SaturnItemStack getHelmet();
SaturnItemStack getChestplate();
SaturnItemStack getLeggings();
SaturnItemStack getBoots();
SaturnItemStack getDummyMainHand();
SaturnItemStack getDummyHelmet();
SaturnItemStack getDummyChestplate();
SaturnItemStack getDummyLeggings();
SaturnItemStack getDummyBoots();
boolean isEmpty(SaturnItemStack stack);
int getMaxDamage(SaturnItemStack stack);
int getDamage(SaturnItemStack stack);
}
@@ -0,0 +1,118 @@
package org.saturnclient.modules.mods;
import org.saturnclient.modules.HudMod;
import org.saturnclient.modules.ModDimensions;
import org.saturnclient.modules.Module;
import org.saturnclient.modules.ModuleDetails;
import org.saturnclient.modules.interfaces.ArmorDisplayInterface;
import org.saturnclient.common.minecraft.bindings.SaturnItemStack;
import org.saturnclient.config.manager.Property;
import org.saturnclient.ui.RenderScope;
public class ArmorDisplay extends Module implements HudMod {
private static Property<Boolean> enabled = Property.bool(false);
private static ModDimensions dimensions = new ModDimensions(40, 75);
private static Property<Boolean> useMainHand = Property.bool(false);
private final ArmorDisplayInterface minecraft;
public ArmorDisplay(ArmorDisplayInterface minecraft) {
super(new ModuleDetails("Armor Display", "armor")
.description("Displays armor durability")
.version("v0.1.0")
.tags("Utility"),
enabled.named("Enabled"),
useMainHand.named("Use Main Hand"),
dimensions.prop());
this.minecraft = minecraft;
}
public void renderArmor(RenderScope scope,
SaturnItemStack mainHand,
SaturnItemStack helmet,
SaturnItemStack chestplate,
SaturnItemStack leggings,
SaturnItemStack boots) {
int row = 0;
if (useMainHand.value && !minecraft.isEmpty(mainHand)) {
scope.drawItem(mainHand, 0, 15 * row);
renderHealth(scope, row, minecraft.getMaxDamage(mainHand), minecraft.getDamage(mainHand));
row++;
}
if (!minecraft.isEmpty(helmet)) {
scope.drawItem(helmet, 0, 15 * row);
renderHealth(scope, row, minecraft.getMaxDamage(helmet), minecraft.getDamage(helmet));
row++;
}
if (!minecraft.isEmpty(chestplate)) {
scope.drawItem(chestplate, 0, 15 * row);
renderHealth(scope, row, minecraft.getMaxDamage(chestplate), minecraft.getDamage(chestplate));
row++;
}
if (!minecraft.isEmpty(leggings)) {
scope.drawItem(leggings, 0, 15 * row);
renderHealth(scope, row, minecraft.getMaxDamage(leggings), minecraft.getDamage(leggings));
row++;
}
if (!minecraft.isEmpty(boots)) {
scope.drawItem(boots, 0, 15 * row);
renderHealth(scope, row, minecraft.getMaxDamage(boots), minecraft.getDamage(boots));
row++;
}
}
public void renderHealth(RenderScope scope, int i, int maxDamage, int damage) {
if (maxDamage > 0) {
scope.drawText(
0.5f,
"" + (maxDamage - damage),
17,
(15 * i) + 3,
dimensions.font.value,
dimensions.fgColor.value);
}
}
@Override
public void renderHud(RenderScope scope) {
renderArmor(scope,
minecraft.getMainHand(),
minecraft.getHelmet(),
minecraft.getChestplate(),
minecraft.getLeggings(),
minecraft.getBoots());
}
@Override
public void renderDummy(RenderScope scope) {
renderArmor(scope,
minecraft.getDummyMainHand(),
minecraft.getDummyHelmet(),
minecraft.getDummyChestplate(),
minecraft.getDummyLeggings(),
minecraft.getDummyBoots());
}
@Override
public ModDimensions getDimensions() {
return dimensions;
}
@Override
public boolean isEnabled() {
return enabled.value;
}
@Override
public void onEnabled(boolean e) {
enabled.value = e;
}
}
@@ -0,0 +1,83 @@
package org.saturnclient.impl.modules;
import org.saturnclient.common.minecraft.bindings.SaturnItemStack;
import org.saturnclient.modules.interfaces.ArmorDisplayInterface;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
public class ArmorDisplayFabric implements ArmorDisplayInterface {
private ItemStack get(EquipmentSlot slot) {
return MinecraftClient.getInstance().player.getEquippedStack(slot);
}
@Override
public SaturnItemStack getMainHand() {
return new SaturnItemStack(get(EquipmentSlot.MAINHAND));
}
@Override
public SaturnItemStack getHelmet() {
return new SaturnItemStack(get(EquipmentSlot.HEAD));
}
@Override
public SaturnItemStack getChestplate() {
return new SaturnItemStack(get(EquipmentSlot.CHEST));
}
@Override
public SaturnItemStack getLeggings() {
return new SaturnItemStack(get(EquipmentSlot.LEGS));
}
@Override
public SaturnItemStack getBoots() {
return new SaturnItemStack(get(EquipmentSlot.FEET));
}
@Override
public boolean isEmpty(SaturnItemStack stack) {
return ((ItemStack) stack.get()).isEmpty();
}
@Override
public int getMaxDamage(SaturnItemStack stack) {
return ((ItemStack) stack.get()).getMaxDamage();
}
@Override
public int getDamage(SaturnItemStack stack) {
return ((ItemStack) stack.get()).getDamage();
}
// Dummy items
@Override
public SaturnItemStack getDummyMainHand() {
return new SaturnItemStack(new ItemStack(Items.DIAMOND_SWORD));
}
@Override
public SaturnItemStack getDummyHelmet() {
return new SaturnItemStack(new ItemStack(Items.DIAMOND_HELMET));
}
@Override
public SaturnItemStack getDummyChestplate() {
return new SaturnItemStack(new ItemStack(Items.DIAMOND_CHESTPLATE));
}
@Override
public SaturnItemStack getDummyLeggings() {
return new SaturnItemStack(new ItemStack(Items.DIAMOND_LEGGINGS));
}
@Override
public SaturnItemStack getDummyBoots() {
return new SaturnItemStack(new ItemStack(Items.DIAMOND_BOOTS));
}
}
@@ -1,103 +0,0 @@
package org.saturnclient.modules.mods;
import org.saturnclient.modules.HudMod;
import org.saturnclient.modules.ModDimensions;
import org.saturnclient.modules.Module;
import org.saturnclient.modules.ModuleDetails;
import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.common.minecraft.bindings.SaturnItemStack;
import org.saturnclient.config.manager.Property;
import org.saturnclient.ui.RenderScope;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
public class ArmorDisplay extends Module implements HudMod {
private static Property<Boolean> enabled = Property.bool(false);
private static ModDimensions dimensions = new ModDimensions(40, 75);
private static Property<Boolean> useMainHand = Property.bool(false);
public ArmorDisplay() {
super(new ModuleDetails("Armor Display", "armor")
.description("Displays armor durability")
.version("v0.1.0")
.tags("Utility"),
enabled.named("Enabled"),
useMainHand.named("Use Main Hand"),
dimensions.prop());
}
public void renderArmor(RenderScope scope, ItemStack mainHand, ItemStack helmet, ItemStack chestplate,
ItemStack leggings, ItemStack boots) {
int row = 0;
if (useMainHand.value && !mainHand.isEmpty()) {
scope.drawItem(new SaturnItemStack(mainHand), 0, 15 * row);
renderHealth(scope, row, mainHand.getMaxDamage(), mainHand.getDamage());
row++;
}
if (!helmet.isEmpty()) {
scope.drawItem(new SaturnItemStack(helmet), 0, 15 * row);
renderHealth(scope, row, helmet.getMaxDamage(), helmet.getDamage());
row++;
}
if (!chestplate.isEmpty()) {
scope.drawItem(new SaturnItemStack(chestplate), 0, 15 * row);
renderHealth(scope, row, chestplate.getMaxDamage(), chestplate.getDamage());
row++;
}
if (!leggings.isEmpty()) {
scope.drawItem(new SaturnItemStack(leggings), 0, 15 * row);
renderHealth(scope, row, leggings.getMaxDamage(), leggings.getDamage());
row++;
}
if (!boots.isEmpty()) {
scope.drawItem(new SaturnItemStack(boots), 0, 15 * row);
renderHealth(scope, row, boots.getMaxDamage(), boots.getDamage());
row++;
}
}
public void renderHealth(RenderScope scope, int i, int max_damage, int damage) {
if (max_damage > 0) {
scope.drawText(0.5f, "" + (max_damage - damage), 17, (15 * i) + 3, dimensions.font.value,
dimensions.fgColor.value);
}
}
@Override
public void renderHud(RenderScope scope) {
renderArmor(scope,
SaturnClient.client.player.getEquippedStack(EquipmentSlot.MAINHAND),
SaturnClient.client.player.getEquippedStack(EquipmentSlot.HEAD),
SaturnClient.client.player.getEquippedStack(EquipmentSlot.CHEST),
SaturnClient.client.player.getEquippedStack(EquipmentSlot.LEGS),
SaturnClient.client.player.getEquippedStack(EquipmentSlot.FEET));
}
@Override
public void renderDummy(RenderScope scope) {
renderArmor(scope, new ItemStack(Items.DIAMOND_SWORD), new ItemStack(Items.DIAMOND_HELMET),
new ItemStack(Items.DIAMOND_CHESTPLATE),
new ItemStack(Items.DIAMOND_LEGGINGS), new ItemStack(Items.DIAMOND_BOOTS));
}
@Override
public ModDimensions getDimensions() {
return dimensions;
}
@Override
public boolean isEnabled() {
return enabled.value;
}
@Override
public void onEnabled(boolean e) {
enabled.value = e;
}
}