所以我有一個播放器和一個商店插件。
商店試圖給玩家 16 羊毛。
如果玩家有一個可用的 1 到 63 羊毛(Ofc 有另一個可用的 inv 空間),我的方法應該回傳 true。但是,如果玩家只有 63 羊毛而他的其他空間充滿其他材料,則方法應回傳 false。我的問題是當玩家在 inv.getContents() 中有 1、1 和 1 個羊毛物品堆疊時,我的方法將無法正確計算它。
這是我的代碼:
public static boolean canStackItemToInventory(Player player, ItemStack item) {
Material type = item.getType();
int amount = item.getAmount();
if (type.equals(Material.BOW)) return false;
PlayerInventory inventory = player.getInventory();
int itemsNumber = 0;
for (ItemStack itemStack : inventory.getContents()) {
if (itemStack.getType()!=type) continue;
if (itemStack.getAmount()==itemStack.getMaxStackSize()) continue;
itemsNumber =itemStack.getAmount();
}
itemsNumber =amount;
return itemsNumber <= type.getMaxStackSize();
}
uj5u.com熱心網友回復:
我撰寫了這個函式,它應該根據玩家是否可以持有amount材料回傳 true 或 false type。我沒有測驗過,但它應該可以作業
public boolean hasFreeSpace(Material type, int amount, Player player) {
PlayerInventory inv = player.getInventory();
//check if the player has any free slots
if(inv.firstEmpty() == -1) {
return false;
}
//we will decrement this until we need no more space
int neededSpace = amount;
//look through each itemstack
for(ItemStack stack : inv.getContents()) {
//check if that type of item is the same
if(stack.getType() != type)
continue;
//how many more items until the stack is full
int untilStackIsFull = stack.getMaxStackSize() - stack.getAmount();
//if the stack is full we will basically be subtracting zero, otherwise we subtract off how much it can hold
neededSpace -= untilStackIsFull;
//if we have all the space needed return true
if(neededSpace <= 0)
return true;
}
return false;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/402533.html
標籤:
