ImpactEventHandler.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package com.gmail.nossr50.skills.axes;
  2. import org.bukkit.enchantments.Enchantment;
  3. import org.bukkit.entity.Entity;
  4. import org.bukkit.entity.LivingEntity;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  7. import org.bukkit.inventory.EntityEquipment;
  8. import org.bukkit.inventory.ItemStack;
  9. import com.gmail.nossr50.locale.LocaleLoader;
  10. import com.gmail.nossr50.util.Misc;
  11. import com.gmail.nossr50.util.Permissions;
  12. public class ImpactEventHandler {
  13. private AxeManager manager;
  14. private Player player;
  15. private EntityDamageByEntityEvent event;
  16. private short durabilityDamage = 1;
  17. private EntityEquipment equipment;
  18. private ItemStack[] armorContents;
  19. protected Entity defender;
  20. protected LivingEntity livingDefender;
  21. public ImpactEventHandler(AxeManager manager, EntityDamageByEntityEvent event) {
  22. this.manager = manager;
  23. this.player = manager.getPlayer();
  24. this.event = event;
  25. this.defender = event.getEntity();
  26. if (defender instanceof LivingEntity) {
  27. this.livingDefender = (LivingEntity) defender;
  28. this.equipment = livingDefender.getEquipment();
  29. this.armorContents = equipment.getArmorContents();
  30. }
  31. }
  32. protected void damageArmor() {
  33. /* Every 50 Skill Levels you gain 1 durability damage (default values) */
  34. durabilityDamage += (short) (manager.getSkillLevel() / Axes.impactIncreaseLevel);
  35. for (ItemStack armor : armorContents) {
  36. if (Misc.getRandom().nextInt(100) > 75) {
  37. for (int i = 0; i <= durabilityDamage; i++) {
  38. if (armor.containsEnchantment(Enchantment.DURABILITY)) {
  39. handleDurabilityEnchantment(armor);
  40. }
  41. }
  42. damageValidation(armor);
  43. armor.setDurability((short) (armor.getDurability() + durabilityDamage));
  44. }
  45. }
  46. equipment.setArmorContents(armorContents);
  47. }
  48. protected void applyGreaterImpact() {
  49. if (!Permissions.greaterImpact(player)) {
  50. return;
  51. }
  52. int randomChance = 100;
  53. if (Permissions.luckyAxes(player)) {
  54. randomChance = 75;
  55. }
  56. if (Misc.getRandom().nextInt(randomChance) <= Axes.greaterImpactChance) {
  57. handleGreaterImpactEffect();
  58. sendAbilityMessge();
  59. }
  60. }
  61. private void handleGreaterImpactEffect() {
  62. event.setDamage(event.getDamage() + Axes.greaterImpactBonusDamage);
  63. livingDefender.setVelocity(player.getLocation().getDirection().normalize().multiply(Axes.greaterImpactKnockbackMultiplier));
  64. }
  65. private void sendAbilityMessge() {
  66. player.sendMessage(LocaleLoader.getString("Axes.Combat.GI.Proc"));
  67. if (livingDefender instanceof Player) {
  68. ((Player) livingDefender).sendMessage(LocaleLoader.getString("Axes.Combat.GI.Struck"));
  69. }
  70. }
  71. private void handleDurabilityEnchantment(ItemStack armor) {
  72. int enchantmentLevel = armor.getEnchantmentLevel(Enchantment.DURABILITY);
  73. if (Misc.getRandom().nextInt(enchantmentLevel + 1) > 0) {
  74. durabilityDamage--;
  75. }
  76. }
  77. private void damageValidation(ItemStack armor) {
  78. short maxDurability = (short) (armor.getType().getMaxDurability() * Axes.impactMaxDurabilityDamageModifier);
  79. if (durabilityDamage > maxDurability) {
  80. durabilityDamage = maxDurability;
  81. }
  82. }
  83. }