From 43e4d667e2f6bd2a837a6b94f8b9ff7d3e828025 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:39:57 -0500 Subject: [PATCH 1/7] Initial Commit --- .../classes/data/BukkitEventValues.java | 3 +- .../skript/expressions/ExprArmorSlot.java | 22 ++-- .../ch/njol/skript/expressions/ExprTool.java | 2 +- .../njol/skript/util/slot/EquipmentSlot.java | 118 +++++++++++++----- 4 files changed, 97 insertions(+), 48 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java index 503baf87877..2dc0f36e311 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java @@ -630,8 +630,7 @@ else if (hand == EquipmentSlot.OFF_HAND) if (equipment == null || hand == null) return null; return new ch.njol.skript.util.slot.EquipmentSlot(equipment, - (hand == EquipmentSlot.HAND) ? ch.njol.skript.util.slot.EquipmentSlot.EquipSlot.TOOL - : ch.njol.skript.util.slot.EquipmentSlot.EquipSlot.OFF_HAND); + (hand == EquipmentSlot.HAND) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND); }); // PlayerItemHeldEvent diff --git a/src/main/java/ch/njol/skript/expressions/ExprArmorSlot.java b/src/main/java/ch/njol/skript/expressions/ExprArmorSlot.java index 1d700b3fb06..ea0a6a6113c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprArmorSlot.java +++ b/src/main/java/ch/njol/skript/expressions/ExprArmorSlot.java @@ -1,11 +1,6 @@ package ch.njol.skript.expressions; -import ch.njol.skript.Skript; -import ch.njol.skript.doc.Description; -import ch.njol.skript.doc.Examples; -import ch.njol.skript.doc.Keywords; -import ch.njol.skript.doc.Name; -import ch.njol.skript.doc.Since; +import ch.njol.skript.doc.*; import ch.njol.skript.expressions.base.PropertyExpression; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; @@ -19,7 +14,10 @@ import org.bukkit.inventory.EntityEquipment; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; import java.util.stream.Stream; @Name("Armor Slot") @@ -76,13 +74,13 @@ protected Slot[] get(Event event, LivingEntity[] source) { if (isBody) { if (!bodyEntities.contains(equipment.getHolder().getType().getEntityClass())) return null; - return Stream.of(new EquipmentSlot(equipment, EquipSlot.BODY, explicitSlot)); + return Stream.of(new EquipmentSlot(equipment, org.bukkit.inventory.EquipmentSlot.BODY, explicitSlot)); } return Stream.of( - new EquipmentSlot(equipment, EquipSlot.HELMET, explicitSlot), - new EquipmentSlot(equipment, EquipSlot.CHESTPLATE, explicitSlot), - new EquipmentSlot(equipment, EquipSlot.LEGGINGS, explicitSlot), - new EquipmentSlot(equipment, EquipSlot.BOOTS, explicitSlot) + new EquipmentSlot(equipment, org.bukkit.inventory.EquipmentSlot.HEAD, explicitSlot), + new EquipmentSlot(equipment, org.bukkit.inventory.EquipmentSlot.CHEST, explicitSlot), + new EquipmentSlot(equipment, org.bukkit.inventory.EquipmentSlot.LEGS, explicitSlot), + new EquipmentSlot(equipment, org.bukkit.inventory.EquipmentSlot.FEET, explicitSlot) ); }) .toArray(Slot[]::new); diff --git a/src/main/java/ch/njol/skript/expressions/ExprTool.java b/src/main/java/ch/njol/skript/expressions/ExprTool.java index 39b1eecee24..f1ac902bf2b 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprTool.java +++ b/src/main/java/ch/njol/skript/expressions/ExprTool.java @@ -88,7 +88,7 @@ public void setItem(final @Nullable ItemStack item) { EntityEquipment equipment = entity.getEquipment(); if (equipment == null) return null; - return new EquipmentSlot(equipment, offHand ? EquipmentSlot.EquipSlot.OFF_HAND : EquipmentSlot.EquipSlot.TOOL) { + return new EquipmentSlot(equipment, offHand ? org.bukkit.inventory.EquipmentSlot.OFF_HAND : org.bukkit.inventory.EquipmentSlot.HAND) { @Override public String toString(@Nullable Event event, boolean debug) { String time = getTime() == 1 ? "future " : getTime() == -1 ? "former " : ""; diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java index a5d6ee21e0e..af87e7faef3 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -1,7 +1,7 @@ package ch.njol.skript.util.slot; -import java.util.Locale; - +import ch.njol.skript.bukkitutil.PlayerUtils; +import ch.njol.skript.registrations.Classes; import org.bukkit.entity.Entity; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; @@ -10,14 +10,17 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; -import ch.njol.skript.bukkitutil.PlayerUtils; -import ch.njol.skript.registrations.Classes; +import java.util.Locale; /** * Represents equipment slot of an entity. */ public class EquipmentSlot extends SlotWithIndex { - + + /** + * @deprecated Use {@link org.bukkit.inventory.EquipmentSlot}, {@link EntityEquipment} instead + */ + @Deprecated public enum EquipSlot { TOOL { @Override @@ -124,27 +127,54 @@ public void set(EntityEquipment equipment, @Nullable ItemStack item) { } private static final EquipSlot[] values = EquipSlot.values(); + private static final org.bukkit.inventory.EquipmentSlot[] EQUIPMENT_VALUES = org.bukkit.inventory.EquipmentSlot.values(); - private final EntityEquipment e; - private final EquipSlot slot; + private final EntityEquipment entityEquipment; + private EquipSlot skriptSlot; private final int slotIndex; private final boolean slotToString; - - public EquipmentSlot(final EntityEquipment e, final EquipSlot slot, final boolean slotToString) { - this.e = e; + private org.bukkit.inventory.EquipmentSlot bukkitSlot; + + /** + * @deprecated Use {@link EquipmentSlot#EquipmentSlot(EntityEquipment, org.bukkit.inventory.EquipmentSlot, boolean)} instead + */ + @Deprecated + public EquipmentSlot(EntityEquipment entityEquipment, EquipSlot skriptSlot, boolean slotToString) { + this.entityEquipment = entityEquipment; int slotIndex = -1; - if (slot == EquipSlot.TOOL) { - Entity holder = e.getHolder(); + if (skriptSlot == EquipSlot.TOOL) { + Entity holder = entityEquipment.getHolder(); if (holder instanceof Player) slotIndex = ((Player) holder).getInventory().getHeldItemSlot(); } this.slotIndex = slotIndex; - this.slot = slot; + this.skriptSlot = skriptSlot; this.slotToString = slotToString; } - - public EquipmentSlot(final EntityEquipment e, final EquipSlot slot) { - this(e, slot, false); + + /** + * @deprecated Use {@link EquipmentSlot#EquipmentSlot(EntityEquipment, org.bukkit.inventory.EquipmentSlot)} instead + */ + @Deprecated + public EquipmentSlot(EntityEquipment entityEquipment, EquipSlot skriptSlot) { + this(entityEquipment, skriptSlot, false); + } + + public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot skriptSlot, boolean slotToString) { + this.entityEquipment = equipment; + int slotIndex = -1; + if (skriptSlot == org.bukkit.inventory.EquipmentSlot.HAND) { + Entity holder = equipment.getHolder(); + if (holder instanceof Player player) + slotIndex = player.getInventory().getHeldItemSlot(); + } + this.slotIndex = slotIndex; + this.bukkitSlot = skriptSlot; + this.slotToString = slotToString; + } + + public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot skriptSlot) { + this(equipment, skriptSlot, false); } @SuppressWarnings("null") @@ -154,34 +184,39 @@ public EquipmentSlot(HumanEntity holder, int index) { * So this math trick gets us the EquipSlot from inventory slot index * slotToString: Referring to numeric slot id, right? */ - this(holder.getEquipment(), values[41 - index], true); + this(holder.getEquipment(), EQUIPMENT_VALUES[41 - index], true); } @Override - @Nullable - public ItemStack getItem() { - return slot.get(e); + public @Nullable ItemStack getItem() { + if (skriptSlot != null) + return skriptSlot.get(entityEquipment); + return entityEquipment.getItem(bukkitSlot); } @Override - public void setItem(final @Nullable ItemStack item) { - slot.set(e, item); - if (e.getHolder() instanceof Player) - PlayerUtils.updateInventory((Player) e.getHolder()); + public void setItem(@Nullable ItemStack item) { + if (skriptSlot != null) { + skriptSlot.set(entityEquipment, item); + } else { + entityEquipment.setItem(bukkitSlot, item); + } + if (entityEquipment.getHolder() instanceof Player player) + PlayerUtils.updateInventory(player); } @Override public int getAmount() { - ItemStack item = slot.get(e); + ItemStack item = getItem(); return item != null ? item.getAmount() : 0; } @Override public void setAmount(int amount) { - ItemStack item = slot.get(e); + ItemStack item = getItem(); if (item != null) item.setAmount(amount); - slot.set(e, item); + setItem(item); } /** @@ -189,21 +224,38 @@ public void setAmount(int amount) { * @return Armor slot. */ public EquipSlot getEquipSlot() { - return slot; + return skriptSlot; + } + + public org.bukkit.inventory.EquipmentSlot getBukkitSlot() { + return bukkitSlot; } @Override public int getIndex() { // use specific slotIndex if available - return slotIndex != -1 ? slotIndex : slot.slotNumber; + if (slotIndex != -1) { + return slotIndex; + } else if (skriptSlot != null) { + return skriptSlot.slotNumber; + } else { + return bukkitSlot.ordinal() + 41; + } } @Override public String toString(@Nullable Event event, boolean debug) { - if (slotToString) // Slot to string - return "the " + slot.name().toLowerCase(Locale.ENGLISH) + " of " + Classes.toString(e.getHolder()); // TODO localise? - else // Contents of slot to string - return Classes.toString(getItem()); + if (slotToString) { + StringBuilder builder = new StringBuilder("the "); + if (skriptSlot != null) { + builder.append(skriptSlot.name().toLowerCase(Locale.ENGLISH)); + } else { + builder.append(bukkitSlot.name().replace('_', ' ').toLowerCase(Locale.ENGLISH)); + } + builder.append(" of ").append(Classes.toString(entityEquipment.getHolder())); + return builder.toString(); + } + return Classes.toString(getItem()); } } From 6831b836368caab135c7d998e54429ded0ae9dac Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:56:19 -0500 Subject: [PATCH 2/7] Fix Constructor Vars --- .../java/ch/njol/skript/util/slot/EquipmentSlot.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java index af87e7faef3..29be19ba547 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -160,21 +160,21 @@ public EquipmentSlot(EntityEquipment entityEquipment, EquipSlot skriptSlot) { this(entityEquipment, skriptSlot, false); } - public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot skriptSlot, boolean slotToString) { + public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot bukkitSlot, boolean slotToString) { this.entityEquipment = equipment; int slotIndex = -1; - if (skriptSlot == org.bukkit.inventory.EquipmentSlot.HAND) { + if (bukkitSlot == org.bukkit.inventory.EquipmentSlot.HAND) { Entity holder = equipment.getHolder(); if (holder instanceof Player player) slotIndex = player.getInventory().getHeldItemSlot(); } this.slotIndex = slotIndex; - this.bukkitSlot = skriptSlot; + this.bukkitSlot = bukkitSlot; this.slotToString = slotToString; } - public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot skriptSlot) { - this(equipment, skriptSlot, false); + public EquipmentSlot(EntityEquipment equipment, org.bukkit.inventory.EquipmentSlot bukkitSlot) { + this(equipment, bukkitSlot, false); } @SuppressWarnings("null") From 07d7df36ff062c2b5cadf486c415e43af2898dc4 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 19 Jan 2025 16:00:58 -0500 Subject: [PATCH 3/7] Fix getIndex --- src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java index 29be19ba547..d117876dd1f 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -239,7 +239,7 @@ public int getIndex() { } else if (skriptSlot != null) { return skriptSlot.slotNumber; } else { - return bukkitSlot.ordinal() + 41; + return bukkitSlot.ordinal() + 36; } } From b1eb540789cb28bee460ab8b915ba5db67e5c0f8 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 19 Jan 2025 16:15:06 -0500 Subject: [PATCH 4/7] Requested Changes + Index Fix --- .../njol/skript/util/slot/EquipmentSlot.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java index d117876dd1f..7d42fd19abf 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -10,7 +10,9 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; /** * Represents equipment slot of an entity. @@ -126,8 +128,18 @@ public void set(EntityEquipment equipment, @Nullable ItemStack item) { } - private static final EquipSlot[] values = EquipSlot.values(); - private static final org.bukkit.inventory.EquipmentSlot[] EQUIPMENT_VALUES = org.bukkit.inventory.EquipmentSlot.values(); + private static final EquipSlot[] SKRIPT_VALUES = EquipSlot.values(); + private static final org.bukkit.inventory.EquipmentSlot[] BUKKIT_VALUES = org.bukkit.inventory.EquipmentSlot.values(); + + private static final Map bukkitSlotIndex = new HashMap<>(); + + static { + bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.FEET, 36); + bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.LEGS, 37); + bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.CHEST, 38); + bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.HEAD, 39); + bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.OFF_HAND, 40); + } private final EntityEquipment entityEquipment; private EquipSlot skriptSlot; @@ -184,7 +196,7 @@ public EquipmentSlot(HumanEntity holder, int index) { * So this math trick gets us the EquipSlot from inventory slot index * slotToString: Referring to numeric slot id, right? */ - this(holder.getEquipment(), EQUIPMENT_VALUES[41 - index], true); + this(holder.getEquipment(), BUKKIT_VALUES[41 - index], true); } @Override @@ -220,14 +232,18 @@ public void setAmount(int amount) { } /** - * Gets underlying armor slot enum. - * @return Armor slot. + * @deprecated Use {@link EquipmentSlot#EquipmentSlot(EntityEquipment, org.bukkit.inventory.EquipmentSlot)} and {@link #getEquipmentSlot()} */ + @Deprecated public EquipSlot getEquipSlot() { return skriptSlot; } - public org.bukkit.inventory.EquipmentSlot getBukkitSlot() { + /** + * Get the corresponding {@link org.bukkit.inventory.EquipmentSlot} + * @return + */ + public org.bukkit.inventory.EquipmentSlot getEquipmentSlot() { return bukkitSlot; } @@ -238,9 +254,10 @@ public int getIndex() { return slotIndex; } else if (skriptSlot != null) { return skriptSlot.slotNumber; - } else { - return bukkitSlot.ordinal() + 36; + } else if (bukkitSlotIndex.containsKey(bukkitSlot)) { + return bukkitSlotIndex.get(bukkitSlot); } + return -1; } @Override From 8f46ee0c4ad674e8025bd54c9caf98b81590d5d0 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Sun, 19 Jan 2025 16:25:06 -0500 Subject: [PATCH 5/7] Map Name Change --- .../ch/njol/skript/util/slot/EquipmentSlot.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java index 7d42fd19abf..5d76ec24d44 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -131,14 +131,14 @@ public void set(EntityEquipment equipment, @Nullable ItemStack item) { private static final EquipSlot[] SKRIPT_VALUES = EquipSlot.values(); private static final org.bukkit.inventory.EquipmentSlot[] BUKKIT_VALUES = org.bukkit.inventory.EquipmentSlot.values(); - private static final Map bukkitSlotIndex = new HashMap<>(); + private static final Map BUKKIT_SLOT_INDICES = new HashMap<>(); static { - bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.FEET, 36); - bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.LEGS, 37); - bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.CHEST, 38); - bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.HEAD, 39); - bukkitSlotIndex.put(org.bukkit.inventory.EquipmentSlot.OFF_HAND, 40); + BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.FEET, 36); + BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.LEGS, 37); + BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.CHEST, 38); + BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.HEAD, 39); + BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.OFF_HAND, 40); } private final EntityEquipment entityEquipment; @@ -254,8 +254,8 @@ public int getIndex() { return slotIndex; } else if (skriptSlot != null) { return skriptSlot.slotNumber; - } else if (bukkitSlotIndex.containsKey(bukkitSlot)) { - return bukkitSlotIndex.get(bukkitSlot); + } else if (BUKKIT_SLOT_INDICES.containsKey(bukkitSlot)) { + return BUKKIT_SLOT_INDICES.get(bukkitSlot); } return -1; } From 2d3dc2d836c125026fe0cc6e59f68f48aa95fd93 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Tue, 4 Feb 2025 02:44:44 -0500 Subject: [PATCH 6/7] Remove ternary --- .../java/ch/njol/skript/classes/data/BukkitEventValues.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java index 2dc0f36e311..ff24fe78a51 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java @@ -629,8 +629,9 @@ else if (hand == EquipmentSlot.OFF_HAND) EntityEquipment equipment = event.getEntity().getEquipment(); if (equipment == null || hand == null) return null; - return new ch.njol.skript.util.slot.EquipmentSlot(equipment, - (hand == EquipmentSlot.HAND) ? EquipmentSlot.HAND : EquipmentSlot.OFF_HAND); + if (hand == EquipmentSlot.HAND) + return new ch.njol.skript.util.slot.EquipmentSlot(equipment, EquipmentSlot.HAND); + return new ch.njol.skript.util.slot.EquipmentSlot(equipment, EquipmentSlot.OFF_HAND); }); // PlayerItemHeldEvent From 46b8e6f9895a1675fbe751b3405694d7cbfdde50 Mon Sep 17 00:00:00 2001 From: SirSmurfy2 <82696841+TheAbsolutionism@users.noreply.github.com> Date: Wed, 5 Feb 2025 05:08:11 -0500 Subject: [PATCH 7/7] Remove 'if' --- .../java/ch/njol/skript/classes/data/BukkitEventValues.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java index ff24fe78a51..90b60276615 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java @@ -627,11 +627,7 @@ else if (hand == EquipmentSlot.OFF_HAND) EventValues.registerEventValue(EntityResurrectEvent.class, Slot.class, event -> { EquipmentSlot hand = event.getHand(); EntityEquipment equipment = event.getEntity().getEquipment(); - if (equipment == null || hand == null) - return null; - if (hand == EquipmentSlot.HAND) - return new ch.njol.skript.util.slot.EquipmentSlot(equipment, EquipmentSlot.HAND); - return new ch.njol.skript.util.slot.EquipmentSlot(equipment, EquipmentSlot.OFF_HAND); + return new ch.njol.skript.util.slot.EquipmentSlot(equipment, hand); }); // PlayerItemHeldEvent