| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |