|
@@ -1,90 +1,79 @@
|
|
|
package com.gmail.nossr50.skills.unarmed;
|
|
|
|
|
|
import com.gmail.nossr50.config.Config;
|
|
|
-import org.bukkit.entity.Item;
|
|
|
+import com.gmail.nossr50.util.sounds.SoundManager;
|
|
|
+import com.gmail.nossr50.util.sounds.SoundType;
|
|
|
+import org.bukkit.Material;
|
|
|
+import org.bukkit.entity.Player;
|
|
|
+import org.bukkit.event.entity.EntityPickupItemEvent;
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
-import org.bukkit.inventory.PlayerInventory;
|
|
|
|
|
|
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();
|
|
|
- int dropAmount = dropStack.getAmount();
|
|
|
-
|
|
|
- if (inventory.containsAtLeast(dropStack, 1)) {
|
|
|
- int nextSlot = 0;
|
|
|
-
|
|
|
- ItemStack[] items = inventory.getStorageContents();
|
|
|
- for (ItemStack itemstack : items) {
|
|
|
- if (dropStack.isSimilar(itemstack)) {
|
|
|
- int itemAmount = itemstack.getAmount();
|
|
|
- int itemMax = itemstack.getMaxStackSize();
|
|
|
-
|
|
|
- ItemStack addStack = itemstack.clone();
|
|
|
-
|
|
|
- if (dropAmount + itemAmount <= itemMax) {
|
|
|
- drop.remove();
|
|
|
- addStack.setAmount(dropAmount + itemAmount);
|
|
|
- items[nextSlot] = addStack;
|
|
|
- inventory.setStorageContents(items);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- addStack.setAmount(itemMax);
|
|
|
- dropAmount = dropAmount + itemAmount - itemMax;
|
|
|
- items[nextSlot] = addStack;
|
|
|
- inventory.setStorageContents(items);
|
|
|
- }
|
|
|
-
|
|
|
- if (dropAmount == 0) {
|
|
|
- drop.remove();
|
|
|
- return true;
|
|
|
+ public static void handleItemPickup(Player player, EntityPickupItemEvent event) {
|
|
|
+ ItemStack[] storageContents = player.getInventory().getStorageContents();
|
|
|
+ ItemStack itemDrop = event.getItem().getItemStack();
|
|
|
+ int heldItemSlotID = player.getInventory().getHeldItemSlot();
|
|
|
+
|
|
|
+ int amount = itemDrop.getAmount();
|
|
|
+ boolean grabbedItem = false;
|
|
|
+
|
|
|
+ for(int i = 0; i <= storageContents.length-1; i++)
|
|
|
+ {
|
|
|
+ if(amount <= 0)
|
|
|
+ break;
|
|
|
+
|
|
|
+ if(i == heldItemSlotID)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ //EMPTY SLOT!
|
|
|
+ if(storageContents[i] == null)
|
|
|
+ {
|
|
|
+ player.getInventory().setItem(i, itemDrop);
|
|
|
+ amount = 0;
|
|
|
+ grabbedItem = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else if(itemDrop.isSimilar(storageContents[i]) && storageContents[i].getAmount() < storageContents[i].getMaxStackSize())
|
|
|
+ {
|
|
|
+ //If we can fit this whole itemstack into this item
|
|
|
+ if(amount + storageContents[i].getAmount() <= storageContents[i].getMaxStackSize())
|
|
|
+ {
|
|
|
+ ItemStack modifiedAmount = storageContents[i];
|
|
|
+ modifiedAmount.setAmount(amount + storageContents[i].getAmount());
|
|
|
+
|
|
|
+ player.getInventory().setItem(i, modifiedAmount);
|
|
|
+ grabbedItem = true;
|
|
|
+ amount = 0;
|
|
|
+ } else {
|
|
|
+ //Add what we can from this stack
|
|
|
+ ItemStack modifiedAmount = storageContents[i];
|
|
|
+ int amountThatCanFit = storageContents[i].getMaxStackSize() - storageContents[i].getAmount();
|
|
|
+ modifiedAmount.setAmount(amountThatCanFit);
|
|
|
+
|
|
|
+ player.getInventory().setItem(i, modifiedAmount);
|
|
|
+
|
|
|
+ //Remove the amount we've added
|
|
|
+ grabbedItem = true;
|
|
|
+ amount -= amountThatCanFit;
|
|
|
}
|
|
|
-
|
|
|
- nextSlot++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (firstEmpty == inventory.getHeldItemSlot()) {
|
|
|
- int nextSlot = firstEmpty + 1;
|
|
|
-
|
|
|
- ItemStack[] items = inventory.getStorageContents();
|
|
|
- for (; nextSlot < items.length; nextSlot++) {
|
|
|
- ItemStack itemstack = items[nextSlot];
|
|
|
-
|
|
|
- if (itemstack == null) {
|
|
|
- drop.remove();
|
|
|
- dropStack.setAmount(dropAmount);
|
|
|
- items[nextSlot] = dropStack;
|
|
|
- inventory.setStorageContents(items);
|
|
|
- return true;
|
|
|
- }
|
|
|
+ if(amount <= 0)
|
|
|
+ event.getItem().remove(); //Cleanup Item
|
|
|
+ else
|
|
|
+ event.getItem().getItemStack().setAmount(amount);
|
|
|
|
|
|
- nextSlot++;
|
|
|
- }
|
|
|
+ event.setCancelled(true);
|
|
|
|
|
|
- // Inventory is full - cancel the item pickup
|
|
|
- if (dropStack.getAmount() == dropAmount) {
|
|
|
- return false;
|
|
|
- } else {
|
|
|
- drop.remove();
|
|
|
- dropStack.setAmount(dropAmount);
|
|
|
- ((Item) drop.getWorld().dropItem(drop.getLocation(), dropStack)).setPickupDelay(0);
|
|
|
- return true;
|
|
|
- }
|
|
|
+ if(grabbedItem)
|
|
|
+ {
|
|
|
+ SoundManager.sendSound(player, player.getLocation(), SoundType.POP);
|
|
|
+ player.updateInventory();
|
|
|
}
|
|
|
- else if (firstEmpty != -1) {
|
|
|
- drop.remove();
|
|
|
- dropStack.setAmount(dropAmount);
|
|
|
- inventory.setItem(firstEmpty, dropStack);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- drop.remove();
|
|
|
- return true;
|
|
|
}
|
|
|
}
|