Don't pass our events around so much.

This commit is contained in:
GJ
2013-02-25 18:00:15 -05:00
parent 5026bdcbd4
commit d46b134dbb
6 changed files with 60 additions and 22 deletions

View File

@ -1,6 +1,8 @@
package com.gmail.nossr50.skills.acrobatics;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.Player;
import com.gmail.nossr50.config.AdvancedConfig;
@ -16,6 +18,7 @@ public final class Acrobatics {
public static double dodgeMaxChance = AdvancedConfig.getInstance().getDodgeChanceMax();
public static int dodgeMaxBonusLevel = AdvancedConfig.getInstance().getDodgeMaxBonusLevel();
public static int dodgeXpModifier = AdvancedConfig.getInstance().getDodgeXPModifier();
public static int dodgeDamageModifier = AdvancedConfig.getInstance().getDodgeDamageModifier();
public static double rollMaxChance = AdvancedConfig.getInstance().getRollChanceMax();
public static int rollMaxBonusLevel = AdvancedConfig.getInstance().getRollMaxBonusLevel();
@ -38,12 +41,25 @@ public final class Acrobatics {
return (player.getItemInHand().getType() != Material.ENDER_PEARL) && !(afkLevelingDisabled && player.isInsideVehicle()) && Permissions.roll(player);
}
public static boolean canDodge(Player player, Entity damager) {
if (Permissions.dodge(player)) {
if (damager instanceof Player && SkillType.ACROBATICS.getPVPEnabled()) {
return true;
}
else if (!(damager instanceof Player) && SkillType.ACROBATICS.getPVEEnabled() && !(damager instanceof LightningStrike && Acrobatics.dodgeLightningDisabled)) {
return true;
}
}
return false;
}
public static int processRoll(Player player, int damage) {
if (player.isSneaking() && Permissions.gracefulRoll(player)) {
return processGracefulRoll(player, damage);
}
int modifiedDamage = calculateModifiedDamage(damage, rollThreshold);
int modifiedDamage = calculateModifiedRollDamage(damage, rollThreshold);
if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, rollMaxChance, rollMaxBonusLevel, 1)) {
player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
@ -59,7 +75,7 @@ public final class Acrobatics {
}
private static int processGracefulRoll(Player player, int damage) {
int modifiedDamage = calculateModifiedDamage(damage, gracefulRollThreshold);
int modifiedDamage = calculateModifiedRollDamage(damage, gracefulRollThreshold);
if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, gracefulRollMaxChance, gracefulRollMaxBonusLevel, gracefulRollSuccessModifier)) {
player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
@ -74,15 +90,19 @@ public final class Acrobatics {
return damage;
}
private static boolean isFatal(Player player, int damage) {
protected static boolean isFatal(Player player, int damage) {
return player.getHealth() - damage < 1;
}
private static int calculateModifiedDamage(int damage, int damageThreshold) {
protected static int calculateModifiedDodgeDamage(int damage, int damageModifier) {
return Math.max(damage / damageModifier, 1);
}
protected static int calculateModifiedRollDamage(int damage, int damageThreshold) {
return Math.max(damage - damageThreshold, 0);
}
private static boolean isSuccessfulRoll(Player player, double maxChance, int maxLevel, int successModifier) {
protected static boolean isSuccessfulRoll(Player player, double maxChance, int maxLevel, int successModifier) {
double successChance = (maxChance / maxLevel) * Math.min(Users.getPlayer(player).getProfile().getSkillLevel(SkillType.ACROBATICS), maxLevel) * successModifier;
return successChance > Misc.getRandom().nextInt(PerksUtils.handleLuckyPerks(player, SkillType.ACROBATICS));