2013-01-10 15:26:28 +01:00
|
|
|
package com.gmail.nossr50.skills.axes;
|
|
|
|
|
2013-01-11 04:39:08 +01:00
|
|
|
import org.bukkit.entity.Player;
|
2013-01-14 17:55:43 +01:00
|
|
|
import org.bukkit.entity.Tameable;
|
2013-01-11 04:39:08 +01:00
|
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
2013-01-10 15:26:28 +01:00
|
|
|
|
2013-01-22 18:43:25 +01:00
|
|
|
import com.gmail.nossr50.skills.AbilityType;
|
2013-01-11 04:39:08 +01:00
|
|
|
import com.gmail.nossr50.skills.SkillManager;
|
2013-01-22 18:43:25 +01:00
|
|
|
import com.gmail.nossr50.skills.SkillType;
|
2013-01-11 04:39:08 +01:00
|
|
|
import com.gmail.nossr50.util.Misc;
|
2013-01-14 17:55:43 +01:00
|
|
|
import com.gmail.nossr50.util.Permissions;
|
2013-01-11 04:39:08 +01:00
|
|
|
|
|
|
|
public class AxeManager extends SkillManager {
|
|
|
|
public AxeManager(Player player) {
|
|
|
|
super(player, SkillType.AXES);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Apply bonus to damage done by axes.
|
|
|
|
*
|
|
|
|
* @param event The event to modify
|
|
|
|
*/
|
|
|
|
public void bonusDamage(EntityDamageByEntityEvent event) {
|
2013-01-24 21:46:29 +01:00
|
|
|
if (Misc.isNPCPlayer(player) || !Permissions.axeBonus(player)) {
|
2013-01-11 04:39:08 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
AxeBonusDamageEventHandler eventHandler = new AxeBonusDamageEventHandler(this, event);
|
|
|
|
|
|
|
|
eventHandler.calculateDamageBonus();
|
|
|
|
eventHandler.modifyEventDamage();
|
|
|
|
}
|
2013-01-14 17:55:43 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Check for critical chances on axe damage.
|
|
|
|
*
|
|
|
|
* @param event The event to modify
|
|
|
|
*/
|
|
|
|
public void criticalHitCheck(EntityDamageByEntityEvent event) {
|
2013-01-24 21:46:29 +01:00
|
|
|
if (Misc.isNPCPlayer(player) || !Permissions.criticalHit(player)) {
|
2013-01-14 17:55:43 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
CriticalHitEventHandler eventHandler = new CriticalHitEventHandler(this, event);
|
|
|
|
|
|
|
|
if (eventHandler.defender instanceof Tameable && Misc.isFriendlyPet(player, (Tameable) eventHandler.defender)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
double chance = (Axes.criticalHitMaxChance / Axes.criticalHitMaxBonusLevel) * eventHandler.skillModifier;
|
|
|
|
|
2013-01-22 02:01:33 +01:00
|
|
|
if (chance > Misc.getRandom().nextInt(activationChance) && !eventHandler.defender.isDead()) {
|
2013-01-14 17:55:43 +01:00
|
|
|
eventHandler.modifyEventDamage();
|
|
|
|
eventHandler.sendAbilityMessages();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-15 22:16:46 +01:00
|
|
|
/**
|
|
|
|
* Check for Impact ability.
|
|
|
|
*
|
|
|
|
* @param event The event to modify
|
|
|
|
*/
|
|
|
|
public void impact(EntityDamageByEntityEvent event) {
|
2013-01-24 21:46:29 +01:00
|
|
|
if (Misc.isNPCPlayer(player) || !Permissions.impact(player)) {
|
2013-01-15 22:16:46 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ImpactEventHandler eventHandler = new ImpactEventHandler(this, event);
|
|
|
|
|
|
|
|
if (eventHandler.livingDefender == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-01-22 04:57:54 +01:00
|
|
|
if (Misc.hasArmor(eventHandler.livingDefender)) {
|
2013-01-15 22:16:46 +01:00
|
|
|
eventHandler.damageArmor();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
eventHandler.applyGreaterImpact();
|
|
|
|
}
|
|
|
|
}
|
2013-01-15 22:38:44 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Check for Skull Splitter ability.
|
|
|
|
*
|
|
|
|
* @param event The event to process
|
|
|
|
*/
|
|
|
|
public void skullSplitter(EntityDamageByEntityEvent event) {
|
2013-01-24 21:46:29 +01:00
|
|
|
if (Misc.isNPCPlayer(player) || !Permissions.skullSplitter(player) || !profile.getAbilityMode(AbilityType.SKULL_SPLIITER)) {
|
2013-01-15 22:38:44 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
SkullSplitterEventHandler eventHandler = new SkullSplitterEventHandler(this, event);
|
|
|
|
eventHandler.applyAbilityEffects();
|
|
|
|
}
|
2013-01-10 15:26:28 +01:00
|
|
|
}
|