2013-07-14 11 views
0

我目前正在創建一個利用分配器的插件。我有一段時間在一個聽衆的循環中,應該從分配器的庫存中移除一塊煤,直到沒有剩餘的循環將斷開。它循環良好,並記錄用於重新定量煤質的整數的倒數。然而,分配器的庫存不會更新,任何幫助將不勝感激。這裏是包含在while循環代碼飲水機庫存不更新bukkit

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

你是否打破過直接在飲水機下方的任何塊? – hintss

回答

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