diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index 302899c26..841b378ce 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/src/main/java/com/gmail/nossr50/config/Config.java @@ -300,6 +300,7 @@ public class Config extends ConfigLoader{ // Setup default HUD String temp = config.getString("Spout.HUD.Default", "STANDARD"); + for (HUDType x : HUDType.values()) { if (x.toString().equalsIgnoreCase(temp)) { defaulthud = x; @@ -323,12 +324,6 @@ public class Config extends ConfigLoader{ showDisplayName = config.getBoolean("Spout.Party.HUD.Show_Display_Name", false); partybar = config.getBoolean("Spout.Party.HUD.Enabled", true); - - - - - - enableOnlyActivateWhenSneaking = config.getBoolean("Abilities.Activation.Only_Activate_When_Sneaking", false); greenTerraCooldown = config.getInt("Abilities.Cooldowns.Green_Terra", 240); diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java similarity index 96% rename from src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java rename to src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 74d48ec5a..79359aa48 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -1,304 +1,304 @@ -package com.gmail.nossr50.listeners; - -import java.util.List; - -import com.gmail.nossr50.BlockChecks; -import com.gmail.nossr50.ItemChecks; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.mcPermissions; -import com.gmail.nossr50.Users; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.AbilityType; -import com.gmail.nossr50.datatypes.PlayerProfile; -import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.datatypes.ToolType; -import com.gmail.nossr50.skills.Excavation; -import com.gmail.nossr50.skills.Herbalism; -import com.gmail.nossr50.skills.Mining; -import com.gmail.nossr50.skills.Repair; -import com.gmail.nossr50.skills.Skills; -import com.gmail.nossr50.skills.WoodCutting; -import com.gmail.nossr50.spout.SpoutSounds; -import com.gmail.nossr50.events.fake.FakeBlockBreakEvent; -import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent; - -import org.bukkit.CropState; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.block.BlockPistonExtendEvent; -import org.bukkit.event.block.BlockPistonRetractEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.metadata.FixedMetadataValue; - -import org.getspout.spoutapi.sound.SoundEffect; - -public class mcBlockListener implements Listener { - private final mcMMO plugin; - - public mcBlockListener(final mcMMO plugin) { - this.plugin = plugin; - } - - /** - * Monitor BlockPistonExtend events. - * - * @param event The event to monitor - */ - @EventHandler(priority = EventPriority.MONITOR) - public void onBlockPistonExtend(BlockPistonExtendEvent event) { - List 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 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); + } + } + } + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java similarity index 96% rename from src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java rename to src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 50cfeb1e3..4e55e9530 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -1,317 +1,317 @@ -package com.gmail.nossr50.listeners; - -import org.bukkit.Material; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.entity.Wolf; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.CreatureSpawnEvent; -import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityTameEvent; -import org.bukkit.event.entity.ExplosionPrimeEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.metadata.FixedMetadataValue; - -import com.gmail.nossr50.Combat; -import com.gmail.nossr50.Users; -import com.gmail.nossr50.m; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.mcPermissions; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.PlayerProfile; -import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent; -import com.gmail.nossr50.events.fake.FakeEntityDamageEvent; -import com.gmail.nossr50.party.Party; -import com.gmail.nossr50.runnables.mcBleedTimer; -import com.gmail.nossr50.skills.Acrobatics; -import com.gmail.nossr50.skills.Archery; -import com.gmail.nossr50.skills.BlastMining; -import com.gmail.nossr50.skills.Skills; -import com.gmail.nossr50.skills.Taming; - -public class mcEntityListener implements Listener { - private final mcMMO plugin; - - public mcEntityListener(final mcMMO plugin) { - this.plugin = plugin; - } - - /** - * Monitor EntityDamageByEntity events. - * - * @param event The event to monitor - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { - if (event instanceof FakeEntityDamageByEntityEvent) { - return; - } - - Entity defender = event.getEntity(); - Entity attacker = event.getDamager(); - - if (attacker instanceof Player && defender instanceof Player) { - if (!defender.getWorld().getPVP()) { - return; - } - - if (Party.getInstance().inSameParty((Player)defender, (Player)attacker)) { - event.setCancelled(true); - return; - } - } - - /* Check for invincibility */ - if (defender instanceof LivingEntity) { - LivingEntity livingDefender = (LivingEntity)defender; - - if (!m.isInvincible(livingDefender, event)) { - Combat.combatChecks(event, plugin); - } - } - } - - /** - * Monitor EntityDamage events. - * - * @param event The event to monitor - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onEntityDamage(EntityDamageEvent event) { - if (event instanceof FakeEntityDamageEvent) { - return; - } - - Entity entity = event.getEntity(); - EntityType type = entity.getType(); - DamageCause cause = event.getCause(); - - switch(type) { - case PLAYER: - - /* Check for invincibility */ - Player player = (Player) entity; - PlayerProfile PP = Users.getProfile(player); - - if (PP.getGodMode()) { - event.setCancelled(true); - return; - } - - if (!m.isInvincible(player, event)) { - if (cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player)) { - Acrobatics.acrobaticsCheck(player, event); - } - else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().demolitionsExpertise(player)) { - BlastMining.demolitionsExpertise(player, event); - } - - if (event.getDamage() >= 1) { - PP.setRecentlyHurt(System.currentTimeMillis()); - } - } - break; - - case WOLF: - Wolf wolf = (Wolf) entity; - - if ((!m.isInvincible(wolf, event)) && wolf.isTamed() && (wolf.getOwner() instanceof Player)) { - Taming.preventDamage(event); - } - break; - - default: - break; - } - } - - /** - * Monitor EntityDeath events. - * - * @param event The event to monitor - */ - @EventHandler (priority = EventPriority.MONITOR) - public void onEntityDeath(EntityDeathEvent event) { - LivingEntity x = event.getEntity(); - x.setFireTicks(0); - - /* Remove bleed track */ - mcBleedTimer.remove(x); - - Archery.arrowRetrievalCheck(x, plugin); - - if (x instanceof Player) { - Users.getProfile((Player)x).resetBleedTicks(); - } - } - - /** - * Monitor CreatureSpawn events. - * - * @param event The event to monitor - */ - @EventHandler (priority = EventPriority.MONITOR) - public void onCreatureSpawn(CreatureSpawnEvent event) { - SpawnReason reason = event.getSpawnReason(); - - if ((reason.equals(SpawnReason.SPAWNER) || reason.equals(SpawnReason.SPAWNER_EGG)) && !Config.xpGainsMobSpawners) { - event.getEntity().setMetadata("mcmmoFromMobSpawner", new FixedMetadataValue(plugin, true)); - } - } - - /** - * Monitor ExplosionPrime events. - * - * @param event The event to monitor - */ - @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onExplosionPrime(ExplosionPrimeEvent event) { - Entity entity = event.getEntity(); - - if (entity instanceof TNTPrimed) { - int id = entity.getEntityId(); - - if (plugin.tntTracker.containsKey(id)) { - Player player = plugin.tntTracker.get(id); - - if (mcPermissions.getInstance().biggerBombs(player)) { - BlastMining.biggerBombs(player, event); - } - } - } - } - - /** - * Monitor EntityExplode events. - * - * @param event The event to monitor - */ - @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onEnitityExplode(EntityExplodeEvent event) { - Entity entity = event.getEntity(); - - if (event.getEntity() instanceof TNTPrimed) { - int id = entity.getEntityId(); - - if (plugin.tntTracker.containsKey(id)) { - Player player = plugin.tntTracker.get(id); - BlastMining.dropProcessing(player, event); - plugin.tntTracker.remove(id); - } - } - } - - /** - * Monitor FoodLevelChange events. - * - * @param event The event to monitor - */ - @EventHandler (priority = EventPriority.LOW) - public void onFoodLevelChange(FoodLevelChangeEvent event) { - if (Config.getHerbalismHungerBonusEnabled()) { - if (event.getEntity() instanceof Player) { - Player player = (Player) event.getEntity(); - PlayerProfile PP = Users.getProfile(player); - int currentFoodLevel = player.getFoodLevel(); - int newFoodLevel = event.getFoodLevel(); - - /* - * Some foods have 3 ranks - * Some foods have 5 ranks - * The number of ranks is based on how 'common' the item is - * We can adjust this quite easily if we find something is giving too much of a bonus - */ - - if (newFoodLevel > currentFoodLevel) { - Material food = player.getItemInHand().getType(); - int herbLevel = PP.getSkillLevel(SkillType.HERBALISM); - int foodChange = newFoodLevel - currentFoodLevel; - int rankChange = 0; - - switch (food) { - case BREAD: - /* BREAD RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ - rankChange = 200; - break; - - case COOKIE: - /* COOKIE RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ - rankChange = 400; - break; - - case MELON: - /* MELON RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ - rankChange = 400; - break; - - case MUSHROOM_SOUP: - /* MUSHROOM SOUP RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ - rankChange = 200; - break; - - default: - return; - } - - for (int i = 200; i <= 1000; i += rankChange) { - if (herbLevel >= i) { - foodChange++; - } - } - - /* Make sure we don't go over the max value */ - newFoodLevel = currentFoodLevel + foodChange; - if (newFoodLevel > 20) { - event.setFoodLevel(20); - } - else { - event.setFoodLevel(newFoodLevel); - } - } - } - } - } - - /** - * Monitor EntityTame events. - * - * @param event The event to watch - */ - @EventHandler (priority = EventPriority.MONITOR) - public void onEntityTame(EntityTameEvent event) { - Player player = (Player) event.getOwner(); - - if (mcPermissions.getInstance().taming(player) && !event.getEntity().hasMetadata("mcmmoSummoned")) { - PlayerProfile PP = Users.getProfile(player); - EntityType type = event.getEntityType(); - int xp = 0; - - switch (type) { - case WOLF: - xp = Config.getTamingXPWolf(); - break; - - case OCELOT: - xp = Config.getTamingXPOcelot(); - break; - - default: - break; - } - - PP.addXP(SkillType.TAMING, xp); - Skills.XpCheckSkill(SkillType.TAMING, player); - } - } -} +package com.gmail.nossr50.listeners; + +import org.bukkit.Material; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.entity.Wolf; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityTameEvent; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.metadata.FixedMetadataValue; + +import com.gmail.nossr50.Combat; +import com.gmail.nossr50.Users; +import com.gmail.nossr50.m; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.mcPermissions; +import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.SkillType; +import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent; +import com.gmail.nossr50.events.fake.FakeEntityDamageEvent; +import com.gmail.nossr50.party.Party; +import com.gmail.nossr50.runnables.mcBleedTimer; +import com.gmail.nossr50.skills.Acrobatics; +import com.gmail.nossr50.skills.Archery; +import com.gmail.nossr50.skills.BlastMining; +import com.gmail.nossr50.skills.Skills; +import com.gmail.nossr50.skills.Taming; + +public class EntityListener implements Listener { + private final mcMMO plugin; + + public EntityListener(final mcMMO plugin) { + this.plugin = plugin; + } + + /** + * Monitor EntityDamageByEntity events. + * + * @param event The event to monitor + */ + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityDamageByEntity(EntityDamageByEntityEvent event) { + if (event instanceof FakeEntityDamageByEntityEvent) { + return; + } + + Entity defender = event.getEntity(); + Entity attacker = event.getDamager(); + + if (attacker instanceof Player && defender instanceof Player) { + if (!defender.getWorld().getPVP()) { + return; + } + + if (Party.getInstance().inSameParty((Player)defender, (Player)attacker)) { + event.setCancelled(true); + return; + } + } + + /* Check for invincibility */ + if (defender instanceof LivingEntity) { + LivingEntity livingDefender = (LivingEntity)defender; + + if (!m.isInvincible(livingDefender, event)) { + Combat.combatChecks(event, plugin); + } + } + } + + /** + * Monitor EntityDamage events. + * + * @param event The event to monitor + */ + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityDamage(EntityDamageEvent event) { + if (event instanceof FakeEntityDamageEvent) { + return; + } + + Entity entity = event.getEntity(); + EntityType type = entity.getType(); + DamageCause cause = event.getCause(); + + switch(type) { + case PLAYER: + + /* Check for invincibility */ + Player player = (Player) entity; + PlayerProfile PP = Users.getProfile(player); + + if (PP.getGodMode()) { + event.setCancelled(true); + return; + } + + if (!m.isInvincible(player, event)) { + if (cause == DamageCause.FALL && mcPermissions.getInstance().acrobatics(player)) { + Acrobatics.acrobaticsCheck(player, event); + } + else if (cause == DamageCause.BLOCK_EXPLOSION && mcPermissions.getInstance().demolitionsExpertise(player)) { + BlastMining.demolitionsExpertise(player, event); + } + + if (event.getDamage() >= 1) { + PP.setRecentlyHurt(System.currentTimeMillis()); + } + } + break; + + case WOLF: + Wolf wolf = (Wolf) entity; + + if ((!m.isInvincible(wolf, event)) && wolf.isTamed() && (wolf.getOwner() instanceof Player)) { + Taming.preventDamage(event); + } + break; + + default: + break; + } + } + + /** + * Monitor EntityDeath events. + * + * @param event The event to monitor + */ + @EventHandler (priority = EventPriority.MONITOR) + public void onEntityDeath(EntityDeathEvent event) { + LivingEntity x = event.getEntity(); + x.setFireTicks(0); + + /* Remove bleed track */ + mcBleedTimer.remove(x); + + Archery.arrowRetrievalCheck(x, plugin); + + if (x instanceof Player) { + Users.getProfile((Player)x).resetBleedTicks(); + } + } + + /** + * Monitor CreatureSpawn events. + * + * @param event The event to monitor + */ + @EventHandler (priority = EventPriority.MONITOR) + public void onCreatureSpawn(CreatureSpawnEvent event) { + SpawnReason reason = event.getSpawnReason(); + + if ((reason.equals(SpawnReason.SPAWNER) || reason.equals(SpawnReason.SPAWNER_EGG)) && !Config.xpGainsMobSpawners) { + event.getEntity().setMetadata("mcmmoFromMobSpawner", new FixedMetadataValue(plugin, true)); + } + } + + /** + * Monitor ExplosionPrime events. + * + * @param event The event to monitor + */ + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onExplosionPrime(ExplosionPrimeEvent event) { + Entity entity = event.getEntity(); + + if (entity instanceof TNTPrimed) { + int id = entity.getEntityId(); + + if (plugin.tntTracker.containsKey(id)) { + Player player = plugin.tntTracker.get(id); + + if (mcPermissions.getInstance().biggerBombs(player)) { + BlastMining.biggerBombs(player, event); + } + } + } + } + + /** + * Monitor EntityExplode events. + * + * @param event The event to monitor + */ + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEnitityExplode(EntityExplodeEvent event) { + Entity entity = event.getEntity(); + + if (event.getEntity() instanceof TNTPrimed) { + int id = entity.getEntityId(); + + if (plugin.tntTracker.containsKey(id)) { + Player player = plugin.tntTracker.get(id); + BlastMining.dropProcessing(player, event); + plugin.tntTracker.remove(id); + } + } + } + + /** + * Monitor FoodLevelChange events. + * + * @param event The event to monitor + */ + @EventHandler (priority = EventPriority.LOW) + public void onFoodLevelChange(FoodLevelChangeEvent event) { + if (Config.getHerbalismHungerBonusEnabled()) { + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + PlayerProfile PP = Users.getProfile(player); + int currentFoodLevel = player.getFoodLevel(); + int newFoodLevel = event.getFoodLevel(); + + /* + * Some foods have 3 ranks + * Some foods have 5 ranks + * The number of ranks is based on how 'common' the item is + * We can adjust this quite easily if we find something is giving too much of a bonus + */ + + if (newFoodLevel > currentFoodLevel) { + Material food = player.getItemInHand().getType(); + int herbLevel = PP.getSkillLevel(SkillType.HERBALISM); + int foodChange = newFoodLevel - currentFoodLevel; + int rankChange = 0; + + switch (food) { + case BREAD: + /* BREAD RESTORES 2 1/2 HUNGER - RESTORES 5 HUNGER @ 1000 */ + rankChange = 200; + break; + + case COOKIE: + /* COOKIE RESTORES 1/2 HUNGER - RESTORES 2 HUNGER @ 1000 */ + rankChange = 400; + break; + + case MELON: + /* MELON RESTORES 1 HUNGER - RESTORES 2 1/2 HUNGER @ 1000 */ + rankChange = 400; + break; + + case MUSHROOM_SOUP: + /* MUSHROOM SOUP RESTORES 4 HUNGER - RESTORES 6 1/2 HUNGER @ 1000 */ + rankChange = 200; + break; + + default: + return; + } + + for (int i = 200; i <= 1000; i += rankChange) { + if (herbLevel >= i) { + foodChange++; + } + } + + /* Make sure we don't go over the max value */ + newFoodLevel = currentFoodLevel + foodChange; + if (newFoodLevel > 20) { + event.setFoodLevel(20); + } + else { + event.setFoodLevel(newFoodLevel); + } + } + } + } + } + + /** + * Monitor EntityTame events. + * + * @param event The event to watch + */ + @EventHandler (priority = EventPriority.MONITOR) + public void onEntityTame(EntityTameEvent event) { + Player player = (Player) event.getOwner(); + + if (mcPermissions.getInstance().taming(player) && !event.getEntity().hasMetadata("mcmmoSummoned")) { + PlayerProfile PP = Users.getProfile(player); + EntityType type = event.getEntityType(); + int xp = 0; + + switch (type) { + case WOLF: + xp = Config.getTamingXPWolf(); + break; + + case OCELOT: + xp = Config.getTamingXPOcelot(); + break; + + default: + break; + } + + PP.addXP(SkillType.TAMING, xp); + Skills.XpCheckSkill(SkillType.TAMING, player); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java similarity index 96% rename from src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java rename to src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 9970038f7..0448e04c1 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -1,374 +1,374 @@ -package com.gmail.nossr50.listeners; - -import java.util.HashSet; -import java.util.Set; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerChatEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerFishEvent.State; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; - -import com.gmail.nossr50.BlockChecks; -import com.gmail.nossr50.Combat; -import com.gmail.nossr50.Item; -import com.gmail.nossr50.ItemChecks; -import com.gmail.nossr50.Users; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.mcPermissions; -import com.gmail.nossr50.commands.general.XprateCommand; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.runnables.RemoveProfileFromMemoryTask; -import com.gmail.nossr50.spout.SpoutStuff; -import com.gmail.nossr50.datatypes.AbilityType; -import com.gmail.nossr50.datatypes.PlayerProfile; -import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.events.chat.McMMOAdminChatEvent; -import com.gmail.nossr50.events.chat.McMMOPartyChatEvent; -import com.gmail.nossr50.locale.mcLocale; -import com.gmail.nossr50.party.Party; -import com.gmail.nossr50.skills.BlastMining; -import com.gmail.nossr50.skills.Fishing; -import com.gmail.nossr50.skills.Herbalism; -import com.gmail.nossr50.skills.Repair; -import com.gmail.nossr50.skills.Skills; -import com.gmail.nossr50.skills.Taming; - -public class mcPlayerListener implements Listener { - private final mcMMO plugin; - - public mcPlayerListener(final mcMMO plugin) { - this.plugin = plugin; - } - - /** - * Monitor PlayerChangedWorld events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerWorldChangeEvent(PlayerChangedWorldEvent event) { - Player player = event.getPlayer(); - PlayerProfile PP = Users.getProfile(player); - - if (PP.getGodMode()) { - if (!mcPermissions.getInstance().mcgod(player)) { - PP.toggleGodMode(); - player.sendMessage(mcLocale.getString("Commands.GodMode.Forbidden")); - } - } - - if (PP.inParty()) { - if (!mcPermissions.getInstance().party(player)) { - PP.removeParty(); - player.sendMessage(mcLocale.getString("Party.Forbidden")); - } - } - } - - /** - * Monitor PlayerFish events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerFish(PlayerFishEvent event) { - Player player = event.getPlayer(); - - if (mcPermissions.getInstance().fishing(player)) { - State state = event.getState(); - - switch (state) { - case CAUGHT_FISH: - Fishing.processResults(event); - break; - - case CAUGHT_ENTITY: - if (Users.getProfile(player).getSkillLevel(SkillType.FISHING) >= 150 && mcPermissions.getInstance().shakeMob(player)) { - Fishing.shakeMob(event); - } - break; - - default: - break; - } - } - } - - /** - * Monitor PlaterPickupItem events. - * - * @param event The event to watch - */ - @EventHandler(ignoreCancelled = true) - public void onPlayerPickupItem(PlayerPickupItemEvent event) { - if (Users.getProfile(event.getPlayer()).getAbilityMode(AbilityType.BERSERK)) { - event.setCancelled(true); - } - } - - /** - * Monitor PlayerLogin events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerLogin(PlayerLoginEvent event) { - Users.addUser(event.getPlayer()); - } - - /** - * Monitor PlayerQuit events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - PlayerProfile PP = Users.getProfile(player); - - /* GARBAGE COLLECTION */ - - //Remove Spout Stuff - if (Config.spoutEnabled && SpoutStuff.playerHUDs.containsKey(player)) { - SpoutStuff.playerHUDs.remove(player); - } - - //Bleed it out - if(PP.getBleedTicks() > 0) { - Combat.dealDamage(player, PP.getBleedTicks() * 2); - } - - //Schedule PlayerProfile removal 2 minutes after quitting - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new RemoveProfileFromMemoryTask(player), 2400); - } - - /** - * Monitor PlayerJoin events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - - if (mcPermissions.getInstance().motd(player) && Config.enableMotd) { - player.sendMessage(mcLocale.getString("mcMMO.MOTD", new Object[] {plugin.getDescription().getVersion()})); - player.sendMessage(mcLocale.getString("mcMMO.Wiki")); - } - - //THIS IS VERY BAD WAY TO DO THINGS, NEED BETTER WAY - if (XprateCommand.xpevent) { - player.sendMessage(mcLocale.getString("XPRate.Event", new Object[] {Config.xpGainMultiplier})); - } - } - - /** - * Monitor PlayerInteract events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.LOW) - public void onPlayerInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - - Action action = event.getAction(); - Block block = event.getClickedBlock(); - ItemStack is = player.getItemInHand(); - Material mat; - - /* Fix for NPE on interacting with air */ - if (block == null) { - mat = Material.AIR; - } - else { - mat = block.getType(); - } - - switch (action) { - case RIGHT_CLICK_BLOCK: - - /* REPAIR CHECKS */ - if (mcPermissions.getInstance().repair(player) && block.getTypeId() == Config.anvilID && (ItemChecks.isTool(is) || ItemChecks.isArmor(is))) { - Repair.repairCheck(player, is); - event.setCancelled(true); - player.updateInventory(); - } - - /* ACTIVATION CHECKS */ - if (Config.enableAbilities && BlockChecks.abilityBlockCheck(mat)) { - if (!mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) { - Skills.activationCheck(player, SkillType.HERBALISM); - } - - Skills.activationCheck(player, SkillType.AXES); - Skills.activationCheck(player, SkillType.EXCAVATION); - Skills.activationCheck(player, SkillType.MINING); - Skills.activationCheck(player, SkillType.SWORDS); - Skills.activationCheck(player, SkillType.UNARMED); - Skills.activationCheck(player, SkillType.WOODCUTTING); - } - - /* GREEN THUMB CHECK */ - if (mcPermissions.getInstance().greenThumbBlocks(player) && Herbalism.makeMossy(mat) && is.getType().equals(Material.SEEDS)) { - Herbalism.greenThumbBlocks(is, player, block); - } - - /* ITEM CHECKS */ - if (BlockChecks.abilityBlockCheck(mat)) { - Item.itemchecks(player); - } - - /* BLAST MINING CHECK */ - if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) { - BlastMining.remoteDetonation(player, plugin); - } - - break; - - case RIGHT_CLICK_AIR: - - /* ACTIVATION CHECKS */ - if (Config.enableAbilities) { - Skills.activationCheck(player, SkillType.AXES); - Skills.activationCheck(player, SkillType.EXCAVATION); - Skills.activationCheck(player, SkillType.HERBALISM); - Skills.activationCheck(player, SkillType.MINING); - Skills.activationCheck(player, SkillType.SWORDS); - Skills.activationCheck(player, SkillType.UNARMED); - Skills.activationCheck(player, SkillType.WOODCUTTING); - } - - /* ITEM CHECKS */ - Item.itemchecks(player); - - /* BLAST MINING CHECK */ - if (mcPermissions.getInstance().blastMining(player) && is.getTypeId() == Config.getDetonatorItemID()) { - BlastMining.remoteDetonation(player, plugin); - } - - break; - - case LEFT_CLICK_AIR: - case LEFT_CLICK_BLOCK: - - /* CALL OF THE WILD CHECKS */ - if (player.isSneaking() && mcPermissions.getInstance().taming(player)) { - if (is.getType().equals(Material.RAW_FISH)) { - Taming.animalSummon(EntityType.OCELOT, player, plugin); - } - else if (is.getType().equals(Material.BONE)) { - Taming.animalSummon(EntityType.WOLF, player, plugin); - } - } - - break; - - default: - break; - } - } - - /** - * Monitor PlayerChat events. - * - * @param event The event to watch - */ - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) - public void onPlayerChat(PlayerChatEvent event) { - Player player = event.getPlayer(); - PlayerProfile PP = Users.getProfile(player); - boolean partyChat = PP.getPartyChatMode(); - boolean adminChat = PP.getAdminChatMode(); - Set recipients = event.getRecipients(); - - Set intendedRecipients = new HashSet(); - 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 recipients = event.getRecipients(); + + Set intendedRecipients = new HashSet(); + 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))); + } + } } diff --git a/src/main/java/com/gmail/nossr50/listeners/mcSelfListener.java b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java similarity index 93% rename from src/main/java/com/gmail/nossr50/listeners/mcSelfListener.java rename to src/main/java/com/gmail/nossr50/listeners/SelfListener.java index 74939c8fe..01bcea59a 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcSelfListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SelfListener.java @@ -8,7 +8,7 @@ import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent; /** * Listener for listening to our own events, only really useful for catching errors */ -public class mcSelfListener implements Listener { +public class SelfListener implements Listener { /** * Monitor internal XP gain events. diff --git a/src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java b/src/main/java/com/gmail/nossr50/listeners/SpoutInputListener.java similarity index 91% rename from src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java rename to src/main/java/com/gmail/nossr50/listeners/SpoutInputListener.java index 7e2bda215..b46ceaa75 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcSpoutInputListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SpoutInputListener.java @@ -1,48 +1,48 @@ -package com.gmail.nossr50.listeners; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.getspout.spoutapi.event.input.KeyPressedEvent; -import org.getspout.spoutapi.gui.ScreenType; -import org.getspout.spoutapi.player.SpoutPlayer; - -import com.gmail.nossr50.Users; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.datatypes.popups.PopupMMO; -import com.gmail.nossr50.spout.SpoutStuff; - -public class mcSpoutInputListener implements Listener { - private mcMMO plugin; - - public mcSpoutInputListener(mcMMO plugin) { - this.plugin = plugin; - } - - /** - * Monitor Spout KeyPressed events. - * - * @param event The event to watch - */ - @EventHandler - public void onKeyPressedEvent(KeyPressedEvent event) { - SpoutPlayer sPlayer = event.getPlayer(); - - if (!sPlayer.isSpoutCraftEnabled() || sPlayer.getMainScreen().getActivePopup() != null || event.getScreenType() != ScreenType.GAME_SCREEN) { - return; - } - - if (event.getKey() == SpoutStuff.keypress) { - if (!SpoutStuff.playerScreens.containsKey(sPlayer)) { - PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin); - - SpoutStuff.playerScreens.put(sPlayer, mmoPop); - sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); - sPlayer.getMainScreen().setDirty(true); - } - else { - sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); - sPlayer.getMainScreen().setDirty(true); - } - } - } -} +package com.gmail.nossr50.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.getspout.spoutapi.event.input.KeyPressedEvent; +import org.getspout.spoutapi.gui.ScreenType; +import org.getspout.spoutapi.player.SpoutPlayer; + +import com.gmail.nossr50.Users; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.popups.PopupMMO; +import com.gmail.nossr50.spout.SpoutStuff; + +public class SpoutInputListener implements Listener { + private mcMMO plugin; + + public SpoutInputListener(mcMMO plugin) { + this.plugin = plugin; + } + + /** + * Monitor Spout KeyPressed events. + * + * @param event The event to watch + */ + @EventHandler + public void onKeyPressedEvent(KeyPressedEvent event) { + SpoutPlayer sPlayer = event.getPlayer(); + + if (!sPlayer.isSpoutCraftEnabled() || sPlayer.getMainScreen().getActivePopup() != null || event.getScreenType() != ScreenType.GAME_SCREEN) { + return; + } + + if (event.getKey() == SpoutStuff.keypress) { + if (!SpoutStuff.playerScreens.containsKey(sPlayer)) { + PopupMMO mmoPop = new PopupMMO(sPlayer, Users.getProfile(sPlayer), plugin); + + SpoutStuff.playerScreens.put(sPlayer, mmoPop); + sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); + sPlayer.getMainScreen().setDirty(true); + } + else { + sPlayer.getMainScreen().attachPopupScreen(SpoutStuff.playerScreens.get(sPlayer)); + sPlayer.getMainScreen().setDirty(true); + } + } + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java b/src/main/java/com/gmail/nossr50/listeners/SpoutListener.java similarity index 90% rename from src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java rename to src/main/java/com/gmail/nossr50/listeners/SpoutListener.java index 36d8ef675..517fcf7e4 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcSpoutListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SpoutListener.java @@ -1,46 +1,46 @@ -package com.gmail.nossr50.listeners; - -import org.bukkit.ChatColor; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent; -import org.getspout.spoutapi.player.SpoutPlayer; - -import com.gmail.nossr50.Users; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.HUDmmo; -import com.gmail.nossr50.datatypes.PlayerProfile; -import com.gmail.nossr50.spout.SpoutStuff; - -public class mcSpoutListener implements Listener { - //Why do we have this here? We never use it... - mcMMO plugin = null; - - public mcSpoutListener(mcMMO pluginx) { - plugin = pluginx; - } - - /** - * Monitor SpoutCraftEnable events. - * - * @param event The event to watch - */ - @EventHandler - public void onSpoutCraftEnable(SpoutCraftEnableEvent event) { - SpoutPlayer sPlayer = event.getPlayer(); - PlayerProfile PPs = Users.getProfile(sPlayer); - - //TODO: Add custom titles based on skills - if (Config.getShowPowerLevelForSpout()) { - sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl" - + ChatColor.WHITE+"." + ChatColor.GREEN + String.valueOf(PPs.getPowerLevel())); - } - - if (sPlayer.isSpoutCraftEnabled()) { - SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); //Setup Party HUD stuff - - PPs.toggleSpoutEnabled(); - } - } +package com.gmail.nossr50.listeners; + +import org.bukkit.ChatColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent; +import org.getspout.spoutapi.player.SpoutPlayer; + +import com.gmail.nossr50.Users; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.datatypes.HUDmmo; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.spout.SpoutStuff; + +public class SpoutListener implements Listener { + //Why do we have this here? We never use it... + mcMMO plugin = null; + + public SpoutListener(mcMMO pluginx) { + plugin = pluginx; + } + + /** + * Monitor SpoutCraftEnable events. + * + * @param event The event to watch + */ + @EventHandler + public void onSpoutCraftEnable(SpoutCraftEnableEvent event) { + SpoutPlayer sPlayer = event.getPlayer(); + PlayerProfile PPs = Users.getProfile(sPlayer); + + //TODO: Add custom titles based on skills + if (Config.getShowPowerLevelForSpout()) { + sPlayer.setTitle(sPlayer.getName()+ "\n" + ChatColor.YELLOW + "P" + ChatColor.GOLD + "lvl" + + ChatColor.WHITE+"." + ChatColor.GREEN + String.valueOf(PPs.getPowerLevel())); + } + + if (sPlayer.isSpoutCraftEnabled()) { + SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); //Setup Party HUD stuff + + PPs.toggleSpoutEnabled(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java b/src/main/java/com/gmail/nossr50/listeners/SpoutScreenListener.java similarity index 93% rename from src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java rename to src/main/java/com/gmail/nossr50/listeners/SpoutScreenListener.java index 5f3711180..85c1a8f73 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcSpoutScreenListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/SpoutScreenListener.java @@ -1,91 +1,91 @@ -package com.gmail.nossr50.listeners; - -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.getspout.spoutapi.event.screen.ButtonClickEvent; -import org.getspout.spoutapi.event.screen.ScreenCloseEvent; -import org.getspout.spoutapi.player.SpoutPlayer; - -import com.gmail.nossr50.Users; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.datatypes.HUDType; -import com.gmail.nossr50.datatypes.HUDmmo; -import com.gmail.nossr50.datatypes.PlayerProfile; -import com.gmail.nossr50.datatypes.buttons.ButtonEscape; -import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle; -import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle; -import com.gmail.nossr50.datatypes.popups.PopupMMO; -import com.gmail.nossr50.spout.SpoutStuff; - -public class mcSpoutScreenListener implements Listener { - //Why do we have this here? We never use it... - mcMMO plugin = null; - - public mcSpoutScreenListener(mcMMO pluginx) { - plugin = pluginx; - } - - /** - * Monitor Spout ButtonClick events. - * - * @param event The event to watch - */ - @EventHandler - public void onButtonClick(ButtonClickEvent event) { - SpoutPlayer sPlayer = event.getPlayer(); - PlayerProfile PP = Users.getProfile(sPlayer); - - if (event.getButton() instanceof ButtonHUDStyle) { - if (SpoutStuff.playerHUDs.containsKey(sPlayer)) { - SpoutStuff.playerHUDs.get(sPlayer).resetHUD(); - SpoutStuff.playerHUDs.remove(sPlayer); - - switch (PP.getHUDType()) { - case RETRO: - PP.setHUDType(HUDType.STANDARD); - break; - - case STANDARD: - PP.setHUDType(HUDType.SMALL); - break; - - case SMALL: - PP.setHUDType(HUDType.DISABLED); - break; - - case DISABLED: - PP.setHUDType(HUDType.RETRO); - break; - - default: - break; - } - - SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); - SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP); - } - } - else if (event.getButton() instanceof ButtonEscape) { - sPlayer.getMainScreen().closePopup(); - } - else if (event.getButton() instanceof ButtonPartyToggle) { - PP.togglePartyHUD(); - ButtonPartyToggle bpt = (ButtonPartyToggle) event.getButton(); - bpt.updateText(PP); - SpoutStuff.playerHUDs.get(sPlayer).resetHUD(); - SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer); - } - } - - /** - * Monitor Spout ScreenClose events. - * - * @param event The event to watch - */ - @EventHandler - public void onScreenClose(ScreenCloseEvent event) { - if (event.getScreen() instanceof PopupMMO) { - SpoutStuff.playerScreens.remove(event.getPlayer()); - } - } -} +package com.gmail.nossr50.listeners; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.getspout.spoutapi.event.screen.ButtonClickEvent; +import org.getspout.spoutapi.event.screen.ScreenCloseEvent; +import org.getspout.spoutapi.player.SpoutPlayer; + +import com.gmail.nossr50.Users; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.HUDType; +import com.gmail.nossr50.datatypes.HUDmmo; +import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.buttons.ButtonEscape; +import com.gmail.nossr50.datatypes.buttons.ButtonHUDStyle; +import com.gmail.nossr50.datatypes.buttons.ButtonPartyToggle; +import com.gmail.nossr50.datatypes.popups.PopupMMO; +import com.gmail.nossr50.spout.SpoutStuff; + +public class SpoutScreenListener implements Listener { + //Why do we have this here? We never use it... + mcMMO plugin = null; + + public SpoutScreenListener(mcMMO pluginx) { + plugin = pluginx; + } + + /** + * Monitor Spout ButtonClick events. + * + * @param event The event to watch + */ + @EventHandler + public void onButtonClick(ButtonClickEvent event) { + SpoutPlayer sPlayer = event.getPlayer(); + PlayerProfile PP = Users.getProfile(sPlayer); + + if (event.getButton() instanceof ButtonHUDStyle) { + if (SpoutStuff.playerHUDs.containsKey(sPlayer)) { + SpoutStuff.playerHUDs.get(sPlayer).resetHUD(); + SpoutStuff.playerHUDs.remove(sPlayer); + + switch (PP.getHUDType()) { + case RETRO: + PP.setHUDType(HUDType.STANDARD); + break; + + case STANDARD: + PP.setHUDType(HUDType.SMALL); + break; + + case SMALL: + PP.setHUDType(HUDType.DISABLED); + break; + + case DISABLED: + PP.setHUDType(HUDType.RETRO); + break; + + default: + break; + } + + SpoutStuff.playerHUDs.put(sPlayer, new HUDmmo(sPlayer, plugin)); + SpoutStuff.playerScreens.get(sPlayer).updateButtons(PP); + } + } + else if (event.getButton() instanceof ButtonEscape) { + sPlayer.getMainScreen().closePopup(); + } + else if (event.getButton() instanceof ButtonPartyToggle) { + PP.togglePartyHUD(); + ButtonPartyToggle bpt = (ButtonPartyToggle) event.getButton(); + bpt.updateText(PP); + SpoutStuff.playerHUDs.get(sPlayer).resetHUD(); + SpoutStuff.playerHUDs.get(sPlayer).initializeHUD(sPlayer); + } + } + + /** + * Monitor Spout ScreenClose events. + * + * @param event The event to watch + */ + @EventHandler + public void onScreenClose(ScreenCloseEvent event) { + if (event.getScreen() instanceof PopupMMO) { + SpoutStuff.playerScreens.remove(event.getPlayer()); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index d6ea71a77..7bffd5cef 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -8,9 +8,9 @@ import com.gmail.nossr50.commands.party.*; import com.gmail.nossr50.commands.general.*; import com.gmail.nossr50.config.*; import com.gmail.nossr50.runnables.*; -import com.gmail.nossr50.listeners.mcBlockListener; -import com.gmail.nossr50.listeners.mcEntityListener; -import com.gmail.nossr50.listeners.mcPlayerListener; +import com.gmail.nossr50.listeners.BlockListener; +import com.gmail.nossr50.listeners.EntityListener; +import com.gmail.nossr50.listeners.PlayerListener; import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.party.Party; @@ -36,9 +36,9 @@ import org.bukkit.entity.Player; public class mcMMO extends JavaPlugin { - private final mcPlayerListener playerListener = new mcPlayerListener(this); - private final mcBlockListener blockListener = new mcBlockListener(this); - private final mcEntityListener entityListener = new mcEntityListener(this); + private final PlayerListener playerListener = new PlayerListener(this); + private final BlockListener blockListener = new BlockListener(this); + private final EntityListener entityListener = new EntityListener(this); public HashMap aliasMap = new HashMap(); //Alias - Command public HashMap arrowTracker = new HashMap(); diff --git a/src/main/java/com/gmail/nossr50/spout/SpoutStuff.java b/src/main/java/com/gmail/nossr50/spout/SpoutStuff.java index e5318c113..4ea7f950f 100644 --- a/src/main/java/com/gmail/nossr50/spout/SpoutStuff.java +++ b/src/main/java/com/gmail/nossr50/spout/SpoutStuff.java @@ -27,9 +27,9 @@ import com.gmail.nossr50.datatypes.HUDmmo; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.popups.PopupMMO; import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.listeners.mcSpoutInputListener; -import com.gmail.nossr50.listeners.mcSpoutListener; -import com.gmail.nossr50.listeners.mcSpoutScreenListener; +import com.gmail.nossr50.listeners.SpoutInputListener; +import com.gmail.nossr50.listeners.SpoutListener; +import com.gmail.nossr50.listeners.SpoutScreenListener; public class SpoutStuff { private static mcMMO plugin = mcMMO.p; @@ -40,9 +40,9 @@ public class SpoutStuff { public final static String hudRetroDirectory = hudDirectory + "Retro" + File.separator; public final static String soundDirectory = spoutDirectory + "Sound" + File.separator; - private final static mcSpoutListener spoutListener = new mcSpoutListener(plugin); - private final static mcSpoutInputListener spoutInputListener = new mcSpoutInputListener(plugin); - private final static mcSpoutScreenListener spoutScreenListener = new mcSpoutScreenListener(plugin); + private final static SpoutListener spoutListener = new SpoutListener(plugin); + private final static SpoutInputListener spoutInputListener = new SpoutInputListener(plugin); + private final static SpoutScreenListener spoutScreenListener = new SpoutScreenListener(plugin); public static HashMap playerHUDs = new HashMap(); public static HashMap playerScreens = new HashMap();