From 6e8cfe5ec944820554200b736cde73c65976533b Mon Sep 17 00:00:00 2001 From: GJ Date: Fri, 9 Mar 2012 01:23:32 -0500 Subject: [PATCH] Assorted bug fixes & cleanup. --- Changelog.txt | 2 + .../gmail/nossr50/datatypes/AbilityType.java | 43 ++++- .../nossr50/listeners/mcBlockListener.java | 150 ++++++++---------- .../com/gmail/nossr50/skills/Herbalism.java | 2 +- .../java/com/gmail/nossr50/skills/Skills.java | 36 +++++ 5 files changed, 136 insertions(+), 97 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 998691f88..68956c608 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -21,6 +21,8 @@ Version 2.0.00-dev = Fixed issue where every block broken had a herbalism check applied = Fixed issue where blocks weren't being removed from the watchlist = Fixed exploit where you could use /ptp to teleport to anyone + = Fixed bug where Green Terra didn't work on Stone Brick + = Fixed bug where Tree Feller could be used without permissions ! Changed inspect failed message to say inspect rather than whois ! Changed Call of the Wild to activate on left-click rather than right-click ! Changed Blast Mining to track based on Entity ID vs. Location diff --git a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java index bc2b706b6..ae7831981 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java @@ -1,10 +1,15 @@ package com.gmail.nossr50.datatypes; +import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import com.gmail.nossr50.mcPermissions; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.locale.mcLocale; +import com.gmail.nossr50.skills.Excavation; +import com.gmail.nossr50.skills.Herbalism; +import com.gmail.nossr50.skills.Mining; public enum AbilityType { @@ -15,7 +20,8 @@ public enum AbilityType SKULL_SPLIITER(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SkullSplitterOn"), mcLocale.getString("Skills.SkullSplitterOff"), "Skills.SkullSplitterPlayer", mcLocale.getString("Skills.YourSkullSplitter"), "Skills.SkullSplitterPlayerOff"), TREE_FELLER(LoadProperties.treeFellerCooldown, mcLocale.getString("Skills.TreeFellerOn"), mcLocale.getString("Skills.TreeFellerOff"), "Skills.TreeFellerPlayer", mcLocale.getString("Skills.YourTreeFeller"), "Skills.TreeFellerPlayerOff"), SERRATED_STRIKES(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SerratedStrikesOn"), mcLocale.getString("Skills.SerratedStrikesOff"), "Skills.SerratedStrikesPlayer", mcLocale.getString("Skills.YourSerratedStrikes"), "Skills.SerratedStrikesPlayerOff"), - BLAST_MINING(LoadProperties.blastMiningCooldown, null, null, "Skills.BlastMiningPlayer", mcLocale.getString("Skills.YourBlastMining"), null); + BLAST_MINING(LoadProperties.blastMiningCooldown, null, null, "Skills.BlastMiningPlayer", mcLocale.getString("Skills.YourBlastMining"), null), + LEAF_BLOWER(0, null, null, null, null, null); private int cooldown; private String abilityOn; @@ -118,10 +124,10 @@ public enum AbilityType { switch(this) { - case BLAST_MINING: - return PP.getBlastMiningInformed(); case BERSERK: return PP.getBerserkInformed(); + case BLAST_MINING: + return PP.getBlastMiningInformed(); case SUPER_BREAKER: return PP.getSuperBreakerInformed(); case GIGA_DRILL_BREAKER: @@ -142,12 +148,12 @@ public enum AbilityType { switch(this) { - case BLAST_MINING: - PP.setBlastMiningInformed(bool); - break; case BERSERK: PP.setBerserkInformed(bool); break; + case BLAST_MINING: + PP.setBlastMiningInformed(bool); + break; case SUPER_BREAKER: PP.setSuperBreakerInformed(bool); break; @@ -175,10 +181,14 @@ public enum AbilityType { case BERSERK: return mcPermissions.getInstance().unarmedAbility(player); + case BLAST_MINING: + return mcPermissions.getInstance().blastMining(player); case GIGA_DRILL_BREAKER: return mcPermissions.getInstance().excavationAbility(player); case GREEN_TERRA: return mcPermissions.getInstance().herbalismAbility(player); + case LEAF_BLOWER: + return mcPermissions.getInstance().woodcutting(player); case SERRATED_STRIKES: return mcPermissions.getInstance().swordsAbility(player); case SKULL_SPLIITER: @@ -187,9 +197,26 @@ public enum AbilityType return mcPermissions.getInstance().miningAbility(player); case TREE_FELLER: return mcPermissions.getInstance().woodCuttingAbility(player); - case BLAST_MINING: - return mcPermissions.getInstance().blastMining(player); } return false; } + + public boolean blockCheck(Block block) { + switch (this) { + case BERSERK: + return (Excavation.canBeGigaDrillBroken(block) || block.getType().equals(Material.SNOW)); + case GIGA_DRILL_BREAKER: + return Excavation.canBeGigaDrillBroken(block); + case GREEN_TERRA: + return Herbalism.canBeGreenTerra(block); + case LEAF_BLOWER: + return block.getType().equals(Material.LEAVES); + case SUPER_BREAKER: + return Mining.canBeSuperBroken(block); + case TREE_FELLER: + return block.getType().equals(Material.LOG); + default: + return false; + } + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java index c8c11b1b3..bb9d251f3 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java @@ -3,14 +3,15 @@ package com.gmail.nossr50.listeners; import com.gmail.nossr50.BlockChecks; import com.gmail.nossr50.ItemChecks; 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.LoadProperties; 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 org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -21,6 +22,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerAnimationEvent; import org.bukkit.inventory.ItemStack; import org.getspout.spoutapi.SpoutManager; @@ -138,28 +140,27 @@ public class mcBlockListener implements Listener { * WOOD CUTTING */ - if(mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) { + if (mcPermissions.getInstance().woodcutting(player) && mat.equals(Material.LOG)) { if (LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) { WoodCutting.woodcuttingBlockCheck(player, block, plugin); } else if (!LoadProperties.woodcuttingrequiresaxe) { WoodCutting.woodcuttingBlockCheck(player, block, plugin); } - - if (PP.getTreeFellerMode()) { - WoodCutting.treeFeller(event, plugin); - } } + if (PP.getTreeFellerMode() && mcPermissions.getInstance().woodCuttingAbility(player)) { + WoodCutting.treeFeller(event, plugin); + } /* * EXCAVATION */ if (Excavation.canBeGigaDrillBroken(block) && mcPermissions.getInstance().excavation(player) && block.getData() != (byte) 0x5) { - if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) { + if (LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) { Excavation.excavationProcCheck(block, player); } - else if(!LoadProperties.excavationRequiresShovel) { + else if (!LoadProperties.excavationRequiresShovel) { Excavation.excavationProcCheck(block, player); } } @@ -173,119 +174,92 @@ public class mcBlockListener implements Listener { } } + /** + * Monitor BlockDamage events. + * + * @param event The event to monitor + */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onBlockDamage(BlockDamageEvent event) - { + public void onBlockDamage(BlockDamageEvent event) { Player player = event.getPlayer(); PlayerProfile PP = Users.getProfile(player); ItemStack inhand = player.getItemInHand(); Block block = event.getBlock(); - int id = block.getTypeId(); Material mat = block.getType(); /* * ABILITY PREPARATION CHECKS */ - if(BlockChecks.abilityBlockCheck(mat)) - { - if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block)) - Skills.abilityCheck(player, SkillType.HERBALISM); - if(PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player)) + if (BlockChecks.abilityBlockCheck(mat)) { + if (PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block)) { + Skills.abilityCheck(player, SkillType.HERBALISM); + } + else if (PP.getAxePreparationMode() && mat.equals(Material.LOG) && mcPermissions.getInstance().woodCuttingAbility(player)) { //Why are we checking the permissions here? Skills.abilityCheck(player, SkillType.WOODCUTTING); - if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block)) + } + else if (PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block)) { Skills.abilityCheck(player, SkillType.MINING); - if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block)) + } + else if (PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block)) { Skills.abilityCheck(player, SkillType.EXCAVATION); + } + else if (PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW))) { + Skills.abilityCheck(player, SkillType.UNARMED); + } } - - if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || mat.equals(Material.SNOW))) - Skills.abilityCheck(player, SkillType.UNARMED); - - /* - * TREE FELLER STUFF - */ - if(LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode()) + + /* TREE FELLER SOUNDS */ + if (LoadProperties.spoutEnabled && mat.equals(Material.LOG) && PP.getTreeFellerMode()) { SpoutStuff.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation()); - + } + /* - * GREEN TERRA STUFF + * ABILITY TRIGGER CHECKS */ - if(PP.getGreenTerraMode() && mcPermissions.getInstance().herbalismAbility(player)) - Herbalism.greenTerra(player, block); - - /* - * GIGA DRILL BREAKER CHECKS - */ - if(PP.getGigaDrillBreakerMode() && Excavation.canBeGigaDrillBroken(block) && m.blockBreakSimulate(block, player, true) && mcPermissions.getInstance().excavationAbility(player)) - { - if(LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) - { + if (Skills.triggerCheck(player, block, AbilityType.GREEN_TERRA)) { + Herbalism.greenTerra(player, block); + } + else if (Skills.triggerCheck(player, block, AbilityType.GIGA_DRILL_BREAKER)) { + if (LoadProperties.excavationRequiresShovel && ItemChecks.isShovel(inhand)) { event.setInstaBreak(true); Excavation.gigaDrillBreaker(player, block); } - else if(!LoadProperties.excavationRequiresShovel) - { + else if (!LoadProperties.excavationRequiresShovel) { event.setInstaBreak(true); Excavation.gigaDrillBreaker(player, block); } } - /* - * BERSERK MODE CHECKS - */ - if(PP.getBerserkMode() - && m.blockBreakSimulate(block, player, true) - && player.getItemInHand().getTypeId() == 0 - && (Excavation.canBeGigaDrillBroken(block) || id == 78) - && mcPermissions.getInstance().unarmedAbility(player)) - { - event.setInstaBreak(true); - - if(LoadProperties.spoutEnabled) + else if (Skills.triggerCheck(player, block, AbilityType.BERSERK)) { + if (inhand.getType().equals(Material.AIR)) { + PlayerAnimationEvent armswing = new PlayerAnimationEvent(player); + Bukkit.getPluginManager().callEvent(armswing); + + event.setInstaBreak(true); + } + + if (LoadProperties.spoutEnabled) { SpoutStuff.playSoundForPlayer(SoundEffect.POP, player, block.getLocation()); + } } - - /* - * SUPER BREAKER CHECKS - */ - if(PP.getSuperBreakerMode() - && Mining.canBeSuperBroken(block) - && m.blockBreakSimulate(block, player, true) - && mcPermissions.getInstance().miningAbility(player)) - { - if(LoadProperties.miningrequirespickaxe) - { - if(ItemChecks.isMiningPick(inhand)){ - - event.setInstaBreak(true); - Mining.SuperBreakerBlockCheck(player, block, plugin); - } - } else { + else if (Skills.triggerCheck(player, block, AbilityType.SUPER_BREAKER)) { + if (LoadProperties.miningrequirespickaxe && ItemChecks.isMiningPick(inhand)) { + event.setInstaBreak(true); + Mining.SuperBreakerBlockCheck(player, block, plugin); + } + else if (!LoadProperties.miningrequirespickaxe) { event.setInstaBreak(true); Mining.SuperBreakerBlockCheck(player, block, plugin); } } - - /* - * LEAF BLOWER CHECKS - */ - if(id == 18 - && mcPermissions.getInstance().woodCuttingAbility(player) - && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100 - && m.blockBreakSimulate(block, player, true)) - { - if(LoadProperties.woodcuttingrequiresaxe) - { - if(ItemChecks.isAxe(inhand)){ - event.setInstaBreak(true); - WoodCutting.leafBlower(player, block); - } - } - else if(inhand.getTypeId() != 359) - { + else if (Skills.triggerCheck(player, block, AbilityType.LEAF_BLOWER) && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100) { + if (LoadProperties.woodcuttingrequiresaxe && ItemChecks.isAxe(inhand)) { + event.setInstaBreak(true); + WoodCutting.leafBlower(player, block); + } + else if (!LoadProperties.woodcuttingrequiresaxe && inhand.getType().equals(Material.SHEARS)) { event.setInstaBreak(true); WoodCutting.leafBlower(player, block); } - } } diff --git a/src/main/java/com/gmail/nossr50/skills/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/Herbalism.java index 4f3c543fa..a87b27a7d 100644 --- a/src/main/java/com/gmail/nossr50/skills/Herbalism.java +++ b/src/main/java/com/gmail/nossr50/skills/Herbalism.java @@ -22,7 +22,7 @@ public class Herbalism public static void greenTerra(Player player, Block block){ PlayerInventory inventory = player.getInventory(); boolean hasSeeds = inventory.contains(Material.SEEDS); - if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT){ + if(block.getType() == Material.COBBLESTONE || block.getType() == Material.DIRT || block.getType() == Material.SMOOTH_BRICK){ if(!hasSeeds) player.sendMessage("You need more seeds to spread Green Terra"); if(hasSeeds && block.getType() != Material.WHEAT) diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java index be218e477..58323a53d 100644 --- a/src/main/java/com/gmail/nossr50/skills/Skills.java +++ b/src/main/java/com/gmail/nossr50/skills/Skills.java @@ -4,6 +4,7 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.block.Block; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -305,4 +306,39 @@ public class Skills } } } + + public static boolean triggerCheck(Player player, Block block, AbilityType ability) { + boolean activate = true; + PlayerProfile PP = Users.getProfile(player); + + if (!ability.getPermissions(player)) { + activate = false; + return activate; + } + + if (!ability.equals(AbilityType.LEAF_BLOWER)) { + if (!ability.getMode(PP)) { + activate = false; + return activate; + } + } + + switch (ability) { + case BERSERK: + case GIGA_DRILL_BREAKER: + case SUPER_BREAKER: + case LEAF_BLOWER: + if (!m.blockBreakSimulate(block, player, true)) { + activate = false; + break; + } + if (!ability.blockCheck(block)) { + activate = false; + break; + } + default: + break; + } + return activate; + } }