From 8a7f56e07e6384068d12ea90ff529fc1c2f0b275 Mon Sep 17 00:00:00 2001 From: Pim van der Loos Date: Tue, 24 Nov 2020 10:54:17 +0100 Subject: [PATCH] Extract anvil events to separate class - Extracted all anvil-related events from the EventHandlers class into the new AnvilHandlers class. This separation makes it possible to load different types of creation methods later (smithing table). --- pom.xml | 6 - .../armoredElytra/ArmoredElytra.java | 10 +- .../armoredElytra/handlers/AnvilHandler.java | 281 ++++++++++++++++++ .../armoredElytra/handlers/EventHandlers.java | 264 +--------------- 4 files changed, 293 insertions(+), 268 deletions(-) create mode 100644 src/main/java/nl/pim16aap2/armoredElytra/handlers/AnvilHandler.java diff --git a/pom.xml b/pom.xml index ee5496b..a3b8a87 100644 --- a/pom.xml +++ b/pom.xml @@ -17,12 +17,6 @@ CodeMC https://repo.codemc.org/repository/maven-public/ - - - - jitpack.io - https://jitpack.io - diff --git a/src/main/java/nl/pim16aap2/armoredElytra/ArmoredElytra.java b/src/main/java/nl/pim16aap2/armoredElytra/ArmoredElytra.java index 8a7e35b..574573a 100644 --- a/src/main/java/nl/pim16aap2/armoredElytra/ArmoredElytra.java +++ b/src/main/java/nl/pim16aap2/armoredElytra/ArmoredElytra.java @@ -1,5 +1,6 @@ package nl.pim16aap2.armoredElytra; +import nl.pim16aap2.armoredElytra.handlers.AnvilHandler; import nl.pim16aap2.armoredElytra.handlers.CommandHandler; import nl.pim16aap2.armoredElytra.handlers.EventHandlers; import nl.pim16aap2.armoredElytra.handlers.FlyDurabilityHandler; @@ -21,6 +22,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import sun.reflect.generics.reflectiveObjects.NotImplementedException; import java.util.EnumMap; import java.util.Map; @@ -82,7 +84,13 @@ public class ArmoredElytra extends JavaPlugin implements Listener myLogger(Level.INFO, "Stats disabled, not loading stats :(... Please consider enabling it! I am a simple man, seeing higher user numbers helps me stay motivated!"); - Bukkit.getPluginManager().registerEvents(new EventHandlers(this, config.craftingInSmithingTable()), this); + if (config.craftingInSmithingTable()) + throw new NotImplementedException(); + else + { + Bukkit.getPluginManager().registerEvents(new AnvilHandler(this, !config.uninstallMode()), this); + } + Bukkit.getPluginManager().registerEvents(new EventHandlers(this), this); getCommand("ArmoredElytra").setExecutor(new CommandHandler(this)); // Load the plugin normally if not in uninstall mode. diff --git a/src/main/java/nl/pim16aap2/armoredElytra/handlers/AnvilHandler.java b/src/main/java/nl/pim16aap2/armoredElytra/handlers/AnvilHandler.java new file mode 100644 index 0000000..08f78ac --- /dev/null +++ b/src/main/java/nl/pim16aap2/armoredElytra/handlers/AnvilHandler.java @@ -0,0 +1,281 @@ +package nl.pim16aap2.armoredElytra.handlers; + +import nl.pim16aap2.armoredElytra.ArmoredElytra; +import nl.pim16aap2.armoredElytra.enchantment.EnchantmentManager; +import nl.pim16aap2.armoredElytra.util.Action; +import nl.pim16aap2.armoredElytra.util.ArmorTier; +import nl.pim16aap2.armoredElytra.util.Util; +import nl.pim16aap2.armoredElytra.util.XMaterial; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.PrepareAnvilEvent; +import org.bukkit.inventory.AnvilInventory; +import org.bukkit.inventory.ItemStack; + +import java.util.logging.Level; + +public class AnvilHandler implements Listener +{ + private final ArmoredElytra plugin; + + private final boolean creationEnabled; + + public AnvilHandler(final ArmoredElytra plugin, final boolean creationEnabled) + { + this.plugin = plugin; + this.creationEnabled = creationEnabled; + } + + private void cleanAnvilInventory(AnvilInventory anvilInventory) + { + if (anvilInventory.getItem(0) != null) + anvilInventory.getItem(0).setAmount(0); + if (anvilInventory.getItem(1) != null) + anvilInventory.getItem(1).setAmount(anvilInventory.getItem(1).getAmount() - 1); + if (anvilInventory.getItem(2) != null) + anvilInventory.getItem(2).setAmount(0); + } + + // Repair an Armored Elytra + private short repairItem(short curDur, ItemStack repairItem) + { + // Get the multiplier for the repair items. + double mult = 0.01; + if (repairItem.getType().equals(Material.LEATHER)) + mult *= (100.0f / plugin.getConfigLoader().LEATHER_TO_FULL()); + + else if (repairItem.getType().equals(Material.GOLD_INGOT)) + mult *= (100.0f / plugin.getConfigLoader().GOLD_TO_FULL()); + + else if (repairItem.getType().equals(Material.IRON_INGOT)) + mult *= (100.0f / plugin.getConfigLoader().IRON_TO_FULL()); + + else if (repairItem.getType().equals(Material.DIAMOND)) + mult *= (100.0f / plugin.getConfigLoader().DIAMONDS_TO_FULL()); + + else if (repairItem.getType().equals(XMaterial.NETHERITE_INGOT.parseMaterial())) + mult *= (100.0f / plugin.getConfigLoader().NETHERITE_TO_FULL()); + + int maxDurability = Material.ELYTRA.getMaxDurability(); + int newDurability = (int) (curDur - (maxDurability * mult)); + return (short) (newDurability <= 0 ? 0 : newDurability); + } + + // Valid inputs: + // - Elytra (armored or not) + chestplate -> Create Armored Elytra + // - Elytra (armored) + enchanted book -> Enchant + // - Elytra (armored) + its repair item -> Repair + // - Elytra (armored) + other elytra (armored) -> Combine (Enchant + Repair) + // ! Elytra (armored, !leather) + leather/membrane -> Block + // + // Ignoring: + // - Elytra (not armored) + !chestplate -> None + // - * + * -> None + private Action isValidInput(ItemStack itemOne, ItemStack itemTwo) + { + if (itemOne == null || itemTwo == null) + return Action.NONE; + + // If itemTwo is the elytra, while itemOne isn't, switch itemOne and itemTwo. + if (itemTwo.getType() == Material.ELYTRA && itemOne.getType() != Material.ELYTRA) + { + ItemStack tmp = itemOne; + itemOne = itemTwo; + itemTwo = tmp; + } + + if (itemOne.getType() != Material.ELYTRA) + return Action.NONE; + + Material matTwo = itemTwo.getType(); + + // If the elytra is to be combined with chest armor... + if (Util.isChestPlate(matTwo)) + return Action.CREATE; + + ArmorTier tier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemOne); + + if (tier != ArmorTier.NONE) + { + // If the armored elytra is to be enchanted using an enchanted book... + if (matTwo == Material.ENCHANTED_BOOK) + return Action.ENCHANT; + + // If the armored elytra is to be repaired using its repair item... + if (ArmorTier.getRepairItem(tier) == matTwo) + return itemOne.getDurability() == 0 ? Action.NONE : Action.REPAIR; + + // If the armored elytra is to be combined with another armored elytra of the + // same tier... + // TODO: Should this also be disabled by "creationEnabled"? + if (ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemTwo) == tier) + return creationEnabled ? Action.COMBINE : Action.NONE; + + // If the armored elytra is not of the leather tier, but itemTwo is leather, + // Pick the block action, as that would repair the elytra by default (vanilla). + // Also block Armored Elytra + Elytra and Elytra + Membrane + if (tier != ArmorTier.LEATHER && matTwo == Material.LEATHER || matTwo == Material.ELYTRA || + matTwo.equals(XMaterial.PHANTOM_MEMBRANE.parseMaterial())) + return Action.BLOCK; + } + return Action.NONE; + } + + // Handle all anvil related stuff for this plugin. + @EventHandler + private void onAnvilInventoryOpen(PrepareAnvilEvent event) + { + Player player = (Player) event.getView().getPlayer(); + ItemStack itemA = event.getInventory().getItem(0); + ItemStack itemB = event.getInventory().getItem(1); + ItemStack result = null; + + if (itemA != null && itemB != null) + // If itemB is the elytra, while itemA isn't, switch itemA and itemB. + if (itemB.getType() == Material.ELYTRA && itemA.getType() != Material.ELYTRA) + { + result = itemA; + itemA = itemB; + itemB = result; + result = null; + } + + // Check if there are items in both input slots. + if (itemA != null && itemB != null) + { + Action action = isValidInput(itemA, itemB); + ArmorTier newTier = ArmorTier.NONE; + ArmorTier curTier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemA); + short durability = 0; + EnchantmentManager enchantments = new EnchantmentManager(itemA); + + switch (action) + { + case REPAIR: + newTier = curTier; + durability = repairItem(itemA.getDurability(), itemB); + break; + case COMBINE: + newTier = curTier; + durability = (short) (-itemA.getType().getMaxDurability() - itemA.getDurability() + - itemB.getDurability()); + durability = durability < 0 ? 0 : durability; + enchantments.merge(new EnchantmentManager(itemB)); + break; + case CREATE: + newTier = Util.armorToTier(itemB.getType()); + durability = 0; + enchantments.merge(new EnchantmentManager(itemB)); + break; + case ENCHANT: + newTier = curTier; + durability = itemA.getDurability(); + + // If there aren't any illegal enchantments on the book, continue as normal. + // Otherwise... Block. + EnchantmentManager enchantmentsB = new EnchantmentManager(itemB); + if (enchantmentsB.getEnchantmentCount() > 0) + { + enchantments.merge(enchantmentsB); + break; + } + //$FALL-THROUGH$ + case BLOCK: + event.setResult(null); + player.updateInventory(); + //$FALL-THROUGH$ + case NONE: + return; + } + + if (plugin.playerHasCraftPerm(player, newTier)) + { + result = new ItemStack(Material.ELYTRA, 1); + enchantments.apply(result); + result.setDurability(durability); + + result = ArmoredElytra.getInstance().getNbtEditor() + .addArmorNBTTags(result, newTier, plugin.getConfigLoader().unbreakable()); + event.setResult(result); + } + } + + // If one of the input items is null and the other an armored elytra, remove the result. + // This prevent some naming issues. + // TODO: Allow renaming armored elytras. + if ((itemA == null ^ itemB == null) && + ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemA == null ? itemB : itemA) != ArmorTier.NONE) + event.setResult(null); + player.updateInventory(); + } + + // Let the player take items out of the anvil. + @EventHandler + public void onInventoryClick(InventoryClickEvent e) + { + if (!(e.getWhoClicked() instanceof Player)) + return; + + // Check if the event was a player who interacted with an anvil. + Player player = (Player) e.getWhoClicked(); + if (e.getView().getType() != InventoryType.ANVIL) + return; + + AnvilInventory anvilInventory; + // Try to cast inventory being used in the event to an anvil inventory. + // This will throw a ClassCastException when a CraftInventoryCustom is used. + try + { + anvilInventory = (AnvilInventory) e.getInventory(); + } + catch (ClassCastException exception) + { + // Print warning to console and exit onInventoryClick event (no support for + // custom inventories as they are usually used for GUI's). + plugin.debugMsg(Level.WARNING, "Could not cast inventory to anvilInventory for player " + player.getName() + + "! Armored Elytras cannot be crafted!"); + exception.printStackTrace(); + return; + } + + int slot = e.getRawSlot(); + + if (slot == 2 && anvilInventory.getItem(0) != null && anvilInventory.getItem(1) != null && + anvilInventory.getItem(2) != null && anvilInventory.getItem(2).getType() == Material.ELYTRA) + { + ArmorTier armortier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(anvilInventory.getItem(2)); + + // If there's an armored elytra in the final slot... + if (armortier != ArmorTier.NONE && plugin.playerHasCraftPerm(player, armortier)) + { + // Create a new armored elytra and give that one to the player instead of the + // result. + // This is done because after putting item0 in AFTER item1, the first letter of + // the color code shows up, this gets rid of that problem. + ItemStack result = ArmoredElytra.getInstance().getNbtEditor() + .addArmorNBTTags(anvilInventory.getItem(2), armortier, + plugin.getConfigLoader().unbreakable()); + + // Give the result to the player and clear the anvil's inventory. + if (e.isShiftClick()) + { + // If the player's inventory is full, don't do anything. + if (player.getInventory().firstEmpty() == -1) + return; + player.getInventory().addItem(result); + } + else + player.setItemOnCursor(result); + + // Clean the anvil's inventory after transferring the items. + cleanAnvilInventory(anvilInventory); + player.updateInventory(); + return; + } + } + } +} diff --git a/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java b/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java index 768b9f5..1bc837a 100644 --- a/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java +++ b/src/main/java/nl/pim16aap2/armoredElytra/handlers/EventHandlers.java @@ -1,16 +1,13 @@ package nl.pim16aap2.armoredElytra.handlers; import nl.pim16aap2.armoredElytra.ArmoredElytra; -import nl.pim16aap2.armoredElytra.enchantment.EnchantmentManager; import nl.pim16aap2.armoredElytra.lib.armorequip.ArmorEquipEvent; import nl.pim16aap2.armoredElytra.lib.armorequip.ArmorListener; import nl.pim16aap2.armoredElytra.lib.armorequip.ArmorType; import nl.pim16aap2.armoredElytra.lib.armorequip.DispenserArmorListener; -import nl.pim16aap2.armoredElytra.util.Action; import nl.pim16aap2.armoredElytra.util.AllowedToWearEnum; import nl.pim16aap2.armoredElytra.util.ArmorTier; import nl.pim16aap2.armoredElytra.util.Util; -import nl.pim16aap2.armoredElytra.util.XMaterial; import nl.pim16aap2.armoredElytra.util.messages.Message; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -20,26 +17,18 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; -import org.bukkit.event.inventory.PrepareAnvilEvent; -import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.Random; -import java.util.logging.Level; public class EventHandlers implements Listener { private final ArmoredElytra plugin; - private final boolean creationEnabled; - - public EventHandlers(ArmoredElytra plugin, boolean creationEnabled) + public EventHandlers(ArmoredElytra plugin) { this.plugin = plugin; - this.creationEnabled = creationEnabled; initializeArmorEquipEvent(); } @@ -56,255 +45,6 @@ public class EventHandlers implements Listener player.updateInventory(); } - private void cleanAnvilInventory(AnvilInventory anvilInventory) - { - if (anvilInventory.getItem(0) != null) - anvilInventory.getItem(0).setAmount(0); - if (anvilInventory.getItem(1) != null) - anvilInventory.getItem(1).setAmount(anvilInventory.getItem(1).getAmount() - 1); - if (anvilInventory.getItem(2) != null) - anvilInventory.getItem(2).setAmount(0); - } - - // Repair an Armored Elytra - private short repairItem(short curDur, ItemStack repairItem) - { - // Get the multiplier for the repair items. - double mult = 0.01; - if (repairItem.getType().equals(Material.LEATHER)) - mult *= (100.0f / plugin.getConfigLoader().LEATHER_TO_FULL()); - - else if (repairItem.getType().equals(Material.GOLD_INGOT)) - mult *= (100.0f / plugin.getConfigLoader().GOLD_TO_FULL()); - - else if (repairItem.getType().equals(Material.IRON_INGOT)) - mult *= (100.0f / plugin.getConfigLoader().IRON_TO_FULL()); - - else if (repairItem.getType().equals(Material.DIAMOND)) - mult *= (100.0f / plugin.getConfigLoader().DIAMONDS_TO_FULL()); - - else if (repairItem.getType().equals(XMaterial.NETHERITE_INGOT.parseMaterial())) - mult *= (100.0f / plugin.getConfigLoader().NETHERITE_TO_FULL()); - - int maxDurability = Material.ELYTRA.getMaxDurability(); - int newDurability = (int) (curDur - (maxDurability * mult)); - return (short) (newDurability <= 0 ? 0 : newDurability); - } - - // Valid inputs: - // - Elytra (armored or not) + chestplate -> Create Armored Elytra - // - Elytra (armored) + enchanted book -> Enchant - // - Elytra (armored) + its repair item -> Repair - // - Elytra (armored) + other elytra (armored) -> Combine (Enchant + Repair) - // ! Elytra (armored, !leather) + leather/membrane -> Block - // - // Ignoring: - // - Elytra (not armored) + !chestplate -> None - // - * + * -> None - private Action isValidInput(ItemStack itemOne, ItemStack itemTwo) - { - if (itemOne == null || itemTwo == null) - return Action.NONE; - - // If itemTwo is the elytra, while itemOne isn't, switch itemOne and itemTwo. - if (itemTwo.getType() == Material.ELYTRA && itemOne.getType() != Material.ELYTRA) - { - ItemStack tmp = itemOne; - itemOne = itemTwo; - itemTwo = tmp; - } - - if (itemOne.getType() != Material.ELYTRA) - return Action.NONE; - - Material matTwo = itemTwo.getType(); - - // If the elytra is to be combined with chest armor... - if (Util.isChestPlate(matTwo)) - return Action.CREATE; - - ArmorTier tier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemOne); - - if (tier != ArmorTier.NONE) - { - // If the armored elytra is to be enchanted using an enchanted book... - if (matTwo == Material.ENCHANTED_BOOK) - return Action.ENCHANT; - - // If the armored elytra is to be repaired using its repair item... - if (ArmorTier.getRepairItem(tier) == matTwo) - return itemOne.getDurability() == 0 ? Action.NONE : Action.REPAIR; - - // If the armored elytra is to be combined with another armored elytra of the - // same tier... - // TODO: Should this also be disabled by "creationEnabled"? - if (ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemTwo) == tier) - return creationEnabled ? Action.COMBINE : Action.NONE; - - // If the armored elytra is not of the leather tier, but itemTwo is leather, - // Pick the block action, as that would repair the elytra by default (vanilla). - // Also block Armored Elytra + Elytra and Elytra + Membrane - if (tier != ArmorTier.LEATHER && matTwo == Material.LEATHER || matTwo == Material.ELYTRA || - matTwo.equals(XMaterial.PHANTOM_MEMBRANE.parseMaterial())) - return Action.BLOCK; - } - return Action.NONE; - } - - // Handle all anvil related stuff for this plugin. - @EventHandler - private void onAnvilInventoryOpen(PrepareAnvilEvent event) - { - Player player = (Player) event.getView().getPlayer(); - ItemStack itemA = event.getInventory().getItem(0); - ItemStack itemB = event.getInventory().getItem(1); - ItemStack result = null; - - if (itemA != null && itemB != null) - // If itemB is the elytra, while itemA isn't, switch itemA and itemB. - if (itemB.getType() == Material.ELYTRA && itemA.getType() != Material.ELYTRA) - { - result = itemA; - itemA = itemB; - itemB = result; - result = null; - } - - // Check if there are items in both input slots. - if (itemA != null && itemB != null) - { - Action action = isValidInput(itemA, itemB); - ArmorTier newTier = ArmorTier.NONE; - ArmorTier curTier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemA); - short durability = 0; - EnchantmentManager enchantments = new EnchantmentManager(itemA); - - switch (action) - { - case REPAIR: - newTier = curTier; - durability = repairItem(itemA.getDurability(), itemB); - break; - case COMBINE: - newTier = curTier; - durability = (short) (-itemA.getType().getMaxDurability() - itemA.getDurability() - - itemB.getDurability()); - durability = durability < 0 ? 0 : durability; - enchantments.merge(new EnchantmentManager(itemB)); - break; - case CREATE: - newTier = Util.armorToTier(itemB.getType()); - durability = 0; - enchantments.merge(new EnchantmentManager(itemB)); - break; - case ENCHANT: - newTier = curTier; - durability = itemA.getDurability(); - - // If there aren't any illegal enchantments on the book, continue as normal. - // Otherwise... Block. - EnchantmentManager enchantmentsB = new EnchantmentManager(itemB); - if (enchantmentsB.getEnchantmentCount() > 0) - { - enchantments.merge(enchantmentsB); - break; - } - //$FALL-THROUGH$ - case BLOCK: - event.setResult(null); - player.updateInventory(); - //$FALL-THROUGH$ - case NONE: - return; - } - - if (plugin.playerHasCraftPerm(player, newTier)) - { - result = new ItemStack(Material.ELYTRA, 1); - enchantments.apply(result); - result.setDurability(durability); - - result = ArmoredElytra.getInstance().getNbtEditor() - .addArmorNBTTags(result, newTier, plugin.getConfigLoader().unbreakable()); - event.setResult(result); - } - } - - // If one of the input items is null and the other an armored elytra, remove the result. - // This prevent some naming issues. - // TODO: Allow renaming armored elytras. - if ((itemA == null ^ itemB == null) && - ArmoredElytra.getInstance().getNbtEditor().getArmorTier(itemA == null ? itemB : itemA) != ArmorTier.NONE) - event.setResult(null); - player.updateInventory(); - } - - // Let the player take items out of the anvil. - @EventHandler - public void onInventoryClick(InventoryClickEvent e) - { - if (!(e.getWhoClicked() instanceof Player)) - return; - - // Check if the event was a player who interacted with an anvil. - Player player = (Player) e.getWhoClicked(); - if (e.getView().getType() != InventoryType.ANVIL) - return; - - AnvilInventory anvilInventory; - // Try to cast inventory being used in the event to an anvil inventory. - // This will throw a ClassCastException when a CraftInventoryCustom is used. - try - { - anvilInventory = (AnvilInventory) e.getInventory(); - } - catch (ClassCastException exception) - { - // Print warning to console and exit onInventoryClick event (no support for - // custom inventories as they are usually used for GUI's). - plugin.debugMsg(Level.WARNING, "Could not cast inventory to anvilInventory for player " + player.getName() - + "! Armored Elytras cannot be crafted!"); - exception.printStackTrace(); - return; - } - - int slot = e.getRawSlot(); - - if (slot == 2 && anvilInventory.getItem(0) != null && anvilInventory.getItem(1) != null && - anvilInventory.getItem(2) != null && anvilInventory.getItem(2).getType() == Material.ELYTRA) - { - ArmorTier armortier = ArmoredElytra.getInstance().getNbtEditor().getArmorTier(anvilInventory.getItem(2)); - - // If there's an armored elytra in the final slot... - if (armortier != ArmorTier.NONE && plugin.playerHasCraftPerm(player, armortier)) - { - // Create a new armored elytra and give that one to the player instead of the - // result. - // This is done because after putting item0 in AFTER item1, the first letter of - // the color code shows up, this gets rid of that problem. - ItemStack result = ArmoredElytra.getInstance().getNbtEditor() - .addArmorNBTTags(anvilInventory.getItem(2), armortier, - plugin.getConfigLoader().unbreakable()); - - // Give the result to the player and clear the anvil's inventory. - if (e.isShiftClick()) - { - // If the player's inventory is full, don't do anything. - if (player.getInventory().firstEmpty() == -1) - return; - player.getInventory().addItem(result); - } - else - player.setItemOnCursor(result); - - // Clean the anvil's inventory after transferring the items. - cleanAnvilInventory(anvilInventory); - player.updateInventory(); - return; - } - } - } - // Make sure the player has the correct permission and that the item is not // broken. private AllowedToWearEnum isAllowedToWear(ItemStack elytra, Player player, ArmorTier armorTier) @@ -322,6 +62,7 @@ public class EventHandlers implements Listener @EventHandler(ignoreCancelled = true) public void onPlayerDamage(EntityDamageEvent e) { + System.out.println("onPlayerDamage!"); if (!(e.getEntity() instanceof Player)) return; @@ -381,6 +122,7 @@ public class EventHandlers implements Listener @EventHandler public void onEquip(ArmorEquipEvent e) { + System.out.println("onEquip!"); if (e.getMethod().equals(ArmorEquipEvent.EquipMethod.DEATH) || e.getMethod().equals(ArmorEquipEvent.EquipMethod.BROKE)) return;