From b9b91403ddc92e646bd653a9cd30eefbc491e8fb Mon Sep 17 00:00:00 2001 From: GJ Date: Sun, 25 Mar 2012 02:11:08 -0400 Subject: [PATCH] Added direct hit effects for all the staves. *Basic framework for Staves is now done.* --- src/main/java/com/gmail/nossr50/Combat.java | 13 ++ .../java/com/gmail/nossr50/skills/Staves.java | 155 +++++++++++++----- 2 files changed, 129 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index d3c2d6be9..86ab06a7e 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -30,6 +30,7 @@ import com.gmail.nossr50.skills.Acrobatics; import com.gmail.nossr50.skills.Archery; import com.gmail.nossr50.skills.Axes; import com.gmail.nossr50.skills.Skills; +import com.gmail.nossr50.skills.Staves; import com.gmail.nossr50.skills.Swords; import com.gmail.nossr50.skills.Taming; import com.gmail.nossr50.skills.Unarmed; @@ -108,6 +109,18 @@ public class Combat { else if (itemInHand.getType().equals(Material.BONE) && mcPermissions.getInstance().beastLore(attacker)) { Taming.beastLore(event, target, attacker); } + else if (itemInHand.getType().equals(Material.BONE)) { + event.setDamage(0); + Staves.boneEffect((Player) target, attacker); + } + else if (itemInHand.getType().equals(Material.BLAZE_ROD)) { + event.setDamage(0); + Staves.blazeRodEffect(target, attacker); + } + else if (itemInHand.getType().equals(Material.STICK)) { + event.setDamage(0); + Staves.stickEffect(target, attacker); + } break; case WOLF: diff --git a/src/main/java/com/gmail/nossr50/skills/Staves.java b/src/main/java/com/gmail/nossr50/skills/Staves.java index 6347a6d25..1bed53466 100644 --- a/src/main/java/com/gmail/nossr50/skills/Staves.java +++ b/src/main/java/com/gmail/nossr50/skills/Staves.java @@ -18,6 +18,7 @@ import org.bukkit.potion.PotionEffectType; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.party.Party; +import com.gmail.nossr50.runnables.mcBleedTimer; public class Staves { @@ -79,78 +80,146 @@ public class Staves { } /** - * Handle the effects of the Bone's projectile. + * Handle the effects of the Bone's direct hit. * - * @param target Entity hit by the projectile - * @param shooter Player who fired the projectile + * @param defender The defending player + * @param attacker The attacking player */ - private static void snowballEffect(Player target, Player shooter) { + public static void boneEffect(Player defender, Player attacker) { float xpLost = expLossCalculate(); float xpGained = expGainCalculate(); - float shooterXP = shooter.getExp(); - float targetXP = target.getExp(); - int shooterLevel = shooter.getLevel(); - int targetLevel = target.getLevel(); + float attackerXP = attacker.getExp(); + float defenderXP = defender.getExp(); + int attackerLevel = attacker.getLevel(); + int defenderLevel = defender.getLevel(); - if (Party.getInstance().inSameParty(target, shooter)) { + if (Party.getInstance().inSameParty(defender, attacker)) { //Drain XP - if (shooterXP - xpLost < 0f) { - if (shooterLevel != 0) { - shooter.setLevel(shooterLevel - 1); - shooter.setExp(1f - xpLost); - shooter.sendMessage("You transfered some XP to your ally!"); //TODO: Use mcLocale + if (attackerXP - xpLost < 0f) { + if (attackerLevel != 0) { + attacker.setLevel(attackerLevel - 1); + attacker.setExp(1f - xpLost); + attacker.sendMessage("You transfered some XP to your ally!"); //TODO: Use mcLocale } else { - shooter.sendMessage("You don't have enough XP to transfer!"); //TODO: Use mcLocale + attacker.sendMessage("You don't have enough XP to transfer!"); //TODO: Use mcLocale return; } } else { - shooter.setExp(shooterXP - xpLost); - shooter.sendMessage("You transfered some XP to your ally!"); //TODO: Use mcLocale + attacker.setExp(attackerXP - xpLost); + attacker.sendMessage("You transfered some XP to your ally!"); //TODO: Use mcLocale } //Reward XP - if (targetXP + xpGained >= 1f) { - target.setLevel(targetLevel + 1); - target.setExp(0f + xpGained); - target.sendMessage("You were given XP from your ally!"); //TODO: Use mcLocale + if (defenderXP + xpGained >= 1f) { + defender.setLevel(defenderLevel + 1); + defender.setExp(0f + xpGained); + defender.sendMessage("You were given XP from your ally!"); //TODO: Use mcLocale } else { - target.setExp(targetXP + xpGained); - target.sendMessage("You were given XP from your ally!"); //TODO: Use mcLocale + defender.setExp(defenderXP + xpGained); + defender.sendMessage("You were given XP from your ally!"); //TODO: Use mcLocale } } else { //Drain XP - if (targetXP - xpLost < 0f) { - if (targetLevel != 0) { - target.setLevel(targetLevel - 1); - target.setExp(1f - xpLost); - target.sendMessage("You were drained of XP!"); //TODO: Use mcLocale + if (defenderXP - xpLost < 0f) { + if (defenderLevel != 0) { + defender.setLevel(defenderLevel - 1); + defender.setExp(1f - xpLost); + defender.sendMessage("You were drained of XP!"); //TODO: Use mcLocale } else { - shooter.sendMessage("Your enemy doesn't have enough XP to drain!"); //TODO: Use mcLocale + attacker.sendMessage("Your enemy doesn't have enough XP to drain!"); //TODO: Use mcLocale return; } } else { - target.setExp(targetXP - xpLost); - target.sendMessage("You were drained of XP!"); //TODO: Use mcLocale + defender.setExp(defenderXP - xpLost); + defender.sendMessage("You were drained of XP!"); //TODO: Use mcLocale } //Reward XP - if (shooterXP + xpGained >= 1f) { - shooter.setLevel(shooterLevel + 1); - shooter.setExp(0f + xpGained); - shooter.sendMessage("You gained XP from your enemy!"); //TODO: Use mcLocale + if (attackerXP + xpGained >= 1f) { + attacker.setLevel(attackerLevel + 1); + attacker.setExp(0f + xpGained); + attacker.sendMessage("You gained XP from your enemy!"); //TODO: Use mcLocale } else { - shooter.setExp(shooterXP + xpGained); - shooter.sendMessage("You gained XP from your enemy!"); //TODO: Use mcLocale + attacker.setExp(attackerXP + xpGained); + attacker.sendMessage("You gained XP from your enemy!"); //TODO: Use mcLocale + } + } + } + + /** + * Handle the effects of the Blaze Rod's direct hit. + * + * @param target The defending entity + * @param attacker The attacking player + */ + public static void blazeRodEffect(LivingEntity target, Player attacker) { + if (target instanceof Player && Party.getInstance().inSameParty((Player) target, attacker)) { + target.setFireTicks(0); + mcBleedTimer.remove(target); + + for (PotionEffect effect : target.getActivePotionEffects()) { + if (effect.getType().equals(PotionEffectType.POISON) || effect.getType().equals(PotionEffectType.WEAKNESS) || effect.getType().equals(PotionEffectType.SLOW)) { + target.removePotionEffect(effect.getType()); + } + } + + attacker.sendMessage("Your ally was cured of all status effects!"); //TODO: Use locale + ((Player) target).sendMessage("You were cured of all status effects!"); //TODO: Use locale + } + else { + if (target.getFireTicks() + fireTicksCalculate() > target.getMaxFireTicks()) { + target.setFireTicks(target.getMaxFireTicks()); + } + else { + target.setFireTicks(target.getFireTicks() + fireTicksCalculate()); + } + + attacker.sendMessage("You set your enemy on fire!"); //TODO: Use locale + + if (target instanceof Player) { + ((Player) target).sendMessage("You were set on fire!"); //TODO: Use locale + } + } + } + + /** + * Handle the effects of the Stick's direct hit. + * + * @param target The defending entity + * @param attacker The attacking player + */ + public static void stickEffect(LivingEntity target, Player attacker) { + if (target instanceof Player && Party.getInstance().inSameParty((Player) target, attacker)) { + Player defender = (Player) target; + defender.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, amplifierCalulate())); + + /* Do we WANT to heal food along with health? */ + if (defender.getFoodLevel() + amplifierCalulate() > 20) { + defender.setFoodLevel(20); + } + else { + defender.setFoodLevel(defender.getFoodLevel() + amplifierCalulate()); + } + + attacker.sendMessage("Your ally was healed!"); //TODO: Use locale + defender.sendMessage("You were healed!"); //TODO: Use locale + } + else { + target.addPotionEffect(new PotionEffect(PotionEffectType.HARM, 1, amplifierCalulate())); + + attacker.sendMessage("Your enemy was harmed!"); //TODO: Use locale + if (target instanceof Player) { + ((Player) target).sendMessage("You were harmed!"); //TODO: Use locale } } } @@ -259,7 +328,7 @@ public class Staves { } } else if (potionType.equals(PotionEffectType.INCREASE_DAMAGE)) { - shooter.sendMessage("Your ally's was strengthened!"); //TODO: Use mcLocale + shooter.sendMessage("Your ally was strengthened!"); //TODO: Use mcLocale ((Player) target).sendMessage("You were strengthened!"); //TODO: Use mcLocale } else if (potionType.equals(PotionEffectType.POISON)) { @@ -279,18 +348,26 @@ public class Staves { return 80; } + private static int amplifierCalulate() { //TODO: Calculate amplifier based off skill level return 10; } + private static float expLossCalculate() { - //TODO: Calculate exp lost based on time held + //TODO: Calculate exp lost based on skill level return 0.25f; } + private static float expGainCalculate() { //TODO: Calculate exp gained based on skill level return 0.10f; } + + private static int fireTicksCalculate() { + //TODO: Calculate based on skill level + return 2; + } }