From cea6c5773be4510be77866c7302db053a1cf84e1 Mon Sep 17 00:00:00 2001 From: Sen Date: Mon, 18 Aug 2025 18:39:56 +0200 Subject: [PATCH] fix armor slots --- .../java/client/gui/container/GuiContainer.java | 2 +- .../renderer/layers/LayerArachnoidArmor.java | 2 ++ .../java/common/entity/npc/EntityArachnoid.java | 5 +++++ .../common/entity/npc/EntityCameraHolder.java | 5 +++++ .../common/entity/npc/EntityChaosMarine.java | 5 +++++ .../main/java/common/entity/npc/EntityNPC.java | 17 ++++++++++------- .../java/common/entity/npc/EntitySlime.java | 5 +++++ .../common/entity/npc/EntitySpaceMarine.java | 5 +++++ .../java/common/inventory/ContainerPlayer.java | 6 +++--- common/src/main/java/common/item/ItemStack.java | 4 ++-- .../java/common/item/material/ItemArmor.java | 6 +++--- common/src/main/java/common/util/Equipment.java | 9 +++++---- 12 files changed, 51 insertions(+), 20 deletions(-) diff --git a/client/src/main/java/client/gui/container/GuiContainer.java b/client/src/main/java/client/gui/container/GuiContainer.java index 559e89a0..96ed8ed6 100755 --- a/client/src/main/java/client/gui/container/GuiContainer.java +++ b/client/src/main/java/client/gui/container/GuiContainer.java @@ -157,7 +157,7 @@ public abstract class GuiContainer extends Gui } Map mods = stack.getAttributeModifiers(); - mods.putAll(stack.getArmorModifiers(null)); + mods.putAll(stack.getArmorModifiers(this.gm.player, null)); if(!mods.isEmpty()) { list.add(""); diff --git a/client/src/main/java/client/renderer/layers/LayerArachnoidArmor.java b/client/src/main/java/client/renderer/layers/LayerArachnoidArmor.java index 7e9f2eec..cc8945a8 100755 --- a/client/src/main/java/client/renderer/layers/LayerArachnoidArmor.java +++ b/client/src/main/java/client/renderer/layers/LayerArachnoidArmor.java @@ -13,6 +13,8 @@ public class LayerArachnoidArmor extends LayerArmor { switch(slot) { case CHESTPLATE: case HELMET: + super.setModelPartVisible(model, slot); + break; default: model.setVisible(false); break; diff --git a/common/src/main/java/common/entity/npc/EntityArachnoid.java b/common/src/main/java/common/entity/npc/EntityArachnoid.java index 92b4626d..ab075bf6 100755 --- a/common/src/main/java/common/entity/npc/EntityArachnoid.java +++ b/common/src/main/java/common/entity/npc/EntityArachnoid.java @@ -10,6 +10,7 @@ import common.pathfinding.PathNavigate; import common.pathfinding.PathNavigateClimber; import common.rng.Random; import common.util.BlockPos; +import common.util.Equipment; import common.world.World; public class EntityArachnoid extends EntityNPC { @@ -53,6 +54,10 @@ public class EntityArachnoid extends EntityNPC { this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); this.tasks.addTask(4, new AISpiderAttack(this, EntityNPC.class)); } + + public boolean hasArmorSlot(Equipment slot) { + return slot != Equipment.BOOTS && slot != Equipment.LEGGINGS; + } protected PathNavigate getNewNavigator(World worldIn) { return new PathNavigateClimber(this, worldIn); diff --git a/common/src/main/java/common/entity/npc/EntityCameraHolder.java b/common/src/main/java/common/entity/npc/EntityCameraHolder.java index 059bb25c..33a08154 100755 --- a/common/src/main/java/common/entity/npc/EntityCameraHolder.java +++ b/common/src/main/java/common/entity/npc/EntityCameraHolder.java @@ -2,6 +2,7 @@ package common.entity.npc; import common.entity.DamageSource; import common.rng.Random; +import common.util.Equipment; import common.world.World; public class EntityCameraHolder extends EntityNPC { @@ -12,6 +13,10 @@ public class EntityCameraHolder extends EntityNPC { public int getInventoryCapacity() { return 1; } + + public boolean hasArmorSlot(Equipment slot) { + return false; + } public int getBaseHealth(Random rand) { return 1; diff --git a/common/src/main/java/common/entity/npc/EntityChaosMarine.java b/common/src/main/java/common/entity/npc/EntityChaosMarine.java index 69966f52..8cf6dc0b 100755 --- a/common/src/main/java/common/entity/npc/EntityChaosMarine.java +++ b/common/src/main/java/common/entity/npc/EntityChaosMarine.java @@ -7,6 +7,7 @@ import common.init.Items; import common.init.SpeciesRegistry; import common.item.ItemStack; import common.rng.Random; +import common.util.Equipment; import common.util.Identifyable; import common.world.World; @@ -62,6 +63,10 @@ public class EntityChaosMarine extends EntityNPC { public EntityChaosMarine(World worldIn) { super(worldIn); } + + public boolean hasArmorSlot(Equipment slot) { + return slot == Equipment.SHIELD; + } public Legion getLegion() { Enum legion = this.getNpcClass(); diff --git a/common/src/main/java/common/entity/npc/EntityNPC.java b/common/src/main/java/common/entity/npc/EntityNPC.java index 090a58de..78187884 100755 --- a/common/src/main/java/common/entity/npc/EntityNPC.java +++ b/common/src/main/java/common/entity/npc/EntityNPC.java @@ -1298,7 +1298,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory ItemStack stack = itemEntity.getEntityItem(); if(stack.getItem().getRadiation(stack) > 0.0f) return; - Equipment[] slots = stack.getItem() instanceof ItemArmor armor ? armor.getArmorType().getPossibleSlots() : new Equipment[] {null}; + Equipment[] slots = stack.getItem() instanceof ItemArmor armor ? armor.getArmorType().getPossibleSlots(this) : new Equipment[] {null}; for(Equipment slot : slots) { boolean accept = true; @@ -1462,12 +1462,12 @@ public abstract class EntityNPC extends EntityLiving implements IInventory if (last != null) { - this.removeModifiers(last.getArmorModifiers(slot), -1 - slot.getIndex()); + this.removeModifiers(last.getArmorModifiers(this, slot), -1 - slot.getIndex()); } if (current != null) { - this.addModifiers(current.getArmorModifiers(slot), -1 - slot.getIndex(), current.getSize()); + this.addModifiers(current.getArmorModifiers(this, slot), -1 - slot.getIndex(), current.getSize()); } this.prevArmor[slot.getIndex()] = current == null ? null : current.copy(); @@ -2751,9 +2751,12 @@ public abstract class EntityNPC extends EntityLiving implements IInventory return false; } - public int getInventoryCapacity() - { - return 36; + public int getInventoryCapacity() { + return 36; + } + + public boolean hasArmorSlot(Equipment slot) { + return true; } // END OTHER @@ -4204,7 +4207,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory if(info.items != null) { for(ItemStack stack : info.items) { if(stack.getItem() instanceof ItemArmor armor) { - for(Equipment slot : armor.getArmorType().getPossibleSlots()) { + for(Equipment slot : armor.getArmorType().getPossibleSlots(this)) { if(this.getArmor(slot) == null) { this.setArmor(slot, stack); break; diff --git a/common/src/main/java/common/entity/npc/EntitySlime.java b/common/src/main/java/common/entity/npc/EntitySlime.java index 8a2828a2..3a2f6134 100755 --- a/common/src/main/java/common/entity/npc/EntitySlime.java +++ b/common/src/main/java/common/entity/npc/EntitySlime.java @@ -13,6 +13,7 @@ import common.pathfinding.PathNavigateGround; import common.rng.Random; import common.tags.TagObject; import common.util.BlockPos; +import common.util.Equipment; import common.util.ExtMath; import common.util.ParticleType; import common.vars.Vars; @@ -45,6 +46,10 @@ public class EntitySlime extends EntityNPC public int getInventoryCapacity() { return 12; } + + public boolean hasArmorSlot(Equipment slot) { + return false; + } // public boolean isAggressive() { // return true; diff --git a/common/src/main/java/common/entity/npc/EntitySpaceMarine.java b/common/src/main/java/common/entity/npc/EntitySpaceMarine.java index 841ee67d..07a4b3db 100755 --- a/common/src/main/java/common/entity/npc/EntitySpaceMarine.java +++ b/common/src/main/java/common/entity/npc/EntitySpaceMarine.java @@ -7,6 +7,7 @@ import common.init.Items; import common.init.SpeciesRegistry; import common.item.ItemStack; import common.rng.Random; +import common.util.Equipment; import common.util.Identifyable; import common.world.World; @@ -62,6 +63,10 @@ public class EntitySpaceMarine extends EntityNPC { public EntitySpaceMarine(World worldIn) { super(worldIn); } + + public boolean hasArmorSlot(Equipment slot) { + return slot == Equipment.SHIELD; + } public Legion getLegion() { Enum legion = this.getNpcClass(); diff --git a/common/src/main/java/common/inventory/ContainerPlayer.java b/common/src/main/java/common/inventory/ContainerPlayer.java index 7cb5e88d..af4f584a 100755 --- a/common/src/main/java/common/inventory/ContainerPlayer.java +++ b/common/src/main/java/common/inventory/ContainerPlayer.java @@ -44,10 +44,10 @@ public class ContainerPlayer extends Container { } public boolean isItemValid(ItemStack stack) { - return stack != null && stack.getItem() instanceof ItemArmor armor && armor.getArmorType().canUseInSlot(type); + return stack != null && stack.getItem() instanceof ItemArmor armor && armor.getArmorType().canUseInSlot(ContainerPlayer.this.thePlayer, type); } public String getTexture() { - return type.isRing() ? "ring" : type.getName(); + return ContainerPlayer.this.thePlayer.hasArmorSlot(type) ? (type.isRing() ? "ring" : type.getName()) : null; } }); } @@ -109,7 +109,7 @@ public class ContainerPlayer extends Container { } private int getFreeSlotFor(Equipment type) { - for(Equipment slot : type.getPossibleSlots()) { + for(Equipment slot : type.getPossibleSlots(this.thePlayer)) { if(!this.inventorySlots.get(5 + slot.getIndex()).getHasStack()) return 5 + slot.getIndex(); } diff --git a/common/src/main/java/common/item/ItemStack.java b/common/src/main/java/common/item/ItemStack.java index df3d7aee..9ad7bcc6 100755 --- a/common/src/main/java/common/item/ItemStack.java +++ b/common/src/main/java/common/item/ItemStack.java @@ -269,9 +269,9 @@ public final class ItemStack { return map; } - public Map getArmorModifiers(Equipment slot) { + public Map getArmorModifiers(EntityNPC entity, Equipment slot) { Map map = Maps.newEnumMap(Attribute.class); - if(this.item instanceof ItemArmor armor && (slot == null || armor.getArmorType().canUseInSlot(slot))) + if(this.item instanceof ItemArmor armor && (slot == null || armor.getArmorType().canUseInSlot(entity, slot))) armor.getArmorModifiers(map); return map; } diff --git a/common/src/main/java/common/item/material/ItemArmor.java b/common/src/main/java/common/item/material/ItemArmor.java index 1c852db4..7fd3b28e 100755 --- a/common/src/main/java/common/item/material/ItemArmor.java +++ b/common/src/main/java/common/item/material/ItemArmor.java @@ -72,7 +72,7 @@ public class ItemArmor extends Item { } public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityNPC playerIn) { - for(Equipment slot : this.type.getPossibleSlots()) { + for(Equipment slot : this.type.getPossibleSlots(playerIn)) { if(playerIn.getArmor(slot) == null) { playerIn.setArmor(slot, itemStackIn.copy(1)); itemStackIn.decrSize(); @@ -106,7 +106,7 @@ public class ItemArmor extends Item { public boolean test(EntityNPC entity) { if(!entity.isEntityAlive()) return false; - for(Equipment slot : ItemArmor.this.type.getPossibleSlots()) { + for(Equipment slot : ItemArmor.this.type.getPossibleSlots(entity)) { if(entity.getArmor(slot) == null) return true; } @@ -116,7 +116,7 @@ public class ItemArmor extends Item { if(list.size() > 0) { EntityNPC entitylivingbase = list.get(0); - for(Equipment slot : this.type.getPossibleSlots()) { + for(Equipment slot : this.type.getPossibleSlots(entitylivingbase)) { if(entitylivingbase.getArmor(slot) == null) { entitylivingbase.setArmor(slot, stack.copy(1)); stack.decrSize(); diff --git a/common/src/main/java/common/util/Equipment.java b/common/src/main/java/common/util/Equipment.java index 05b63e24..809f5a41 100644 --- a/common/src/main/java/common/util/Equipment.java +++ b/common/src/main/java/common/util/Equipment.java @@ -2,6 +2,7 @@ package common.util; import common.enchantment.EnchantmentType; import common.entity.animal.EntityHorse; +import common.entity.npc.EntityNPC; import common.entity.types.EntityLiving; import common.init.ToolMaterial; @@ -186,11 +187,11 @@ public enum Equipment implements Identifyable, Displayable { return this.animalType; } - public Equipment[] getPossibleSlots() { - return this.isRing() ? new Equipment[] {RING_LEFT_A, RING_LEFT_B, RING_RIGHT_A, RING_RIGHT_B} : new Equipment[] {this.isArmor() ? this : null}; + public Equipment[] getPossibleSlots(EntityNPC entity) { + return this.isArmor() && !entity.hasArmorSlot(this) ? new Equipment[0] : (this.isRing() ? new Equipment[] {RING_LEFT_A, RING_LEFT_B, RING_RIGHT_A, RING_RIGHT_B} : new Equipment[] {this.isArmor() ? this : null}); } - public boolean canUseInSlot(Equipment slot) { - return slot == null || !slot.isArmor() || this == slot || (this.isRing() && slot.isRing()); + public boolean canUseInSlot(EntityNPC entity, Equipment slot) { + return slot == null || !slot.isArmor() || ((this == slot || (this.isRing() && slot.isRing())) && entity.hasArmorSlot(slot)); } }