diff --git a/eco-api/src/main/java/com/willfp/eco/core/events/ArmorChangeEvent.java b/eco-api/src/main/java/com/willfp/eco/core/events/ArmorChangeEvent.java
new file mode 100644
index 00000000..563f6357
--- /dev/null
+++ b/eco-api/src/main/java/com/willfp/eco/core/events/ArmorChangeEvent.java
@@ -0,0 +1,70 @@
+package com.willfp.eco.core.events;
+
+import lombok.Getter;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * The armor change event does> contain information about the event.
+ *
+ * Unlike {@link ArmorEquipEvent}, it is called the next tick and contains previous and current armor contents.
+ */
+public class ArmorChangeEvent extends PlayerEvent {
+ /**
+ * Bukkit parity.
+ */
+ private static final HandlerList HANDLERS = new HandlerList();
+
+ /**
+ * The armor contents before. 0 is helmet, 3 is boots.
+ */
+ @Getter
+ private final List before;
+
+ /**
+ * The armor contents after. 0 is helmet, 3 is boots.
+ */
+ @Getter
+ private final List after;
+
+ /**
+ * Create a new ArmorChangeEvent.
+ *
+ * @param player The player.
+ * @param before The armor contents before.
+ * @param after The armor contents after.
+ */
+ public ArmorChangeEvent(@NotNull final Player player,
+ @NotNull final List before,
+ @NotNull final List after) {
+ super(player);
+ this.before = before;
+ this.after = after;
+ }
+
+ /**
+ * Gets a list of handlers handling this event.
+ *
+ * @return A list of handlers handling this event.
+ */
+
+ @Override
+ @NotNull
+ public HandlerList getHandlers() {
+ return HANDLERS;
+ }
+
+ /**
+ * Bukkit parity.
+ *
+ * @return The handler list.
+ */
+ public static HandlerList getHandlerList() {
+ return HANDLERS;
+ }
+}
diff --git a/eco-api/src/main/java/com/willfp/eco/core/events/ArmorEquipEvent.java b/eco-api/src/main/java/com/willfp/eco/core/events/ArmorEquipEvent.java
index 5b824256..e1d587aa 100644
--- a/eco-api/src/main/java/com/willfp/eco/core/events/ArmorEquipEvent.java
+++ b/eco-api/src/main/java/com/willfp/eco/core/events/ArmorEquipEvent.java
@@ -15,6 +15,9 @@ import org.jetbrains.annotations.NotNull;
* so you can check a tick later to see the new contents.
*/
public class ArmorEquipEvent extends PlayerEvent {
+ /**
+ * Bukkit parity.
+ */
private static final HandlerList HANDLERS = new HandlerList();
/**
diff --git a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java
index 5e54ac4c..73e766a1 100644
--- a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java
+++ b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java
@@ -18,6 +18,7 @@ import com.willfp.eco.spigot.display.PacketSetCreativeSlot;
import com.willfp.eco.spigot.display.PacketSetSlot;
import com.willfp.eco.spigot.display.PacketWindowItems;
import com.willfp.eco.spigot.drops.CollatedRunnable;
+import com.willfp.eco.spigot.eventlisteners.ArmorChangeEventListeners;
import com.willfp.eco.spigot.eventlisteners.ArmorListener;
import com.willfp.eco.spigot.eventlisteners.DispenserArmorListener;
import com.willfp.eco.spigot.eventlisteners.EntityDeathByEntityListeners;
@@ -55,7 +56,7 @@ import java.util.List;
public abstract class EcoSpigotPlugin extends EcoPlugin {
@Getter
private static EcoSpigotPlugin instance;
-
+
public EcoSpigotPlugin() {
super(87955, 10043, "com.willfp.eco.proxy", "&a");
instance = this;
@@ -153,7 +154,8 @@ public abstract class EcoSpigotPlugin extends EcoPlugin {
new ShapedRecipeListener(this),
new PlayerJumpListeners(),
new GUIListener(this),
- new ArrowDataListener(this)
+ new ArrowDataListener(this),
+ new ArmorChangeEventListeners(this)
);
}
}
diff --git a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/eventlisteners/ArmorChangeEventListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/eventlisteners/ArmorChangeEventListeners.java
new file mode 100644
index 00000000..f7636a28
--- /dev/null
+++ b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/eventlisteners/ArmorChangeEventListeners.java
@@ -0,0 +1,41 @@
+package com.willfp.eco.spigot.eventlisteners;
+
+import com.willfp.eco.core.EcoPlugin;
+import com.willfp.eco.core.PluginDependent;
+import com.willfp.eco.core.events.ArmorChangeEvent;
+import com.willfp.eco.core.events.ArmorEquipEvent;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ArmorChangeEventListeners extends PluginDependent implements Listener {
+ /**
+ * Pass an {@link EcoPlugin} in order to interface with it.
+ *
+ * @param plugin The plugin to manage.
+ */
+ public ArmorChangeEventListeners(@NotNull final EcoPlugin plugin) {
+ super(plugin);
+ }
+
+ @EventHandler
+ public void onArmorChange(@NotNull final ArmorEquipEvent event) {
+ Player player = event.getPlayer();
+
+ List before = new ArrayList<>(Arrays.asList(player.getInventory().getArmorContents()));
+
+ this.getPlugin().getScheduler().runLater(() -> {
+ List after = new ArrayList<>(Arrays.asList(player.getInventory().getArmorContents()));
+
+ ArmorChangeEvent armorChangeEvent = new ArmorChangeEvent(player, before, after);
+ Bukkit.getPluginManager().callEvent(armorChangeEvent);
+ }, 1);
+ }
+}