|
@@ -1,6 +1,5 @@
|
|
package com.gmail.nossr50.skills.acrobatics;
|
|
package com.gmail.nossr50.skills.acrobatics;
|
|
|
|
|
|
-import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
import org.bukkit.event.entity.EntityDamageEvent;
|
|
|
|
|
|
import com.gmail.nossr50.datatypes.SkillType;
|
|
import com.gmail.nossr50.datatypes.SkillType;
|
|
@@ -8,41 +7,22 @@ import com.gmail.nossr50.locale.LocaleLoader;
|
|
import com.gmail.nossr50.util.Misc;
|
|
import com.gmail.nossr50.util.Misc;
|
|
import com.gmail.nossr50.util.Skills;
|
|
import com.gmail.nossr50.util.Skills;
|
|
|
|
|
|
-public class RollEventHandler {
|
|
|
|
- private AcrobaticsManager manager;
|
|
|
|
- private Player player;
|
|
|
|
|
|
+public class RollEventHandler extends AcrobaticsEventHandler{
|
|
private AcrobaticsPermissionsHandler permHandler;
|
|
private AcrobaticsPermissionsHandler permHandler;
|
|
-
|
|
|
|
- private EntityDamageEvent event;
|
|
|
|
- private int damage;
|
|
|
|
-
|
|
|
|
private boolean isGraceful;
|
|
private boolean isGraceful;
|
|
- private int skillModifier;
|
|
|
|
private int damageThreshold;
|
|
private int damageThreshold;
|
|
- private int modifiedDamage;
|
|
|
|
|
|
|
|
protected RollEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
|
|
protected RollEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
|
|
- this.manager = manager;
|
|
|
|
- this.player = manager.getPlayer();
|
|
|
|
|
|
+ super(manager, event);
|
|
this.permHandler = manager.getPermissionsHandler();
|
|
this.permHandler = manager.getPermissionsHandler();
|
|
- this.event = event;
|
|
|
|
- this.damage = event.getDamage();
|
|
|
|
- this.isGraceful = isGracefulRoll();
|
|
|
|
- this.skillModifier = calculateSkillModifier();
|
|
|
|
- this.damageThreshold = calculateDamageThreshold();
|
|
|
|
- this.modifiedDamage = calculateModifiedDamage(damage);
|
|
|
|
- }
|
|
|
|
|
|
|
|
- private boolean isGracefulRoll() {
|
|
|
|
- if (permHandler.canGracefulRoll()) {
|
|
|
|
- return player.isSneaking();
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ isGracefulRoll();
|
|
|
|
+ calculateSkillModifier();
|
|
|
|
+ calculateModifiedDamage();
|
|
|
|
+ calculateDamageThreshold();
|
|
}
|
|
}
|
|
|
|
|
|
- private int calculateSkillModifier() {
|
|
|
|
|
|
+ protected void calculateSkillModifier() {
|
|
int skillModifer = manager.getSkillLevel();
|
|
int skillModifer = manager.getSkillLevel();
|
|
|
|
|
|
if (isGraceful) {
|
|
if (isGraceful) {
|
|
@@ -50,27 +30,17 @@ public class RollEventHandler {
|
|
}
|
|
}
|
|
|
|
|
|
skillModifer = Misc.skillCheck(skillModifer, Acrobatics.ROLL_MAX_BONUS_LEVEL);
|
|
skillModifer = Misc.skillCheck(skillModifer, Acrobatics.ROLL_MAX_BONUS_LEVEL);
|
|
- return skillModifer;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private int calculateDamageThreshold() {
|
|
|
|
- int damageThreshold = 7;
|
|
|
|
-
|
|
|
|
- if (isGraceful) {
|
|
|
|
- damageThreshold = damageThreshold * 2;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return damageThreshold;
|
|
|
|
|
|
+ this.skillModifier = skillModifer;
|
|
}
|
|
}
|
|
|
|
|
|
- private int calculateModifiedDamage(int initialDamage) {
|
|
|
|
- int modifiedDamage = initialDamage - damageThreshold;
|
|
|
|
|
|
+ protected void calculateModifiedDamage() {
|
|
|
|
+ int modifiedDamage = damage - damageThreshold;
|
|
|
|
|
|
if (modifiedDamage < 0) {
|
|
if (modifiedDamage < 0) {
|
|
modifiedDamage = 0;
|
|
modifiedDamage = 0;
|
|
}
|
|
}
|
|
|
|
|
|
- return modifiedDamage;
|
|
|
|
|
|
+ this.modifiedDamage = modifiedDamage;
|
|
}
|
|
}
|
|
|
|
|
|
protected void modifyEventDamage() {
|
|
protected void modifyEventDamage() {
|
|
@@ -81,6 +51,7 @@ public class RollEventHandler {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
protected void sendAbilityMessage() {
|
|
protected void sendAbilityMessage() {
|
|
if (isGraceful) {
|
|
if (isGraceful) {
|
|
player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
|
|
player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
|
|
@@ -90,38 +61,35 @@ public class RollEventHandler {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected void processFallXPGain() {
|
|
|
|
- processXPGain(damage * Acrobatics.FALL_XP_MODIFIER);
|
|
|
|
- }
|
|
|
|
|
|
|
|
- protected void processRollXPGain() {
|
|
|
|
- processXPGain(damage * Acrobatics.ROLL_XP_MODIFIER);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private void processXPGain(int xpGain) {
|
|
|
|
|
|
+ protected void processXPGain(int xpGain) {
|
|
if (permHandler.canGainXP()) {
|
|
if (permHandler.canGainXP()) {
|
|
Skills.xpProcessing(player, manager.getProfile(), SkillType.ACROBATICS, xpGain);
|
|
Skills.xpProcessing(player, manager.getProfile(), SkillType.ACROBATICS, xpGain);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected boolean isFatal(int damage) {
|
|
|
|
- if (player.getHealth() - damage < 1) {
|
|
|
|
- return true;
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Check if this is a graceful roll.
|
|
|
|
+ */
|
|
|
|
+ private void isGracefulRoll() {
|
|
|
|
+ if (permHandler.canGracefulRoll()) {
|
|
|
|
+ this.isGraceful = player.isSneaking();
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- return false;
|
|
|
|
|
|
+ this.isGraceful = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected boolean isGraceful() {
|
|
|
|
- return isGraceful;
|
|
|
|
- }
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Calculate the damage threshold for this event.
|
|
|
|
+ */
|
|
|
|
+ private void calculateDamageThreshold() {
|
|
|
|
+ int damageThreshold = 7;
|
|
|
|
|
|
- protected int getSkillModifier() {
|
|
|
|
- return skillModifier;
|
|
|
|
- }
|
|
|
|
|
|
+ if (isGraceful) {
|
|
|
|
+ damageThreshold = damageThreshold * 2;
|
|
|
|
+ }
|
|
|
|
|
|
- protected int getModifiedDamage() {
|
|
|
|
- return modifiedDamage;
|
|
|
|
|
|
+ this.damageThreshold = damageThreshold;
|
|
}
|
|
}
|
|
}
|
|
}
|