A mod that adds your armor to the hud modrinth.com/mod/simple-armor-hud
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

merge: added multiple armorhud locations

legoraft c9e4ce06 b79abdb3

+197 -101
+9
build.gradle
··· 20 20 name = "TerraformersMC" 21 21 url = "https://maven.terraformersmc.com/" 22 22 } 23 + 23 24 maven { 24 25 name = "Ladysnake Libs" 25 26 url = 'https://maven.ladysnake.org/releases' 27 + } 28 + 29 + maven { 30 + name = "Whispforest" 31 + url = "https://maven.wispforest.io/releases" 26 32 } 27 33 } 28 34 ··· 48 54 49 55 // Fabric API. This is technically optional, but you probably want it anyway. 50 56 modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" 57 + 58 + // Accessories mod 59 + // modImplementation("io.wispforest:accessories-fabric:${project.accessories_version}") 51 60 } 52 61 53 62 processResources {
+1
gradle.properties
··· 18 18 fabric_version=0.139.5+1.21.11 19 19 modmenu_version=17.0.0-alpha.1 20 20 trinkets_version=3.10.0 21 + accessories_version=1.4.3-beta+1.21.10
+23 -11
src/client/java/com/armorhud/config/config.java
··· 1 1 package com.armorhud.config; 2 2 3 3 import net.fabricmc.loader.api.FabricLoader; 4 + import net.minecraft.text.Text; 4 5 import org.apache.logging.log4j.LogManager; 5 6 6 7 import java.io.IOException; ··· 13 14 public static boolean BETTER_MOUNT_HUD = false; 14 15 public static boolean DOUBLE_HOTBAR = false; 15 16 public static boolean ARMOR_HUD = true; 16 - public static boolean RTL = false; 17 17 public static boolean DISABLE_ARMOR_BAR = false; 18 - public static boolean ABOVE_HEALTH_BAR = false; // a new option to render armor hud above the healthbar instead of the hungerbar -Dino 18 + public static Position position = Position.FOODBAR; 19 + public static boolean RTL = false; 19 20 public static boolean TRIM_EMPTY_SLOTS = false; // toggles trimming space between empty armor slots 20 21 21 22 private static final Path CONFIG_PATH = FabricLoader.getInstance().getConfigDir().resolve("armorhud.properties"); 22 23 24 + public enum Position { 25 + FOODBAR, 26 + HEALTHBAR, 27 + HOTBAR_LEFT, 28 + HOTBAR_RIGHT; 29 + 30 + public Text displayName() { 31 + return Text.translatable("config.armorposition." + name().toLowerCase()); 32 + } 33 + } 34 + 23 35 public static void write(Properties properties) { 24 36 properties.setProperty("better_mount_hud", Boolean.toString(BETTER_MOUNT_HUD)); 25 37 properties.setProperty("double_hotbar", Boolean.toString(DOUBLE_HOTBAR)); 26 38 properties.setProperty("armor_hud", Boolean.toString(ARMOR_HUD)); 27 - properties.setProperty("right_to_left", Boolean.toString(RTL)); 28 39 properties.setProperty("disable_armor_bar", Boolean.toString(DISABLE_ARMOR_BAR)); 29 - properties.setProperty("above_health_bar", Boolean.toString(ABOVE_HEALTH_BAR)); 40 + properties.setProperty("position", position.name()); 41 + properties.setProperty("right_to_left", Boolean.toString(RTL)); 30 42 properties.setProperty("trim_empty_slots", Boolean.toString(TRIM_EMPTY_SLOTS)); 31 43 } 32 44 33 45 public void read(Properties properties) { 34 - BETTER_MOUNT_HUD = Boolean.parseBoolean(properties.getProperty("better_mount_hud")); 35 - DOUBLE_HOTBAR = Boolean.parseBoolean(properties.getProperty("double_hotbar")); 36 - ARMOR_HUD = Boolean.parseBoolean(properties.getProperty("armor_hud")); 37 - RTL = Boolean.parseBoolean(properties.getProperty("right_to_left")); 38 - DISABLE_ARMOR_BAR = Boolean.parseBoolean(properties.getProperty("disable_armor_bar")); 39 - ABOVE_HEALTH_BAR = Boolean.parseBoolean(properties.getProperty("above_health_bar")); 40 - TRIM_EMPTY_SLOTS = Boolean.parseBoolean(properties.getProperty("trim_empty_slots")); 46 + BETTER_MOUNT_HUD = Boolean.parseBoolean(properties.getProperty("better_mount_hud", "false")); 47 + DOUBLE_HOTBAR = Boolean.parseBoolean(properties.getProperty("double_hotbar", "false")); 48 + ARMOR_HUD = Boolean.parseBoolean(properties.getProperty("armor_hud", "true")); 49 + DISABLE_ARMOR_BAR = Boolean.parseBoolean(properties.getProperty("disable_armor_bar", "false")); 50 + position = Position.valueOf(properties.getProperty("position", "FOODBAR")); 51 + RTL = Boolean.parseBoolean(properties.getProperty("right_to_left", "false")); 52 + TRIM_EMPTY_SLOTS = Boolean.parseBoolean(properties.getProperty("trim_empty_slots", "false")); 41 53 } 42 54 43 55 public static void save() {
+27 -24
src/client/java/com/armorhud/config/configScreen.java
··· 1 1 package com.armorhud.config; 2 2 3 + import net.fabricmc.api.EnvType; 4 + import net.fabricmc.api.Environment; 5 + import net.minecraft.client.MinecraftClient; 3 6 import net.minecraft.client.gui.DrawContext; 4 7 import net.minecraft.client.gui.screen.Screen; 5 8 import net.minecraft.client.gui.screen.option.GameOptionsScreen; 6 9 import net.minecraft.client.gui.widget.*; 7 10 import net.minecraft.text.Text; 8 11 12 + @Environment(EnvType.CLIENT) 9 13 public class configScreen extends GameOptionsScreen { 10 - public Screen parent; 14 + private final Screen parent; 11 15 12 16 public configScreen(Screen parent) { 13 - super(parent, null, Text.translatable("config.title")); 14 - 17 + super(parent, MinecraftClient.getInstance().options, Text.translatable("config.title")); 15 18 this.parent = parent; 16 19 } 17 20 18 21 public CyclingButtonWidget<?> doubleHotbarToggle; 19 22 public CyclingButtonWidget<?> betterMountHudToggle; 20 23 public CyclingButtonWidget<?> armorHudToggle; 21 - public CyclingButtonWidget<?> rightToLeftToggle; 22 24 public CyclingButtonWidget<?> disableArmorBar; 23 25 public CyclingButtonWidget<?> armorPosition; 26 + public CyclingButtonWidget<?> rightToLeftToggle; 24 27 public CyclingButtonWidget<?> trimEmptySlots; 25 28 26 29 public ButtonWidget doneButton; ··· 36 39 armorHudToggle = CyclingButtonWidget.onOffBuilder(config.ARMOR_HUD) 37 40 .build(Text.translatable("config.armorvisible"), (button, value) -> config.ARMOR_HUD = !config.ARMOR_HUD); 38 41 39 - rightToLeftToggle = CyclingButtonWidget.onOffBuilder(config.RTL) 40 - .build(Text.translatable("config.righttoleft"), (button, value) -> config.RTL = !config.RTL); 41 - 42 42 disableArmorBar = CyclingButtonWidget.onOffBuilder(config.DISABLE_ARMOR_BAR) 43 43 .build(Text.translatable("config.disablearmorbar"), ((button, value) -> config.DISABLE_ARMOR_BAR = !config.DISABLE_ARMOR_BAR)); 44 44 45 - armorPosition = CyclingButtonWidget.onOffBuilder(Text.translatable("simple_armor_hud.render.above_food_bar"), 46 - Text.translatable("simple_armor_hud.render.above_armor_bar"), config.ABOVE_HEALTH_BAR) 47 - .build(Text.translatable("config.hudposition"), ((button, value) -> config.ABOVE_HEALTH_BAR = !config.ABOVE_HEALTH_BAR)); 45 + armorPosition = CyclingButtonWidget.builder(config.Position::displayName, config.Position.valueOf(String.valueOf(config.position))).values(config.Position.values()) 46 + .build(Text.translatable("config.armorposition"), ((button, value) -> config.position = value)); 47 + 48 + rightToLeftToggle = CyclingButtonWidget.onOffBuilder(config.RTL) 49 + .build(Text.translatable("config.righttoleft"), (button, value) -> config.RTL = !config.RTL); 48 50 49 51 trimEmptySlots = CyclingButtonWidget.onOffBuilder(config.TRIM_EMPTY_SLOTS) 50 52 .build(Text.translatable("config.trimemptyslots"), ((button, value) -> config.TRIM_EMPTY_SLOTS = !config.TRIM_EMPTY_SLOTS)); 51 53 52 - OptionListWidget optionListWidget = this.addDrawableChild(new OptionListWidget(this.client, this.width, this)); 53 - 54 - optionListWidget.addWidgetEntry(doubleHotbarToggle, betterMountHudToggle); 55 - optionListWidget.addWidgetEntry(armorHudToggle, rightToLeftToggle); 56 - optionListWidget.addWidgetEntry(disableArmorBar, armorPosition); 57 - optionListWidget.addWidgetEntry(trimEmptySlots, null); 58 - 59 54 doneButton = ButtonWidget 60 55 .builder(Text.translatable("config.done"), button -> close()) 61 56 .dimensions(width / 2 - 100, height - 25, 200, 20) 62 57 .build(); 63 58 59 + OptionListWidget optionListWidget = this.addDrawableChild(new OptionListWidget(this.client, this.width, this)); 60 + optionListWidget.addHeader(Text.translatable("config.header.general")); 61 + optionListWidget.addWidgetEntry(armorHudToggle, disableArmorBar); 62 + 63 + optionListWidget.addHeader(Text.translatable("config.header.compatibility")); 64 + optionListWidget.addWidgetEntry(betterMountHudToggle, doubleHotbarToggle); 65 + 66 + optionListWidget.addHeader(Text.translatable("config.header.display")); 67 + optionListWidget.addWidgetEntry(armorPosition, rightToLeftToggle); 68 + optionListWidget.addWidgetEntry(trimEmptySlots, null); 69 + 64 70 addDrawableChild(doneButton); 65 71 } 66 72 67 73 @Override 68 - public void render(DrawContext context, int mouseX, int mouseY, float delta) { 69 - super.render(context, mouseX, mouseY, delta); 70 - context.drawCenteredTextWithShadow(textRenderer, super.title, width / 2, 12, 0xffffff); 71 - } 74 + protected void addOptions() { } 72 75 73 76 @Override 74 - protected void addOptions() { 75 - super.init(); 77 + public void render(DrawContext context, int mouseX, int mouseY, float delta) { 78 + context.drawCenteredTextWithShadow(this.textRenderer, Text.translatable("config.title"), this.width / 2, 12, 0xffffff); 79 + super.render(context, mouseX, mouseY, delta); 76 80 } 77 81 78 82 @Override ··· 82 86 config.save(); 83 87 this.client.setScreen(this.parent); 84 88 } 85 - 86 89 }
+103 -59
src/client/java/com/armorhud/mixin/client/armorHudMixin.java
··· 6 6 import net.minecraft.client.MinecraftClient; 7 7 import net.minecraft.client.gui.DrawContext; 8 8 import net.minecraft.client.gui.hud.InGameHud; 9 + import net.minecraft.client.option.AttackIndicator; 9 10 import net.minecraft.client.render.RenderTickCounter; 10 11 import net.minecraft.entity.EquipmentSlot; 11 12 import net.minecraft.entity.LivingEntity; 12 13 import net.minecraft.entity.player.PlayerEntity; 13 14 import net.minecraft.item.ItemStack; 14 - import org.slf4j.Logger; 15 - import org.slf4j.LoggerFactory; 16 15 import org.spongepowered.asm.mixin.Final; 17 16 import org.spongepowered.asm.mixin.Mixin; 18 17 import org.spongepowered.asm.mixin.Shadow; ··· 25 24 public abstract class armorHudMixin { 26 25 27 26 @Shadow @Final private MinecraftClient client; 28 - 29 27 @Shadow protected abstract LivingEntity getRiddenEntity(); 30 - 31 28 @Unique int armorHeight; 32 29 @Unique boolean initialized; 33 30 31 + @Unique private final int FOODBAR_X = 91; 32 + @Unique private final int HEALTHBAR_X = -10; 33 + @Unique private final int HOTBAR_LEFT_X = -83; 34 + @Unique private final int HOTBAR_RIGHT_X = 165; 35 + 34 36 @Inject(at = @At("TAIL"), method = "renderHotbar") 35 37 private void renderHud(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { 36 - if(!config.ARMOR_HUD) { return; } 38 + if( !config.ARMOR_HUD ) { return; } 37 39 38 40 assert client.player != null; 39 41 40 - if (!initialized) { 42 + if ( !initialized ) { 41 43 armorHud.getArmorAccessor().initialize(client.player); 42 44 initialized = true; 43 45 } 44 46 45 - renderArmor(context); 47 + switch ( config.position.name() ) { 48 + case "FOODBAR": 49 + renderArmor(context, FOODBAR_X); 50 + break; 51 + case "HEALTHBAR": 52 + renderArmor(context, HEALTHBAR_X); 53 + break; 54 + case "HOTBAR_LEFT": 55 + renderArmor(context, HOTBAR_LEFT_X); 56 + break; 57 + case "HOTBAR_RIGHT": 58 + if ( client.options.getAttackIndicator().getValue() == AttackIndicator.HOTBAR ) { 59 + renderArmor(context, HOTBAR_RIGHT_X + 25); 60 + } else { 61 + renderArmor(context, HOTBAR_RIGHT_X); 62 + } 63 + break; 64 + } 65 + 46 66 moveArmor(context); 47 67 } 48 68 49 69 @Unique 50 - private void renderArmor(DrawContext context) { 70 + private void renderArmor(DrawContext context, int startXPosition) { 51 71 int scaledWidth = context.getScaledWindowWidth(); 52 72 53 73 assert client.player != null; 54 - boolean rtl = config.RTL; 55 - ArmorAccessor armorAccessor = armorHud.getArmorAccessor(); 74 + ArmorAccessor armorAccessor = armorHud.getArmorAccessor(); 56 75 57 76 final int hungerWidth = 14; // Magic number to center 4 armor pieces 58 77 final int armorWidth = 15; 59 78 60 - // Added check for Above_Health_Bar -Dino 61 - float hungerX = scaledWidth / 2f + (config.ABOVE_HEALTH_BAR 62 - && client.player.getMaxHealth() + client.player.getMaxAbsorption() < 180 ? -10 : 91); 79 + float hungerX = scaledWidth / 2f + startXPosition; 80 + float x = hungerX + hungerWidth + 2; 81 + 63 82 EquipmentSlot[] slots = EquipmentSlot.values(); 83 + 84 + if (config.RTL) { 85 + for ( int i = slots.length - 1; i > 0; i-- ) { 86 + EquipmentSlot slot = slots[i]; 87 + x -= armorWidth; 88 + 89 + if ( slot.isArmorSlot() ) { 90 + renderArmorPiece(context, x, armorHeight, client.player, armorAccessor.getArmorPiece(client.player, slot)); 91 + } 92 + } 93 + } else { 94 + for ( EquipmentSlot slot : slots ) { 95 + x -= armorWidth; 96 + 97 + if ( slot.isArmorSlot() ) { 98 + renderArmorPiece(context, x, armorHeight, client.player, armorAccessor.getArmorPiece(client.player, slot)); 99 + } 100 + } 101 + } 102 + 103 + /* Putting this on the backburner for a little while to implement other things - Legoraft 104 + 64 105 // counts empty slots to center condensed armor bar, don't like having to loop through the equip slots twice but idk how else to center this dynamically -dino 65 106 int emptyArmorSlots = 0; 66 107 if (config.TRIM_EMPTY_SLOTS) { ··· 70 111 } 71 112 } 72 113 } 73 - float x = hungerX + hungerWidth - (7*emptyArmorSlots) + 2; 74 114 75 - 76 - for (int i = rtl ? slots.length-1 : 0; rtl ? i >= 0 : i < slots.length; i += rtl ? -1 : 1) { 77 - EquipmentSlot slot = slots[i]; 78 - if(config.TRIM_EMPTY_SLOTS && slot.getType() == EquipmentSlot.Type.HUMANOID_ARMOR && client.player.getEquippedStack(slot).isEmpty()) { 79 - continue; 80 - }; 81 - x -= armorWidth; 82 - 83 - if (slot.isArmorSlot()) { 84 - renderArmorPiece(context, x, armorHeight, client.player, armorAccessor.getArmorPiece(client.player, slot)); 85 - } 86 - } 115 + float x = hungerX + hungerWidth - (7 * emptyArmorSlots) + 2; 116 + */ 87 117 } 88 118 89 - // Pretty much the same as renderHotbarItem but with x and y as float parameters. 90 119 @Unique 91 - private void renderArmorPiece(DrawContext context, float x, float y, PlayerEntity player, ItemStack stack) { 92 - if (stack.isEmpty()) return; 120 + private void moveArmor(DrawContext context) { 121 + if ( config.position != config.Position.FOODBAR && config.position != config.Position.HEALTHBAR ) { 122 + int scaledHeight = context.getScaledWindowHeight(); 93 123 94 - context.getMatrices().pushMatrix(); 95 - context.getMatrices().translate(x, y); 96 - 97 - context.drawItem(player, stack, 0, 0, 1); 124 + switch ( config.position.name() ) { 125 + case "HOTBAR_LEFT", "HOTBAR_RIGHT": 126 + armorHeight = scaledHeight - 19; 127 + break; 128 + } 98 129 99 - context.drawStackOverlay(this.client.textRenderer, stack, 0,0); 100 - context.getMatrices().popMatrix(); 101 - } 130 + return; 131 + } 102 132 103 - @Unique 104 - private void moveArmor(DrawContext context) { 105 133 int scaledHeight = context.getScaledWindowHeight(); 106 - 134 + int healthDisplacement = 0; 107 135 assert client.player != null; 108 136 109 137 // Moves armorhud up if player uses double hotbar ··· 112 140 /* TODO: fix visual bug where remaining hearts available (>20hp) get removed later than armor hud -Dino 113 141 Skips unnecessary checks when Above_Health_Bar is on, not a fan of the extra if statement, but it works -Dino 114 142 Note: setting gets turned off above 9 rows of hearts, since the hud will fly off the screen at some point -Dino */ 115 - if (config.ABOVE_HEALTH_BAR && client.player.getMaxHealth() + client.player.getMaxAbsorption() < 180) { 143 + 144 + if ( config.position == config.Position.HEALTHBAR ) { 145 + if ( client.player.getMaxHealth() + client.player.getMaxAbsorption() < 180 ) { 116 146 /* Displacement calculation extracted for clarity. -Dino 117 147 Calc breaks above 90 hearts since hearts don't get condensed further, so it overshoots down -Dino */ 118 - int playerHealthRows = (int) Math.ceil((client.player.getMaxHealth() + client.player.getMaxAbsorption()) / 20); 119 - int healthDisplacement = (10 * playerHealthRows) - ((playerHealthRows>2) ? (playerHealthRows -2) * (playerHealthRows -1) : 0); 148 + int playerHealthRows = (int) Math.ceil((client.player.getMaxHealth() + client.player.getMaxAbsorption()) / 20); 149 + healthDisplacement = (10 * playerHealthRows) - ((playerHealthRows>2) ? (playerHealthRows -2) * (playerHealthRows -1) : 0); 120 150 121 151 // Moves armorhud up depending on how much health you have, along with negative displacement from higher heart counts -Dino 122 - armorHeight -= healthDisplacement; 152 + armorHeight -= healthDisplacement; 153 + } 123 154 124 - /* Moves armorhud down if player is in creative or Disable_Armor_Bar is on, 125 - formatted as an if-statement for readability -Dino 126 - */ 127 - if(client.player.isCreative()) { 155 + if ( client.player.isCreative() ) { 128 156 armorHeight += 16 + healthDisplacement; 129 - } else if (config.DISABLE_ARMOR_BAR) { 157 + } else if ( config.DISABLE_ARMOR_BAR ) { 130 158 armorHeight += 10; 131 159 } 132 160 } else { 133 - // Moves armorhud up if player is underwater 134 - if ((client.player.getAir() < client.player.getMaxAir() || client.player.isSubmergedInWater() && !client.player.isCreative())) { 161 + if ( client.player.getAir() < client.player.getMaxAir() || client.player.isSubmergedInWater() && !client.player.isCreative() ) { 135 162 armorHeight -= 10; 136 163 } 137 164 138 165 // Moves armorhud down if player is in creative 139 - armorHeight += (client.player.isCreative() ? 16 : 0); 166 + if ( client.player.isCreative() ) { 167 + armorHeight += 16; 168 + } 140 169 141 170 // Moves armorhud up if player is on mount, like horse 142 - if (client.player.hasVehicle() && getRiddenEntity() != null) { 143 - moveArmorHorse(); 171 + if ( client.player.hasVehicle() && getRiddenEntity() != null ) { 172 + moveRiddenEntity(); 144 173 } 145 174 } 146 175 } 147 176 148 177 @Unique 149 - private void moveArmorHorse() { 178 + private void moveRiddenEntity() { 150 179 assert client.player != null; 151 180 152 181 // Check if entity player is riding is alive, like a horse 153 - if (getRiddenEntity().isAlive()) { 182 + if ( getRiddenEntity().isAlive() ) { 183 + 154 184 // If horse health is 21, it still displays 10 hearts 155 - if (getRiddenEntity().getMaxHealth() > 21) { 156 - if (config.BETTER_MOUNT_HUD && !client.player.isCreative()) { 185 + if ( getRiddenEntity().getMaxHealth() > 21 ) { 186 + if ( config.BETTER_MOUNT_HUD && !client.player.isCreative() ) { 157 187 armorHeight -= 20; 158 188 } else { 159 189 armorHeight -= (client.player.isCreative() ? 26 : 10); ··· 162 192 163 193 // Armor hud only has to be moved up if better mount hud is enabled or player is in creative 164 194 else { 165 - if (config.BETTER_MOUNT_HUD && !client.player.isCreative()) { 195 + if ( config.BETTER_MOUNT_HUD && !client.player.isCreative() ) { 166 196 armorHeight -= 10; 167 - } else if (client.player.isCreative()) { 197 + } else if ( client.player.isCreative() ) { 168 198 armorHeight -= 16; 169 199 } 170 200 } 171 201 } 202 + } 203 + 204 + // Pretty much the same as renderHotbarItem but with x and y as float parameters. 205 + @Unique 206 + private void renderArmorPiece(DrawContext context, float x, float y, PlayerEntity player, ItemStack stack) { 207 + if ( stack.isEmpty() ) return; 208 + 209 + context.getMatrices().pushMatrix(); 210 + context.getMatrices().translate(x, y); 211 + 212 + context.drawItem(player, stack, 0, 0, 1); 213 + 214 + context.drawStackOverlay(this.client.textRenderer, stack, 0,0); 215 + context.getMatrices().popMatrix(); 172 216 } 173 217 174 218 }
+2
src/main/resources/assets/simple-armor-hud/lang/de_de.json
··· 4 4 5 5 "config.doublehotbar": "Double Hotbar", 6 6 "config.bettermounthud": "Better Mount Hud", 7 + 7 8 "config.armorvisible": "Rüstungs-HUD sichtbar", 8 9 "config.disablearmorbar": "Rüstungsbalken ausschalten", 9 10 10 11 "config.righttoleft": "Rechts nach links Anzeige", 12 + 11 13 "config.done": "Fertig" 12 14 }
+14 -5
src/main/resources/assets/simple-armor-hud/lang/en_us.json
··· 4 4 5 5 "config.doublehotbar": "Double Hotbar", 6 6 "config.bettermounthud": "Better Mount Hud", 7 + 7 8 "config.armorvisible": "Armor visible", 8 - "config.righttoleft": "Right to left display", 9 9 "config.disablearmorbar": "Disable armor bar", 10 - "config.hudposition": "Render", 11 - "simple_armor_hud.render.above_food_bar": "Above Food Bar", 12 - "simple_armor_hud.render.above_armor_bar": "Above Armor Bar", 10 + 11 + "config.righttoleft": "Right to left display", 13 12 "config.trimemptyslots": "Trim Empty Slots", 14 13 15 - "config.title": "Armor hud config screen", 14 + "config.armorposition": "Position", 15 + "config.armorposition.foodbar": "Above Foodbar", 16 + "config.armorposition.healthbar": "Above Healthbar", 17 + "config.armorposition.hotbar_left": "Left of Hotbar", 18 + "config.armorposition.hotbar_right": "Right of Hotbar", 19 + 20 + "config.header.general": "General", 21 + "config.header.compatibility": "Compatibility", 22 + "config.header.display": "Display", 23 + 24 + "config.title": "Simple armor hud config screen", 16 25 "config.done": "Done" 17 26 }
+15 -1
src/main/resources/assets/simple-armor-hud/lang/nl_nl.json
··· 1 1 { 2 2 "key.armorhud.armorvisible": "Zet harnas-hud aan/uit", 3 - "category.armorhud.toggles": "Simple armor hud", 3 + "key.category.simple-armor-hud.armorhud.toggles": "Simple armor hud", 4 4 5 5 "config.doublehotbar": "Double Hotbar", 6 6 "config.bettermounthud": "Better Mount Hud", 7 + 7 8 "config.armorvisible": "Harnas-hud zichtbaar", 8 9 "config.disablearmorbar": "Harnasbalk uitzetten", 9 10 10 11 "config.righttoleft": "Rechts naar links display", 12 + "config.trimemptyslots": "Maak lege slots onzichtbaar", 13 + 14 + "config.armorposition": "Locatie", 15 + "config.armorposition.foodbar": "Boven etensbalk", 16 + "config.armorposition.healthbar": "Boven levensbalk", 17 + "config.armorposition.hotbar_left": "Links van Hotbar", 18 + "config.armorposition.hotbar_right": "Rechts van Hotbar", 19 + 20 + "config.header.general": "Algemeen", 21 + "config.header.compatibility": "Compatibiliteit", 22 + "config.header.display": "Beeld", 23 + 24 + "config.title": "Simple armor hud configuratie scherm", 11 25 "config.done": "Gereed" 12 26 }
+3 -1
src/main/resources/assets/simple-armor-hud/lang/zh_tw.json
··· 4 4 5 5 "config.doublehotbar": "雙快捷欄", 6 6 "config.bettermounthud": "更佳坐騎抬頭顯示器", 7 + 7 8 "config.armorvisible": "顯示盔甲", 8 - "config.righttoleft": "從右至左顯示", 9 9 "config.disablearmorbar": "停用盔甲條", 10 + 11 + "config.righttoleft": "從右至左顯示", 10 12 11 13 "config.title": "Armor hud《盔甲抬頭顯示器》設定畫面", 12 14 "config.done": "完成"