我目前正在创建一个利用分配器的插件。我在监听器中有一个while循环,它应该从分配器的库存中移除一块煤,直到没有剩余的循环将会破坏。它循环很好并记录用于重新定量煤量的整数的倒计时。然而,分配器的库存不会更新,任何帮助将不胜感激。这是while循环中包含的代码
Block temp;
int coal;
BlockState state = block.getState();
Inventory sourceInv = ((InventoryHolder) state).getInventory();
while (sourceInv.contains(Material.COAL))
{
state.update();
temp = drillSpenser.getBlock().getRelative(BlockFace.DOWN);
temp.breakNaturally();
int index = sourceInv.first(Material.COAL);
ItemStack stack = sourceInv.getItem(index);
coal = stack.getAmount();
System.out.println(coal);
if (coal == 0)
{
sourceInv.remove(Material.COAL);
break;
}
coal--;
ItemStack newItem = new ItemStack(Material.COAL, coal);
sourceInv.remove(Material.COAL);
sourceInv.addItem(newItem);
state.update();
block.getState().update();
}
}
答案 0 :(得分:1)
试试这个
ItemStack itemStack = new ItemStack(Material.COLA, 1);
sourceInv.remove(itemStack);
或
ItemStack itemStack = new ItemStack(Material.COLA, 1);
sourceInv.removeItem(itemStack);
而不是
ItemStack newItem = new ItemStack(Material.COAL, coal);
sourceInv.remove(Material.COAL);
sourceInv.addItem(newItem);
这应该从一个大于1
的堆栈中移除一个煤。