diff --git a/src/main/java/com/gmail/nossr50/listeners/HardcoreListener.java b/src/main/java/com/gmail/nossr50/listeners/HardcoreListener.java deleted file mode 100644 index 1e646ee6d..000000000 --- a/src/main/java/com/gmail/nossr50/listeners/HardcoreListener.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.gmail.nossr50.listeners; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; - -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.util.Hardcore; -import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.Permissions; - -public class HardcoreListener implements Listener { - /** - * Monitor PlayerDeath events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerDeath(PlayerDeathEvent event) { - if (!Config.getInstance().getHardcoreEnabled()) { - return; - } - - Player player = event.getEntity(); - - if (Misc.isNPCPlayer(player)) { - return; - } - - if (!Permissions.hardcoremodeBypass(player)) { - Player killer = player.getKiller(); - - if (killer != null && Config.getInstance().getHardcoreVampirismEnabled()) { - Hardcore.invokeVampirism(killer, player); - } - - Hardcore.invokeStatPenalty(player); - } - } -} diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index b7b010748..a3868b543 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -1,7 +1,10 @@ package com.gmail.nossr50.listeners; +import java.util.List; + import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.LivingEntity; @@ -9,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; @@ -20,6 +24,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.meta.ItemMeta; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.chat.ChatManager; @@ -42,6 +47,7 @@ import com.gmail.nossr50.skills.utilities.AbilityType; import com.gmail.nossr50.skills.utilities.SkillTools; import com.gmail.nossr50.skills.utilities.SkillType; import com.gmail.nossr50.util.BlockChecks; +import com.gmail.nossr50.util.Hardcore; import com.gmail.nossr50.util.ItemChecks; import com.gmail.nossr50.util.Motd; import com.gmail.nossr50.util.Misc; @@ -56,6 +62,76 @@ public class PlayerListener implements Listener { this.plugin = plugin; } + /** + * Handle PlayerDeath events where the event is modified. + * + * @param event The event to modify + */ + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerDeathHigher(PlayerDeathEvent event) { + Player player = event.getEntity(); + + if (Misc.isNPCPlayer(player)) { + return; + } + + PlayerProfile playerProfile = Users.getPlayer(player).getProfile(); + + if (playerProfile.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER) || playerProfile.getAbilityMode(AbilityType.SUPER_BREAKER)) { + for (ItemStack item : event.getDrops()) { + if (item.containsEnchantment(Enchantment.DIG_SPEED)) { + ItemMeta itemMeta = item.getItemMeta(); + + if (itemMeta.hasLore()) { + int efficiencyLevel = item.getEnchantmentLevel(Enchantment.DIG_SPEED); + List itemLore = itemMeta.getLore(); + + if (itemLore.remove("mcMMO Ability Tool")) { + if (efficiencyLevel <= 5) { + item.removeEnchantment(Enchantment.DIG_SPEED); + } + else { + itemMeta.addEnchant(Enchantment.DIG_SPEED, efficiencyLevel - 5, true); + } + + itemMeta.setLore(itemLore); + item.setItemMeta(itemMeta); + return; + } + } + } + } + } + } + + /** + * Monitor PlayerDeath events. + * + * @param event The event to watch + */ + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + if (!Config.getInstance().getHardcoreEnabled()) { + return; + } + + Player player = event.getEntity(); + + if (Misc.isNPCPlayer(player)) { + return; + } + + if (!Permissions.hardcoremodeBypass(player)) { + Player killer = player.getKiller(); + + if (killer != null && Config.getInstance().getHardcoreVampirismEnabled()) { + Hardcore.invokeVampirism(killer, player); + } + + Hardcore.invokeStatPenalty(player); + } + } + /** * Monitor PlayerChangedWorld events. * diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 94a0d15d2..f9773d7a4 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -33,7 +33,6 @@ import com.gmail.nossr50.database.runnables.UserPurgeTask; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.listeners.BlockListener; import com.gmail.nossr50.listeners.EntityListener; -import com.gmail.nossr50.listeners.HardcoreListener; import com.gmail.nossr50.listeners.InventoryListener; import com.gmail.nossr50.listeners.PlayerListener; import com.gmail.nossr50.listeners.WorldListener; @@ -63,7 +62,6 @@ public class mcMMO extends JavaPlugin { private final EntityListener entityListener = new EntityListener(this); private final InventoryListener inventoryListener = new InventoryListener(this); private final WorldListener worldListener = new WorldListener(); - private final HardcoreListener hardcoreListener = new HardcoreListener(); private HashMap tntTracker = new HashMap(); private HashMap furnaceTracker = new HashMap(); @@ -260,7 +258,6 @@ public class mcMMO extends JavaPlugin { pluginManager.registerEvents(entityListener, this); pluginManager.registerEvents(inventoryListener, this); pluginManager.registerEvents(worldListener, this); - pluginManager.registerEvents(hardcoreListener, this); } /**