Инвентарь с броней у существ

83
4
23
Мне необходимо переделать систему рук и брони моим существам. Для этого у меня есть классы инвентаря и самой сущности
Java:
public class HumanInventory extends SimpleInventory {
    private final DefaultedList<ItemStack> armor;
    private final DefaultedList<ItemStack> hands;

    public HumanInventory() {
        super(56);
        armor = DefaultedList.ofSize(4, ItemStack.EMPTY);
        hands = DefaultedList.ofSize(2, ItemStack.EMPTY);
    }

    /*
     * 3 - HELMET
     * 2 - CHEST
     * 1 - LEGS
     * 0 - BOOTS
     */
    public DefaultedList<ItemStack> getArmor() {
        return armor;
    }

    public ItemStack getMainHandItemStack() {
        return hands.get(0);
    }

    public ItemStack getOffHandItemStack() {
        return hands.get(1);
    }
    
    public Hand getEmptyHand() {
        if (getMainHandItemStack() == ItemStack.EMPTY) {
            return Hand.MAIN_HAND;
        } else if (getOffHandItemStack() == ItemStack.EMPTY) {
            return Hand.OFF_HAND;
        }
        return null;
    }

    public void setMainHandItemStack(ItemStack stack) {
        hands.set(0, stack);
    }

    public void setOffHandItemStack(ItemStack stack) {
        hands.set(1, stack);
    }
}
Java:
public class HumanEntity extends PassiveEntity {
    private HumanInventory inventory;

    public HumanEntity(World world) {
        super(ModEntityType.HUMAN, world);
    }

    public HumanEntity(EntityType<Entity> entityEntityType, World world) {
        super(ModEntityType.HUMAN, world);
        inventory = new HumanInventory();
    }

    @Override
    public Iterable<ItemStack> getArmorItems() {
        return inventory.getArmor();
    }

    @Override
    public ItemStack getMainHandStack() {
        return inventory.getMainHandItemStack();
    }

    @Override
    public ItemStack getOffHandStack() {
        return inventory.getOffHandItemStack();
    }

    @Override
    public ItemStack getStackInHand(Hand hand) {
        return hand == Hand.OFF_HAND ? getOffHandStack() : getMainHandStack();
    }

    @Override
    public Iterable<ItemStack> getItemsHand() {
        return inventory.getHands();
    }

    @Override
    public void setStackInHand(Hand hand, ItemStack stack) {
        switch (hand) {
            case OFF_HAND:
                inventory.setOffHandItemStack(stack);
                break;
            case MAIN_HAND:
                inventory.setMainHandItemStack(stack);
                break;
        }
    }

    @Override
    public boolean canPickUpLoot() {
        return true;
    }

    @Override
    protected void equipLootStack(EquipmentSlot slot, ItemStack stack) {
        if (stack.getItem() instanceof ArmorItem) {
            equip(slot.getEntitySlotId(), stack);
        } else {
            Hand empty;
            if (inventory.canInsert(stack)) {
                inventory.addStack(stack);
            } else if ((empty = inventory.getEmptyHand()) != null) {
                setStackInHand(empty, stack);
            }
        }
    }

    @Override
    public boolean equip(int slot, ItemStack item) {
        DefaultedList<ItemStack> armor = inventory.getArmor();
        if (slot == 5) {
            inventory.setMainHandItemStack(item);
        } else if (slot == 6) {
            inventory.setOffHandItemStack(item);
        } else if (slot == 0 || slot == 1 || slot == 2 || slot == 3) {
           dropStack(armor.get(slot));
           armor.set(slot, item);
        } else {
            return false;
        }
        return true;
    }

    @Override
    public void onDeath(DamageSource source) {
        for (ItemStack item: inventory.clearToList()) {
            if (!world.isClient()) {
                world.spawnEntity(new ItemEntity(world, getX(), getY(), getZ(), item));
            }
        }
        for (ItemStack armor: inventory.getArmor()) {
            if (!world.isClient()) {
                world.spawnEntity(new ItemEntity(world, getX(), getY(), getZ(), armor));
            }
        }
        dropStack(getMainHandStack());
        dropStack(getOffHandStack());
        super.onDeath(source);
    }

    @Nullable
    @Override
    public PassiveEntity createChild(ServerWorld world, PassiveEntity entity) {
        return null;
    }
}

Броня не отображается, и судя по всему даже не надевается на моба:
1617018347743.png
1617018394764.png

Java:
// Entity.class
   public Iterable<ItemStack> getItemsEquipped() {
      return Iterables.concat(this.getItemsHand(), this.getArmorItems());
   }
// LivingEntity.class
  public float getArmorVisibility() {
      Iterable<ItemStack> iterable = this.getArmorItems();
      int i = 0;
      int j = 0;

      for(Iterator var4 = iterable.iterator(); var4.hasNext(); ++i) {
         ItemStack itemStack = (ItemStack)var4.next();
         if (!itemStack.isEmpty()) {
            ++j;
         }
      }

      return i > 0 ? (float)j / (float)i : 0.0F;
   }
В чем проблема?
 
83
4
23
В рендере сущности есть ArmorFeatureRenderer, т.е. дело не в этом скорее всего. Я думаю проблема со слотами, т.е. слот предмета не соответсвтует слоту для рендера, хз как объяснить. Такие слоты были взяты из EquipmentSlot:

Java:
   // первое число - слот для существа, второе - для стоек
   MAINHAND(EquipmentSlot.Type.HAND, 0, 0, "mainhand"),
   OFFHAND(EquipmentSlot.Type.HAND, 1, 5, "offhand"),
   FEET(EquipmentSlot.Type.ARMOR, 0, 1, "feet"),
   LEGS(EquipmentSlot.Type.ARMOR, 1, 2, "legs"),
   CHEST(EquipmentSlot.Type.ARMOR, 2, 3, "chest"),
   HEAD(EquipmentSlot.Type.ARMOR, 3, 4, "head");
 
Сверху