0

現在、ディスペンサーを利用するプラグインを作成しています。リスナー中に while ループがあり、ループが壊れる石炭がなくなるまで、ディスペンサーの在庫から 1 個の石炭を削除する必要があります。これは正常にループし、石炭の量を表すために使用される整数のカウントダウンを登録します。ただし、ディスペンサーの在庫は更新されません。何か助けていただければ幸いです。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();
}

            }
4

1 に答える 1

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 つの石炭が削除されます1

于 2013-08-15T15:08:38.690 に答える