123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package com.gmail.nossr50.skills.axes;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import org.bukkit.event.entity.EntityDamageByEntityEvent;
- import org.bukkit.inventory.EntityEquipment;
- import org.bukkit.inventory.ItemStack;
- import com.gmail.nossr50.locale.LocaleLoader;
- import com.gmail.nossr50.util.Misc;
- import com.gmail.nossr50.util.Permissions;
- public class ImpactEventHandler {
- private AxeManager manager;
- private Player player;
- private EntityDamageByEntityEvent event;
- private short durabilityDamage = 1;
- private EntityEquipment equipment;
- private ItemStack[] armorContents;
- protected Entity defender;
- protected LivingEntity livingDefender;
- public ImpactEventHandler(AxeManager manager, EntityDamageByEntityEvent event) {
- this.manager = manager;
- this.player = manager.getPlayer();
- this.event = event;
- this.defender = event.getEntity();
- if (defender instanceof LivingEntity) {
- this.livingDefender = (LivingEntity) defender;
- this.equipment = livingDefender.getEquipment();
- this.armorContents = equipment.getArmorContents();
- }
- }
- protected void damageArmor() {
- /* Every 50 Skill Levels you gain 1 durability damage (default values) */
- durabilityDamage += (short) (manager.getSkillLevel() / Axes.impactIncreaseLevel);
- for (ItemStack armor : armorContents) {
- if (Misc.getRandom().nextInt(100) > 75) {
- for (int i = 0; i <= durabilityDamage; i++) {
- if (armor.containsEnchantment(Enchantment.DURABILITY)) {
- handleDurabilityEnchantment(armor);
- }
- }
- damageValidation(armor);
- armor.setDurability((short) (armor.getDurability() + durabilityDamage));
- }
- }
- equipment.setArmorContents(armorContents);
- }
- protected void applyGreaterImpact() {
- if (!Permissions.greaterImpact(player)) {
- return;
- }
- int randomChance = 100;
- if (Permissions.luckyAxes(player)) {
- randomChance = 75;
- }
- if (Misc.getRandom().nextInt(randomChance) <= Axes.greaterImpactChance) {
- handleGreaterImpactEffect();
- sendAbilityMessge();
- }
- }
- private void handleGreaterImpactEffect() {
- event.setDamage(event.getDamage() + Axes.greaterImpactBonusDamage);
- livingDefender.setVelocity(player.getLocation().getDirection().normalize().multiply(Axes.greaterImpactKnockbackMultiplier));
- }
- private void sendAbilityMessge() {
- player.sendMessage(LocaleLoader.getString("Axes.Combat.GI.Proc"));
- if (livingDefender instanceof Player) {
- ((Player) livingDefender).sendMessage(LocaleLoader.getString("Axes.Combat.GI.Struck"));
- }
- }
- private void handleDurabilityEnchantment(ItemStack armor) {
- int enchantmentLevel = armor.getEnchantmentLevel(Enchantment.DURABILITY);
- if (Misc.getRandom().nextInt(enchantmentLevel + 1) > 0) {
- durabilityDamage--;
- }
- }
- private void damageValidation(ItemStack armor) {
- short maxDurability = (short) (armor.getType().getMaxDurability() * Axes.impactMaxDurabilityDamageModifier);
- if (durabilityDamage > maxDurability) {
- durabilityDamage = maxDurability;
- }
- }
- }
|