More Axe restructuring, changing some config values from int to double,

added function to duplicate code.
This commit is contained in:
GJ
2013-01-14 11:55:43 -05:00
parent dd766d5363
commit 0587741437
8 changed files with 120 additions and 94 deletions

View File

@ -13,13 +13,13 @@ public class AxeBonusDamageEventHandler {
}
protected void calculateDamageBonus() {
int increaseLevel = Axes.maxBonusLevel / Axes.maxBonusDamage;
int increaseLevel = Axes.bonusDamageMaxBonusLevel / Axes.bonusDamageMaxBonus;
/* Add 1 DMG for every 50 skill levels (default value) */
damageBonus = skillLevel / increaseLevel;
if (damageBonus > Axes.maxBonusDamage) {
damageBonus = Axes.maxBonusDamage;
if (damageBonus > Axes.bonusDamageMaxBonus) {
damageBonus = Axes.bonusDamageMaxBonus;
}
}

View File

@ -1,11 +1,13 @@
package com.gmail.nossr50.skills.axes;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.skills.SkillManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
public class AxeManager extends SkillManager {
public AxeManager(Player player) {
@ -18,7 +20,7 @@ public class AxeManager extends SkillManager {
* @param event The event to modify
*/
public void bonusDamage(EntityDamageByEntityEvent event) {
if (Misc.isNPC(player)) {
if (Misc.isNPC(player) || !Permissions.axeBonus(player)) {
return;
}
@ -27,4 +29,34 @@ public class AxeManager extends SkillManager {
eventHandler.calculateDamageBonus();
eventHandler.modifyEventDamage();
}
/**
* Check for critical chances on axe damage.
*
* @param event The event to modify
*/
public void criticalHitCheck(EntityDamageByEntityEvent event) {
if (Misc.isNPC(player) || !Permissions.criticalHit(player)) {
return;
}
CriticalHitEventHandler eventHandler = new CriticalHitEventHandler(this, event);
if (eventHandler.defender instanceof Tameable && Misc.isFriendlyPet(player, (Tameable) eventHandler.defender)) {
return;
}
int randomChance = 100;
if (Permissions.luckyAxes(player)) {
randomChance = (int) (randomChance * 0.75);
}
double chance = (Axes.criticalHitMaxChance / Axes.criticalHitMaxBonusLevel) * eventHandler.skillModifier;
if (chance > Misc.getRandom().nextInt(randomChance) && !eventHandler.defender.isDead()) {
eventHandler.modifyEventDamage();
eventHandler.sendAbilityMessages();
}
}
}

View File

@ -1,88 +1,30 @@
package com.gmail.nossr50.skills.axes;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import com.gmail.nossr50.config.AdvancedConfig;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users;
public class Axes {
public static int maxBonusDamage = AdvancedConfig.getInstance().getBonusDamageAxesBonusMax();
public static int maxBonusLevel = AdvancedConfig.getInstance().getBonusDamageAxesMaxBonusLevel();
public static int bonusDamageMaxBonus = AdvancedConfig.getInstance().getBonusDamageAxesBonusMax();
public static int bonusDamageMaxBonusLevel = AdvancedConfig.getInstance().getBonusDamageAxesMaxBonusLevel();
public static int criticalHitMaxBonusLevel = AdvancedConfig.getInstance().getAxesCriticalMaxBonusLevel();
public static double criticalHitMaxChance = AdvancedConfig.getInstance().getAxesCriticalChance();
public static double criticalHitPVPModifier = AdvancedConfig.getInstance().getAxesCriticalPVPModifier();
public static double criticalHitPVEModifier = AdvancedConfig.getInstance().getAxesCriticalPVEModifier();
static AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
/**
* Check for critical chances on axe damage.
*
* @param attacker The attacking player
* @param event The event to modify
*/
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event) {
if (attacker == null)
return;
Entity entity = event.getEntity();
if (entity instanceof Tameable) {
Tameable pet = (Tameable) entity;
if (pet.isTamed()) {
AnimalTamer tamer = pet.getOwner();
if (tamer instanceof Player) {
Player owner = (Player) tamer;
if (owner == attacker || PartyManager.getInstance().inSameParty(attacker, owner)) {
return;
}
}
}
}
final int MAX_BONUS_LEVEL = advancedConfig.getAxesCriticalMaxBonusLevel();
final double MAX_CHANCE = advancedConfig.getAxesCriticalChance();
final double PVP_MODIFIER = advancedConfig.getAxesCriticalPVPModifier();
final int PVE_MODIFIER = advancedConfig.getAxesCriticalPVEModifier();
PlayerProfile attackerProfile = Users.getProfile(attacker);
int skillLevel = attackerProfile.getSkillLevel(SkillType.AXES);
int skillCheck = Misc.skillCheck(skillLevel, MAX_BONUS_LEVEL);
int randomChance = 100;
double chance = (MAX_CHANCE / MAX_BONUS_LEVEL) * skillCheck;
if (chance > MAX_CHANCE) chance = MAX_CHANCE;
if (Permissions.luckyAxes(attacker)) {
randomChance = (int) (randomChance * 0.75);
}
if (chance > Misc.getRandom().nextInt(randomChance) && !entity.isDead()) {
int damage = event.getDamage();
if (entity instanceof Player) {
event.setDamage((int) (damage * PVP_MODIFIER));
((Player) entity).sendMessage(LocaleLoader.getString("Axes.Combat.CritStruck"));
}
else {
event.setDamage(damage * PVE_MODIFIER);
}
attacker.sendMessage(LocaleLoader.getString("Axes.Combat.CriticalHit"));
}
}
/**
* Check for Impact ability.
*

View File

@ -0,0 +1,47 @@
package com.gmail.nossr50.skills.axes;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
public class CriticalHitEventHandler {
private AxeManager manager;
private EntityDamageByEntityEvent event;
private int damage;
protected Entity defender;
protected int skillModifier;
public CriticalHitEventHandler(AxeManager manager, EntityDamageByEntityEvent event) {
this.manager = manager;
this.event = event;
this.defender = event.getEntity();
this.damage = event.getDamage();
calculateSkillModifier();
}
protected void modifyEventDamage() {
if (defender instanceof Player) {
event.setDamage((int) (damage * Axes.criticalHitPVPModifier));
}
else {
event.setDamage((int) (damage * Axes.criticalHitPVEModifier));
}
}
protected void sendAbilityMessages() {
manager.getPlayer().sendMessage(LocaleLoader.getString("Axes.Combat.CriticalHit"));
if (defender instanceof Player) {
((Player) defender).sendMessage(LocaleLoader.getString("Axes.Combat.CritStruck"));
}
}
private void calculateSkillModifier() {
this.skillModifier = Misc.skillCheck(manager.getSkillLevel(), Axes.criticalHitMaxBonusLevel);
}
}