2
0
Эх сурвалжийг харах

Refactor all the listeners!

nossr50 13 жил өмнө
parent
commit
fea3bd6aa4

+ 1 - 6
src/main/java/com/gmail/nossr50/config/Config.java

@@ -300,6 +300,7 @@ public class Config extends ConfigLoader{
 
         // Setup default HUD
         String temp = config.getString("Spout.HUD.Default", "STANDARD");
+        
         for (HUDType x : HUDType.values()) {
             if (x.toString().equalsIgnoreCase(temp)) {
                 defaulthud = x;
@@ -323,12 +324,6 @@ public class Config extends ConfigLoader{
         showDisplayName = config.getBoolean("Spout.Party.HUD.Show_Display_Name", false);
         partybar = config.getBoolean("Spout.Party.HUD.Enabled", true);
 
-        
-
-        
-
-        
-
         enableOnlyActivateWhenSneaking = config.getBoolean("Abilities.Activation.Only_Activate_When_Sneaking", false);
 
         greenTerraCooldown = config.getInt("Abilities.Cooldowns.Green_Terra", 240);

+ 304 - 304
src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java → src/main/java/com/gmail/nossr50/listeners/BlockListener.java

@@ -1,304 +1,304 @@
-package com.gmail.nossr50.listeners;
-
-import java.util.List;
-
-import com.gmail.nossr50.BlockChecks;
-import com.gmail.nossr50.ItemChecks;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.config.Config;
-import com.gmail.nossr50.datatypes.AbilityType;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.datatypes.ToolType;
-import com.gmail.nossr50.skills.Excavation;
-import com.gmail.nossr50.skills.Herbalism;
-import com.gmail.nossr50.skills.Mining;
-import com.gmail.nossr50.skills.Repair;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.WoodCutting;
-import com.gmail.nossr50.spout.SpoutSounds;
-import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
-import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
-
-import org.bukkit.CropState;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.block.BlockDamageEvent;
-import org.bukkit.event.block.BlockPistonExtendEvent;
-import org.bukkit.event.block.BlockPistonRetractEvent;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.metadata.FixedMetadataValue;
-
-import org.getspout.spoutapi.sound.SoundEffect;
-
-public class mcBlockListener implements Listener {
-    private final mcMMO plugin;
-
-    public mcBlockListener(final mcMMO plugin) {
-        this.plugin = plugin;
-    }
-
-    /**
-     * Monitor BlockPistonExtend events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.MONITOR)
-    public void onBlockPistonExtend(BlockPistonExtendEvent event) {
-        List<Block> blocks = event.getBlocks();
-        BlockFace direction = event.getDirection();
-
-        for (Block b : blocks) {
-            if (b.hasMetadata("mcmmoPlacedBlock")) {
-                b.getRelative(direction).setMetadata("mcmmoNeedsTracking", new FixedMetadataValue(plugin, true));
-                b.removeMetadata("mcmmoPlacedBlock", plugin);
-                }
-        }
-
-        for (Block b : blocks) {
-            if (b.getRelative(direction).hasMetadata("mcmmoNeedsTracking")) {
-                b.getRelative(direction).setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
-                b.getRelative(direction).removeMetadata("mcmmoNeedsTracking", plugin);
-            }
-        }
-    }
-
-    /**
-     * Monitor BlockPistonRetract events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.MONITOR)
-    public void onBlockPistonRetract(BlockPistonRetractEvent event) {
-        Block block = event.getRetractLocation().getBlock();
-
-        if (block.hasMetadata("mcmmoPlacedBlock")) {
-            block.removeMetadata("mcmmoPlacedBlock", plugin);
-            event.getBlock().getRelative(event.getDirection()).setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
-        }
-    }
-
-    /**
-     * Monitor BlockPlace events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onBlockPlace(BlockPlaceEvent event) {
-        Block block = event.getBlock();
-        Player player = event.getPlayer();
-        int id = block.getTypeId();
-        Material mat = block.getType();
-
-        /* Code to prevent issues with placed falling Sand/Gravel not being tracked */
-        if (mat.equals(Material.SAND) || mat.equals(Material.GRAVEL)) {
-            for (int y = -1;  y + block.getY() >= 0; y--) {
-                if (block.getRelative(0, y, 0).getType().equals(Material.AIR)) {
-                    continue;
-                }
-                else {
-                    Block newLocation = block.getRelative(0, y + 1, 0);
-                    newLocation.setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
-                    break;
-                }
-            }
-        }
-
-        /* Check if the blocks placed should be monitored so they do not give out XP in the future */
-        if (BlockChecks.shouldBeWatched(mat)) {
-            block.setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
-        }
-
-        if (id == Config.anvilID && Config.anvilmessages) {
-            Repair.placedAnvilCheck(player, id);
-        }
-    }
-
-    /**
-     * Monitor BlockBreak events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onBlockBreak(BlockBreakEvent event) {
-        Player player = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(player);
-        Block block = event.getBlock();
-        Material mat = block.getType();
-        ItemStack inhand = player.getItemInHand();
-
-        if (event instanceof FakeBlockBreakEvent) {
-            return;
-        }
-
-        /*
-         * HERBALISM
-         */
-
-        /* Green Terra */
-        if (PP.getToolPreparationMode(ToolType.HOE) && mcPermissions.getInstance().greenTerra(player) && ((mat.equals(Material.CROPS) && block.getData() == CropState.RIPE.getData()) || Herbalism.canBeGreenTerra(mat))) {
-            Skills.abilityCheck(player, SkillType.HERBALISM);
-        }
-
-        /* Triple drops */
-        if (PP.getAbilityMode(AbilityType.GREEN_TERRA) && Herbalism.canBeGreenTerra(mat)) {
-            Herbalism.herbalismProcCheck(block, player, event, plugin);
-        }
-
-        if (mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(mat)) {
-            Herbalism.herbalismProcCheck(block, player, event, plugin);
-        }
-
-        /*
-         * MINING
-         */
-
-        if (mcPermissions.getInstance().mining(player) && Mining.canBeSuperBroken(mat)) {
-            if (Config.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
-                Mining.miningBlockCheck(player, block);
-            }
-            else if (!Config.miningrequirespickaxe) {
-                Mining.miningBlockCheck(player, block);
-            }
-        }
-
-        /*
-         * WOOD CUTTING
-         */
-
-        if (mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) {
-            if (Config.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
-                WoodCutting.woodcuttingBlockCheck(player, block);
-            }
-            else if (!Config.woodcuttingrequiresaxe) {
-                WoodCutting.woodcuttingBlockCheck(player, block);
-            }
-        }
-
-        if (PP.getAbilityMode(AbilityType.TREE_FELLER) && mcPermissions.getInstance().treeFeller(player)) {
-            WoodCutting.treeFeller(event);
-        }
-
-        /*
-         * EXCAVATION
-         */
-
-        if (Excavation.canBeGigaDrillBroken(mat) && mcPermissions.getInstance().excavation(player) && !block.hasMetadata("mcmmoPlacedBlock")) {
-            if (Config.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
-                Excavation.excavationProcCheck(block, player);
-            }
-            else if (!Config.excavationRequiresShovel) {
-                Excavation.excavationProcCheck(block, player);
-            }
-        }
-
-        //Remove metadata when broken
-        if (block.hasMetadata("mcmmoPlacedBlock") && BlockChecks.shouldBeWatched(mat)) {
-            block.removeMetadata("mcmmoPlacedBlock", plugin);
-        }
-    }
-
-    /**
-     * Monitor BlockDamage events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onBlockDamage(BlockDamageEvent event) {
-        final int LEAF_BLOWER_LEVEL = 100;
-
-        Player player = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(player);
-        ItemStack inhand = player.getItemInHand();
-        Block block = event.getBlock();
-        Material mat = block.getType();
-
-        /*
-         * ABILITY PREPARATION CHECKS
-         */
-        if (BlockChecks.abilityBlockCheck(mat)) {
-            if (PP.getToolPreparationMode(ToolType.HOE) && (Herbalism.canBeGreenTerra(mat) || Herbalism.makeMossy(mat))) {
-                Skills.abilityCheck(player, SkillType.HERBALISM);
-            }
-            else if (PP.getToolPreparationMode(ToolType.AXE) && mat.equals(Material.LOG) && mcPermissions.getInstance().treeFeller(player)) {  //Why are we checking the permissions here?
-                Skills.abilityCheck(player, SkillType.WOODCUTTING);
-            }
-            else if (PP.getToolPreparationMode(ToolType.PICKAXE) && Mining.canBeSuperBroken(mat)) {
-                Skills.abilityCheck(player, SkillType.MINING);
-            }
-            else if (PP.getToolPreparationMode(ToolType.SHOVEL) && Excavation.canBeGigaDrillBroken(mat)) {
-                Skills.abilityCheck(player, SkillType.EXCAVATION);
-            }
-            else if (PP.getToolPreparationMode(ToolType.FISTS) && (Excavation.canBeGigaDrillBroken(mat) || mat.equals(Material.SNOW))) {
-                Skills.abilityCheck(player, SkillType.UNARMED);
-            }
-        }
-
-        /* TREE FELLER SOUNDS */
-        if (Config.spoutEnabled && mat.equals(Material.LOG) && PP.getAbilityMode(AbilityType.TREE_FELLER)) {
-            SpoutSounds.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
-        }
-
-        /*
-         * ABILITY TRIGGER CHECKS
-         */
-        if (PP.getAbilityMode(AbilityType.GREEN_TERRA) && mcPermissions.getInstance().greenTerra(player) && Herbalism.makeMossy(mat)) {
-            Herbalism.greenTerra(player, block);
-        }
-        else if (PP.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER) && Skills.triggerCheck(player, block, AbilityType.GIGA_DRILL_BREAKER)) {
-            if (Config.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
-                event.setInstaBreak(true);
-                Excavation.gigaDrillBreaker(player, block);
-            }
-            else if (!Config.excavationRequiresShovel) {
-                event.setInstaBreak(true);
-                Excavation.gigaDrillBreaker(player, block);
-            }
-        }
-        else if (PP.getAbilityMode(AbilityType.BERSERK) && Skills.triggerCheck(player, block, AbilityType.BERSERK)) {
-            if (inhand.getType().equals(Material.AIR)) {
-                FakePlayerAnimationEvent armswing = new FakePlayerAnimationEvent(player);
-                plugin.getServer().getPluginManager().callEvent(armswing);
-
-                event.setInstaBreak(true);
-            }
-
-            if (Config.spoutEnabled) {
-                SpoutSounds.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
-            }
-        }
-        else if (PP.getAbilityMode(AbilityType.SUPER_BREAKER) && Skills.triggerCheck(player, block, AbilityType.SUPER_BREAKER)) {
-            if (Config.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
-                event.setInstaBreak(true);
-                Mining.SuperBreakerBlockCheck(player, block);
-            }
-            else if (!Config.miningrequirespickaxe) {
-                event.setInstaBreak(true);
-                Mining.SuperBreakerBlockCheck(player, block);
-            }
-        }
-        else if (PP.getSkillLevel(SkillType.WOODCUTTING) >= LEAF_BLOWER_LEVEL && mat.equals(Material.LEAVES)) {
-            if (Config.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
-                if (Skills.triggerCheck(player, block, AbilityType.LEAF_BLOWER)) {
-                    event.setInstaBreak(true);
-                    WoodCutting.leafBlower(player, block);
-                }
-            }
-            else if (!Config.woodcuttingrequiresaxe && !inhand.getType().equals(Material.SHEARS)) {
-                if (Skills.triggerCheck(player, block, AbilityType.LEAF_BLOWER)) {
-                    event.setInstaBreak(true);
-                    WoodCutting.leafBlower(player, block);
-                }
-            }
-        }
-    }
-}
+package com.gmail.nossr50.listeners;
+
+import java.util.List;
+
+import com.gmail.nossr50.BlockChecks;
+import com.gmail.nossr50.ItemChecks;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.config.Config;
+import com.gmail.nossr50.datatypes.AbilityType;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.datatypes.ToolType;
+import com.gmail.nossr50.skills.Excavation;
+import com.gmail.nossr50.skills.Herbalism;
+import com.gmail.nossr50.skills.Mining;
+import com.gmail.nossr50.skills.Repair;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.WoodCutting;
+import com.gmail.nossr50.spout.SpoutSounds;
+import com.gmail.nossr50.events.fake.FakeBlockBreakEvent;
+import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent;
+
+import org.bukkit.CropState;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockDamageEvent;
+import org.bukkit.event.block.BlockPistonExtendEvent;
+import org.bukkit.event.block.BlockPistonRetractEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.metadata.FixedMetadataValue;
+
+import org.getspout.spoutapi.sound.SoundEffect;
+
+public class BlockListener implements Listener {
+    private final mcMMO plugin;
+
+    public BlockListener(final mcMMO plugin) {
+        this.plugin = plugin;
+    }
+
+    /**
+     * Monitor BlockPistonExtend events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.MONITOR)
+    public void onBlockPistonExtend(BlockPistonExtendEvent event) {
+        List<Block> blocks = event.getBlocks();
+        BlockFace direction = event.getDirection();
+
+        for (Block b : blocks) {
+            if (b.hasMetadata("mcmmoPlacedBlock")) {
+                b.getRelative(direction).setMetadata("mcmmoNeedsTracking", new FixedMetadataValue(plugin, true));
+                b.removeMetadata("mcmmoPlacedBlock", plugin);
+                }
+        }
+
+        for (Block b : blocks) {
+            if (b.getRelative(direction).hasMetadata("mcmmoNeedsTracking")) {
+                b.getRelative(direction).setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
+                b.getRelative(direction).removeMetadata("mcmmoNeedsTracking", plugin);
+            }
+        }
+    }
+
+    /**
+     * Monitor BlockPistonRetract events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.MONITOR)
+    public void onBlockPistonRetract(BlockPistonRetractEvent event) {
+        Block block = event.getRetractLocation().getBlock();
+
+        if (block.hasMetadata("mcmmoPlacedBlock")) {
+            block.removeMetadata("mcmmoPlacedBlock", plugin);
+            event.getBlock().getRelative(event.getDirection()).setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
+        }
+    }
+
+    /**
+     * Monitor BlockPlace events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onBlockPlace(BlockPlaceEvent event) {
+        Block block = event.getBlock();
+        Player player = event.getPlayer();
+        int id = block.getTypeId();
+        Material mat = block.getType();
+
+        /* Code to prevent issues with placed falling Sand/Gravel not being tracked */
+        if (mat.equals(Material.SAND) || mat.equals(Material.GRAVEL)) {
+            for (int y = -1;  y + block.getY() >= 0; y--) {
+                if (block.getRelative(0, y, 0).getType().equals(Material.AIR)) {
+                    continue;
+                }
+                else {
+                    Block newLocation = block.getRelative(0, y + 1, 0);
+                    newLocation.setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
+                    break;
+                }
+            }
+        }
+
+        /* Check if the blocks placed should be monitored so they do not give out XP in the future */
+        if (BlockChecks.shouldBeWatched(mat)) {
+            block.setMetadata("mcmmoPlacedBlock", new FixedMetadataValue(plugin, true));
+        }
+
+        if (id == Config.anvilID && Config.anvilmessages) {
+            Repair.placedAnvilCheck(player, id);
+        }
+    }
+
+    /**
+     * Monitor BlockBreak events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onBlockBreak(BlockBreakEvent event) {
+        Player player = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(player);
+        Block block = event.getBlock();
+        Material mat = block.getType();
+        ItemStack inhand = player.getItemInHand();
+
+        if (event instanceof FakeBlockBreakEvent) {
+            return;
+        }
+
+        /*
+         * HERBALISM
+         */
+
+        /* Green Terra */
+        if (PP.getToolPreparationMode(ToolType.HOE) && mcPermissions.getInstance().greenTerra(player) && ((mat.equals(Material.CROPS) && block.getData() == CropState.RIPE.getData()) || Herbalism.canBeGreenTerra(mat))) {
+            Skills.abilityCheck(player, SkillType.HERBALISM);
+        }
+
+        /* Triple drops */
+        if (PP.getAbilityMode(AbilityType.GREEN_TERRA) && Herbalism.canBeGreenTerra(mat)) {
+            Herbalism.herbalismProcCheck(block, player, event, plugin);
+        }
+
+        if (mcPermissions.getInstance().herbalism(player) && Herbalism.canBeGreenTerra(mat)) {
+            Herbalism.herbalismProcCheck(block, player, event, plugin);
+        }
+
+        /*
+         * MINING
+         */
+
+        if (mcPermissions.getInstance().mining(player) && Mining.canBeSuperBroken(mat)) {
+            if (Config.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
+                Mining.miningBlockCheck(player, block);
+            }
+            else if (!Config.miningrequirespickaxe) {
+                Mining.miningBlockCheck(player, block);
+            }
+        }
+
+        /*
+         * WOOD CUTTING
+         */
+
+        if (mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) {
+            if (Config.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
+                WoodCutting.woodcuttingBlockCheck(player, block);
+            }
+            else if (!Config.woodcuttingrequiresaxe) {
+                WoodCutting.woodcuttingBlockCheck(player, block);
+            }
+        }
+
+        if (PP.getAbilityMode(AbilityType.TREE_FELLER) && mcPermissions.getInstance().treeFeller(player)) {
+            WoodCutting.treeFeller(event);
+        }
+
+        /*
+         * EXCAVATION
+         */
+
+        if (Excavation.canBeGigaDrillBroken(mat) && mcPermissions.getInstance().excavation(player) && !block.hasMetadata("mcmmoPlacedBlock")) {
+            if (Config.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
+                Excavation.excavationProcCheck(block, player);
+            }
+            else if (!Config.excavationRequiresShovel) {
+                Excavation.excavationProcCheck(block, player);
+            }
+        }
+
+        //Remove metadata when broken
+        if (block.hasMetadata("mcmmoPlacedBlock") && BlockChecks.shouldBeWatched(mat)) {
+            block.removeMetadata("mcmmoPlacedBlock", plugin);
+        }
+    }
+
+    /**
+     * Monitor BlockDamage events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onBlockDamage(BlockDamageEvent event) {
+        final int LEAF_BLOWER_LEVEL = 100;
+
+        Player player = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(player);
+        ItemStack inhand = player.getItemInHand();
+        Block block = event.getBlock();
+        Material mat = block.getType();
+
+        /*
+         * ABILITY PREPARATION CHECKS
+         */
+        if (BlockChecks.abilityBlockCheck(mat)) {
+            if (PP.getToolPreparationMode(ToolType.HOE) && (Herbalism.canBeGreenTerra(mat) || Herbalism.makeMossy(mat))) {
+                Skills.abilityCheck(player, SkillType.HERBALISM);
+            }
+            else if (PP.getToolPreparationMode(ToolType.AXE) && mat.equals(Material.LOG) && mcPermissions.getInstance().treeFeller(player)) {  //Why are we checking the permissions here?
+                Skills.abilityCheck(player, SkillType.WOODCUTTING);
+            }
+            else if (PP.getToolPreparationMode(ToolType.PICKAXE) && Mining.canBeSuperBroken(mat)) {
+                Skills.abilityCheck(player, SkillType.MINING);
+            }
+            else if (PP.getToolPreparationMode(ToolType.SHOVEL) && Excavation.canBeGigaDrillBroken(mat)) {
+                Skills.abilityCheck(player, SkillType.EXCAVATION);
+            }
+            else if (PP.getToolPreparationMode(ToolType.FISTS) && (Excavation.canBeGigaDrillBroken(mat) || mat.equals(Material.SNOW))) {
+                Skills.abilityCheck(player, SkillType.UNARMED);
+            }
+        }
+
+        /* TREE FELLER SOUNDS */
+        if (Config.spoutEnabled && mat.equals(Material.LOG) && PP.getAbilityMode(AbilityType.TREE_FELLER)) {
+            SpoutSounds.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
+        }
+
+        /*
+         * ABILITY TRIGGER CHECKS
+         */
+        if (PP.getAbilityMode(AbilityType.GREEN_TERRA) && mcPermissions.getInstance().greenTerra(player) && Herbalism.makeMossy(mat)) {
+            Herbalism.greenTerra(player, block);
+        }
+        else if (PP.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER) && Skills.triggerCheck(player, block, AbilityType.GIGA_DRILL_BREAKER)) {
+            if (Config.excavationRequiresShovel && ItemChecks.isShovel(inhand)) {
+                event.setInstaBreak(true);
+                Excavation.gigaDrillBreaker(player, block);
+            }
+            else if (!Config.excavationRequiresShovel) {
+                event.setInstaBreak(true);
+                Excavation.gigaDrillBreaker(player, block);
+            }
+        }
+        else if (PP.getAbilityMode(AbilityType.BERSERK) && Skills.triggerCheck(player, block, AbilityType.BERSERK)) {
+            if (inhand.getType().equals(Material.AIR)) {
+                FakePlayerAnimationEvent armswing = new FakePlayerAnimationEvent(player);
+                plugin.getServer().getPluginManager().callEvent(armswing);
+
+                event.setInstaBreak(true);
+            }
+
+            if (Config.spoutEnabled) {
+                SpoutSounds.playSoundForPlayer(SoundEffect.POP, player, block.getLocation());
+            }
+        }
+        else if (PP.getAbilityMode(AbilityType.SUPER_BREAKER) && Skills.triggerCheck(player, block, AbilityType.SUPER_BREAKER)) {
+            if (Config.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) {
+                event.setInstaBreak(true);
+                Mining.SuperBreakerBlockCheck(player, block);
+            }
+            else if (!Config.miningrequirespickaxe) {
+                event.setInstaBreak(true);
+                Mining.SuperBreakerBlockCheck(player, block);
+            }
+        }
+        else if (PP.getSkillLevel(SkillType.WOODCUTTING) >= LEAF_BLOWER_LEVEL && mat.equals(Material.LEAVES)) {
+            if (Config.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) {
+                if (Skills.triggerCheck(player, block, AbilityType.LEAF_BLOWER)) {
+                    event.setInstaBreak(true);
+                    WoodCutting.leafBlower(player, block);
+                }
+            }
+            else if (!Config.woodcuttingrequiresaxe && !inhand.getType().equals(Material.SHEARS)) {
+                if (Skills.triggerCheck(player, block, AbilityType.LEAF_BLOWER)) {
+                    event.setInstaBreak(true);
+                    WoodCutting.leafBlower(player, block);
+                }
+            }
+        }
+    }
+}

