Java 分配器库存未更新bukkit

Java 分配器库存未更新bukkit,java,minecraft,bukkit,Java,Minecraft,Bukkit,我目前正在创建一个插件,利用分配器。在侦听器中,我有一个while循环,它应该从分配器的库存中取出一块煤,直到没有剩余的煤,循环就会中断。它循环精细并记录用于重新发送煤炭数量的整数的倒计时。然而,分配器的库存没有更新,任何帮助都将不胜感激。下面是while循环中包含的代码 Block temp; int coal; BlockState state = block.getState(); Inventory sourceIn

我目前正在创建一个插件,利用分配器。在侦听器中,我有一个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();
}

            }
试试这个

ItemStack itemStack = new ItemStack(Material.COLA, 1);
sourceInv.remove(itemStack);

而不是

ItemStack newItem = new ItemStack(Material.COAL, coal);
sourceInv.remove(Material.COAL);
sourceInv.addItem(newItem);
这应该可以从大于
1

的烟囱中移除一块煤。除了分配器正下方的煤块,您是否曾经打碎过其他煤块?
ItemStack newItem = new ItemStack(Material.COAL, coal);
sourceInv.remove(Material.COAL);
sourceInv.addItem(newItem);