diff --git a/pom.xml b/pom.xml
index fb097ec..7a0c809 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.spigotmc
spigot-api
- 1.14.4-R0.1-SNAPSHOT
+ 1.16.2-R0.1-SNAPSHOT
jar
diff --git a/src/com/codingforcookies/armorequip/ArmorListener.java b/src/com/codingforcookies/armorequip/ArmorListener.java
index c30fc40..130e281 100644
--- a/src/com/codingforcookies/armorequip/ArmorListener.java
+++ b/src/com/codingforcookies/armorequip/ArmorListener.java
@@ -18,141 +18,178 @@
import org.bukkit.inventory.ItemStack;
import com.codingforcookies.armorequip.ArmorEquipEvent.EquipMethod;
+import org.bukkit.Tag;
+import org.bukkit.block.Container;
/**
* @author Arnah
* @since Jul 30, 2015
*/
-public class ArmorListener implements Listener{
+public class ArmorListener implements Listener {
- private final List blockedMaterials;
+ private final List blockedMaterials;
- public ArmorListener(List blockedMaterials){
- this.blockedMaterials = blockedMaterials;
- }
- //Event Priority is highest because other plugins might cancel the events before we check.
+ public ArmorListener(List blockedMaterials) {
+ this.blockedMaterials = blockedMaterials;
+ }
+ //Event Priority is highest because other plugins might cancel the events before we check.
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public final void inventoryClick(final InventoryClickEvent e){
- boolean shift = false, numberkey = false;
- if(e.isCancelled()) return;
- if(e.getAction() == InventoryAction.NOTHING) return;// Why does this get called if nothing happens??
- if(e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)){
- shift = true;
- }
- if(e.getClick().equals(ClickType.NUMBER_KEY)){
- numberkey = true;
- }
- if(e.getSlotType() != SlotType.ARMOR && e.getSlotType() != SlotType.QUICKBAR && e.getSlotType() != SlotType.CONTAINER) return;
- if(e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) return;
- if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) return;
- if(!(e.getWhoClicked() instanceof Player)) return;
- ArmorType newArmorType = ArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor());
- if(!shift && newArmorType != null && e.getRawSlot() != newArmorType.getSlot()){
- // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot.
- return;
- }
- if(shift){
- newArmorType = ArmorType.matchType(e.getCurrentItem());
- if(newArmorType != null){
- boolean equipping = true;
- if(e.getRawSlot() == newArmorType.getSlot()){
- equipping = false;
- }
- if(newArmorType.equals(ArmorType.HELMET) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getHelmet()) : !isAirOrNull(e.getWhoClicked().getInventory().getHelmet())) || newArmorType.equals(ArmorType.CHESTPLATE) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getChestplate()) : !isAirOrNull(e.getWhoClicked().getInventory().getChestplate())) || newArmorType.equals(ArmorType.LEGGINGS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getLeggings()) : !isAirOrNull(e.getWhoClicked().getInventory().getLeggings())) || newArmorType.equals(ArmorType.BOOTS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getBoots()) : !isAirOrNull(e.getWhoClicked().getInventory().getBoots()))){
- ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), EquipMethod.SHIFT_CLICK, newArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null);
- Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
- if(armorEquipEvent.isCancelled()){
- e.setCancelled(true);
- }
- }
- }
- }else{
- ItemStack newArmorPiece = e.getCursor();
- ItemStack oldArmorPiece = e.getCurrentItem();
- if(numberkey){
- if(e.getClickedInventory().getType().equals(InventoryType.PLAYER)){// Prevents shit in the 2by2 crafting
- // e.getClickedInventory() == The players inventory
- // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from.
- // e.getRawSlot() == The slot the item is going to.
- // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot ;-;
- ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton());
- if(!isAirOrNull(hotbarItem)){// Equipping
- newArmorType = ArmorType.matchType(hotbarItem);
- newArmorPiece = hotbarItem;
- oldArmorPiece = e.getClickedInventory().getItem(e.getSlot());
- }else{// Unequipping
- newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor());
- }
- }
- }else{
- if(isAirOrNull(e.getCursor()) && !isAirOrNull(e.getCurrentItem())){// unequip with no new item going into the slot.
- newArmorType = ArmorType.matchType(e.getCurrentItem());
- }
- // e.getCurrentItem() == Unequip
- // e.getCursor() == Equip
- // newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor());
- }
- if(newArmorType != null && e.getRawSlot() == newArmorType.getSlot()){
- EquipMethod method = EquipMethod.PICK_DROP;
- if(e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) method = EquipMethod.HOTBAR_SWAP;
- ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newArmorType, oldArmorPiece, newArmorPiece);
- Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
- if(armorEquipEvent.isCancelled()){
- e.setCancelled(true);
- }
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST)
- public void playerInteractEvent(PlayerInteractEvent e){
- if(e.useItemInHand().equals(Result.DENY))return;
- //
- if(e.getAction() == Action.PHYSICAL) return;
- if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
- Player player = e.getPlayer();
- if(!e.useInteractedBlock().equals(Result.DENY)){
- if(e.getClickedBlock() != null && e.getAction() == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()){// Having both of these checks is useless, might as well do it though.
- // Some blocks have actions when you right click them which stops the client from equipping the armor in hand.
- Material mat = e.getClickedBlock().getType();
- for(String s : blockedMaterials){
- if(mat.name().equalsIgnoreCase(s)) return;
- }
- }
- }
- ArmorType newArmorType = ArmorType.matchType(e.getItem());
- if(newArmorType != null){
- if(newArmorType.equals(ArmorType.HELMET) && isAirOrNull(e.getPlayer().getInventory().getHelmet()) || newArmorType.equals(ArmorType.CHESTPLATE) && isAirOrNull(e.getPlayer().getInventory().getChestplate()) || newArmorType.equals(ArmorType.LEGGINGS) && isAirOrNull(e.getPlayer().getInventory().getLeggings()) || newArmorType.equals(ArmorType.BOOTS) && isAirOrNull(e.getPlayer().getInventory().getBoots())){
- ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), EquipMethod.HOTBAR, ArmorType.matchType(e.getItem()), null, e.getItem());
- Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
- if(armorEquipEvent.isCancelled()){
- e.setCancelled(true);
- player.updateInventory();
- }
- }
- }
- }
- }
-
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void inventoryDrag(InventoryDragEvent event){
- // getType() seems to always be even.
- // Old Cursor gives the item you are equipping
- // Raw slot is the ArmorType slot
- // Can't replace armor using this method making getCursor() useless.
- ArmorType type = ArmorType.matchType(event.getOldCursor());
- if(event.getRawSlots().isEmpty()) return;// Idk if this will ever happen
- if(type != null && type.getSlot() == event.getRawSlots().stream().findFirst().orElse(0)){
- ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked(), EquipMethod.DRAG, type, null, event.getOldCursor());
- Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
- if(armorEquipEvent.isCancelled()){
- event.setResult(Result.DENY);
- event.setCancelled(true);
- }
- }
- // Debug shit
- /*System.out.println("Slots: " + event.getInventorySlots().toString());
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public final void inventoryClick(final InventoryClickEvent e) {
+ boolean shift = false, numberkey = false;
+ if (e.isCancelled()) {
+ return;
+ }
+ if (e.getAction() == InventoryAction.NOTHING) {
+ return;// Why does this get called if nothing happens??
+ }
+ if (e.getClick().equals(ClickType.SHIFT_LEFT) || e.getClick().equals(ClickType.SHIFT_RIGHT)) {
+ shift = true;
+ }
+ if (e.getClick().equals(ClickType.NUMBER_KEY)) {
+ numberkey = true;
+ }
+ if (e.getSlotType() != SlotType.ARMOR && e.getSlotType() != SlotType.QUICKBAR && e.getSlotType() != SlotType.CONTAINER) {
+ return;
+ }
+ if (e.getClickedInventory() != null && !e.getClickedInventory().getType().equals(InventoryType.PLAYER)) {
+ return;
+ }
+ if (!e.getInventory().getType().equals(InventoryType.CRAFTING) && !e.getInventory().getType().equals(InventoryType.PLAYER)) {
+ return;
+ }
+ if (!(e.getWhoClicked() instanceof Player)) {
+ return;
+ }
+ ArmorType newArmorType = ArmorType.matchType(shift ? e.getCurrentItem() : e.getCursor());
+ if (!shift && newArmorType != null && e.getRawSlot() != newArmorType.getSlot()) {
+ // Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot.
+ return;
+ }
+ if (shift) {
+ newArmorType = ArmorType.matchType(e.getCurrentItem());
+ if (newArmorType != null) {
+ boolean equipping = true;
+ if (e.getRawSlot() == newArmorType.getSlot()) {
+ equipping = false;
+ }
+ if (newArmorType.equals(ArmorType.HELMET) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getHelmet()) : !isAirOrNull(e.getWhoClicked().getInventory().getHelmet())) || newArmorType.equals(ArmorType.CHESTPLATE) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getChestplate()) : !isAirOrNull(e.getWhoClicked().getInventory().getChestplate())) || newArmorType.equals(ArmorType.LEGGINGS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getLeggings()) : !isAirOrNull(e.getWhoClicked().getInventory().getLeggings())) || newArmorType.equals(ArmorType.BOOTS) && (equipping ? isAirOrNull(e.getWhoClicked().getInventory().getBoots()) : !isAirOrNull(e.getWhoClicked().getInventory().getBoots()))) {
+ ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), EquipMethod.SHIFT_CLICK, newArmorType, equipping ? null : e.getCurrentItem(), equipping ? e.getCurrentItem() : null);
+ Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
+ if (armorEquipEvent.isCancelled()) {
+ e.setCancelled(true);
+ }
+ }
+ }
+ } else {
+ ItemStack newArmorPiece = e.getCursor();
+ ItemStack oldArmorPiece = e.getCurrentItem();
+ if (numberkey) {
+ if (e.getClickedInventory().getType().equals(InventoryType.PLAYER)) {// Prevents shit in the 2by2 crafting
+ // e.getClickedInventory() == The players inventory
+ // e.getHotBarButton() == key people are pressing to equip or unequip the item to or from.
+ // e.getRawSlot() == The slot the item is going to.
+ // e.getSlot() == Armor slot, can't use e.getRawSlot() as that gives a hotbar slot ;-;
+ ItemStack hotbarItem = e.getClickedInventory().getItem(e.getHotbarButton());
+ if (!isAirOrNull(hotbarItem)) {// Equipping
+ newArmorType = ArmorType.matchType(hotbarItem);
+ newArmorPiece = hotbarItem;
+ oldArmorPiece = e.getClickedInventory().getItem(e.getSlot());
+ } else {// Unequipping
+ newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor());
+ }
+ }
+ } else {
+ if (isAirOrNull(e.getCursor()) && !isAirOrNull(e.getCurrentItem())) {// unequip with no new item going into the slot.
+ newArmorType = ArmorType.matchType(e.getCurrentItem());
+ }
+ // e.getCurrentItem() == Unequip
+ // e.getCursor() == Equip
+ // newArmorType = ArmorType.matchType(!isAirOrNull(e.getCurrentItem()) ? e.getCurrentItem() : e.getCursor());
+ }
+ if (newArmorType != null && e.getRawSlot() == newArmorType.getSlot()) {
+ EquipMethod method = EquipMethod.PICK_DROP;
+ if (e.getAction().equals(InventoryAction.HOTBAR_SWAP) || numberkey) {
+ method = EquipMethod.HOTBAR_SWAP;
+ }
+ ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) e.getWhoClicked(), method, newArmorType, oldArmorPiece, newArmorPiece);
+ Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
+ if (armorEquipEvent.isCancelled()) {
+ e.setCancelled(true);
+ }
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void playerInteractEvent(PlayerInteractEvent e) {
+ if (e.useItemInHand().equals(Result.DENY)) {
+ return;
+ }
+ //
+ if (e.getAction() == Action.PHYSICAL) {
+ return;
+ }
+ if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
+ Player player = e.getPlayer();
+ if (!e.useInteractedBlock().equals(Result.DENY)) {
+ if (e.getClickedBlock() != null && e.getAction() == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()) {// Having both of these checks is useless, might as well do it though.
+ // Some blocks have actions when you right click them which stops the client from equipping the armor in hand.
+ if ((e.getClickedBlock().getState() != null) && e.getClickedBlock().getState() instanceof Container) {
+ return;
+ }
+ Material mat = e.getClickedBlock().getType();
+ if (Tag.SIGNS.isTagged(mat)
+ || Tag.WALL_SIGNS.isTagged(mat)
+ || Tag.TRAPDOORS.isTagged(mat)
+ || Tag.DOORS.isTagged(mat)
+ || Tag.BUTTONS.isTagged(mat)
+ || Tag.FENCE_GATES.isTagged(mat)
+ || Tag.BEDS.isTagged(mat)
+ || Tag.FLOWER_POTS.isTagged(mat)) {
+ return;
+ }
+ for (String s : blockedMaterials) {
+ if (mat.name().equalsIgnoreCase(s)) {
+ return;
+ }
+ }
+ }
+ }
+ ArmorType newArmorType = ArmorType.matchType(e.getItem());
+ if (newArmorType != null) {
+ if (newArmorType.equals(ArmorType.HELMET) && isAirOrNull(e.getPlayer().getInventory().getHelmet()) || newArmorType.equals(ArmorType.CHESTPLATE) && isAirOrNull(e.getPlayer().getInventory().getChestplate()) || newArmorType.equals(ArmorType.LEGGINGS) && isAirOrNull(e.getPlayer().getInventory().getLeggings()) || newArmorType.equals(ArmorType.BOOTS) && isAirOrNull(e.getPlayer().getInventory().getBoots())) {
+ ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer(), EquipMethod.HOTBAR, ArmorType.matchType(e.getItem()), null, e.getItem());
+ Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
+ if (armorEquipEvent.isCancelled()) {
+ e.setCancelled(true);
+ player.updateInventory();
+ }
+ }
+ }
+ }
+ }
+
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void inventoryDrag(InventoryDragEvent event) {
+ // getType() seems to always be even.
+ // Old Cursor gives the item you are equipping
+ // Raw slot is the ArmorType slot
+ // Can't replace armor using this method making getCursor() useless.
+ ArmorType type = ArmorType.matchType(event.getOldCursor());
+ if (event.getRawSlots().isEmpty()) {
+ return;// Idk if this will ever happen
+ }
+ if (type != null && type.getSlot() == event.getRawSlots().stream().findFirst().orElse(0)) {
+ ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked(), EquipMethod.DRAG, type, null, event.getOldCursor());
+ Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
+ if (armorEquipEvent.isCancelled()) {
+ event.setResult(Result.DENY);
+ event.setCancelled(true);
+ }
+ }
+ // Debug shit
+ /*System.out.println("Slots: " + event.getInventorySlots().toString());
System.out.println("Raw Slots: " + event.getRawSlots().toString());
if(event.getCursor() != null){
System.out.println("Cursor: " + event.getCursor().getType().name());
@@ -161,48 +198,50 @@ public void inventoryDrag(InventoryDragEvent event){
System.out.println("OldCursor: " + event.getOldCursor().getType().name());
}
System.out.println("Type: " + event.getType().name());*/
- }
+ }
- @EventHandler
- public void itemBreakEvent(PlayerItemBreakEvent e){
- ArmorType type = ArmorType.matchType(e.getBrokenItem());
- if(type != null){
- Player p = e.getPlayer();
- ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, EquipMethod.BROKE, type, e.getBrokenItem(), null);
- Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
- if(armorEquipEvent.isCancelled()){
- ItemStack i = e.getBrokenItem().clone();
- i.setAmount(1);
- i.setDurability((short) (i.getDurability() - 1));
- if(type.equals(ArmorType.HELMET)){
- p.getInventory().setHelmet(i);
- }else if(type.equals(ArmorType.CHESTPLATE)){
- p.getInventory().setChestplate(i);
- }else if(type.equals(ArmorType.LEGGINGS)){
- p.getInventory().setLeggings(i);
- }else if(type.equals(ArmorType.BOOTS)){
- p.getInventory().setBoots(i);
- }
- }
- }
- }
+ @EventHandler
+ public void itemBreakEvent(PlayerItemBreakEvent e) {
+ ArmorType type = ArmorType.matchType(e.getBrokenItem());
+ if (type != null) {
+ Player p = e.getPlayer();
+ ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p, EquipMethod.BROKE, type, e.getBrokenItem(), null);
+ Bukkit.getServer().getPluginManager().callEvent(armorEquipEvent);
+ if (armorEquipEvent.isCancelled()) {
+ ItemStack i = e.getBrokenItem().clone();
+ i.setAmount(1);
+ i.setDurability((short) (i.getDurability() - 1));
+ if (type.equals(ArmorType.HELMET)) {
+ p.getInventory().setHelmet(i);
+ } else if (type.equals(ArmorType.CHESTPLATE)) {
+ p.getInventory().setChestplate(i);
+ } else if (type.equals(ArmorType.LEGGINGS)) {
+ p.getInventory().setLeggings(i);
+ } else if (type.equals(ArmorType.BOOTS)) {
+ p.getInventory().setBoots(i);
+ }
+ }
+ }
+ }
- @EventHandler
- public void playerDeathEvent(PlayerDeathEvent e){
- Player p = e.getEntity();
- if(e.getKeepInventory()) return;
- for(ItemStack i : p.getInventory().getArmorContents()){
- if(!isAirOrNull(i)){
- Bukkit.getServer().getPluginManager().callEvent(new ArmorEquipEvent(p, EquipMethod.DEATH, ArmorType.matchType(i), i, null));
- // No way to cancel a death event.
- }
- }
- }
+ @EventHandler
+ public void playerDeathEvent(PlayerDeathEvent e) {
+ Player p = e.getEntity();
+ if (e.getKeepInventory()) {
+ return;
+ }
+ for (ItemStack i : p.getInventory().getArmorContents()) {
+ if (!isAirOrNull(i)) {
+ Bukkit.getServer().getPluginManager().callEvent(new ArmorEquipEvent(p, EquipMethod.DEATH, ArmorType.matchType(i), i, null));
+ // No way to cancel a death event.
+ }
+ }
+ }
- /**
- * A utility method to support versions that use null or air ItemStacks.
- */
- public static boolean isAirOrNull(ItemStack item){
- return item == null || item.getType().equals(Material.AIR);
- }
+ /**
+ * A utility method to support versions that use null or air ItemStacks.
+ */
+ public static boolean isAirOrNull(ItemStack item) {
+ return item == null || item.getType().equals(Material.AIR);
+ }
}
diff --git a/src/resources/config.yml b/src/resources/config.yml
index ea37a56..6922610 100644
--- a/src/resources/config.yml
+++ b/src/resources/config.yml
@@ -1,88 +1,22 @@
# All blocks with an inventory or any blocks that when right clicked shouldn't equip armor.
blocked:
- - FURNACE
- - CHEST
- - TRAPPED_CHEST
- BEACON
- - DISPENSER
- - DROPPER
- - HOPPER
- - WORKBENCH
+ - CRAFTING_TABLE
- ENCHANTMENT_TABLE
- ENDER_CHEST
- - ANVIL
- - BED_BLOCK
- - FENCE_GATE
- - SPRUCE_FENCE_GATE
- - BIRCH_FENCE_GATE
- - ACACIA_FENCE_GATE
- - JUNGLE_FENCE_GATE
- - DARK_OAK_FENCE_GATE
- - IRON_DOOR_BLOCK
- - WOODEN_DOOR
- - SPRUCE_DOOR
- - BIRCH_DOOR
- - JUNGLE_DOOR
- - ACACIA_DOOR
- - DARK_OAK_DOOR
- - WOOD_BUTTON
- - STONE_BUTTON
- - TRAP_DOOR
- - IRON_TRAPDOOR
- DIODE_BLOCK_OFF
- DIODE_BLOCK_ON
- REDSTONE_COMPARATOR_OFF
- REDSTONE_COMPARATOR_ON
- - FENCE
- - SPRUCE_FENCE
- - BIRCH_FENCE
- - JUNGLE_FENCE
- - DARK_OAK_FENCE
- - ACACIA_FENCE
- - NETHER_FENCE
- - BREWING_STAND
- - CAULDRON
- - LEGACY_SIGN_POST
- - LEGACY_WALL_SIGN
- - LEGACY_SIGN
- - ACACIA_SIGN
- - ACACIA_WALL_SIGN
- - BIRCH_SIGN
- - BIRCH_WALL_SIGN
- - DARK_OAK_SIGN
- - DARK_OAK_WALL_SIGN
- - JUNGLE_SIGN
- - JUNGLE_WALL_SIGN
- - OAK_SIGN
- - OAK_WALL_SIGN
- - SPRUCE_SIGN
- - SPRUCE_WALL_SIGN
- LEVER
- - BLACK_SHULKER_BOX
- - BLUE_SHULKER_BOX
- - BROWN_SHULKER_BOX
- - CYAN_SHULKER_BOX
- - GRAY_SHULKER_BOX
- - GREEN_SHULKER_BOX
- - LIGHT_BLUE_SHULKER_BOX
- - LIME_SHULKER_BOX
- - MAGENTA_SHULKER_BOX
- - ORANGE_SHULKER_BOX
- - PINK_SHULKER_BOX
- - PURPLE_SHULKER_BOX
- - RED_SHULKER_BOX
- - SILVER_SHULKER_BOX
- - WHITE_SHULKER_BOX
- - YELLOW_SHULKER_BOX
- DAYLIGHT_DETECTOR_INVERTED
- DAYLIGHT_DETECTOR
- - BARREL
- - BLAST_FURNACE
- - SMOKER
- CARTOGRAPHY_TABLE
- - COMPOSTER
+ - ANVIL
+ - CHIPPED_ANVIL
+ - DAMAGED_ANVIL
- GRINDSTONE
- - LECTERN
- LOOM
- STONECUTTER
- BELL
+ - SMITHING_TABLE
diff --git a/src/resources/plugin.yml b/src/resources/plugin.yml
index f0f3056..fb7e64a 100644
--- a/src/resources/plugin.yml
+++ b/src/resources/plugin.yml
@@ -2,4 +2,4 @@ name: ArmorEquipEvent
main: com.codingforcookies.armorequip.Main
version: 1.7.6-SNAPSHOT
author: CodingForCookies
-api-version: "1.14"
\ No newline at end of file
+api-version: "1.16"
\ No newline at end of file