diff --git a/src/main/java/com/gmail/nossr50/skills/Acrobatics.java b/src/main/java/com/gmail/nossr50/skills/Acrobatics.java index b5a5ea1e9..e8e0ff098 100644 --- a/src/main/java/com/gmail/nossr50/skills/Acrobatics.java +++ b/src/main/java/com/gmail/nossr50/skills/Acrobatics.java @@ -22,17 +22,19 @@ public class Acrobatics { public static void acrobaticsCheck(Player player, EntityDamageEvent event) { final int ROLL_XP_MODIFIER = 80; final int FALL_XP_MODIFIER = 120; + final int MAX_BONUS_LEVEL = 1000; PlayerProfile PP = Users.getProfile(player); int acrovar = PP.getSkillLevel(SkillType.ACROBATICS); boolean gracefulRoll = player.isSneaking(); int damage = event.getDamage(); + int health = player.getHealth(); if (gracefulRoll) { acrovar = acrovar * 2; } - if (acrovar > 1000 || Math.random() * 1000 <= acrovar) { + if (acrovar > MAX_BONUS_LEVEL || Math.random() * 1000 <= acrovar) { int threshold = 7; if (gracefulRoll) { @@ -46,7 +48,7 @@ public class Acrobatics { } /* Check for death */ - if (player.getHealth() - damage >= 1) { + if (health - damage >= 1) { PP.addXP(SkillType.ACROBATICS, damage * ROLL_XP_MODIFIER, player); Skills.XpCheckSkill(SkillType.ACROBATICS, player); @@ -64,7 +66,7 @@ public class Acrobatics { } } } - else if (player.getHealth() - damage >= 1) { + else if (health - damage >= 1) { PP.addXP(SkillType.ACROBATICS, event.getDamage() * FALL_XP_MODIFIER, player); Skills.XpCheckSkill(SkillType.ACROBATICS, player); } @@ -77,9 +79,11 @@ public class Acrobatics { */ public static void dodgeChecks(EntityDamageByEntityEvent event) { final int DODGE_MODIFIER = 120; + final int MAX_BONUS_LEVEL = 800; Player defender = (Player) event.getEntity(); PlayerProfile PPd = Users.getProfile(defender); + int damage = event.getDamage(); /* PARTY CHECK */ if (event.getDamager() instanceof Player) { @@ -91,29 +95,29 @@ public class Acrobatics { } if (mcPermissions.getInstance().acrobatics(defender)) { - int skillCheck = 0; + int skillLevel = PPd.getSkillLevel(SkillType.ACROBATICS); + int skillCheck = skillLevel; - if (PPd.getSkillLevel(SkillType.ACROBATICS) <= 800) { - skillCheck = PPd.getSkillLevel(SkillType.ACROBATICS); - } - else { - skillCheck = 800; + if (skillLevel > MAX_BONUS_LEVEL) { + skillCheck = MAX_BONUS_LEVEL; } if (Math.random() * 4000 <= skillCheck) { defender.sendMessage(mcLocale.getString("Acrobatics.Dodge")); - if (System.currentTimeMillis() >= 5000 + PPd.getRespawnATS() && defender.getHealth() >= 1) { - PPd.addXP(SkillType.ACROBATICS, event.getDamage() * DODGE_MODIFIER, defender); + if (System.currentTimeMillis() >= (5000 + PPd.getRespawnATS()) && defender.getHealth() >= 1) { + PPd.addXP(SkillType.ACROBATICS, damage * DODGE_MODIFIER, defender); Skills.XpCheckSkill(SkillType.ACROBATICS, defender); } - event.setDamage(event.getDamage() / 2); + int newDamage = damage / 2; - //Needs to do minimal damage - if (event.getDamage() <= 0) { + if (newDamage <= 0) { event.setDamage(1); } + else { + event.setDamage(newDamage); + } } } } diff --git a/src/main/java/com/gmail/nossr50/skills/Archery.java b/src/main/java/com/gmail/nossr50/skills/Archery.java index 744d114e1..5bf168dd4 100644 --- a/src/main/java/com/gmail/nossr50/skills/Archery.java +++ b/src/main/java/com/gmail/nossr50/skills/Archery.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.skills; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -13,88 +14,112 @@ import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.party.Party; -public class Archery -{ - public static void trackArrows(mcMMO pluginx, Entity x, PlayerProfile PPa) - { - int skillLevel = PPa.getSkillLevel(SkillType.ARCHERY); - if(!pluginx.misc.arrowTracker.containsKey(x)) - pluginx.misc.arrowTracker.put(x, 0); - if(skillLevel > 1000 || (Math.random() * 1000 <= skillLevel)) - pluginx.misc.arrowTracker.put(x, 1); - } - - public static void ignitionCheck(Entity x, Player attacker) - { - //Check to see if PVP for this world is disabled before executing - if(!x.getWorld().getPVP()) - return; - - PlayerProfile PPa = Users.getProfile(attacker); - if(Math.random() * 100 >= 75) - { - int ignition = 20; - ignition += (PPa.getSkillLevel(SkillType.ARCHERY)/200)*20; - - if(ignition > 120) - ignition = 120; - - if(x instanceof Player) - { - Player defender = (Player)x; - if(!Party.getInstance().inSameParty(attacker, defender)) - { - defender.setFireTicks(defender.getFireTicks() + ignition); - attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$ - defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); //$NON-NLS-1$ - } - } - else - { - x.setFireTicks(x.getFireTicks() + ignition); - attacker.sendMessage(mcLocale.getString("Combat.Ignition")); //$NON-NLS-1$ - } - } - } - - public static void dazeCheck(Player defender, Player attacker) - { - int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY); - - Location loc = defender.getLocation(); - if(Math.random() * 10 > 5) - loc.setPitch(90); - else - loc.setPitch(-90); - - if(skillLevel >= 1000) - { - if(Math.random() * 1000 <= 500) - { - defender.teleport(loc); - defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$ - attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - else if(Math.random() * 2000 <= skillLevel) - { - defender.teleport(loc); - defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); //$NON-NLS-1$ - 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); +public class Archery { + + /** + * Track arrows fired for later retrieval. + * + * @param plugin mcMMO plugin instance + * @param entity Entity damaged by the arrow + * @param PPa PlayerProfile of the player firing the arrow + */ + public static void trackArrows(mcMMO plugin, Entity entity, PlayerProfile PPa) { + final int MAX_BONUS_LEVEL = 1000; + int skillLevel = PPa.getSkillLevel(SkillType.ARCHERY); + + if (!plugin.misc.arrowTracker.containsKey(entity)) { + plugin.misc.arrowTracker.put(entity, 0); + } + + if (skillLevel > MAX_BONUS_LEVEL || (Math.random() * 1000 <= skillLevel)) { + plugin.misc.arrowTracker.put(entity, 1); + } + } + + /** + * Check for ignition on arrow hit. + * + * @param entity Entity damaged by the arrow + * @param attacker Player who fired the arrow + */ + public static void ignitionCheck(Entity entity, Player attacker) { + + //Check to see if PVP for this world is disabled before executing + if (!entity.getWorld().getPVP()) { + return; + } + + final int IGNITION_CHANCE = 25; + final int MAX_IGNITION_TICKS = 120; + + PlayerProfile PPa = Users.getProfile(attacker); + + if (Math.random() * 100 <= IGNITION_CHANCE) { + int ignition = 20; + ignition += (PPa.getSkillLevel(SkillType.ARCHERY) / 200) * 20; + + if (ignition > MAX_IGNITION_TICKS) { + ignition = MAX_IGNITION_TICKS; + } + + if (entity instanceof Player) { + Player defender = (Player) entity; + + if (!Party.getInstance().inSameParty(attacker, defender)) { + defender.setFireTicks(defender.getFireTicks() + ignition); + attacker.sendMessage(mcLocale.getString("Combat.Ignition")); + defender.sendMessage(mcLocale.getString("Combat.BurningArrowHit")); + } + } + else { + entity.setFireTicks(entity.getFireTicks() + ignition); + attacker.sendMessage(mcLocale.getString("Combat.Ignition")); + } + } + } + + /** + * Check for Daze. + * + * @param defender Defending player + * @param attacker Attacking player + */ + public static void dazeCheck(Player defender, Player attacker) { + final int MAX_BONUS_LEVEL = 1000; + + int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.ARCHERY); + Location loc = defender.getLocation(); + int skillCheck = skillLevel; + + if (Math.random() * 10 > 5) { + loc.setPitch(90); + } + else { + loc.setPitch(-90); + } + + if (skillLevel > MAX_BONUS_LEVEL) { + skillCheck = MAX_BONUS_LEVEL; + } + + if (Math.random() * 2000 <= skillCheck) { + defender.teleport(loc); + defender.sendMessage(mcLocale.getString("Combat.TouchedFuzzy")); + attacker.sendMessage(mcLocale.getString("Combat.TargetDazed")); + } + } + + /** + * Check for arrow retrieval. + * + * @param entity The entity hit by the arrows + * @param plugin mcMMO plugin instance + */ + public static void arrowRetrievalCheck(Entity entity, mcMMO plugin) { + if (plugin.misc.arrowTracker.containsKey(entity)) { + m.mcDropItems(entity.getLocation(), new ItemStack(Material.ARROW), plugin.misc.arrowTracker.get(entity)); + } + + plugin.misc.arrowTracker.remove(entity); } }