1
0
Fork 0

fix armor slots

This commit is contained in:
Sen 2025-08-18 18:39:56 +02:00
parent 2b9474beaf
commit cea6c5773b
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
12 changed files with 51 additions and 20 deletions

View file

@ -157,7 +157,7 @@ public abstract class GuiContainer extends Gui
} }
Map<Attribute, Float> mods = stack.getAttributeModifiers(); Map<Attribute, Float> mods = stack.getAttributeModifiers();
mods.putAll(stack.getArmorModifiers(null)); mods.putAll(stack.getArmorModifiers(this.gm.player, null));
if(!mods.isEmpty()) { if(!mods.isEmpty()) {
list.add(""); list.add("");

View file

@ -13,6 +13,8 @@ public class LayerArachnoidArmor extends LayerArmor {
switch(slot) { switch(slot) {
case CHESTPLATE: case CHESTPLATE:
case HELMET: case HELMET:
super.setModelPartVisible(model, slot);
break;
default: default:
model.setVisible(false); model.setVisible(false);
break; break;

View file

@ -10,6 +10,7 @@ import common.pathfinding.PathNavigate;
import common.pathfinding.PathNavigateClimber; import common.pathfinding.PathNavigateClimber;
import common.rng.Random; import common.rng.Random;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.Equipment;
import common.world.World; import common.world.World;
public class EntityArachnoid extends EntityNPC { public class EntityArachnoid extends EntityNPC {
@ -54,6 +55,10 @@ public class EntityArachnoid extends EntityNPC {
this.tasks.addTask(4, new AISpiderAttack(this, EntityNPC.class)); 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) { protected PathNavigate getNewNavigator(World worldIn) {
return new PathNavigateClimber(this, worldIn); return new PathNavigateClimber(this, worldIn);
} }

View file

@ -2,6 +2,7 @@ package common.entity.npc;
import common.entity.DamageSource; import common.entity.DamageSource;
import common.rng.Random; import common.rng.Random;
import common.util.Equipment;
import common.world.World; import common.world.World;
public class EntityCameraHolder extends EntityNPC { public class EntityCameraHolder extends EntityNPC {
@ -13,6 +14,10 @@ public class EntityCameraHolder extends EntityNPC {
return 1; return 1;
} }
public boolean hasArmorSlot(Equipment slot) {
return false;
}
public int getBaseHealth(Random rand) { public int getBaseHealth(Random rand) {
return 1; return 1;
} }

View file

@ -7,6 +7,7 @@ import common.init.Items;
import common.init.SpeciesRegistry; import common.init.SpeciesRegistry;
import common.item.ItemStack; import common.item.ItemStack;
import common.rng.Random; import common.rng.Random;
import common.util.Equipment;
import common.util.Identifyable; import common.util.Identifyable;
import common.world.World; import common.world.World;
@ -63,6 +64,10 @@ public class EntityChaosMarine extends EntityNPC {
super(worldIn); super(worldIn);
} }
public boolean hasArmorSlot(Equipment slot) {
return slot == Equipment.SHIELD;
}
public Legion getLegion() { public Legion getLegion() {
Enum legion = this.getNpcClass(); Enum legion = this.getNpcClass();
return legion == null ? Legion.OTHER : (Legion)legion; return legion == null ? Legion.OTHER : (Legion)legion;

View file

@ -1298,7 +1298,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory
ItemStack stack = itemEntity.getEntityItem(); ItemStack stack = itemEntity.getEntityItem();
if(stack.getItem().getRadiation(stack) > 0.0f) if(stack.getItem().getRadiation(stack) > 0.0f)
return; 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) { for(Equipment slot : slots) {
boolean accept = true; boolean accept = true;
@ -1462,12 +1462,12 @@ public abstract class EntityNPC extends EntityLiving implements IInventory
if (last != null) if (last != null)
{ {
this.removeModifiers(last.getArmorModifiers(slot), -1 - slot.getIndex()); this.removeModifiers(last.getArmorModifiers(this, slot), -1 - slot.getIndex());
} }
if (current != null) 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(); this.prevArmor[slot.getIndex()] = current == null ? null : current.copy();
@ -2751,11 +2751,14 @@ public abstract class EntityNPC extends EntityLiving implements IInventory
return false; return false;
} }
public int getInventoryCapacity() public int getInventoryCapacity() {
{
return 36; return 36;
} }
public boolean hasArmorSlot(Equipment slot) {
return true;
}
// END OTHER // END OTHER
@ -4204,7 +4207,7 @@ public abstract class EntityNPC extends EntityLiving implements IInventory
if(info.items != null) { if(info.items != null) {
for(ItemStack stack : info.items) { for(ItemStack stack : info.items) {
if(stack.getItem() instanceof ItemArmor armor) { if(stack.getItem() instanceof ItemArmor armor) {
for(Equipment slot : armor.getArmorType().getPossibleSlots()) { for(Equipment slot : armor.getArmorType().getPossibleSlots(this)) {
if(this.getArmor(slot) == null) { if(this.getArmor(slot) == null) {
this.setArmor(slot, stack); this.setArmor(slot, stack);
break; break;

View file

@ -13,6 +13,7 @@ import common.pathfinding.PathNavigateGround;
import common.rng.Random; import common.rng.Random;
import common.tags.TagObject; import common.tags.TagObject;
import common.util.BlockPos; import common.util.BlockPos;
import common.util.Equipment;
import common.util.ExtMath; import common.util.ExtMath;
import common.util.ParticleType; import common.util.ParticleType;
import common.vars.Vars; import common.vars.Vars;
@ -46,6 +47,10 @@ public class EntitySlime extends EntityNPC
return 12; return 12;
} }
public boolean hasArmorSlot(Equipment slot) {
return false;
}
// public boolean isAggressive() { // public boolean isAggressive() {
// return true; // return true;
// } // }

View file

@ -7,6 +7,7 @@ import common.init.Items;
import common.init.SpeciesRegistry; import common.init.SpeciesRegistry;
import common.item.ItemStack; import common.item.ItemStack;
import common.rng.Random; import common.rng.Random;
import common.util.Equipment;
import common.util.Identifyable; import common.util.Identifyable;
import common.world.World; import common.world.World;
@ -63,6 +64,10 @@ public class EntitySpaceMarine extends EntityNPC {
super(worldIn); super(worldIn);
} }
public boolean hasArmorSlot(Equipment slot) {
return slot == Equipment.SHIELD;
}
public Legion getLegion() { public Legion getLegion() {
Enum legion = this.getNpcClass(); Enum legion = this.getNpcClass();
return legion == null ? Legion.OTHER : (Legion)legion; return legion == null ? Legion.OTHER : (Legion)legion;

View file

@ -44,10 +44,10 @@ public class ContainerPlayer extends Container {
} }
public boolean isItemValid(ItemStack stack) 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() { 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) { 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()) if(!this.inventorySlots.get(5 + slot.getIndex()).getHasStack())
return 5 + slot.getIndex(); return 5 + slot.getIndex();
} }

View file

@ -269,9 +269,9 @@ public final class ItemStack {
return map; return map;
} }
public Map<Attribute, Float> getArmorModifiers(Equipment slot) { public Map<Attribute, Float> getArmorModifiers(EntityNPC entity, Equipment slot) {
Map<Attribute, Float> map = Maps.newEnumMap(Attribute.class); Map<Attribute, Float> 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); armor.getArmorModifiers(map);
return map; return map;
} }

View file

@ -72,7 +72,7 @@ public class ItemArmor extends Item {
} }
public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityNPC playerIn) { 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) { if(playerIn.getArmor(slot) == null) {
playerIn.setArmor(slot, itemStackIn.copy(1)); playerIn.setArmor(slot, itemStackIn.copy(1));
itemStackIn.decrSize(); itemStackIn.decrSize();
@ -106,7 +106,7 @@ public class ItemArmor extends Item {
public boolean test(EntityNPC entity) { public boolean test(EntityNPC entity) {
if(!entity.isEntityAlive()) if(!entity.isEntityAlive())
return false; return false;
for(Equipment slot : ItemArmor.this.type.getPossibleSlots()) { for(Equipment slot : ItemArmor.this.type.getPossibleSlots(entity)) {
if(entity.getArmor(slot) == null) if(entity.getArmor(slot) == null)
return true; return true;
} }
@ -116,7 +116,7 @@ public class ItemArmor extends Item {
if(list.size() > 0) { if(list.size() > 0) {
EntityNPC entitylivingbase = list.get(0); EntityNPC entitylivingbase = list.get(0);
for(Equipment slot : this.type.getPossibleSlots()) { for(Equipment slot : this.type.getPossibleSlots(entitylivingbase)) {
if(entitylivingbase.getArmor(slot) == null) { if(entitylivingbase.getArmor(slot) == null) {
entitylivingbase.setArmor(slot, stack.copy(1)); entitylivingbase.setArmor(slot, stack.copy(1));
stack.decrSize(); stack.decrSize();

View file

@ -2,6 +2,7 @@ package common.util;
import common.enchantment.EnchantmentType; import common.enchantment.EnchantmentType;
import common.entity.animal.EntityHorse; import common.entity.animal.EntityHorse;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving; import common.entity.types.EntityLiving;
import common.init.ToolMaterial; import common.init.ToolMaterial;
@ -186,11 +187,11 @@ public enum Equipment implements Identifyable, Displayable {
return this.animalType; return this.animalType;
} }
public Equipment[] getPossibleSlots() { public Equipment[] getPossibleSlots(EntityNPC entity) {
return this.isRing() ? new Equipment[] {RING_LEFT_A, RING_LEFT_B, RING_RIGHT_A, RING_RIGHT_B} : new Equipment[] {this.isArmor() ? this : null}; 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) { public boolean canUseInSlot(EntityNPC entity, Equipment slot) {
return slot == null || !slot.isArmor() || this == slot || (this.isRing() && slot.isRing()); return slot == null || !slot.isArmor() || ((this == slot || (this.isRing() && slot.isRing())) && entity.hasArmorSlot(slot));
} }
} }