Better handling of picking up items with unarmed.

This commit is contained in:
GJ
2013-04-10 13:20:25 -04:00
parent 8a14d9ac26
commit f4681a282c
2 changed files with 73 additions and 24 deletions

View File

@ -1,5 +1,11 @@
package com.gmail.nossr50.skills.unarmed;
import java.util.Iterator;
import org.bukkit.entity.Item;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.config.Config;
@ -19,4 +25,61 @@ public class Unarmed {
public static boolean blockCrackerSmoothBrick = Config.getInstance().getUnarmedBlockCrackerSmoothbrickToCracked();
public static double berserkDamageModifier = 1.5;
public static boolean handleItemPickup(PlayerInventory inventory, Item drop) {
ItemStack dropStack = drop.getItemStack();
int firstEmpty = inventory.firstEmpty();
if (inventory.containsAtLeast(dropStack, 1)) {
int dropAmount = dropStack.getAmount();
int nextSlot = 0;
for (Iterator<ItemStack> iterator = inventory.iterator(); iterator.hasNext();) {
ItemStack itemstack = iterator.next();
if (itemstack.isSimilar(dropStack)) {
int itemAmount = itemstack.getAmount();
int itemMax = itemstack.getMaxStackSize();
ItemStack addStack = itemstack.clone();
if (dropAmount + itemAmount <= itemMax) {
drop.remove();
addStack.setAmount(dropAmount + itemAmount);
inventory.setItem(nextSlot, addStack);
return true;
}
addStack.setAmount(itemMax);
dropAmount = dropAmount + itemAmount - itemMax;
inventory.setItem(nextSlot, addStack);
}
if (dropAmount == 0) {
drop.remove();
return true;
}
nextSlot++;
}
}
if (firstEmpty == inventory.getHeldItemSlot()) {
int nextSlot = firstEmpty + 1;
for (Iterator<ItemStack> iterator = inventory.iterator(nextSlot); iterator.hasNext();) {
ItemStack itemstack = iterator.next();
if (itemstack == null) {
drop.remove();
inventory.setItem(nextSlot, dropStack);
return true;
}
nextSlot++;
}
}
return false;
}
}