mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-03 10:33:43 +01:00 
			
		
		
		
	Refactor all the listeners!
This commit is contained in:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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)));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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.
 | 
			
		||||
@@ -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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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>();
 | 
			
		||||
 
 | 
			
		||||
@@ -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>();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user