diff --git a/Changelog.txt b/Changelog.txt index 65e0c2b15..2e2f320ae 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -15,6 +15,7 @@ Version 1.4.06-dev = Fixed wolves from Call of the Wild only having 8 health = Fixed bug where /party chat was not working ! Changed Chimaera Wing's recipe result to use the ingredient Material + ! Players will no longer pickup items to their hotbar while using Unarmed Version 1.4.05 + Added option to allow refreshing of chunks after block-breaking abilities. (Disabled by default) diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java index 6c1a006f2..e54f367dd 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java @@ -85,6 +85,8 @@ public class McMMOPlayer { private int recentlyHurt; private int respawnATS; + private SkillType lastGained; + public McMMOPlayer(Player player) { String playerName = player.getName(); @@ -491,6 +493,7 @@ public class McMMOPlayer { spoutHud.setLastGained(skillType); } + lastGained = skillType; SkillUtils.xpCheckSkill(skillType, player, profile); } @@ -642,6 +645,14 @@ public class McMMOPlayer { partyChatMode = !partyChatMode; } + public SkillType getLastGained() { + return lastGained; + } + + public void setLastGained(SkillType type) { + this.lastGained = type; + } + /** * Modifies an experience gain using skill modifiers, global rate and perks * diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 71955d03f..e6a7b2444 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -1,5 +1,7 @@ package com.gmail.nossr50.listeners; +import java.util.Iterator; + import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -25,6 +27,7 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.chat.ChatManager; @@ -200,7 +203,8 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerPickupItem(PlayerPickupItemEvent event) { Player player = event.getPlayer(); - Item item = event.getItem(); + Item drop = event.getItem(); + ItemStack dropStack = drop.getItemStack(); if (Misc.isNPCEntity(player)) { return; @@ -208,8 +212,32 @@ public class PlayerListener implements Listener { McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); - if (mcMMOPlayer.inParty() && ItemUtils.isShareable(item.getItemStack())) { - ShareHandler.handleItemShare(event, mcMMOPlayer); + if (mcMMOPlayer.inParty() && ItemUtils.isShareable(dropStack)) { + event.setCancelled(ShareHandler.handleItemShare(drop, mcMMOPlayer)); + } + + if (event.isCancelled()) { + return; + } + + PlayerInventory inventory = player.getInventory(); + int firstEmpty = inventory.firstEmpty(); + + if (mcMMOPlayer.getLastGained() == SkillType.UNARMED && ItemUtils.isShareable(dropStack) && firstEmpty == inventory.getHeldItemSlot()) { + int nextSlot = firstEmpty + 1; + + for (Iterator iterator = inventory.iterator(nextSlot); iterator.hasNext();) { + ItemStack itemstack = iterator.next(); + + if (itemstack == null) { + inventory.setItem(nextSlot, dropStack); + player.updateInventory(); + event.setCancelled(true); + return; + } + + nextSlot++; + } } } diff --git a/src/main/java/com/gmail/nossr50/party/ShareHandler.java b/src/main/java/com/gmail/nossr50/party/ShareHandler.java index 878cbdc9f..74c3cfe65 100644 --- a/src/main/java/com/gmail/nossr50/party/ShareHandler.java +++ b/src/main/java/com/gmail/nossr50/party/ShareHandler.java @@ -91,9 +91,8 @@ public final class ShareHandler { * @param mcMMOPlayer Player who picked up the item * @return True if the item has been shared */ - public static boolean handleItemShare(PlayerPickupItemEvent event, McMMOPlayer mcMMOPlayer) { - Item item = event.getItem(); - ItemStack itemStack = item.getItemStack(); + public static boolean handleItemShare(Item drop, McMMOPlayer mcMMOPlayer) { + ItemStack itemStack = drop.getItemStack(); Party party = mcMMOPlayer.getParty(); Player player = mcMMOPlayer.getPlayer(); Player winningPlayer = null; @@ -126,8 +125,7 @@ public final class ShareHandler { nearMembers.add(player); partySize = nearMembers.size(); - event.setCancelled(true); - item.remove(); + drop.remove(); int itemWeight = ItemWeightConfig.getInstance().getItemWeight(itemStack.getType()); for (int i = 0; i < itemStack.getAmount(); i++) { @@ -172,8 +170,7 @@ public final class ShareHandler { partySize = nearMembers.size() + 1; - event.setCancelled(true); - item.remove(); + drop.remove(); for (int i = 0; i < itemStack.getAmount(); i++) { int randomMember = Misc.getRandom().nextInt(partySize);