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 static final List<Module> ENABLED_MODS = new ArrayList<>();
public static final Module[] ALL_MODS = {
new Crosshair(),
new AutoSprint(),
// new Crosshair(),
// new AutoSprint(),
new ArmorDisplay(),
new Fps(),
new StatusEffects(),
new Coordinates(),
new Freelook(),
new Keystrokes(),
new Fullbright(),
new NoFog(),
new DayCounter(),
new Speedometer(),
new Zoom(),
new HealthDisplay(),
new Nametags(),
new Ping(),
new Tps(),
new Clock()
// new Fps(),
// new StatusEffects(),
// new Coordinates(),
// new Freelook(),
// new Keystrokes(),
// new Fullbright(),
// new NoFog(),
// new DayCounter(),
// new Speedometer(),
// new Zoom(),
// new HealthDisplay(),
// new Nametags(),
// new Ping(),
// new Tps(),
// new Clock()
};
public static void init() {
@@ -45,8 +45,4 @@ public class ModManager {
public static Module[] getAllMods() {
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;
}
}