diff --git a/Changelog.txt b/Changelog.txt index f6e4627f1..4a5ccc3fb 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -20,6 +20,7 @@ Version 1.4.00-dev = Fixed Woodcutting accidentally using Mining double drop values. = Fixed Hylian Luck not removing the block-placed flag from flowers. = Fixed Hylian Luck not checking the block-placed flag on flowers. + ! Changed how Berserk handles not picking up items to avoid listening to PlayerPickupItemEvent ! Moved Hylian Luck into a separate listener since it actually cancels the event and shouldn't just be on MONITOR. ! Changed how Tree Feller is handled, it should now put less stress on the CPU ! Changed Fisherman's Diet and Farmer's Diet to use two seperate config values diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 8511138fb..3da942ee9 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -42,6 +42,7 @@ import com.gmail.nossr50.skills.repair.Salvage; import com.gmail.nossr50.skills.taming.TamingManager; import com.gmail.nossr50.util.BlockChecks; import com.gmail.nossr50.util.Item; +import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Users; @@ -62,26 +63,20 @@ public class PlayerListener implements Listener { public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event) { Player player = event.getPlayer(); - if (player.hasMetadata("NPC")) return; // Check if this player is a Citizens NPC - - PlayerProfile profile = Users.getProfile(player); - - if (profile == null) { + if (Misc.isNPC(player)) { return; } - if (profile.getGodMode()) { - if (!Permissions.mcgod(player)) { - profile.toggleGodMode(); - player.sendMessage(LocaleLoader.getString("Commands.GodMode.Forbidden")); - } + PlayerProfile profile = Users.getProfile(player); + + if (profile.getGodMode() && !Permissions.mcgod(player)) { + profile.toggleGodMode(); + player.sendMessage(LocaleLoader.getString("Commands.GodMode.Forbidden")); } - if (profile.inParty()) { - if (!Permissions.party(player)) { - profile.removeParty(); - player.sendMessage(LocaleLoader.getString("Party.Forbidden")); - } + if (profile.inParty() && !Permissions.party(player)) { + profile.removeParty(); + player.sendMessage(LocaleLoader.getString("Party.Forbidden")); } } @@ -122,27 +117,6 @@ public class PlayerListener implements Listener { } } - /** - * Monitor PlaterPickupItem events. - * - * @param event The event to watch - */ - @EventHandler(ignoreCancelled = true) - public void onPlayerPickupItem(PlayerPickupItemEvent event) { - - if (event.getPlayer().hasMetadata("NPC")) return; // Check if this player is a Citizens NPC - - PlayerProfile profile = Users.getProfile(event.getPlayer()); - - if (profile == null) { - return; - } - - if (profile.getAbilityMode(AbilityType.BERSERK)) { - event.setCancelled(true); - } - } - /** * Monitor PlayerLogin events. * diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java index b06aa3c4e..80f3a6f20 100644 --- a/src/main/java/com/gmail/nossr50/skills/Skills.java +++ b/src/main/java/com/gmail/nossr50/skills/Skills.java @@ -178,6 +178,10 @@ public class Skills { if (ability.getPermissions(player)) { if (profile.getAbilityMode(ability) && (profile.getSkillDATS(ability) * Misc.TIME_CONVERSION_FACTOR) <= curTime) { + if (ability == AbilityType.BERSERK) { + player.setCanPickupItems(true); + } + profile.setAbilityMode(ability, false); profile.setAbilityInformed(ability, false); player.sendMessage(ability.getAbilityOff()); @@ -442,6 +446,9 @@ public class Skills { profile.setSkillDATS(ability, System.currentTimeMillis() + (ticks * Misc.TIME_CONVERSION_FACTOR)); profile.setAbilityMode(ability, true); + if (ability == AbilityType.BERSERK) { + player.setCanPickupItems(false); + } } }