+ 317 - 317
src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java → src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -1,317 +1,317 @@
-package com.gmail.nossr50.listeners;
-
-import org.bukkit.Material;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.TNTPrimed;
-import org.bukkit.entity.Wolf;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.CreatureSpawnEvent;
-import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
-import org.bukkit.event.entity.EntityDeathEvent;
-import org.bukkit.event.entity.EntityExplodeEvent;
-import org.bukkit.event.entity.EntityTameEvent;
-import org.bukkit.event.entity.ExplosionPrimeEvent;
-import org.bukkit.event.entity.FoodLevelChangeEvent;
-import org.bukkit.metadata.FixedMetadataValue;
-
-import com.gmail.nossr50.Combat;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.config.Config;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
-import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.runnables.mcBleedTimer;
-import com.gmail.nossr50.skills.Acrobatics;
-import com.gmail.nossr50.skills.Archery;
-import com.gmail.nossr50.skills.BlastMining;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.Taming;
-
-public class mcEntityListener implements Listener {
-    private final mcMMO plugin;
-
-    public mcEntityListener(final mcMMO plugin) {
-        this.plugin = plugin;
-    }
-
-    /**
-     * Monitor EntityDamageByEntity events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
-        if (event instanceof FakeEntityDamageByEntityEvent) {
-            return;
-        }
-
-        Entity defender = event.getEntity();
-        Entity attacker = event.getDamager();
-
-        if (attacker instanceof Player && defender instanceof Player) {
-            if (!defender.getWorld().getPVP()) {
-                return;
-            }
-
-            if (Party.getInstance().inSameParty((Player)defender, (Player)attacker)) {
-                event.setCancelled(true);
-                return;
-            }
-        }
-
-        /* Check for invincibility */
-        if (defender instanceof LivingEntity) {
-            LivingEntity livingDefender = (LivingEntity)defender;
-
-            if (!m.isInvincible(livingDefender, event)) {
-                Combat.combatChecks(event, plugin);
-            }
-        }
-    }
-
-    /**
-     * Monitor EntityDamage events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onEntityDamage(EntityDamageEvent event) {
-        if (event instanceof FakeEntityDamageEvent) {
-            return;
-        }
-
-        Entity entity = event.getEntity();
-        EntityType type = entity.getType();
-        DamageCause cause = event.getCause();
-        
-        switch(type) {
-        case PLAYER:
-
-            /* Check for invincibility */
-            Player player = (Player) entity;
-            PlayerProfile PP = Users.getProfile(player);
-
-            if (PP.getGodMode()) {
-                event.setCancelled(true);
-                return;
-            }
-
-            if (!m.isInvincible(player, event)) {
-                if (cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player)) {
-                    Acrobatics.acrobaticsCheck(player, event);
-                }
-                else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().demolitionsExpertise(player)) {
-                    BlastMining.demolitionsExpertise(player, event);
-                }
-
-                if (event.getDamage() >= 1) {
-                    PP.setRecentlyHurt(System.currentTimeMillis());
-                }
-            }
-            break;
-
-        case WOLF:
-            Wolf wolf = (Wolf) entity;
-
-            if ((!m.isInvincible(wolf, event)) && wolf.isTamed() && (wolf.getOwner() instanceof Player)) {
-                Taming.preventDamage(event);
-            }
-            break;
-
-        default:
-            break;
-        }
-    }
-
-    /**
-     * Monitor EntityDeath events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler (priority = EventPriority.MONITOR)
-    public void onEntityDeath(EntityDeathEvent event) {
-        LivingEntity x = event.getEntity();
-        x.setFireTicks(0);
-
-        /* Remove bleed track */
-        mcBleedTimer.remove(x);
-
-        Archery.arrowRetrievalCheck(x, plugin);
-
-        if (x instanceof Player) {
-            Users.getProfile((Player)x).resetBleedTicks();
-        }
-    }
-
-    /**
-     * Monitor CreatureSpawn events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler (priority = EventPriority.MONITOR)
-    public void onCreatureSpawn(CreatureSpawnEvent event) {
-        SpawnReason reason = event.getSpawnReason();
-
-        if ((reason.equals(SpawnReason.SPAWNER) || reason.equals(SpawnReason.SPAWNER_EGG)) && !Config.xpGainsMobSpawners) {
-            event.getEntity().setMetadata("mcmmoFromMobSpawner", new FixedMetadataValue(plugin, true));
-        }
-    }
-
-    /**
-     * Monitor ExplosionPrime events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onExplosionPrime(ExplosionPrimeEvent event) {
-        Entity entity = event.getEntity();
-
-        if (entity instanceof TNTPrimed) {
-            int id = entity.getEntityId();
-
-            if (plugin.tntTracker.containsKey(id)) {
-                Player player = plugin.tntTracker.get(id);
-
-                if (mcPermissions.getInstance().biggerBombs(player)) {
-                    BlastMining.biggerBombs(player, event);
-                }
-            }
-        }
-    }
-
-    /**
-     * Monitor EntityExplode events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onEnitityExplode(EntityExplodeEvent event) {
-        Entity entity = event.getEntity();
-
-        if (event.getEntity() instanceof TNTPrimed) {
-            int id = entity.getEntityId();
-
-            if (plugin.tntTracker.containsKey(id)) {
-                Player player = plugin.tntTracker.get(id);
-                BlastMining.dropProcessing(player, event);
-                plugin.tntTracker.remove(id);
-            }
-        }
-    }
-
-    /**
-     * Monitor FoodLevelChange events.
-     *
-     * @param event The event to monitor
-     */
-    @EventHandler (priority = EventPriority.LOW)
-    public void onFoodLevelChange(FoodLevelChangeEvent event) {
-        if (Config.getHerbalismHungerBonusEnabled()) {
-            if (event.getEntity() instanceof Player) {
-                Player player = (Player) event.getEntity();
-                PlayerProfile PP = Users.getProfile(player);
-                int currentFoodLevel = player.getFoodLevel();
-                int newFoodLevel = event.getFoodLevel();
-
-                /*
-                 * Some foods have 3 ranks
-                 * Some foods have 5 ranks
-                 * The number of ranks is based on how 'common' the item is
-                 * We can adjust this quite easily if we find something is giving too much of a bonus
-                 */
-
-                if (newFoodLevel > currentFoodLevel) {
-                    Material food = player.getItemInHand().getType();
-                    int herbLevel = PP.getSkillLevel(SkillType.HERBALISM);
-                    int foodChange = newFoodLevel - currentFoodLevel;
-                    int rankChange = 0;
-
-                    switch (food) {
-                    case BREAD:
-                        /* BREAD RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
-                        rankChange = 200;
-                        break;
-
-                    case COOKIE:
-                        /* COOKIE RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
-                        rankChange = 400;
-                        break;
-
-                    case MELON:
-                        /* MELON RESTORES  1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
-                        rankChange = 400;
-                        break;
-
-                    case MUSHROOM_SOUP:
-                        /* MUSHROOM SOUP RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
-                        rankChange = 200;
-                        break;
-
-                    default:
-                        return;
-                    }
-
-                    for (int i = 200; i <= 1000; i += rankChange) {
-                        if (herbLevel >= i) {
-                            foodChange++;
-                        }
-                    }
-
-                    /* Make sure we don't go over the max value */
-                    newFoodLevel = currentFoodLevel + foodChange;
-                    if (newFoodLevel > 20) {
-                        event.setFoodLevel(20);
-                    }
-                    else {
-                        event.setFoodLevel(newFoodLevel);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Monitor EntityTame events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler (priority = EventPriority.MONITOR)
-    public void onEntityTame(EntityTameEvent event) {
-        Player player = (Player) event.getOwner();
-
-        if (mcPermissions.getInstance().taming(player) && !event.getEntity().hasMetadata("mcmmoSummoned")) {
-            PlayerProfile PP = Users.getProfile(player);
-            EntityType type = event.getEntityType();
-            int xp = 0;
-
-            switch (type) {
-            case WOLF:
-                xp = Config.getTamingXPWolf();
-                break;
-
-            case OCELOT:
-                xp = Config.getTamingXPOcelot();
-                break;
-
-            default:
-                break;
-            }
-
-            PP.addXP(SkillType.TAMING, xp);
-            Skills.XpCheckSkill(SkillType.TAMING, player);
-        }
-    }
-}
+package com.gmail.nossr50.listeners;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.TNTPrimed;
+import org.bukkit.entity.Wolf;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.CreatureSpawnEvent;
+import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.event.entity.EntityDeathEvent;
+import org.bukkit.event.entity.EntityExplodeEvent;
+import org.bukkit.event.entity.EntityTameEvent;
+import org.bukkit.event.entity.ExplosionPrimeEvent;
+import org.bukkit.event.entity.FoodLevelChangeEvent;
+import org.bukkit.metadata.FixedMetadataValue;
+
+import com.gmail.nossr50.Combat;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.m;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.config.Config;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
+import com.gmail.nossr50.events.fake.FakeEntityDamageEvent;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.runnables.mcBleedTimer;
+import com.gmail.nossr50.skills.Acrobatics;
+import com.gmail.nossr50.skills.Archery;
+import com.gmail.nossr50.skills.BlastMining;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Taming;
+
+public class EntityListener implements Listener {
+    private final mcMMO plugin;
+
+    public EntityListener(final mcMMO plugin) {
+        this.plugin = plugin;
+    }
+
+    /**
+     * Monitor EntityDamageByEntity events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
+        if (event instanceof FakeEntityDamageByEntityEvent) {
+            return;
+        }
+
+        Entity defender = event.getEntity();
+        Entity attacker = event.getDamager();
+
+        if (attacker instanceof Player && defender instanceof Player) {
+            if (!defender.getWorld().getPVP()) {
+                return;
+            }
+
+            if (Party.getInstance().inSameParty((Player)defender, (Player)attacker)) {
+                event.setCancelled(true);
+                return;
+            }
+        }
+
+        /* Check for invincibility */
+        if (defender instanceof LivingEntity) {
+            LivingEntity livingDefender = (LivingEntity)defender;
+
+            if (!m.isInvincible(livingDefender, event)) {
+                Combat.combatChecks(event, plugin);
+            }
+        }
+    }
+
+    /**
+     * Monitor EntityDamage events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onEntityDamage(EntityDamageEvent event) {
+        if (event instanceof FakeEntityDamageEvent) {
+            return;
+        }
+
+        Entity entity = event.getEntity();
+        EntityType type = entity.getType();
+        DamageCause cause = event.getCause();
+        
+        switch(type) {
+        case PLAYER:
+
+            /* Check for invincibility */
+            Player player = (Player) entity;
+            PlayerProfile PP = Users.getProfile(player);
+
+            if (PP.getGodMode()) {
+                event.setCancelled(true);
+                return;
+            }
+
+            if (!m.isInvincible(player, event)) {
+                if (cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player)) {
+                    Acrobatics.acrobaticsCheck(player, event);
+                }
+                else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().demolitionsExpertise(player)) {
+                    BlastMining.demolitionsExpertise(player, event);
+                }
+
+                if (event.getDamage() >= 1) {
+                    PP.setRecentlyHurt(System.currentTimeMillis());
+                }
+            }
+            break;
+
+        case WOLF:
+            Wolf wolf = (Wolf) entity;
+
+            if ((!m.isInvincible(wolf, event)) && wolf.isTamed() && (wolf.getOwner() instanceof Player)) {
+                Taming.preventDamage(event);
+            }
+            break;
+
+        default:
+            break;
+        }
+    }
+
+    /**
+     * Monitor EntityDeath events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler (priority = EventPriority.MONITOR)
+    public void onEntityDeath(EntityDeathEvent event) {
+        LivingEntity x = event.getEntity();
+        x.setFireTicks(0);
+
+        /* Remove bleed track */
+        mcBleedTimer.remove(x);
+
+        Archery.arrowRetrievalCheck(x, plugin);
+
+        if (x instanceof Player) {
+            Users.getProfile((Player)x).resetBleedTicks();
+        }
+    }
+
+    /**
+     * Monitor CreatureSpawn events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler (priority = EventPriority.MONITOR)
+    public void onCreatureSpawn(CreatureSpawnEvent event) {
+        SpawnReason reason = event.getSpawnReason();
+
+        if ((reason.equals(SpawnReason.SPAWNER) || reason.equals(SpawnReason.SPAWNER_EGG)) && !Config.xpGainsMobSpawners) {
+            event.getEntity().setMetadata("mcmmoFromMobSpawner", new FixedMetadataValue(plugin, true));
+        }
+    }
+
+    /**
+     * Monitor ExplosionPrime events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onExplosionPrime(ExplosionPrimeEvent event) {
+        Entity entity = event.getEntity();
+
+        if (entity instanceof TNTPrimed) {
+            int id = entity.getEntityId();
+
+            if (plugin.tntTracker.containsKey(id)) {
+                Player player = plugin.tntTracker.get(id);
+
+                if (mcPermissions.getInstance().biggerBombs(player)) {
+                    BlastMining.biggerBombs(player, event);
+                }
+            }
+        }
+    }
+
+    /**
+     * Monitor EntityExplode events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onEnitityExplode(EntityExplodeEvent event) {
+        Entity entity = event.getEntity();
+
+        if (event.getEntity() instanceof TNTPrimed) {
+            int id = entity.getEntityId();
+
+            if (plugin.tntTracker.containsKey(id)) {
+                Player player = plugin.tntTracker.get(id);
+                BlastMining.dropProcessing(player, event);
+                plugin.tntTracker.remove(id);
+            }
+        }
+    }
+
+    /**
+     * Monitor FoodLevelChange events.
+     *
+     * @param event The event to monitor
+     */
+    @EventHandler (priority = EventPriority.LOW)
+    public void onFoodLevelChange(FoodLevelChangeEvent event) {
+        if (Config.getHerbalismHungerBonusEnabled()) {
+            if (event.getEntity() instanceof Player) {
+                Player player = (Player) event.getEntity();
+                PlayerProfile PP = Users.getProfile(player);
+                int currentFoodLevel = player.getFoodLevel();
+                int newFoodLevel = event.getFoodLevel();
+
+                /*
+                 * Some foods have 3 ranks
+                 * Some foods have 5 ranks
+                 * The number of ranks is based on how 'common' the item is
+                 * We can adjust this quite easily if we find something is giving too much of a bonus
+                 */
+
+                if (newFoodLevel > currentFoodLevel) {
+                    Material food = player.getItemInHand().getType();
+                    int herbLevel = PP.getSkillLevel(SkillType.HERBALISM);
+                    int foodChange = newFoodLevel - currentFoodLevel;
+                    int rankChange = 0;
+
+                    switch (food) {
+                    case BREAD:
+                        /* BREAD RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */
+                        rankChange = 200;
+                        break;
+
+                    case COOKIE:
+                        /* COOKIE RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */
+                        rankChange = 400;
+                        break;
+
+                    case MELON:
+                        /* MELON RESTORES  1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */
+                        rankChange = 400;
+                        break;
+
+                    case MUSHROOM_SOUP:
+                        /* MUSHROOM SOUP RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */
+                        rankChange = 200;
+                        break;
+
+                    default:
+                        return;
+                    }
+
+                    for (int i = 200; i <= 1000; i += rankChange) {
+                        if (herbLevel >= i) {
+                            foodChange++;
+                        }
+                    }
+
+                    /* Make sure we don't go over the max value */
+                    newFoodLevel = currentFoodLevel + foodChange;
+                    if (newFoodLevel > 20) {
+                        event.setFoodLevel(20);
+                    }
+                    else {
+                        event.setFoodLevel(newFoodLevel);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Monitor EntityTame events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler (priority = EventPriority.MONITOR)
+    public void onEntityTame(EntityTameEvent event) {
+        Player player = (Player) event.getOwner();
+
+        if (mcPermissions.getInstance().taming(player) && !event.getEntity().hasMetadata("mcmmoSummoned")) {
+            PlayerProfile PP = Users.getProfile(player);
+            EntityType type = event.getEntityType();
+            int xp = 0;
+
+            switch (type) {
+            case WOLF:
+                xp = Config.getTamingXPWolf();
+                break;
+
+            case OCELOT:
+                xp = Config.getTamingXPOcelot();
+                break;
+
+            default:
+                break;
+            }
+
+            PP.addXP(SkillType.TAMING, xp);
+            Skills.XpCheckSkill(SkillType.TAMING, player);
+        }
+    }
+}

+ 373 - 373
src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java → src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

@@ -1,374 +1,374 @@
-package com.gmail.nossr50.listeners;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerChangedWorldEvent;
-import org.bukkit.event.player.PlayerChatEvent;
-import org.bukkit.event.player.PlayerCommandPreprocessEvent;
-import org.bukkit.event.player.PlayerFishEvent;
-import org.bukkit.event.player.PlayerFishEvent.State;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.event.player.PlayerLoginEvent;
-import org.bukkit.event.player.PlayerPickupItemEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.inventory.ItemStack;
-
-import com.gmail.nossr50.BlockChecks;
-import com.gmail.nossr50.Combat;
-import com.gmail.nossr50.Item;
-import com.gmail.nossr50.ItemChecks;
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.mcPermissions;
-import com.gmail.nossr50.commands.general.XprateCommand;
-import com.gmail.nossr50.config.Config;
-import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask;
-import com.gmail.nossr50.spout.SpoutStuff;
-import com.gmail.nossr50.datatypes.AbilityType;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.events.chat.McMMOAdminChatEvent;
-import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
-import com.gmail.nossr50.locale.mcLocale;
-import com.gmail.nossr50.party.Party;
-import com.gmail.nossr50.skills.BlastMining;
-import com.gmail.nossr50.skills.Fishing;
-import com.gmail.nossr50.skills.Herbalism;
-import com.gmail.nossr50.skills.Repair;
-import com.gmail.nossr50.skills.Skills;
-import com.gmail.nossr50.skills.Taming;
-
-public class mcPlayerListener implements Listener {
-    private final mcMMO plugin;
-
-    public mcPlayerListener(final mcMMO plugin) {
-        this.plugin = plugin;
-    }
-
-    /**
-     * Monitor PlayerChangedWorld events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event) {
-        Player player = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(player);
-
-        if (PP.getGodMode()) {
-            if (!mcPermissions.getInstance().mcgod(player)) {
-                PP.toggleGodMode();
-                player.sendMessage(mcLocale.getString("Commands.GodMode.Forbidden"));
-            }
-        }
-
-        if (PP.inParty()) {
-            if (!mcPermissions.getInstance().party(player)) {
-                PP.removeParty();
-                player.sendMessage(mcLocale.getString("Party.Forbidden"));
-            }
-        }
-    }
-
-    /**
-     * Monitor PlayerFish events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onPlayerFish(PlayerFishEvent event) {
-        Player player = event.getPlayer();
-
-        if (mcPermissions.getInstance().fishing(player)) {
-            State state = event.getState();
-
-            switch (state) {
-            case CAUGHT_FISH:
-                Fishing.processResults(event);
-                break;
-
-            case CAUGHT_ENTITY:
-                if (Users.getProfile(player).getSkillLevel(SkillType.FISHING) >= 150 && mcPermissions.getInstance().shakeMob(player)) {
-                    Fishing.shakeMob(event);
-                }
-                break;
-
-            default:
-                break;
-            }
-        }
-    }
-
-    /**
-     * Monitor PlaterPickupItem events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(ignoreCancelled = true)
-    public void onPlayerPickupItem(PlayerPickupItemEvent event) {
-        if (Users.getProfile(event.getPlayer()).getAbilityMode(AbilityType.BERSERK)) {
-             event.setCancelled(true);
-        }
-    }
-
-    /**
-     * Monitor PlayerLogin events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onPlayerLogin(PlayerLoginEvent event) {
-        Users.addUser(event.getPlayer());
-    }
-
-    /**
-     * Monitor PlayerQuit events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onPlayerQuit(PlayerQuitEvent event) {
-        Player player = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(player);
-
-        /* GARBAGE COLLECTION */
-
-        //Remove Spout Stuff
-        if (Config.spoutEnabled && SpoutStuff.playerHUDs.containsKey(player)) {
-            SpoutStuff.playerHUDs.remove(player);
-        }
-
-        //Bleed it out
-        if(PP.getBleedTicks() > 0) {
-            Combat.dealDamage(player, PP.getBleedTicks() * 2);
-        }
-
-        //Schedule PlayerProfile removal 2 minutes after quitting
-        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new RemoveProfileFromMemoryTask(player), 2400);
-    }
-
-    /**
-     * Monitor PlayerJoin events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
-    public void onPlayerJoin(PlayerJoinEvent event) {
-        Player player = event.getPlayer();
-
-        if (mcPermissions.getInstance().motd(player) && Config.enableMotd) {
-            player.sendMessage(mcLocale.getString("mcMMO.MOTD", new Object[] {plugin.getDescription().getVersion()}));
-            player.sendMessage(mcLocale.getString("mcMMO.Wiki"));
-        }
-
-        //THIS IS VERY BAD WAY TO DO THINGS, NEED BETTER WAY
-        if (XprateCommand.xpevent) {
-            player.sendMessage(mcLocale.getString("XPRate.Event", new Object[] {Config.xpGainMultiplier}));
-        }
-    }
-
-    /**
-     * Monitor PlayerInteract events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.LOW)
-    public void onPlayerInteract(PlayerInteractEvent event) {
-        Player player = event.getPlayer();
-
-        Action action = event.getAction();
-        Block block = event.getClickedBlock();
-        ItemStack is = player.getItemInHand();
-        Material mat;
-
-        /* Fix for NPE on interacting with air */
-        if (block == null) {
-            mat = Material.AIR;
-        }
-        else {
-            mat = block.getType();
-        }
-
-        switch (action) {
-        case RIGHT_CLICK_BLOCK:
-
-            /* REPAIR CHECKS */
-            if (mcPermissions.getInstance().repair(player) && block.getTypeId() == Config.anvilID && (ItemChecks.isTool(is) || ItemChecks.isArmor(is))) {
-                Repair.repairCheck(player, is);
-                event.setCancelled(true);
-                player.updateInventory();
-            }
-
-            /* ACTIVATION CHECKS */
-            if (Config.enableAbilities && BlockChecks.abilityBlockCheck(mat)) {
-                if (!mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) {
-                    Skills.activationCheck(player, SkillType.HERBALISM);
-                }
-
-                Skills.activationCheck(player, SkillType.AXES);
-                Skills.activationCheck(player, SkillType.EXCAVATION);
-                Skills.activationCheck(player, SkillType.MINING);
-                Skills.activationCheck(player, SkillType.SWORDS);
-                Skills.activationCheck(player, SkillType.UNARMED);
-                Skills.activationCheck(player, SkillType.WOODCUTTING);
-            }
-
-            /* GREEN THUMB CHECK */
-            if (mcPermissions.getInstance().greenThumbBlocks(player) && Herbalism.makeMossy(mat) && is.getType().equals(Material.SEEDS)) {
-                Herbalism.greenThumbBlocks(is, player, block);
-            }
-
-            /* ITEM CHECKS */
-            if (BlockChecks.abilityBlockCheck(mat)) {
-                Item.itemchecks(player);
-            }
-
-            /* BLAST MINING CHECK */
-            if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) {
-                BlastMining.remoteDetonation(player, plugin);
-            }
-
-            break;
-
-        case RIGHT_CLICK_AIR:
-
-            /* ACTIVATION CHECKS */
-            if (Config.enableAbilities) {
-                Skills.activationCheck(player, SkillType.AXES);
-                Skills.activationCheck(player, SkillType.EXCAVATION);
-                Skills.activationCheck(player, SkillType.HERBALISM);
-                Skills.activationCheck(player, SkillType.MINING);
-                Skills.activationCheck(player, SkillType.SWORDS);
-                Skills.activationCheck(player, SkillType.UNARMED);
-                Skills.activationCheck(player, SkillType.WOODCUTTING);
-            }
-
-            /* ITEM CHECKS */
-            Item.itemchecks(player);
-
-            /* BLAST MINING CHECK */
-            if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) {
-                BlastMining.remoteDetonation(player, plugin);
-            }
-
-            break;
-
-        case LEFT_CLICK_AIR:
-        case LEFT_CLICK_BLOCK:
-
-            /* CALL OF THE WILD CHECKS */
-            if (player.isSneaking() && mcPermissions.getInstance().taming(player)) {
-                if (is.getType().equals(Material.RAW_FISH)) {
-                    Taming.animalSummon(EntityType.OCELOT, player, plugin);
-                }
-                else if (is.getType().equals(Material.BONE)) {
-                    Taming.animalSummon(EntityType.WOLF, player, plugin);
-                }
-            }
-
-            break;
-
-        default:
-            break;
-        }
-    }
-
-    /**
-     * Monitor PlayerChat events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
-    public void onPlayerChat(PlayerChatEvent event) {
-        Player player = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(player);
-        boolean partyChat = PP.getPartyChatMode();
-        boolean adminChat = PP.getAdminChatMode();
-        Set<Player> recipients = event.getRecipients();
-
-        Set<Player> intendedRecipients = new HashSet<Player>();
-        ChatColor color = null;
-
-        if (partyChat || adminChat) {
-            if (partyChat) {
-                if (!PP.inParty()) {
-                    player.sendMessage("You're not in a party, type /p to leave party chat mode."); //TODO: Use mcLocale
-                    return;
-                }
-
-                color = ChatColor.GREEN;
-
-                McMMOPartyChatEvent chatEvent = new McMMOPartyChatEvent(player.getName(), PP.getParty(), event.getMessage());
-                plugin.getServer().getPluginManager().callEvent(chatEvent);
-
-                if(chatEvent.isCancelled()) return;
-
-                event.setMessage(chatEvent.getMessage());
-
-                for (Player x : Party.getInstance().getOnlineMembers(player)) {
-                    intendedRecipients.add(x);
-                }
-
-                event.setFormat(color + "(" + ChatColor.WHITE + "%1$s" + color + ") %2$s");
-            }
-
-            if (adminChat) {
-                color = ChatColor.AQUA;
-
-                McMMOAdminChatEvent chatEvent = new McMMOAdminChatEvent(player.getName(), event.getMessage());
-                plugin.getServer().getPluginManager().callEvent(chatEvent);
-
-                if(chatEvent.isCancelled()) return;
-
-                event.setMessage(chatEvent.getMessage());
-
-                for (Player x : plugin.getServer().getOnlinePlayers()) {
-                    if (x.isOp() || mcPermissions.getInstance().adminChat(x)) {
-                        intendedRecipients.add(x);
-                    }
-                }
-
-                event.setFormat(color + "{" + ChatColor.WHITE + "%1$s" + color + "} %2$s");
-            }
-
-            recipients.retainAll(intendedRecipients);
-        }
-    }
-
-    // Dynamically aliasing commands need to be re-done.
-    // For now, using a command with an alias will send both the original command, and the mcMMO command
-
-    /**
-     * Monitor PlayerCommandPreprocess events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler(priority = EventPriority.LOWEST)
-    public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
-        String message = event.getMessage();
-        
-        if (!message.startsWith("/")) {
-            return;
-        }
-
-        String command = message.substring(1).split(" ")[0];
-
-        if (plugin.aliasMap.containsKey(command)) {
-            if (command.equalsIgnoreCase(plugin.aliasMap.get(command))) {
-                return;
-            }
-            event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command)));
-        }
-    }
+package com.gmail.nossr50.listeners;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerChangedWorldEvent;
+import org.bukkit.event.player.PlayerChatEvent;
+import org.bukkit.event.player.PlayerCommandPreprocessEvent;
+import org.bukkit.event.player.PlayerFishEvent;
+import org.bukkit.event.player.PlayerFishEvent.State;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerLoginEvent;
+import org.bukkit.event.player.PlayerPickupItemEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.inventory.ItemStack;
+
+import com.gmail.nossr50.BlockChecks;
+import com.gmail.nossr50.Combat;
+import com.gmail.nossr50.Item;
+import com.gmail.nossr50.ItemChecks;
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.commands.general.XprateCommand;
+import com.gmail.nossr50.config.Config;
+import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask;
+import com.gmail.nossr50.spout.SpoutStuff;
+import com.gmail.nossr50.datatypes.AbilityType;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.SkillType;
+import com.gmail.nossr50.events.chat.McMMOAdminChatEvent;
+import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
+import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
+import com.gmail.nossr50.skills.BlastMining;
+import com.gmail.nossr50.skills.Fishing;
+import com.gmail.nossr50.skills.Herbalism;
+import com.gmail.nossr50.skills.Repair;
+import com.gmail.nossr50.skills.Skills;
+import com.gmail.nossr50.skills.Taming;
+
+public class PlayerListener implements Listener {
+    private final mcMMO plugin;
+
+    public PlayerListener(final mcMMO plugin) {
+        this.plugin = plugin;
+    }
+
+    /**
+     * Monitor PlayerChangedWorld events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event) {
+        Player player = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(player);
+
+        if (PP.getGodMode()) {
+            if (!mcPermissions.getInstance().mcgod(player)) {
+                PP.toggleGodMode();
+                player.sendMessage(mcLocale.getString("Commands.GodMode.Forbidden"));
+            }
+        }
+
+        if (PP.inParty()) {
+            if (!mcPermissions.getInstance().party(player)) {
+                PP.removeParty();
+                player.sendMessage(mcLocale.getString("Party.Forbidden"));
+            }
+        }
+    }
+
+    /**
+     * Monitor PlayerFish events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onPlayerFish(PlayerFishEvent event) {
+        Player player = event.getPlayer();
+
+        if (mcPermissions.getInstance().fishing(player)) {
+            State state = event.getState();
+
+            switch (state) {
+            case CAUGHT_FISH:
+                Fishing.processResults(event);
+                break;
+
+            case CAUGHT_ENTITY:
+                if (Users.getProfile(player).getSkillLevel(SkillType.FISHING) >= 150 && mcPermissions.getInstance().shakeMob(player)) {
+                    Fishing.shakeMob(event);
+                }
+                break;
+
+            default:
+                break;
+            }
+        }
+    }
+
+    /**
+     * Monitor PlaterPickupItem events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(ignoreCancelled = true)
+    public void onPlayerPickupItem(PlayerPickupItemEvent event) {
+        if (Users.getProfile(event.getPlayer()).getAbilityMode(AbilityType.BERSERK)) {
+             event.setCancelled(true);
+        }
+    }
+
+    /**
+     * Monitor PlayerLogin events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onPlayerLogin(PlayerLoginEvent event) {
+        Users.addUser(event.getPlayer());
+    }
+
+    /**
+     * Monitor PlayerQuit events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onPlayerQuit(PlayerQuitEvent event) {
+        Player player = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(player);
+
+        /* GARBAGE COLLECTION */
+
+        //Remove Spout Stuff
+        if (Config.spoutEnabled && SpoutStuff.playerHUDs.containsKey(player)) {
+            SpoutStuff.playerHUDs.remove(player);
+        }
+
+        //Bleed it out
+        if(PP.getBleedTicks() > 0) {
+            Combat.dealDamage(player, PP.getBleedTicks() * 2);
+        }
+
+        //Schedule PlayerProfile removal 2 minutes after quitting
+        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new RemoveProfileFromMemoryTask(player), 2400);
+    }
+
+    /**
+     * Monitor PlayerJoin events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+    public void onPlayerJoin(PlayerJoinEvent event) {
+        Player player = event.getPlayer();
+
+        if (mcPermissions.getInstance().motd(player) && Config.enableMotd) {
+            player.sendMessage(mcLocale.getString("mcMMO.MOTD", new Object[] {plugin.getDescription().getVersion()}));
+            player.sendMessage(mcLocale.getString("mcMMO.Wiki"));
+        }
+
+        //THIS IS VERY BAD WAY TO DO THINGS, NEED BETTER WAY
+        if (XprateCommand.xpevent) {
+            player.sendMessage(mcLocale.getString("XPRate.Event", new Object[] {Config.xpGainMultiplier}));
+        }
+    }
+
+    /**
+     * Monitor PlayerInteract events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.LOW)
+    public void onPlayerInteract(PlayerInteractEvent event) {
+        Player player = event.getPlayer();
+
+        Action action = event.getAction();
+        Block block = event.getClickedBlock();
+        ItemStack is = player.getItemInHand();
+        Material mat;
+
+        /* Fix for NPE on interacting with air */
+        if (block == null) {
+            mat = Material.AIR;
+        }
+        else {
+            mat = block.getType();
+        }
+
+        switch (action) {
+        case RIGHT_CLICK_BLOCK:
+
+            /* REPAIR CHECKS */
+            if (mcPermissions.getInstance().repair(player) && block.getTypeId() == Config.anvilID && (ItemChecks.isTool(is) || ItemChecks.isArmor(is))) {
+                Repair.repairCheck(player, is);
+                event.setCancelled(true);
+                player.updateInventory();
+            }
+
+            /* ACTIVATION CHECKS */
+            if (Config.enableAbilities && BlockChecks.abilityBlockCheck(mat)) {
+                if (!mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) {
+                    Skills.activationCheck(player, SkillType.HERBALISM);
+                }
+
+                Skills.activationCheck(player, SkillType.AXES);
+                Skills.activationCheck(player, SkillType.EXCAVATION);
+                Skills.activationCheck(player, SkillType.MINING);
+                Skills.activationCheck(player, SkillType.SWORDS);
+                Skills.activationCheck(player, SkillType.UNARMED);
+                Skills.activationCheck(player, SkillType.WOODCUTTING);
+            }
+
+            /* GREEN THUMB CHECK */
+            if (mcPermissions.getInstance().greenThumbBlocks(player) && Herbalism.makeMossy(mat) && is.getType().equals(Material.SEEDS)) {
+                Herbalism.greenThumbBlocks(is, player, block);
+            }
+
+            /* ITEM CHECKS */
+            if (BlockChecks.abilityBlockCheck(mat)) {
+                Item.itemchecks(player);
+            }
+
+            /* BLAST MINING CHECK */
+            if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) {
+                BlastMining.remoteDetonation(player, plugin);
+            }
+
+            break;
+
+        case RIGHT_CLICK_AIR:
+
+            /* ACTIVATION CHECKS */
+            if (Config.enableAbilities) {
+                Skills.activationCheck(player, SkillType.AXES);
+                Skills.activationCheck(player, SkillType.EXCAVATION);
+                Skills.activationCheck(player, SkillType.HERBALISM);
+                Skills.activationCheck(player, SkillType.MINING);
+                Skills.activationCheck(player, SkillType.SWORDS);
+                Skills.activationCheck(player, SkillType.UNARMED);
+                Skills.activationCheck(player, SkillType.WOODCUTTING);
+            }
+
+            /* ITEM CHECKS */
+            Item.itemchecks(player);
+
+            /* BLAST MINING CHECK */
+            if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) {
+                BlastMining.remoteDetonation(player, plugin);
+            }
+
+            break;
+
+        case LEFT_CLICK_AIR:
+        case LEFT_CLICK_BLOCK:
+
+            /* CALL OF THE WILD CHECKS */
+            if (player.isSneaking() && mcPermissions.getInstance().taming(player)) {
+                if (is.getType().equals(Material.RAW_FISH)) {
+                    Taming.animalSummon(EntityType.OCELOT, player, plugin);
+                }
+                else if (is.getType().equals(Material.BONE)) {
+                    Taming.animalSummon(EntityType.WOLF, player, plugin);
+                }
+            }
+
+            break;
+
+        default:
+            break;
+        }
+    }
+
+    /**
+     * Monitor PlayerChat events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
+    public void onPlayerChat(PlayerChatEvent event) {
+        Player player = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(player);
+        boolean partyChat = PP.getPartyChatMode();
+        boolean adminChat = PP.getAdminChatMode();
+        Set<Player> recipients = event.getRecipients();
+
+        Set<Player> intendedRecipients = new HashSet<Player>();
+        ChatColor color = null;
+
+        if (partyChat || adminChat) {
+            if (partyChat) {
+                if (!PP.inParty()) {
+                    player.sendMessage("You're not in a party, type /p to leave party chat mode."); //TODO: Use mcLocale
+                    return;
+                }
+
+                color = ChatColor.GREEN;
+
+                McMMOPartyChatEvent chatEvent = new McMMOPartyChatEvent(player.getName(), PP.getParty(), event.getMessage());
+                plugin.getServer().getPluginManager().callEvent(chatEvent);
+
+                if(chatEvent.isCancelled()) return;
+
+                event.setMessage(chatEvent.getMessage());
+
+                for (Player x : Party.getInstance().getOnlineMembers(player)) {
+                    intendedRecipients.add(x);
+                }
+
+                event.setFormat(color + "(" + ChatColor.WHITE + "%1$s" + color + ") %2$s");
+            }
+
+            if (adminChat) {
+                color = ChatColor.AQUA;
+
+                McMMOAdminChatEvent chatEvent = new McMMOAdminChatEvent(player.getName(), event.getMessage());
+                plugin.getServer().getPluginManager().callEvent(chatEvent);
+
+                if(chatEvent.isCancelled()) return;
+
+                event.setMessage(chatEvent.getMessage());
+
+                for (Player x : plugin.getServer().getOnlinePlayers()) {
+                    if (x.isOp() || mcPermissions.getInstance().adminChat(x)) {
+                        intendedRecipients.add(x);
+                    }
+                }
+
+                event.setFormat(color + "{" + ChatColor.WHITE + "%1$s" + color + "} %2$s");
+            }
+
+            recipients.retainAll(intendedRecipients);
+        }
+    }
+
+    // Dynamically aliasing commands need to be re-done.
+    // For now, using a command with an alias will send both the original command, and the mcMMO command
+
+    /**
+     * Monitor PlayerCommandPreprocess events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.LOWEST)
+    public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
+        String message = event.getMessage();
+        
+        if (!message.startsWith("/")) {
+            return;
+        }
+
+        String command = message.substring(1).split(" ")[0];
+
+        if (plugin.aliasMap.containsKey(command)) {
+            if (command.equalsIgnoreCase(plugin.aliasMap.get(command))) {
+                return;
+            }
+            event.getPlayer().chat(message.replaceFirst(command, plugin.aliasMap.get(command)));
+        }
+    }
 }

+ 1 - 1
src/main/java/com/gmail/nossr50/listeners/mcSelfListener.java → src/main/java/com/gmail/nossr50/listeners/SelfListener.java

@@ -8,7 +8,7 @@ import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
 /**
  * Listener for listening to our own events, only really useful for catching errors
  */
