Bläddra i källkod

Move Roll checks into the manager.

GJ 12 år sedan
förälder
incheckning
d409610a55

+ 1 - 1
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -180,7 +180,7 @@ public class EntityListener implements Listener {
             switch (cause) {
             case FALL:
                 if (Acrobatics.canRoll(player)) {
-                    event.setDamage(Acrobatics.processRoll(player, event.getDamage()));
+                    event.setDamage(SkillManagerStore.getInstance().getAcrobaticsManager(player.getName()).processRoll(event.getDamage()));
 
                     if (event.getDamage() == 0) {
                         event.setCancelled(true);

+ 0 - 36
src/main/java/com/gmail/nossr50/skills/acrobatics/Acrobatics.java

@@ -54,42 +54,6 @@ public final class Acrobatics {
         return false;
     }
 
-    public static int processRoll(Player player, int damage) {
-        if (player.isSneaking() && Permissions.gracefulRoll(player)) {
-            return processGracefulRoll(player, damage);
-        }
-
-        int modifiedDamage = calculateModifiedRollDamage(damage, rollThreshold);
-
-        if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, rollMaxChance, rollMaxBonusLevel, 1)) {
-            player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
-            applyXpGain(player, damage, rollXpModifier);
-
-            return modifiedDamage;
-        }
-        else if (!isFatal(player, damage)) {
-            applyXpGain(player, damage, fallXpModifier);
-        }
-
-        return damage;
-    }
-
-    private static int processGracefulRoll(Player player, int damage) {
-        int modifiedDamage = calculateModifiedRollDamage(damage, gracefulRollThreshold);
-
-        if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, gracefulRollMaxChance, gracefulRollMaxBonusLevel, gracefulRollSuccessModifier)) {
-            player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
-            applyXpGain(player, damage, rollXpModifier);
-
-            return modifiedDamage;
-        }
-        else if (!isFatal(player, damage)) {
-            applyXpGain(player, damage, fallXpModifier);
-        }
-
-        return damage;
-    }
-
     protected static boolean isFatal(Player player, int damage) {
         return player.getHealth() - damage < 1;
     }

+ 0 - 60
src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsEventHandler.java

@@ -1,60 +0,0 @@
-package com.gmail.nossr50.skills.acrobatics;
-
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-public abstract class AcrobaticsEventHandler {
-    protected AcrobaticsManager manager;
-
-    protected EntityDamageEvent event;
-    protected int damage;
-    protected int skillModifier;
-    protected int modifiedDamage;
-
-    protected AcrobaticsEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
-        this.manager = manager;
-        this.event = event;
-        this.damage = event.getDamage();
-    }
-
-    /**
-     * Calculate the skill modifier applied for this event.
-     */
-    protected abstract void calculateSkillModifier();
-
-    /**
-     * Calculate the modified damage for this event.
-     */
-    protected abstract void calculateModifiedDamage();
-
-    /**
-     * Modify the damage dealt by this event.
-     */
-    protected abstract void modifyEventDamage();
-
-    /**
-     * Send the ability message for this event.
-     */
-    protected abstract void sendAbilityMessage();
-
-    /**
-     * Process Xp gain from this event.
-     */
-    protected abstract void processXpGain(int xp);
-
-    /**
-     * Check to ensure you're not gaining XP after you die.
-     *
-     * @param damage The damage to be dealt
-     * @return true if the damage is fatal, false otherwise
-     */
-    protected boolean isFatal(int damage) {
-        Player player = manager.getMcMMOPlayer().getPlayer();
-
-        if (player.getHealth() - damage < 1) {
-            return true;
-        }
-
-        return false;
-    }
-}

+ 48 - 2
src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java

@@ -10,6 +10,7 @@ import com.gmail.nossr50.skills.utilities.SkillTools;
 import com.gmail.nossr50.skills.utilities.SkillType;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.ParticleEffectUtils;
