- 1,239
- 2
- 24
Есть код,который удаляет ItemStack из инвентаря
Вся проблема в том,что если этот предмет с уроном:
То он не удалит его.
Удаляю так: (ItemUtils - мой класс , ModItems - класс с предметами )
Возможно,если есть другие способы удалить из инвентаря предмет с уроном то ответьте.
Код:
public static boolean consumeItemStack2(IInventory inventory, ItemStack stack)
{
if(getAmount(inventory, stack) >= stack.stackSize)
{
for (int i = 0; i < inventory.getSizeInventory(); i++) {
if(isItemStackEqual(inventory.getStackInSlot(i), stack)){
int amount = Math.min(stack.stackSize, inventory.getStackInSlot(i).stackSize);
if(amount > 0)
{
inventory.getStackInSlot(i).stackSize -= amount;
if(inventory.getStackInSlot(i).stackSize <= 0)
inventory.setInventorySlotContents(i, null);
stack.stackSize -= amount;
}
if(stack.stackSize <= 0)
return true;
}
}
}
return false;
}
public static boolean isItemStackEqual(ItemStack stack, ItemStack stack2)
{
if(stack != null && stack2 != null && stack.getItem() == stack2.getItem() && stack.getItemDamage() == stack2.getItemDamage())
{
if(!stack.hasTagCompound() && !stack2.hasTagCompound())
return true;
else if(stack.hasTagCompound() != stack2.hasTagCompound())
return false;
else if(stack.stackTagCompound.equals(stack2.stackTagCompound))
return true;
}
return false;
}
public static int getAmount(IInventory inventory, ItemStack stack)
{
int amount = 0;
for (int i = 0; i < inventory.getSizeInventory(); i++) {
if(isItemStackEqual(inventory.getStackInSlot(i), stack)){
amount += inventory.getStackInSlot(i).stackSize;
}
}
return amount;
}
Вся проблема в том,что если этот предмет с уроном:
То он не удалит его.
Удаляю так: (ItemUtils - мой класс , ModItems - класс с предметами )
Код:
ItemStack st = new ItemStack(ModItems.ar);
ItemUtils.consumeItemStack2(player.inventory , st);
Возможно,если есть другие способы удалить из инвентаря предмет с уроном то ответьте.