-public class mcSelfListener implements Listener {
+public class SelfListener implements Listener {
 
     /**
      * Monitor internal XP gain events.

+ 48 - 48
src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java → src/main/java/com/gmail/nossr50/listeners/SpoutInputListener.java

@@ -1,48 +1,48 @@
-package com.gmail.nossr50.listeners;
-
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.getspout.spoutapi.event.input.KeyPressedEvent;
-import org.getspout.spoutapi.gui.ScreenType;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.popups.PopupMMO;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutInputListener implements Listener {
-    private mcMMO plugin;
-
-    public mcSpoutInputListener(mcMMO plugin) {
-        this.plugin = plugin;
-    }
-
-    /**
-     * Monitor Spout KeyPressed events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler
-    public void onKeyPressedEvent(KeyPressedEvent event) {
-        SpoutPlayer sPlayer = event.getPlayer();
-
-        if (!sPlayer.isSpoutCraftEnabled() || sPlayer.getMainScreen().getActivePopup() != null || event.getScreenType() != ScreenType.GAME_SCREEN) {
-            return;
-        }
-
-        if (event.getKey() == SpoutStuff.keypress) {
-            if (!SpoutStuff.playerScreens.containsKey(sPlayer)) {
-                PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin);
-
-                SpoutStuff.playerScreens.put(sPlayer, mmoPop);
-                sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));
-                sPlayer.getMainScreen().setDirty(true);
-            }
-            else {
-                sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));
-                sPlayer.getMainScreen().setDirty(true);
-            }
-        }
-    }
-}
+package com.gmail.nossr50.listeners;
+
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.getspout.spoutapi.event.input.KeyPressedEvent;
+import org.getspout.spoutapi.gui.ScreenType;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.popups.PopupMMO;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class SpoutInputListener implements Listener {
+    private mcMMO plugin;
+
+    public SpoutInputListener(mcMMO plugin) {
+        this.plugin = plugin;
+    }
+
+    /**
+     * Monitor Spout KeyPressed events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler
+    public void onKeyPressedEvent(KeyPressedEvent event) {
+        SpoutPlayer sPlayer = event.getPlayer();
+
+        if (!sPlayer.isSpoutCraftEnabled() || sPlayer.getMainScreen().getActivePopup() != null || event.getScreenType() != ScreenType.GAME_SCREEN) {
+            return;
+        }
+
+        if (event.getKey() == SpoutStuff.keypress) {
+            if (!SpoutStuff.playerScreens.containsKey(sPlayer)) {
+                PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin);
+
+                SpoutStuff.playerScreens.put(sPlayer, mmoPop);
+                sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));
+                sPlayer.getMainScreen().setDirty(true);
+            }
+            else {
+                sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer));
+                sPlayer.getMainScreen().setDirty(true);
+            }
+        }
+    }
+}

+ 45 - 45
src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java → src/main/java/com/gmail/nossr50/listeners/SpoutListener.java

@@ -1,46 +1,46 @@
-package com.gmail.nossr50.listeners;
-
-import org.bukkit.ChatColor;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.config.Config;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutListener implements Listener {
-    //Why do we have this here? We never use it...
-    mcMMO plugin = null;
-
-    public mcSpoutListener(mcMMO pluginx) {
-        plugin = pluginx;
-    }
-
-    /**
-     * Monitor SpoutCraftEnable events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler
-    public void onSpoutCraftEnable(SpoutCraftEnableEvent event) {
-        SpoutPlayer sPlayer = event.getPlayer();
-        PlayerProfile PPs = Users.getProfile(sPlayer);
-
-        //TODO: Add custom titles based on skills
-        if (Config.getShowPowerLevelForSpout()) {
-            sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl"
-        + ChatColor.WHITE+"." + ChatColor.GREEN + String.valueOf(PPs.getPowerLevel()));
-        }
-
-        if (sPlayer.isSpoutCraftEnabled()) {
-            SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); //Setup Party HUD stuff
-            
-            PPs.toggleSpoutEnabled();
-        }
-    }
+package com.gmail.nossr50.listeners;
+
+import org.bukkit.ChatColor;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.Config;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class SpoutListener implements Listener {
+    //Why do we have this here? We never use it...
+    mcMMO plugin = null;
+
+    public SpoutListener(mcMMO pluginx) {
+        plugin = pluginx;
+    }
+
+    /**
+     * Monitor SpoutCraftEnable events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler
+    public void onSpoutCraftEnable(SpoutCraftEnableEvent event) {
+        SpoutPlayer sPlayer = event.getPlayer();
+        PlayerProfile PPs = Users.getProfile(sPlayer);
+
+        //TODO: Add custom titles based on skills
+        if (Config.getShowPowerLevelForSpout()) {
+            sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl"
+        + ChatColor.WHITE+"." + ChatColor.GREEN + String.valueOf(PPs.getPowerLevel()));
+        }
+
+        if (sPlayer.isSpoutCraftEnabled()) {
+            SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); //Setup Party HUD stuff
+            
+            PPs.toggleSpoutEnabled();
+        }
+    }
 }

+ 91 - 91
src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java → src/main/java/com/gmail/nossr50/listeners/SpoutScreenListener.java

@@ -1,91 +1,91 @@
-package com.gmail.nossr50.listeners;
-
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.getspout.spoutapi.event.screen.ButtonClickEvent;
-import org.getspout.spoutapi.event.screen.ScreenCloseEvent;
-import org.getspout.spoutapi.player.SpoutPlayer;
-
-import com.gmail.nossr50.Users;
-import com.gmail.nossr50.mcMMO;
-import com.gmail.nossr50.datatypes.HUDType;
-import com.gmail.nossr50.datatypes.HUDmmo;
-import com.gmail.nossr50.datatypes.PlayerProfile;
-import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
-import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
-import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
-import com.gmail.nossr50.datatypes.popups.PopupMMO;
-import com.gmail.nossr50.spout.SpoutStuff;
-
-public class mcSpoutScreenListener implements Listener {
-    //Why do we have this here? We never use it...
-    mcMMO plugin = null;
-
-    public mcSpoutScreenListener(mcMMO pluginx) {
-        plugin = pluginx;
-    }
-
-    /**
-     * Monitor Spout ButtonClick events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler
-    public void onButtonClick(ButtonClickEvent event) {
-        SpoutPlayer sPlayer = event.getPlayer();
-        PlayerProfile PP = Users.getProfile(sPlayer);
-        
-        if (event.getButton() instanceof ButtonHUDStyle) {
-            if (SpoutStuff.playerHUDs.containsKey(sPlayer)) {
-                SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
-                SpoutStuff.playerHUDs.remove(sPlayer);
-                
-                switch (PP.getHUDType()) {
-                case RETRO:
-                    PP.setHUDType(HUDType.STANDARD);
-                    break;
-
-                case STANDARD:
-                    PP.setHUDType(HUDType.SMALL);
-                    break;
-
-                case SMALL:
-                    PP.setHUDType(HUDType.DISABLED);
-                    break;
-
-                case DISABLED:
-                    PP.setHUDType(HUDType.RETRO);
-                    break;
-
-                default:
-                    break;
-                }
-
-                SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin));
-                SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP);
-            }
-        }
-        else if (event.getButton() instanceof ButtonEscape) {
-            sPlayer.getMainScreen().closePopup();
-        }
-        else if (event.getButton() instanceof ButtonPartyToggle) {
-            PP.togglePartyHUD();
-            ButtonPartyToggle bpt = (ButtonPartyToggle) event.getButton();
-            bpt.updateText(PP);
-            SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
-            SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer);
-        }
-    }
-
-    /**
-     * Monitor Spout ScreenClose events.
-     *
-     * @param event The event to watch
-     */
-    @EventHandler
-    public void onScreenClose(ScreenCloseEvent event) {
-        if (event.getScreen() instanceof PopupMMO) {
-            SpoutStuff.playerScreens.remove(event.getPlayer());
-        }
-    }
-}
+package com.gmail.nossr50.listeners;
+
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.getspout.spoutapi.event.screen.ButtonClickEvent;
+import org.getspout.spoutapi.event.screen.ScreenCloseEvent;
+import org.getspout.spoutapi.player.SpoutPlayer;
+
+import com.gmail.nossr50.Users;
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.datatypes.HUDType;
+import com.gmail.nossr50.datatypes.HUDmmo;
+import com.gmail.nossr50.datatypes.PlayerProfile;
+import com.gmail.nossr50.datatypes.buttons.ButtonEscape;
+import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle;
+import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle;
+import com.gmail.nossr50.datatypes.popups.PopupMMO;
+import com.gmail.nossr50.spout.SpoutStuff;
+
+public class SpoutScreenListener implements Listener {
+    //Why do we have this here? We never use it...
+    mcMMO plugin = null;
+
+    public SpoutScreenListener(mcMMO pluginx) {
+        plugin = pluginx;
+    }
+
+    /**
+     * Monitor Spout ButtonClick events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler
+    public void onButtonClick(ButtonClickEvent event) {
+        SpoutPlayer sPlayer = event.getPlayer();
+        PlayerProfile PP = Users.getProfile(sPlayer);
+        
+        if (event.getButton() instanceof ButtonHUDStyle) {
+            if (SpoutStuff.playerHUDs.containsKey(sPlayer)) {
+                SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
+                SpoutStuff.playerHUDs.remove(sPlayer);
+                
+                switch (PP.getHUDType()) {
+                case RETRO:
+                    PP.setHUDType(HUDType.STANDARD);
+                    break;
+
+                case STANDARD:
+                    PP.setHUDType(HUDType.SMALL);
+                    break;
+
+                case SMALL:
+                    PP.setHUDType(HUDType.DISABLED);
+                    break;
+
+                case DISABLED:
+                    PP.setHUDType(HUDType.RETRO);
+                    break;
+
+                default:
+                    break;
+                }
+
+                SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin));
+                SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP);
+            }
+        }
+        else if (event.getButton() instanceof ButtonEscape) {
+            sPlayer.getMainScreen().closePopup();
+        }
+        else if (event.getButton() instanceof ButtonPartyToggle) {
+            PP.togglePartyHUD();
+            ButtonPartyToggle bpt = (ButtonPartyToggle) event.getButton();
+            bpt.updateText(PP);
+            SpoutStuff.playerHUDs.get(sPlayer).resetHUD();
+            SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer);
+        }
+    }
+
+    /**
+     * Monitor Spout ScreenClose events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler
+    public void onScreenClose(ScreenCloseEvent event) {
+        if (event.getScreen() instanceof PopupMMO) {
+            SpoutStuff.playerScreens.remove(event.getPlayer());
+        }
+    }
+}

+ 6 - 6
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -8,9 +8,9 @@ import com.gmail.nossr50.commands.party.*;
 import com.gmail.nossr50.commands.general.*;
 import com.gmail.nossr50.config.*;
 import com.gmail.nossr50.runnables.*;
-import com.gmail.nossr50.listeners.mcBlockListener;
-import com.gmail.nossr50.listeners.mcEntityListener;
-import com.gmail.nossr50.listeners.mcPlayerListener;
+import com.gmail.nossr50.listeners.BlockListener;
+import com.gmail.nossr50.listeners.EntityListener;
+import com.gmail.nossr50.listeners.PlayerListener;
 import com.gmail.nossr50.locale.mcLocale;
 import com.gmail.nossr50.party.Party;
 
@@ -36,9 +36,9 @@ import org.bukkit.entity.Player;
 
 public class mcMMO extends JavaPlugin {
 
-    private final mcPlayerListener playerListener = new mcPlayerListener(this);
-    private final mcBlockListener blockListener = new mcBlockListener(this);
-    private final mcEntityListener entityListener = new mcEntityListener(this);
+    private final PlayerListener playerListener = new PlayerListener(this);
+    private final BlockListener blockListener = new BlockListener(this);
+    private final EntityListener entityListener = new EntityListener(this);
 
     public HashMap<String, String> aliasMap = new HashMap<String, String>(); //Alias - Command
     public HashMap<Entity, Integer> arrowTracker = new HashMap<Entity, Integer>();

+ 6 - 6
src/main/java/com/gmail/nossr50/spout/SpoutStuff.java

@@ -27,9 +27,9 @@ import com.gmail.nossr50.datatypes.HUDmmo;
 import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.datatypes.popups.PopupMMO;
 import com.gmail.nossr50.datatypes.SkillType;
-import com.gmail.nossr50.listeners.mcSpoutInputListener;
-import com.gmail.nossr50.listeners.mcSpoutListener;
-import com.gmail.nossr50.listeners.mcSpoutScreenListener;
+import com.gmail.nossr50.listeners.SpoutInputListener;
+import com.gmail.nossr50.listeners.SpoutListener;
+import com.gmail.nossr50.listeners.SpoutScreenListener;
 
 public class SpoutStuff {
     private static mcMMO plugin = mcMMO.p;
@@ -40,9 +40,9 @@ public class SpoutStuff {
     public final static String hudRetroDirectory = hudDirectory + "Retro" + File.separator;
     public final static String soundDirectory = spoutDirectory + "Sound" + File.separator;
 
-    private final static mcSpoutListener spoutListener = new mcSpoutListener(plugin);
-    private final static mcSpoutInputListener spoutInputListener = new mcSpoutInputListener(plugin);
-    private final static mcSpoutScreenListener spoutScreenListener = new mcSpoutScreenListener(plugin);
+    private final static SpoutListener spoutListener = new SpoutListener(plugin);
+    private final static SpoutInputListener spoutInputListener = new SpoutInputListener(plugin);
+    private final static SpoutScreenListener spoutScreenListener = new SpoutScreenListener(plugin);
 
     public static HashMap<Player, HUDmmo> playerHUDs = new HashMap<Player, HUDmmo>();
     public static HashMap<SpoutPlayer, PopupMMO> playerScreens = new HashMap<SpoutPlayer, PopupMMO>();