+import com.gmail.nossr50.util.Permissions;
 
 public class AcrobaticsManager extends SkillManager {
     public AcrobaticsManager (McMMOPlayer mcMMOPlayer) {
@@ -17,9 +18,10 @@ public class AcrobaticsManager extends SkillManager {
     }
 
     /**
-     * Check for dodge damage reduction.
+     * Handle the damage reduction and XP gain from the Dodge ability
      *
-     * @param event The event to check
+     * @param damage The amount of damage initially dealt by the event
+     * @return the modified event damage if the dodge was successful, the original event damage otherwise
      */
     public int dodgeCheck(int damage) {
         int modifiedDamage = Acrobatics.calculateModifiedDodgeDamage(damage, Acrobatics.dodgeDamageModifier);
@@ -44,4 +46,48 @@ public class AcrobaticsManager extends SkillManager {
 
         return damage;
     }
+
+    /**
+     * Handle the damage reduction and XP gain from the Roll ability
+     *
+     * @param damage The amount of damage initially dealt by the event
+     * @return the modified event damage if the roll was successful, the original event damage otherwise
+     */
+    public int processRoll(int damage) {
+        Player player = getPlayer();
+
+        if (player.isSneaking() && Permissions.gracefulRoll(player)) {
+            return processGracefulRoll(player, damage);
+        }
+
+        int modifiedDamage = Acrobatics.calculateModifiedRollDamage(damage, Acrobatics.rollThreshold);
+
+        if (!Acrobatics.isFatal(player, modifiedDamage) && Acrobatics.isSuccessfulRoll(player, Acrobatics.rollMaxChance, Acrobatics.rollMaxBonusLevel, 1)) {
+            player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
+            applyXpGain(damage * Acrobatics.rollXpModifier);
+
+            return modifiedDamage;
+        }
+        else if (!Acrobatics.isFatal(player, damage)) {
+            applyXpGain(damage * Acrobatics.fallXpModifier);
+        }
+
+        return damage;
+    }
+
+    private int processGracefulRoll(Player player, int damage) {
+        int modifiedDamage = Acrobatics.calculateModifiedRollDamage(damage, Acrobatics.gracefulRollThreshold);
+
+        if (!Acrobatics.isFatal(player, modifiedDamage) && Acrobatics.isSuccessfulRoll(player, Acrobatics.gracefulRollMaxChance, Acrobatics.gracefulRollMaxBonusLevel, Acrobatics.gracefulRollSuccessModifier)) {
+            player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
+            applyXpGain(damage * Acrobatics.rollXpModifier);
+
+            return modifiedDamage;
+        }
+        else if (!Acrobatics.isFatal(player, damage)) {
+            applyXpGain(damage * Acrobatics.fallXpModifier);
+        }
+
+        return damage;
+    }
 }

+ 0 - 62
src/main/java/com/gmail/nossr50/skills/acrobatics/DodgeEventHandler.java

@@ -1,62 +0,0 @@
-package com.gmail.nossr50.skills.acrobatics;
-
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-import com.gmail.nossr50.datatypes.McMMOPlayer;
-import com.gmail.nossr50.locale.LocaleLoader;
-import com.gmail.nossr50.skills.utilities.SkillTools;
-import com.gmail.nossr50.skills.utilities.SkillType;
-import com.gmail.nossr50.util.Misc;
-import com.gmail.nossr50.util.ParticleEffectUtils;
-
-public class DodgeEventHandler extends AcrobaticsEventHandler {
-    protected DodgeEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
-        super(manager, event);
-
-        calculateSkillModifier();
-        calculateModifiedDamage();
-    }
-
-    @Override
-    protected void calculateSkillModifier() {
-        this.skillModifier = SkillTools.skillCheck(manager.getSkillLevel(), Acrobatics.dodgeMaxBonusLevel);
-    }
-
-    @Override
-    protected void calculateModifiedDamage() {
-        int modifiedDamage = damage / 2;
-
-        if (modifiedDamage <= 0) {
-            modifiedDamage = 1;
-        }
-
-        this.modifiedDamage = modifiedDamage;
-    }
-
-    @Override
-    protected void modifyEventDamage() {
-        event.setDamage(modifiedDamage);
-    }
-
-    @Override
-    protected void sendAbilityMessage() {
-        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
-        Player dodgingPlayer = mcMMOPlayer.getPlayer();
-
-        ParticleEffectUtils.playDodgeEffect(dodgingPlayer);
-
-        if (mcMMOPlayer.getProfile().useChatNotifications()) {
-            dodgingPlayer.sendMessage(LocaleLoader.getString("Acrobatics.Combat.Proc"));
-        }
-    }
-
-    @Override
-    protected void processXpGain(int xp) {
-        McMMOPlayer mcMMOPlayer = manager.getMcMMOPlayer();
-
-        if (System.currentTimeMillis() >= mcMMOPlayer.getProfile().getRespawnATS() + Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS) {
-            manager.getMcMMOPlayer().beginXpGain(SkillType.ACROBATICS, xp);
-        }
-    }
-}