From 57bf414d5966ce5e52c21b0702935c7cbe606fad Mon Sep 17 00:00:00 2001 From: GJ Date: Mon, 27 Feb 2012 17:28:32 -0500 Subject: [PATCH] OPTIMIZE ALL THE SKILLS! Adds some cool enum features & cleans up Skills.java - may possibly break some message displays for Axes & Woodcutting. --- src/main/java/com/gmail/nossr50/Combat.java | 13 +- .../gmail/nossr50/datatypes/AbilityType.java | 171 ++++++++- .../gmail/nossr50/datatypes/SkillType.java | 102 ++++- .../com/gmail/nossr50/datatypes/ToolType.java | 134 +++++++ .../nossr50/listeners/mcBlockListener.java | 15 +- .../nossr50/listeners/mcEntityListener.java | 3 +- .../nossr50/listeners/mcPlayerListener.java | 19 +- .../com/gmail/nossr50/runnables/mcTimer.java | 17 +- .../com/gmail/nossr50/skills/Archery.java | 17 + .../java/com/gmail/nossr50/skills/Axes.java | 36 -- .../com/gmail/nossr50/skills/Excavation.java | 33 -- .../com/gmail/nossr50/skills/Herbalism.java | 35 +- .../java/com/gmail/nossr50/skills/Mining.java | 33 +- .../java/com/gmail/nossr50/skills/Skills.java | 353 +++++------------- .../java/com/gmail/nossr50/skills/Swords.java | 33 -- .../com/gmail/nossr50/skills/Unarmed.java | 35 -- 16 files changed, 537 insertions(+), 512 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/datatypes/ToolType.java diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index d05db8e6e..335f90da1 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -22,7 +22,6 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.Plugin; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -60,7 +59,7 @@ public class Combat PlayerProfile PPa = Users.getProfile(attacker); //If there are any abilities to activate - combatAbilityChecks(attacker, PPa, pluginx); + combatAbilityChecks(attacker, PPa); //Damage modifiers and proc checks if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker)) @@ -179,15 +178,15 @@ public class Combat } } - public static void combatAbilityChecks(Player attacker, PlayerProfile PPa, Plugin pluginx) + public static void combatAbilityChecks(Player attacker, PlayerProfile PPa) { //Check to see if any abilities need to be activated - if(PPa.getAxePreparationMode()) - Axes.skullSplitterCheck(attacker); + if(PPa.getAxePreparationMode() && mcPermissions.getInstance().axesAbility(attacker)) + Skills.abilityCheck(attacker, SkillType.AXES); if(PPa.getSwordsPreparationMode()) - Swords.serratedStrikesActivationCheck(attacker); + Skills.abilityCheck(attacker, SkillType.SWORDS); if(PPa.getFistsPreparationMode()) - Unarmed.berserkActivationCheck(attacker); + Skills.abilityCheck(attacker, SkillType.UNARMED); } public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx) diff --git a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java index c0e1ec5df..aed8cf46d 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/AbilityType.java @@ -1,11 +1,166 @@ package com.gmail.nossr50.datatypes; -public enum AbilityType { -BERSERK, -SUPER_BREAKER, -GIGA_DRILL_BREAKER, -GREEN_TERRA, -SKULL_SPLIITER, -TREE_FELLER, -SERRATED_STRIKES; +import org.bukkit.entity.Player; + +import com.gmail.nossr50.mcPermissions; +import com.gmail.nossr50.config.LoadProperties; +import com.gmail.nossr50.locale.mcLocale; + +public enum AbilityType +{ + BERSERK(LoadProperties.berserkCooldown, mcLocale.getString("Skills.BerserkOn"), mcLocale.getString("Skills.BerserkOff"), "Skills.BerserkPlayer", mcLocale.getString("Skills.YourBerserk")), + SUPER_BREAKER(LoadProperties.superBreakerCooldown, mcLocale.getString("Skills.SuperBreakerOn"), mcLocale.getString("Skills.SuperBreakerOff"), "Skills.SuperBreakerPlayer", mcLocale.getString("Skills.YourSuperBreaker")), + GIGA_DRILL_BREAKER(LoadProperties.gigaDrillBreakerCooldown, mcLocale.getString("Skills.GigaDrillBreakerOn"), mcLocale.getString("Skills.GigaDrillBreakerOff"), "Skills.GigaDrillBreakerPlayer", mcLocale.getString("Skills.YourGigaDrillBreaker")), + GREEN_TERRA(LoadProperties.greenTerraCooldown, mcLocale.getString("Skills.GreenTerraOn"), mcLocale.getString("Skills.GreenTerraOff"), "Skills.GreenTerraPlayer", mcLocale.getString("Skills.YourGreenTerra")), + SKULL_SPLIITER(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SkullSplitterOn"), mcLocale.getString("Skills.SkullSplitterOff"), "Skills.SkullSplitterPlayer", mcLocale.getString("Skills.YourSkullSplitter")), + TREE_FELLER(LoadProperties.treeFellerCooldown, mcLocale.getString("Skills.TreeFellerOn"), mcLocale.getString("Skills.TreeFellerOff"), "Skills.TreeFellerPlayer", mcLocale.getString("Skills.YourTreeFeller")), + SERRATED_STRIKES(LoadProperties.skullSplitterCooldown, mcLocale.getString("Skills.SerratedStrikesOn"), mcLocale.getString("Skills.SerratedStrikesOff"), "Skills.SerratedStrikesPlayer", mcLocale.getString("Skills.YourSerratedStrikes")); + + private int cooldown; + private String abilityOn; + private String abilityOff; + private String abilityPlayer; + private String abilityRefresh; + + private AbilityType(int cooldown, String abilityOn, String abilityOff, String abilityPlayer, String abilityRefresh) + { + this.cooldown = cooldown; + this.abilityOn = abilityOn; + this.abilityOff = abilityOff; + this.abilityPlayer = abilityPlayer; + this.abilityRefresh = abilityRefresh; + } + + public int getCooldown() + { + return this.cooldown; + } + + public String getAbilityOn() + { + return this.abilityOn; + } + + public String getAbilityOff() + { + return this.abilityOff; + } + + public String getAbilityPlayer(Player player) + { + return mcLocale.getString(this.abilityPlayer, new Object[] {player.getName()}); + } + + public String getAbilityRefresh() + { + return this.abilityRefresh; + } + + public boolean getMode(PlayerProfile PP) + { + switch(this) + { + case BERSERK: + return PP.getBerserkMode(); + case SUPER_BREAKER: + return PP.getSuperBreakerMode(); + case GIGA_DRILL_BREAKER: + return PP.getGigaDrillBreakerMode(); + case GREEN_TERRA: + return PP.getGreenTerraMode(); + case SKULL_SPLIITER: + return PP.getSkullSplitterMode(); + case TREE_FELLER: + return PP.getTreeFellerMode(); + case SERRATED_STRIKES: + return PP.getSerratedStrikesMode(); + } + return false; + } + + public void setMode(PlayerProfile PP, boolean bool) + { + switch(this) + { + case BERSERK: + PP.setBerserkMode(bool); + case SUPER_BREAKER: + PP.setSuperBreakerMode(bool); + case GIGA_DRILL_BREAKER: + PP.setGigaDrillBreakerMode(bool); + case GREEN_TERRA: + PP.setGreenTerraMode(bool); + case SKULL_SPLIITER: + PP.setSkullSplitterMode(bool); + case TREE_FELLER: + PP.setTreeFellerMode(bool); + case SERRATED_STRIKES: + PP.setSerratedStrikesMode(bool); + } + } + + public boolean getInformed(PlayerProfile PP) + { + switch(this) + { + case BERSERK: + return PP.getBerserkInformed(); + case SUPER_BREAKER: + return PP.getSuperBreakerInformed(); + case GIGA_DRILL_BREAKER: + return PP.getGigaDrillBreakerInformed(); + case GREEN_TERRA: + return PP.getGreenTerraInformed(); + case SKULL_SPLIITER: + return PP.getSkullSplitterInformed(); + case TREE_FELLER: + return PP.getTreeFellerInformed(); + case SERRATED_STRIKES: + return PP.getSerratedStrikesInformed(); + } + return false; + } + + public void setInformed(PlayerProfile PP, boolean bool) + { + switch(this) + { + case BERSERK: + PP.setBerserkInformed(bool); + case SUPER_BREAKER: + PP.setSuperBreakerInformed(bool); + case GIGA_DRILL_BREAKER: + PP.setGigaDrillBreakerInformed(bool); + case GREEN_TERRA: + PP.setGreenTerraInformed(bool); + case SKULL_SPLIITER: + PP.setSkullSplitterInformed(bool); + case TREE_FELLER: + PP.setTreeFellerInformed(bool); + case SERRATED_STRIKES: + PP.setSerratedStrikesInformed(bool); + } + } + + public boolean getPermissions(Player player) + { + switch(this) + { + case BERSERK: + return mcPermissions.getInstance().unarmedAbility(player); + case GIGA_DRILL_BREAKER: + return mcPermissions.getInstance().excavationAbility(player); + case GREEN_TERRA: + return mcPermissions.getInstance().herbalismAbility(player); + case SERRATED_STRIKES: + return mcPermissions.getInstance().swordsAbility(player); + case SKULL_SPLIITER: + return mcPermissions.getInstance().axesAbility(player); + case SUPER_BREAKER: + return mcPermissions.getInstance().miningAbility(player); + case TREE_FELLER: + return mcPermissions.getInstance().woodCuttingAbility(player); + } + return false; + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/datatypes/SkillType.java b/src/main/java/com/gmail/nossr50/datatypes/SkillType.java index fe5366a94..6f62129fc 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/SkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/SkillType.java @@ -16,19 +16,97 @@ */ package com.gmail.nossr50.datatypes; +import org.bukkit.entity.Player; + +import com.gmail.nossr50.mcPermissions; +import com.gmail.nossr50.config.LoadProperties; + public enum SkillType { - ACROBATICS, + ACROBATICS(LoadProperties.levelCapAcrobatics), ALL, //This one is just for convenience - ARCHERY, - AXES, - EXCAVATION, - FISHING, - HERBALISM, - MINING, - REPAIR, - SWORDS, - TAMING, - UNARMED, - WOODCUTTING; + ARCHERY(LoadProperties.levelCapArchery), + AXES(AbilityType.SKULL_SPLIITER, LoadProperties.levelCapAxes, ToolType.AXE), + EXCAVATION(AbilityType.GIGA_DRILL_BREAKER, LoadProperties.levelCapExcavation, ToolType.SHOVEL), + FISHING(LoadProperties.levelCapFishing), + HERBALISM(AbilityType.GREEN_TERRA, LoadProperties.levelCapHerbalism, ToolType.HOE), + MINING(AbilityType.SUPER_BREAKER, LoadProperties.levelCapMining, ToolType.PICKAXE), + REPAIR(LoadProperties.levelCapRepair), + SWORDS(AbilityType.SERRATED_STRIKES, LoadProperties.levelCapSwords, ToolType.SWORD), + TAMING(LoadProperties.levelCapTaming), + UNARMED(AbilityType.BERSERK, LoadProperties.levelCapUnarmed, ToolType.FISTS), + WOODCUTTING(AbilityType.TREE_FELLER, LoadProperties.levelCapWoodcutting, ToolType.AXE); + + private AbilityType ability; + private int maxLevel; + private ToolType tool; + + private SkillType() + { + this.ability = null; + this.maxLevel = 0; + this.tool = null; + } + + private SkillType(AbilityType ability, int maxLevel, ToolType tool) + { + this.ability = ability; + this.maxLevel = maxLevel; + this.tool = tool; + } + + private SkillType(int maxLevel) + { + this(null, maxLevel, null); + } + + public AbilityType getAbility() + { + return this.ability; + } + + public int getMaxLevel() + { + if(maxLevel > 0) + return maxLevel; + else + return Integer.MAX_VALUE; + } + + public ToolType getTool() + { + return this.tool; + } + + public boolean getPermissions(Player player) + { + switch(this) + { + case ACROBATICS: + return mcPermissions.getInstance().acrobatics(player); + case ARCHERY: + return mcPermissions.getInstance().archery(player); + case AXES: + return mcPermissions.getInstance().axes(player); + case EXCAVATION: + return mcPermissions.getInstance().excavation(player); + case FISHING: + return mcPermissions.getInstance().fishing(player); + case HERBALISM: + return mcPermissions.getInstance().herbalism(player); + case MINING: + return mcPermissions.getInstance().mining(player); + case REPAIR: + return mcPermissions.getInstance().repair(player); + case SWORDS: + return mcPermissions.getInstance().swords(player); + case TAMING: + return mcPermissions.getInstance().taming(player); + case UNARMED: + return mcPermissions.getInstance().unarmed(player); + case WOODCUTTING: + return mcPermissions.getInstance().woodcutting(player); + } + return false; + } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/ToolType.java b/src/main/java/com/gmail/nossr50/datatypes/ToolType.java new file mode 100644 index 000000000..47ee8e043 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/ToolType.java @@ -0,0 +1,134 @@ +package com.gmail.nossr50.datatypes; + +import org.bukkit.inventory.ItemStack; + +import com.gmail.nossr50.m; +import com.gmail.nossr50.locale.mcLocale; + +public enum ToolType +{ + AXE(mcLocale.getString("Skills.LowerAxe"), mcLocale.getString("Skills.ReadyAxe")), + FISTS(mcLocale.getString("Skills.LowerFists"), mcLocale.getString("Skills.ReadyFists")), + HOE(mcLocale.getString("Skills.LowerHoe"), mcLocale.getString("Skills.ReadyHoe")), + PICKAXE(mcLocale.getString("Skills.LowerPickAxe"), mcLocale.getString("Skills.ReadyPickAxe")), + SHOVEL(mcLocale.getString("Skills.LowerShovel"), mcLocale.getString("Skills.ReadyShovel")), + SWORD(mcLocale.getString("Skills.LowerSword"), mcLocale.getString("Skills.ReadySword")); + + private String lowerTool; + private String raiseTool; + + private ToolType(String lowerTool, String raiseTool) + { + this.lowerTool = lowerTool; + this.raiseTool = raiseTool; + } + + public String getLowerTool() + { + return this.lowerTool; + } + + public String getRaiseTool() + { + return this.raiseTool; + } + + public boolean getToolMode(PlayerProfile PP) + { + switch(this) + { + case AXE: + PP.getAxePreparationMode(); + case FISTS: + PP.getFistsPreparationMode(); + case HOE: + PP.getHoePreparationMode(); + case PICKAXE: + PP.getPickaxePreparationMode(); + case SHOVEL: + PP.getShovelPreparationMode(); + case SWORD: + PP.getSwordsPreparationMode(); + } + return false; + } + + public void setToolMode(PlayerProfile PP, boolean bool) + { + switch(this) + { + case AXE: + PP.setAxePreparationMode(bool); + case FISTS: + PP.setFistsPreparationMode(bool); + case HOE: + PP.setHoePreparationMode(bool); + case PICKAXE: + PP.setPickaxePreparationMode(bool); + case SHOVEL: + PP.setShovelPreparationMode(bool); + case SWORD: + PP.setSwordsPreparationMode(bool); + } + } + + public long getToolATS(PlayerProfile PP) + { + switch(this) + { + case AXE: + return PP.getAxePreparationATS(); + case FISTS: + return PP.getFistsPreparationATS(); + case HOE: + return PP.getHoePreparationATS(); + case PICKAXE: + return PP.getPickaxePreparationATS(); + case SHOVEL: + return PP.getShovelPreparationATS(); + case SWORD: + return PP.getSwordsPreparationATS(); + } + return 0; + } + + public void setToolATS(PlayerProfile PP, long ats) + { + switch(this) + { + case AXE: + PP.setAxePreparationATS(ats); + case FISTS: + PP.setFistsPreparationATS(ats); + case HOE: + PP.setHoePreparationATS(ats); + case PICKAXE: + PP.setPickaxePreparationATS(ats); + case SHOVEL: + PP.setShovelPreparationATS(ats); + case SWORD: + PP.setSwordsPreparationATS(ats); + } + } + + public boolean inHand(ItemStack is) + { + switch(this) + { + case AXE: + return m.isAxes(is); + case FISTS: + return is == null; + case HOE: + return m.isHoe(is); + case PICKAXE: + return m.isMiningPick(is); + case SHOVEL: + return m.isShovel(is); + case SWORD: + return m.isSwords(is); + } + return false; + } + +} diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java index 2188c7f24..06d29ac11 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java @@ -147,7 +147,7 @@ public class mcBlockListener implements Listener //Green Terra if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block))) - Herbalism.greenTerraCheck(player); + Skills.abilityCheck(player, SkillType.HERBALISM); //Wheat && Triple drops if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block)) @@ -224,16 +224,17 @@ public class mcBlockListener implements Listener if(m.abilityBlockCheck(block)) { if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block)) - Herbalism.greenTerraCheck(player); + Skills.abilityCheck(player, SkillType.HERBALISM); if(PP.getAxePreparationMode() && id == 17 && mcPermissions.getInstance().woodCuttingAbility(player)) - WoodCutting.treeFellerCheck(player); + Skills.abilityCheck(player, SkillType.WOODCUTTING); if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block)) - Mining.superBreakerCheck(player); + Skills.abilityCheck(player, SkillType.MINING); if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block)) - Excavation.gigaDrillBreakerActivationCheck(player); + Skills.abilityCheck(player, SkillType.EXCAVATION); } + if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78)) - Unarmed.berserkActivationCheck(player); + Skills.abilityCheck(player, SkillType.UNARMED); /* * TREE FELLER STUFF @@ -323,7 +324,7 @@ public class mcBlockListener implements Listener * LEAF BLOWER CHECKS */ if(id == 18 - && mcPermissions.getInstance().woodcutting(player) + && mcPermissions.getInstance().woodCuttingAbility(player) && PP.getSkillLevel(SkillType.WOODCUTTING) >= 100 && m.blockBreakSimulate(block, player, true)) { diff --git a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java index f0c4a322d..3c9ddcd9f 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcEntityListener.java @@ -45,6 +45,7 @@ import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.party.Party; 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; @@ -159,7 +160,7 @@ public class mcEntityListener implements Listener if(plugin.misc.bleedTracker.contains((LivingEntity)x)) plugin.misc.addToBleedRemovalQue((LivingEntity)x); - Skills.arrowRetrievalCheck(x, plugin); + Archery.arrowRetrievalCheck(x, plugin); if(x instanceof Player){ Player player = (Player)x; diff --git a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java index 91f8e1b31..3a54497fd 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcPlayerListener.java @@ -227,8 +227,14 @@ public class mcPlayerListener implements Listener if(LoadProperties.enableAbilities && m.abilityBlockCheck(block)) { if(block != null && m.isHoe(is) && !mat.equals(Material.DIRT) && !mat.equals(Material.GRASS) && !mat.equals(Material.SOIL)) - Skills.hoeReadinessCheck(player); - Skills.abilityActivationCheck(player); + 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 @@ -274,8 +280,13 @@ public class mcPlayerListener implements Listener if(LoadProperties.enableAbilities && action == Action.RIGHT_CLICK_AIR) { - Skills.hoeReadinessCheck(player); - Skills.abilityActivationCheck(player); + 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); } /* diff --git a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java index c915c53fb..bc9fb4829 100644 --- a/src/main/java/com/gmail/nossr50/runnables/mcTimer.java +++ b/src/main/java/com/gmail/nossr50/runnables/mcTimer.java @@ -21,6 +21,7 @@ import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.PlayerProfile; +import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.skills.Skills; import com.gmail.nossr50.skills.Swords; @@ -51,12 +52,24 @@ public class mcTimer implements Runnable /* * MONITOR SKILLS */ - Skills.monitorSkills(player, PP, curTime); + Skills.monitorSkill(player, PP, curTime, SkillType.AXES); + Skills.monitorSkill(player, PP, curTime, SkillType.EXCAVATION); + Skills.monitorSkill(player, PP, curTime, SkillType.HERBALISM); + Skills.monitorSkill(player, PP, curTime, SkillType.MINING); + Skills.monitorSkill(player, PP, curTime, SkillType.SWORDS); + Skills.monitorSkill(player, PP, curTime, SkillType.UNARMED); + Skills.monitorSkill(player, PP, curTime, SkillType.WOODCUTTING); /* * COOLDOWN MONITORING */ - Skills.watchCooldowns(player, PP, curTime); + Skills.watchCooldown(player, PP, curTime, SkillType.AXES); + Skills.watchCooldown(player, PP, curTime, SkillType.EXCAVATION); + Skills.watchCooldown(player, PP, curTime, SkillType.HERBALISM); + Skills.watchCooldown(player, PP, curTime, SkillType.MINING); + Skills.watchCooldown(player, PP, curTime, SkillType.SWORDS); + Skills.watchCooldown(player, PP, curTime, SkillType.UNARMED); + Skills.watchCooldown(player, PP, curTime, SkillType.WOODCUTTING); /* * PLAYER BLEED MONITORING diff --git a/src/main/java/com/gmail/nossr50/skills/Archery.java b/src/main/java/com/gmail/nossr50/skills/Archery.java index 6f03d4a9e..5f7a871e1 100644 --- a/src/main/java/com/gmail/nossr50/skills/Archery.java +++ b/src/main/java/com/gmail/nossr50/skills/Archery.java @@ -19,7 +19,10 @@ package com.gmail.nossr50.skills; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + import com.gmail.nossr50.Users; +import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; @@ -96,4 +99,18 @@ public class Archery attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$ } } + + public static void arrowRetrievalCheck(Entity entity, mcMMO plugin) + { + if(plugin.misc.arrowTracker.containsKey(entity)) + { + Integer x = 0; + while(x < plugin.misc.arrowTracker.get(entity)) + { + m.mcDropItem(entity.getLocation(), new ItemStack(262, 1)); + x++; + } + } + plugin.misc.arrowTracker.remove(entity); + } } diff --git a/src/main/java/com/gmail/nossr50/skills/Axes.java b/src/main/java/com/gmail/nossr50/skills/Axes.java index f2a6a4852..656538dea 100644 --- a/src/main/java/com/gmail/nossr50/skills/Axes.java +++ b/src/main/java/com/gmail/nossr50/skills/Axes.java @@ -24,51 +24,15 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.plugin.Plugin; -import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.Combat; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcPermissions; -import com.gmail.nossr50.config.LoadProperties; -import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.party.Party; public class Axes { - public static void skullSplitterCheck(Player player){ - PlayerProfile PP = Users.getProfile(player); - if(m.isAxes(player.getItemInHand()) && mcPermissions.getInstance().axesAbility(player)){ - /* - * CHECK FOR AXE PREP MODE - */ - if(PP.getAxePreparationMode()) - { - PP.setAxePreparationMode(false); - } - int ticks = 2; - int x = PP.getSkillLevel(SkillType.AXES); - while(x >= 50){ - x-=50; - ticks++; - } - - if(!PP.getSkullSplitterMode() && Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn")); - for(Player y : player.getWorld().getPlayers()){ - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.SKULL_SPLIITER, System.currentTimeMillis()+(ticks*1000)); - PP.setSkullSplitterMode(true); - } - if(!PP.getSkullSplitterMode() && !Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)){ - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)+"s)"); - } - } - } public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx) { diff --git a/src/main/java/com/gmail/nossr50/skills/Excavation.java b/src/main/java/com/gmail/nossr50/skills/Excavation.java index 263b6e59f..97db81519 100644 --- a/src/main/java/com/gmail/nossr50/skills/Excavation.java +++ b/src/main/java/com/gmail/nossr50/skills/Excavation.java @@ -27,12 +27,10 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.player.PlayerAnimationEvent; -import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.spout.SpoutStuff; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.config.LoadProperties; -import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; @@ -41,37 +39,6 @@ import org.getspout.spoutapi.sound.SoundEffect; public class Excavation { - public static void gigaDrillBreakerActivationCheck(Player player) - { - PlayerProfile PP = Users.getProfile(player); - if(m.isShovel(player.getItemInHand())) - { - if(PP.getShovelPreparationMode()) - PP.setShovelPreparationMode(false); - - int ticks = 2; - int x = PP.getSkillLevel(SkillType.EXCAVATION); - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getGigaDrillBreakerMode() && PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER) < System.currentTimeMillis()) - { - player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.GIGA_DRILL_BREAKER, System.currentTimeMillis()+(ticks*1000)); - PP.setGigaDrillBreakerMode(true); - } - - } - } - public static boolean canBeGigaDrillBroken(Block block) { switch(block.getType()){ diff --git a/src/main/java/com/gmail/nossr50/skills/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/Herbalism.java index 67474adb3..a19741e59 100644 --- a/src/main/java/com/gmail/nossr50/skills/Herbalism.java +++ b/src/main/java/com/gmail/nossr50/skills/Herbalism.java @@ -30,45 +30,12 @@ import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.config.LoadProperties; -import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.locale.mcLocale; public class Herbalism -{ - - public static void greenTerraCheck(Player player) - { - PlayerProfile PP = Users.getProfile(player); - if(m.isHoe(player.getItemInHand())) - { - if(PP.getHoePreparationMode()) - PP.setHoePreparationMode(false); - int ticks = 2; - int x = PP.getSkillLevel(SkillType.HERBALISM); - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getGreenTerraMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.GREEN_TERRA), LoadProperties.greenTerraCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.GreenTerraOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.GreenTerraPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.GREEN_TERRA, System.currentTimeMillis()+(ticks*1000)); - PP.setGreenTerraMode(true); - } - - } - } - +{ public static void greenTerra(Player player, Block block){ PlayerInventory inventory = player.getInventory(); boolean hasSeeds = inventory.contains(Material.SEEDS); diff --git a/src/main/java/com/gmail/nossr50/skills/Mining.java b/src/main/java/com/gmail/nossr50/skills/Mining.java index b71b698a9..8c4cd3000 100644 --- a/src/main/java/com/gmail/nossr50/skills/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/Mining.java @@ -30,44 +30,13 @@ import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; 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 com.gmail.nossr50.locale.mcLocale; public class Mining { - public static void superBreakerCheck(Player player) - { - PlayerProfile PP = Users.getProfile(player); - if(m.isMiningPick(player.getItemInHand())) - { - if(PP.getPickaxePreparationMode()) - PP.setPickaxePreparationMode(false); - - int ticks = 2; - int x = PP.getSkillLevel(SkillType.MINING); - - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getSuperBreakerMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.SUPER_BREAKER), LoadProperties.superBreakerCooldown)){ - player.sendMessage(mcLocale.getString("Skills.SuperBreakerOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.SuperBreakerPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.SUPER_BREAKER, System.currentTimeMillis()+(ticks*1000)); - PP.setSuperBreakerMode(true); - } - - } - } + public static void blockProcSimulate(Block block, Player player) { Location loc = block.getLocation(); diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java index 79e2d7ec9..a9b2cf32a 100644 --- a/src/main/java/com/gmail/nossr50/skills/Skills.java +++ b/src/main/java/com/gmail/nossr50/skills/Skills.java @@ -20,16 +20,13 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import org.getspout.spoutapi.SpoutManager; import org.getspout.spoutapi.player.SpoutPlayer; import com.gmail.nossr50.Leaderboard; 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; @@ -37,24 +34,20 @@ import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.PlayerStat; import com.gmail.nossr50.datatypes.SkillType; +import com.gmail.nossr50.datatypes.ToolType; import com.gmail.nossr50.events.McMMOPlayerLevelUpEvent; import com.gmail.nossr50.locale.mcLocale; - public class Skills { protected static final Logger log = Logger.getLogger("Minecraft"); - public void updateSQLfromFile(Player player){ - - } public static boolean cooldownOver(Player player, long oldTime, int cooldown){ long currentTime = System.currentTimeMillis(); - if(currentTime - oldTime >= (cooldown * 1000)){ + if(currentTime - oldTime >= (cooldown * 1000)) return true; - } else { + else return false; - } } public static int calculateTimeLeft(Player player, long deactivatedTimeStamp, int cooldown) @@ -62,226 +55,61 @@ public class Skills return (int) (((deactivatedTimeStamp + (cooldown * 1000)) - System.currentTimeMillis())/1000); } - public static void watchCooldowns(Player player, PlayerProfile PP, long curTime){ - if(!PP.getGreenTerraInformed() && curTime - (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000) >= (LoadProperties.greenTerraCooldown * 1000)){ - PP.setGreenTerraInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourGreenTerra")); - } - if(!PP.getTreeFellerInformed() && curTime - (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000) >= (LoadProperties.treeFellerCooldown * 1000)){ - PP.setTreeFellerInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourTreeFeller")); - } - if(!PP.getSuperBreakerInformed() && curTime - (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000) >= (LoadProperties.superBreakerCooldown * 1000)){ - PP.setSuperBreakerInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourSuperBreaker")); - } - if(!PP.getSerratedStrikesInformed() && curTime - (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000) >= (LoadProperties.serratedStrikeCooldown * 1000)){ - PP.setSerratedStrikesInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourSerratedStrikes")); - } - if(!PP.getBerserkInformed() && (curTime - (PP.getSkillDATS(AbilityType.BERSERK)*1000)) >= (LoadProperties.berserkCooldown * 1000)){ - PP.setBerserkInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourBerserk")); - } - if(!PP.getSkullSplitterInformed() && curTime - (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000) >= (LoadProperties.skullSplitterCooldown * 1000)){ - PP.setSkullSplitterInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourSkullSplitter")); - } - if(!PP.getGigaDrillBreakerInformed() && curTime - (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000) >= (LoadProperties.gigaDrillBreakerCooldown * 1000)){ - PP.setGigaDrillBreakerInformed(true); - player.sendMessage(mcLocale.getString("Skills.YourGigaDrillBreaker")); + public static void watchCooldown(Player player, PlayerProfile PP, long curTime, SkillType skill) + { + AbilityType ability = skill.getAbility(); + + if(!ability.getInformed(PP) && curTime - (PP.getSkillDATS(ability) * 1000) >= (ability.getCooldown() * 1000)) + { + ability.setInformed(PP, true); + player.sendMessage(ability.getAbilityRefresh()); } } - public static void hoeReadinessCheck(Player player) + + public static void activationCheck(Player player, SkillType skill) { if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking()) return; PlayerProfile PP = Users.getProfile(player); - if(mcPermissions.getInstance().herbalismAbility(player) && m.isHoe(player.getItemInHand()) && !PP.getHoePreparationMode()){ - if(!PP.getGreenTerraMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000), LoadProperties.greenTerraCooldown)){ - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000), LoadProperties.greenTerraCooldown)+"s)"); - return; - } - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadyHoe")); - PP.setHoePreparationATS(System.currentTimeMillis()); - PP.setHoePreparationMode(true); + AbilityType ability = skill.getAbility(); + ToolType tool = skill.getTool(); + + if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode()) + return; + + if(ability.getPermissions(player) && tool.inHand(player.getItemInHand()) && !tool.getToolMode(PP)) + { + player.sendMessage(mcLocale.getString("Skills.TooTired") + ChatColor.YELLOW + " (" + calculateTimeLeft(player, (PP.getSkillDATS(ability) * 1000), ability.getCooldown()) + "s)"); + return; } + + if(LoadProperties.enableAbilityMessages) + player.sendMessage(tool.getRaiseTool()); + + tool.setToolATS(PP, System.currentTimeMillis()); + tool.setToolMode(PP, true); } - public static void monitorSkills(Player player, PlayerProfile PP, long curTime){ - if(PP.getHoePreparationMode() && curTime - (PP.getHoePreparationATS()*1000) >= 4000){ - PP.setHoePreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerHoe")); - } - if(PP.getAxePreparationMode() && curTime - (PP.getAxePreparationATS()*1000) >= 4000){ - PP.setAxePreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerAxe")); - } - if(PP.getPickaxePreparationMode() && curTime - (PP.getPickaxePreparationATS()*1000) >= 4000){ - PP.setPickaxePreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerPickAxe")); - } - if(PP.getSwordsPreparationMode() && curTime - (PP.getSwordsPreparationATS()*1000) >= 4000){ - PP.setSwordsPreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerSword")); - } - if(PP.getFistsPreparationMode() && curTime - (PP.getFistsPreparationATS()*1000) >= 4000){ - PP.setFistsPreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerFists")); - } - if(PP.getShovelPreparationMode() && curTime - (PP.getShovelPreparationATS()*1000) >= 4000){ - PP.setShovelPreparationMode(false); - player.sendMessage(mcLocale.getString("Skills.LowerShovel")); - } - - /* - * HERBALISM ABILITY - */ - if(mcPermissions.getInstance().herbalismAbility(player)){ - if(PP.getGreenTerraMode() && (PP.getSkillDATS(AbilityType.GREEN_TERRA)*1000) <= curTime){ - PP.setGreenTerraMode(false); - PP.setGreenTerraInformed(false); - player.sendMessage(mcLocale.getString("Skills.GreenTerraOff")); - } - } - /* - * AXES ABILITY - */ - if(mcPermissions.getInstance().axesAbility(player)){ - if(PP.getSkullSplitterMode() && (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000) <= curTime){ - PP.setSkullSplitterMode(false); - PP.setSkullSplitterInformed(false); - player.sendMessage(mcLocale.getString("Skills.SkullSplitterOff")); - } - } - /* - * WOODCUTTING ABILITY - */ - if(mcPermissions.getInstance().woodCuttingAbility(player)){ - if(PP.getTreeFellerMode() && (PP.getSkillDATS(AbilityType.TREE_FELLER)*1000) <= curTime){ - PP.setTreeFellerMode(false); - PP.setTreeFellerInformed(false); - player.sendMessage(mcLocale.getString("Skills.TreeFellerOff")); - } - } - /* - * MINING ABILITY - */ - if(mcPermissions.getInstance().miningAbility(player)){ - if(PP.getSuperBreakerMode() && (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000) <= curTime){ - PP.setSuperBreakerMode(false); - PP.setSuperBreakerInformed(false); - player.sendMessage(mcLocale.getString("Skills.SuperBreakerOff")); - } - } - /* - * EXCAVATION ABILITY - */ - if(mcPermissions.getInstance().excavationAbility(player)){ - if(PP.getGigaDrillBreakerMode() && (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000) <= curTime){ - PP.setGigaDrillBreakerMode(false); - PP.setGigaDrillBreakerInformed(false); - player.sendMessage(mcLocale.getString("Skills.GigaDrillBreakerOff")); - } - } - /* - * SWORDS ABILITY - */ - if(mcPermissions.getInstance().swordsAbility(player)){ - if(PP.getSerratedStrikesMode() && (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000) <= curTime){ - PP.setSerratedStrikesMode(false); - PP.setSerratedStrikesInformed(false); - player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOff")); - } - } - /* - * UNARMED ABILITY - */ - if(mcPermissions.getInstance().unarmedAbility(player)){ - if(PP.getBerserkMode() && (PP.getSkillDATS(AbilityType.BERSERK)*1000) <= curTime){ - PP.setBerserkMode(false); - PP.setBerserkInformed(false); - player.sendMessage(mcLocale.getString("Skills.BerserkOff")); - } - } - } - public static void abilityActivationCheck(Player player) - { - if(LoadProperties.enableOnlyActivateWhenSneaking && !player.isSneaking()) - return; - - PlayerProfile PP = Users.getProfile(player); - if(PP != null) + public static void monitorSkill(Player player, PlayerProfile PP, long curTime, SkillType skill){ + ToolType tool = skill.getTool(); + AbilityType ability = skill.getAbility(); + if(tool.getToolMode(PP) && curTime - (tool.getToolATS(PP) * 1000) >= 4000) { - if(!PP.getAbilityUse() || PP.getSuperBreakerMode() || PP.getSerratedStrikesMode() || PP.getTreeFellerMode() || PP.getGreenTerraMode() || PP.getBerserkMode() || PP.getGigaDrillBreakerMode()) - return; - if(mcPermissions.getInstance().miningAbility(player) && m.isMiningPick(player.getItemInHand()) && !PP.getPickaxePreparationMode()) - { - if(!PP.getSuperBreakerMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000), LoadProperties.superBreakerCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SUPER_BREAKER)*1000), LoadProperties.superBreakerCooldown)+"s)"); - return; - } - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadyPickAxe")); - PP.setPickaxePreparationATS(System.currentTimeMillis()); - PP.setPickaxePreparationMode(true); - } - if(mcPermissions.getInstance().excavationAbility(player) && m.isShovel(player.getItemInHand()) && !PP.getShovelPreparationMode()) - { - if(!PP.getGigaDrillBreakerMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000), LoadProperties.gigaDrillBreakerCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.GIGA_DRILL_BREAKER)*1000), LoadProperties.gigaDrillBreakerCooldown)+"s)"); - return; - } - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadyShovel")); - PP.setShovelPreparationATS(System.currentTimeMillis()); - PP.setShovelPreparationMode(true); - } - if(mcPermissions.getInstance().swordsAbility(player) && m.isSwords(player.getItemInHand()) && !PP.getSwordsPreparationMode()) - { - if(!PP.getSerratedStrikesMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000), LoadProperties.serratedStrikeCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SERRATED_STRIKES)*1000), LoadProperties.serratedStrikeCooldown)+"s)"); - return; - } - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadySword")); - PP.setSwordsPreparationATS(System.currentTimeMillis()); - PP.setSwordsPreparationMode(true); - } - if(mcPermissions.getInstance().unarmedAbility(player) && player.getItemInHand().getTypeId() == 0 && !PP.getFistsPreparationMode()) - { - if(!PP.getBerserkMode() && !cooldownOver(player, (PP.getSkillDATS(AbilityType.BERSERK)*1000), LoadProperties.berserkCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.BERSERK)*1000), LoadProperties.berserkCooldown)+"s)"); - return; - } - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadyFists")); - PP.setFistsPreparationATS(System.currentTimeMillis()); - PP.setFistsPreparationMode(true); - } - if((mcPermissions.getInstance().axesAbility(player) || mcPermissions.getInstance().woodCuttingAbility(player)) && !PP.getAxePreparationMode()) - { - if(m.isAxes(player.getItemInHand())) - { - if(LoadProperties.enableAbilityMessages) - player.sendMessage(mcLocale.getString("Skills.ReadyAxe")); - PP.setAxePreparationATS(System.currentTimeMillis()); - PP.setAxePreparationMode(true); - } - } + tool.setToolMode(PP, false); + player.sendMessage(tool.getLowerTool()); } - } + + if(ability.getPermissions(player)) + { + if(ability.getMode(PP) && (PP.getSkillDATS(ability) * 1000) <= curTime) + { + ability.setMode(PP, false); + ability.setInformed(PP, false); + player.sendMessage(ability.getAbilityOff()); + } + } + } public static void ProcessLeaderboardUpdate(SkillType skillType, Player player) { @@ -298,11 +126,6 @@ public class Skills public static void XpCheckSkill(SkillType skillType, Player player) { - if(skillType == SkillType.ALL) { - XpCheckAll(player); - return; - } - PlayerProfile PP = Users.getProfile(player); if(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) @@ -311,7 +134,7 @@ public class Skills while(PP.getSkillXpLevel(skillType) >= PP.getXpToLevel(skillType)) { - if(getSkillMaxLevel(skillType) >= PP.getSkillLevel(skillType) + 1) + if(skillType.getMaxLevel() >= PP.getSkillLevel(skillType) + 1) { skillups++; PP.removeXP(skillType, PP.getXpToLevel(skillType)); @@ -370,36 +193,7 @@ public class Skills XpCheckSkill(x, player); } } - public static int getSkillMaxLevel(SkillType skillType) { - switch(skillType) { - case ACROBATICS: - return (LoadProperties.levelCapAcrobatics > 0) ? LoadProperties.levelCapAcrobatics : Integer.MAX_VALUE; - case ARCHERY: - return (LoadProperties.levelCapArchery > 0) ? LoadProperties.levelCapArchery : Integer.MAX_VALUE; - case AXES: - return (LoadProperties.levelCapAxes > 0) ? LoadProperties.levelCapAxes : Integer.MAX_VALUE; - case EXCAVATION: - return (LoadProperties.levelCapExcavation > 0) ? LoadProperties.levelCapExcavation : Integer.MAX_VALUE; - case FISHING: - return (LoadProperties.levelCapFishing > 0) ? LoadProperties.levelCapFishing : Integer.MAX_VALUE; - case HERBALISM: - return (LoadProperties.levelCapHerbalism > 0) ? LoadProperties.levelCapHerbalism : Integer.MAX_VALUE; - case MINING: - return (LoadProperties.levelCapMining > 0) ? LoadProperties.levelCapMining : Integer.MAX_VALUE; - case REPAIR: - return (LoadProperties.levelCapRepair > 0) ? LoadProperties.levelCapRepair : Integer.MAX_VALUE; - case SWORDS: - return (LoadProperties.levelCapSwords > 0) ? LoadProperties.levelCapSwords : Integer.MAX_VALUE; - case TAMING: - return (LoadProperties.levelCapTaming > 0) ? LoadProperties.levelCapTaming : Integer.MAX_VALUE; - case UNARMED: - return (LoadProperties.levelCapUnarmed > 0) ? LoadProperties.levelCapUnarmed : Integer.MAX_VALUE; - case WOODCUTTING: - return (LoadProperties.levelCapWoodcutting > 0) ? LoadProperties.levelCapWoodcutting : Integer.MAX_VALUE; - default: - return Integer.MAX_VALUE; - } - } + public static SkillType getSkillType(String skillName) { for(SkillType x : SkillType.values()) @@ -409,6 +203,7 @@ public class Skills } return null; } + public static boolean isSkill(String skillname){ skillname = skillname.toUpperCase(); for(SkillType x : SkillType.values()) @@ -418,19 +213,8 @@ public class Skills } return false; } - public static void arrowRetrievalCheck(Entity entity, mcMMO plugin) - { - if(plugin.misc.arrowTracker.containsKey(entity)) - { - Integer x = 0; - while(x < plugin.misc.arrowTracker.get(entity)) - { - m.mcDropItem(entity.getLocation(), new ItemStack(262, 1)); - x++; - } - } - plugin.misc.arrowTracker.remove(entity); - } + + //We should probably rework this - it's a fairly ugly way to do this, compared to our other command formatting. public static String getSkillStats(String skillname, Integer level, Integer XP, Integer XPToLevel) { ChatColor parColor = ChatColor.DARK_AQUA; @@ -440,6 +224,7 @@ public class Skills return skillColor+skillname+LvlColor+level+parColor+" XP"+"("+xpColor+XP+parColor+"/"+xpColor+XPToLevel+parColor+")"; } + public static boolean hasCombatSkills(Player player) { if(mcPermissions.getInstance().axes(player) || mcPermissions.getInstance().archery(player) || mcPermissions.getInstance().swords(player) || mcPermissions.getInstance().taming(player) || mcPermissions.getInstance().unarmed(player)) @@ -447,13 +232,15 @@ public class Skills else return false; } + public static boolean hasGatheringSkills(Player player) { - if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player)) + if(mcPermissions.getInstance().excavation(player) || mcPermissions.getInstance().fishing(player) || mcPermissions.getInstance().herbalism(player) || mcPermissions.getInstance().mining(player) || mcPermissions.getInstance().woodcutting(player)) return true; else return false; } + public static boolean hasMiscSkills(Player player) { if(mcPermissions.getInstance().acrobatics(player) || mcPermissions.getInstance().repair(player)) @@ -461,4 +248,34 @@ public class Skills else return false; } + + /** + * Check to see if an ability can be activated. + * + * @param player The player activating the ability + * @param type The skill the ability is based on + */ + public static void abilityCheck(Player player, SkillType type) + { + PlayerProfile PP = Users.getProfile(player); + AbilityType ability = type.getAbility(); + if(type.getTool().inHand(player.getItemInHand())) + { + if(type.getTool().getToolMode(PP)) + type.getTool().setToolMode(PP, false); + + int ticks = 2 + (PP.getSkillLevel(type) / 50); + if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown())) + { + player.sendMessage(ability.getAbilityOn()); + for(Player y : player.getWorld().getPlayers()) + { + if(y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) + y.sendMessage(ability.getAbilityPlayer(player)); + } + PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000)); + ability.setMode(PP, true); + } + } + } } diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java index 7aa4bcdee..61bf1ca12 100644 --- a/src/main/java/com/gmail/nossr50/skills/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/Swords.java @@ -27,45 +27,12 @@ import com.gmail.nossr50.Users; import com.gmail.nossr50.m; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcPermissions; -import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; -import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.party.Party; public class Swords { - public static void serratedStrikesActivationCheck(Player player){ - PlayerProfile PP = Users.getProfile(player); - if(m.isSwords(player.getItemInHand())) - { - if(PP.getSwordsPreparationMode()) - { - PP.setSwordsPreparationMode(false); - } - int ticks = 2; - int x = PP.getSkillLevel(SkillType.SWORDS); - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getSerratedStrikesMode() && PP.getSkillDATS(AbilityType.SERRATED_STRIKES) < System.currentTimeMillis()) - { - player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.SERRATED_STRIKES, System.currentTimeMillis()+(ticks*1000)); - PP.setSerratedStrikesMode(true); - } - - } - } - public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx) { PlayerProfile PPa = Users.getProfile(attacker); diff --git a/src/main/java/com/gmail/nossr50/skills/Unarmed.java b/src/main/java/com/gmail/nossr50/skills/Unarmed.java index d68ec9020..6fc12a378 100644 --- a/src/main/java/com/gmail/nossr50/skills/Unarmed.java +++ b/src/main/java/com/gmail/nossr50/skills/Unarmed.java @@ -21,45 +21,10 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.Users; import com.gmail.nossr50.m; -import com.gmail.nossr50.config.LoadProperties; -import com.gmail.nossr50.datatypes.AbilityType; -import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; public class Unarmed { - public static void berserkActivationCheck(Player player) - { - PlayerProfile PP = Users.getProfile(player); - AbilityType ability = AbilityType.BERSERK; - if(player.getItemInHand() == null) - { - if(PP.getFistsPreparationMode()) - PP.setFistsPreparationMode(false); - - int ticks = 2; - int x = PP.getSkillLevel(SkillType.UNARMED); - - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getBerserkMode() && Skills.cooldownOver(player, PP.getSkillDATS(ability), LoadProperties.berserkCooldown)) - { - - player.sendMessage(mcLocale.getString("Skills.BerserkOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000)); - PP.setBerserkMode(true); - } - } - } public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event) {