mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 15:49:00 +01:00
898b8957a8
This branch/commit is only useful to those who purely use a clean Bukkit/Spigot/Paper API and does not use NMS/OBC references. This will let you start updating your plugin to the latest 1.13 builds of Bukkit Preview (4 as of now) Note that this release is not final!!! API breakages may occur! It is up to you if you find use out of this work.
148 lines
No EOL
4.5 KiB
Diff
148 lines
No EOL
4.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: pkt77 <parkerkt77@gmail.com>
|
|
Date: Fri, 10 Nov 2017 23:45:59 -0500
|
|
Subject: [PATCH] Add PlayerArmorChangeEvent
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerArmorChangeEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerArmorChangeEvent.java
|
|
new file mode 100644
|
|
index 00000000..0783ac82
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerArmorChangeEvent.java
|
|
@@ -0,0 +0,0 @@
|
|
+package com.destroystokyo.paper.event.player;
|
|
+
|
|
+import org.bukkit.Material;
|
|
+import org.bukkit.entity.Player;
|
|
+import org.bukkit.event.HandlerList;
|
|
+import org.bukkit.event.player.PlayerEvent;
|
|
+import org.bukkit.inventory.ItemStack;
|
|
+
|
|
+import javax.annotation.Nonnull;
|
|
+import javax.annotation.Nullable;
|
|
+import java.util.Arrays;
|
|
+import java.util.Collections;
|
|
+import java.util.HashSet;
|
|
+import java.util.Set;
|
|
+
|
|
+import static org.bukkit.Material.*;
|
|
+
|
|
+/**
|
|
+ * Called when the player themselves change their armor items
|
|
+ * <p>
|
|
+ * Not currently called for environmental factors though it <strong>MAY BE IN THE FUTURE</strong>
|
|
+ */
|
|
+public class PlayerArmorChangeEvent extends PlayerEvent {
|
|
+ private static final HandlerList HANDLERS = new HandlerList();
|
|
+
|
|
+ private final SlotType slotType;
|
|
+ private final ItemStack oldItem;
|
|
+ private final ItemStack newItem;
|
|
+
|
|
+ public PlayerArmorChangeEvent(Player player, SlotType slotType, ItemStack oldItem, ItemStack newItem) {
|
|
+ super(player);
|
|
+ this.slotType = slotType;
|
|
+ this.oldItem = oldItem;
|
|
+ this.newItem = newItem;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the type of slot being altered.
|
|
+ *
|
|
+ * @return type of slot being altered
|
|
+ */
|
|
+ @Nonnull
|
|
+ public SlotType getSlotType() {
|
|
+ return this.slotType;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the existing item that's being replaced
|
|
+ *
|
|
+ * @return old item
|
|
+ */
|
|
+ @Nullable
|
|
+ public ItemStack getOldItem() {
|
|
+ return this.oldItem;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the new item that's replacing the old
|
|
+ *
|
|
+ * @return new item
|
|
+ */
|
|
+ @Nullable
|
|
+ public ItemStack getNewItem() {
|
|
+ return this.newItem;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public String toString() {
|
|
+ return "ArmorChangeEvent{" + "player=" + player + ", slotType=" + slotType + ", oldItem=" + oldItem + ", newItem=" + newItem + '}';
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public HandlerList getHandlers() {
|
|
+ return HANDLERS;
|
|
+ }
|
|
+
|
|
+ public static HandlerList getHandlerList() {
|
|
+ return HANDLERS;
|
|
+ }
|
|
+
|
|
+ public enum SlotType {
|
|
+ HEAD(DIAMOND_HELMET, GOLDEN_HELMET, IRON_HELMET, CHAINMAIL_HELMET, LEATHER_HELMET, PUMPKIN, JACK_O_LANTERN),
|
|
+ CHEST(DIAMOND_CHESTPLATE, GOLDEN_CHESTPLATE, IRON_CHESTPLATE, CHAINMAIL_CHESTPLATE, LEATHER_CHESTPLATE, ELYTRA),
|
|
+ LEGS(DIAMOND_LEGGINGS, GOLDEN_LEGGINGS, IRON_LEGGINGS, CHAINMAIL_LEGGINGS, LEATHER_LEGGINGS),
|
|
+ FEET(DIAMOND_BOOTS, GOLDEN_BOOTS, IRON_BOOTS, CHAINMAIL_BOOTS, LEATHER_BOOTS);
|
|
+
|
|
+ private final Set<Material> mutableTypes = new HashSet<>();
|
|
+ private Set<Material> immutableTypes;
|
|
+
|
|
+ SlotType(Material... types) {
|
|
+ this.mutableTypes.addAll(Arrays.asList(types));
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets an immutable set of all allowed material types that can be placed in an
|
|
+ * armor slot.
|
|
+ *
|
|
+ * @return immutable set of material types
|
|
+ */
|
|
+ @Nonnull
|
|
+ public Set<Material> getTypes() {
|
|
+ if (immutableTypes == null) {
|
|
+ immutableTypes = Collections.unmodifiableSet(mutableTypes);
|
|
+ }
|
|
+
|
|
+ return immutableTypes;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets the type of slot via the specified material
|
|
+ *
|
|
+ * @param material material to get slot by
|
|
+ * @return slot type the material will go in, or null if it won't
|
|
+ */
|
|
+ @Nullable
|
|
+ public static SlotType getByMaterial(Material material) {
|
|
+ for (SlotType slotType : values()) {
|
|
+ if (slotType.getTypes().contains(material)) {
|
|
+ return slotType;
|
|
+ }
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Gets whether or not this material can be equipped to a slot
|
|
+ *
|
|
+ * @param material material to check
|
|
+ * @return whether or not this material can be equipped
|
|
+ */
|
|
+ public static boolean isEquipable(Material material) {
|
|
+ return getByMaterial(material) != null;
|
|
+ }
|
|
+ }
|
|
+}
|
|
--
|