diff --git a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java index fd8f6ecb8fd..e07ab87a4af 100644 --- a/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java +++ b/src/main/java/ch/njol/skript/classes/data/DefaultComparators.java @@ -92,17 +92,10 @@ public boolean supportsOrdering() { Comparators.registerComparator(Slot.class, Slot.class, new Comparator() { @Override - public Relation compare(Slot o1, Slot o2) { - if (o1 instanceof EquipmentSlot != o2 instanceof EquipmentSlot) + public Relation compare(Slot slot1, Slot slot2) { + if (slot1 instanceof EquipmentSlot != slot2 instanceof EquipmentSlot) return Relation.NOT_EQUAL; - if (o1.isSameSlot(o2)) - return Relation.EQUAL; - return Relation.NOT_EQUAL; - } - - @Override - public boolean supportsOrdering() { - return false; + return Relation.get(slot1.isSameSlot(slot2)); } }); diff --git a/src/main/java/ch/njol/skript/util/slot/CursorSlot.java b/src/main/java/ch/njol/skript/util/slot/CursorSlot.java index c0e9b08363a..b4473d1c4cd 100644 --- a/src/main/java/ch/njol/skript/util/slot/CursorSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/CursorSlot.java @@ -17,8 +17,7 @@ public class CursorSlot extends Slot { /** * Represents the cursor as it was used in an InventoryClickEvent. */ - @Nullable - private final ItemStack eventItemStack; + private final @Nullable ItemStack eventItemStack; private final Player player; public CursorSlot(Player player) { @@ -42,8 +41,7 @@ public Player getPlayer() { } @Override - @Nullable - public ItemStack getItem() { + public @Nullable ItemStack getItem() { if (eventItemStack != null) return eventItemStack; return player.getItemOnCursor(); @@ -71,10 +69,9 @@ public boolean isInventoryClick() { @Override public boolean isSameSlot(Slot slot) { - if (!(slot instanceof CursorSlot)) - return false; - CursorSlot cursor = (CursorSlot) slot; - return cursor.getPlayer().equals(this.player) && cursor.isInventoryClick() == isInventoryClick(); + return slot instanceof CursorSlot cursorSlot + && cursorSlot.getPlayer().equals(this.player) + && cursorSlot.isInventoryClick() == isInventoryClick(); } @Override diff --git a/src/main/java/ch/njol/skript/util/slot/DisplayEntitySlot.java b/src/main/java/ch/njol/skript/util/slot/DisplayEntitySlot.java index c40a3275404..c11d8375766 100644 --- a/src/main/java/ch/njol/skript/util/slot/DisplayEntitySlot.java +++ b/src/main/java/ch/njol/skript/util/slot/DisplayEntitySlot.java @@ -7,16 +7,15 @@ import org.jetbrains.annotations.Nullable; public class DisplayEntitySlot extends Slot { - - private ItemDisplay display; - + + private final ItemDisplay display; + public DisplayEntitySlot(ItemDisplay display) { this.display = display; } @Override - @Nullable - public ItemStack getItem() { + public @Nullable ItemStack getItem() { return display.getItemStack(); } @@ -33,11 +32,14 @@ public int getAmount() { @Override public void setAmount(int amount) {} + public ItemDisplay getItemDisplay() { + return display; + } + @Override - public boolean isSameSlot(Slot other) { - if (other instanceof DisplayEntitySlot) // Same display - return ((DisplayEntitySlot) other).display.equals(display); - return false; + public boolean isSameSlot(Slot slot) { + return slot instanceof DisplayEntitySlot displayEntitySlot + && displayEntitySlot.getItemDisplay().equals(display); } @Override diff --git a/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java b/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java index 3af5bb9eb65..9fe7a701422 100644 --- a/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java @@ -12,15 +12,14 @@ */ public class DroppedItemSlot extends Slot { - private Item entity; - + private final Item entity; + public DroppedItemSlot(Item item) { this.entity = item; } - + @Override - @Nullable - public ItemStack getItem() { + public @Nullable ItemStack getItem() { return entity.getItemStack(); } @@ -29,25 +28,30 @@ public void setItem(@Nullable ItemStack item) { assert item != null; entity.setItemStack(item); } - + @Override public int getAmount() { return entity.getItemStack().getAmount(); } - + @Override public void setAmount(int amount) { entity.getItemStack().setAmount(amount); } - + + public Item getItemEntity() { + return entity; + } + @Override - public boolean isSameSlot(Slot o) { - return o instanceof DroppedItemSlot && ((DroppedItemSlot) o).entity.equals(entity); + public boolean isSameSlot(Slot slot) { + return slot instanceof DroppedItemSlot droppedItemSlot + && droppedItemSlot.getItemEntity().equals(entity); } - + @Override - public String toString(@Nullable Event e, boolean debug) { + public String toString(@Nullable Event event, boolean debug) { return Classes.toString(getItem()); } - + } 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 43560ef408f..d14a2718c3b 100644 --- a/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java @@ -1,6 +1,7 @@ package ch.njol.skript.util.slot; import ch.njol.skript.bukkitutil.PlayerUtils; +import ch.njol.skript.lang.SyntaxStringBuilder; import ch.njol.skript.registrations.Classes; import com.google.common.base.Preconditions; import org.bukkit.entity.Entity; @@ -28,88 +29,81 @@ public class EquipmentSlot extends SlotWithIndex { public enum EquipSlot { TOOL { @Override - @Nullable - public ItemStack get(final EntityEquipment e) { - return e.getItemInMainHand(); + public ItemStack get(final EntityEquipment entityEquipment) { + return entityEquipment.getItemInMainHand(); } @Override - public void set(final EntityEquipment e, final @Nullable ItemStack item) { - e.setItemInMainHand(item); + public void set(final EntityEquipment entityEquipment, final @Nullable ItemStack item) { + entityEquipment.setItemInMainHand(item); } }, OFF_HAND(40) { @Override - @Nullable - public ItemStack get(EntityEquipment e) { - return e.getItemInOffHand(); + public ItemStack get(EntityEquipment entityEquipment) { + return entityEquipment.getItemInOffHand(); } @Override - public void set(EntityEquipment e, @Nullable ItemStack item) { - e.setItemInOffHand(item); + public void set(EntityEquipment entityEquipment, @Nullable ItemStack item) { + entityEquipment.setItemInOffHand(item); } }, HELMET(39) { @Override - @Nullable - public ItemStack get(final EntityEquipment e) { - return e.getHelmet(); + public @Nullable ItemStack get(final EntityEquipment entityEquipment) { + return entityEquipment.getHelmet(); } @Override - public void set(final EntityEquipment e, final @Nullable ItemStack item) { - e.setHelmet(item); + public void set(final EntityEquipment entityEquipment, final @Nullable ItemStack item) { + entityEquipment.setHelmet(item); } }, CHESTPLATE(38) { @Override - @Nullable - public ItemStack get(final EntityEquipment e) { - return e.getChestplate(); + public @Nullable ItemStack get(final EntityEquipment entityEquipment) { + return entityEquipment.getChestplate(); } @Override - public void set(final EntityEquipment e, final @Nullable ItemStack item) { - e.setChestplate(item); + public void set(final EntityEquipment entityEquipment, final @Nullable ItemStack item) { + entityEquipment.setChestplate(item); } }, LEGGINGS(37) { @Override - @Nullable - public ItemStack get(final EntityEquipment e) { - return e.getLeggings(); + public @Nullable ItemStack get(final EntityEquipment entityEquipment) { + return entityEquipment.getLeggings(); } @Override - public void set(final EntityEquipment e, final @Nullable ItemStack item) { - e.setLeggings(item); + public void set(final EntityEquipment entityEquipment, final @Nullable ItemStack item) { + entityEquipment.setLeggings(item); } }, BOOTS(36) { @Override - @Nullable - public ItemStack get(final EntityEquipment e) { - return e.getBoots(); + public @Nullable ItemStack get(final EntityEquipment entityEquipment) { + return entityEquipment.getBoots(); } @Override - public void set(final EntityEquipment e, final @Nullable ItemStack item) { - e.setBoots(item); + public void set(final EntityEquipment entityEquipment, final @Nullable ItemStack item) { + entityEquipment.setBoots(item); } }, - BODY() { @Override - public @Nullable ItemStack get(EntityEquipment equipment) { - return equipment.getItem(org.bukkit.inventory.EquipmentSlot.BODY); + public ItemStack get(EntityEquipment entityEquipment) { + return entityEquipment.getItem(org.bukkit.inventory.EquipmentSlot.BODY); } @Override - public void set(EntityEquipment equipment, @Nullable ItemStack item) { - equipment.setItem(org.bukkit.inventory.EquipmentSlot.BODY, item); + public void set(EntityEquipment entityEquipment, @Nullable ItemStack item) { + entityEquipment.setItem(org.bukkit.inventory.EquipmentSlot.BODY, item); } }; @@ -118,21 +112,19 @@ public void set(EntityEquipment equipment, @Nullable ItemStack item) { EquipSlot() { slotNumber = -1; } - + EquipSlot(int number) { slotNumber = number; } - - @Nullable - public abstract ItemStack get(EntityEquipment e); - - public abstract void set(EntityEquipment e, @Nullable ItemStack item); - - } - private static final org.bukkit.inventory.EquipmentSlot[] BUKKIT_VALUES = org.bukkit.inventory.EquipmentSlot.values(); + public abstract @Nullable ItemStack get(EntityEquipment entityEquipment); + + public abstract void set(EntityEquipment entityEquipment, @Nullable ItemStack item); + + } private static final Map BUKKIT_SLOT_INDICES = new HashMap<>(); + private static final Map BUKKIT_SLOT_INDICES_REVERSED = new HashMap<>(); static { BUKKIT_SLOT_INDICES.put(org.bukkit.inventory.EquipmentSlot.FEET, 36); @@ -140,8 +132,13 @@ public void set(EntityEquipment equipment, @Nullable ItemStack item) { 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); + BUKKIT_SLOT_INDICES_REVERSED.put(36, org.bukkit.inventory.EquipmentSlot.FEET); + BUKKIT_SLOT_INDICES_REVERSED.put(37, org.bukkit.inventory.EquipmentSlot.LEGS); + BUKKIT_SLOT_INDICES_REVERSED.put(38, org.bukkit.inventory.EquipmentSlot.CHEST); + BUKKIT_SLOT_INDICES_REVERSED.put(39, org.bukkit.inventory.EquipmentSlot.HEAD); + BUKKIT_SLOT_INDICES_REVERSED.put(40, org.bukkit.inventory.EquipmentSlot.OFF_HAND); } - + private final EntityEquipment entityEquipment; private EquipSlot skriptSlot; private final int slotIndex; @@ -200,8 +197,7 @@ public EquipmentSlot(@NotNull HumanEntity holder, int index) { * So this math trick gets us the EquipSlot from inventory slot index * slotToString: Referring to numeric slot id, right? */ - //noinspection DataFlowIssue - this(holder.getEquipment(), BUKKIT_VALUES[41 - index], true); + this(holder.getEquipment(), BUKKIT_SLOT_INDICES_REVERSED.get(index), true); } @Override @@ -268,14 +264,15 @@ public int getIndex() { @Override public String toString(@Nullable Event event, boolean debug) { if (slotToString) { - StringBuilder builder = new StringBuilder("the "); + SyntaxStringBuilder syntaxBuilder = new SyntaxStringBuilder(event, debug); + syntaxBuilder.append("the "); if (skriptSlot != null) { - builder.append(skriptSlot.name().toLowerCase(Locale.ENGLISH)); + syntaxBuilder.append(skriptSlot.name().toLowerCase(Locale.ENGLISH)); } else { - builder.append(bukkitSlot.name().replace('_', ' ').toLowerCase(Locale.ENGLISH)); + syntaxBuilder.append(bukkitSlot.name().replace('_', ' ').toLowerCase(Locale.ENGLISH)); } - builder.append(" of ").append(Classes.toString(entityEquipment.getHolder())); - return builder.toString(); + syntaxBuilder.append(" of ").append(Classes.toString(entityEquipment.getHolder())); + return syntaxBuilder.toString(); } return Classes.toString(getItem()); } diff --git a/src/main/java/ch/njol/skript/util/slot/InventorySlot.java b/src/main/java/ch/njol/skript/util/slot/InventorySlot.java index 7ace6271dbc..c97788bf08b 100644 --- a/src/main/java/ch/njol/skript/util/slot/InventorySlot.java +++ b/src/main/java/ch/njol/skript/util/slot/InventorySlot.java @@ -20,27 +20,27 @@ */ public class InventorySlot extends SlotWithIndex { - private final Inventory invi; + private final Inventory inventory; private final int index; private final int rawIndex; - public InventorySlot(Inventory invi, int index, int rawIndex) { - assert invi != null; + public InventorySlot(Inventory inventory, int index, int rawIndex) { + assert inventory != null; assert index >= 0; - this.invi = invi; + this.inventory = inventory; this.index = index; this.rawIndex = rawIndex; } - public InventorySlot(Inventory invi, int index) { - assert invi != null; + public InventorySlot(Inventory inventory, int index) { + assert inventory != null; assert index >= 0; - this.invi = invi; + this.inventory = inventory; this.index = rawIndex = index; } public Inventory getInventory() { - return invi; + return inventory; } @Override @@ -54,50 +54,57 @@ public int getRawIndex() { } @Override - @Nullable - public ItemStack getItem() { + public @Nullable ItemStack getItem() { if (index == -999) //Non-existent slot, e.g. Outside GUI return null; - ItemStack item = invi.getItem(index); + ItemStack item = inventory.getItem(index); return item == null ? new ItemStack(Material.AIR, 1) : item.clone(); } @Override public void setItem(final @Nullable ItemStack item) { - invi.setItem(index, item != null && item.getType() != Material.AIR ? item : null); - if (invi instanceof PlayerInventory) - PlayerUtils.updateInventory((Player) invi.getHolder()); + inventory.setItem(index, item != null && item.getType() != Material.AIR ? item : null); + if (inventory instanceof PlayerInventory) + PlayerUtils.updateInventory((Player) inventory.getHolder()); } @Override public int getAmount() { - ItemStack item = invi.getItem(index); + ItemStack item = inventory.getItem(index); return item != null ? item.getAmount() : 0; } @Override public void setAmount(int amount) { - ItemStack item = invi.getItem(index); + ItemStack item = inventory.getItem(index); if (item != null) item.setAmount(amount); - if (invi instanceof PlayerInventory) - PlayerUtils.updateInventory((Player) invi.getHolder()); + if (inventory instanceof PlayerInventory) + PlayerUtils.updateInventory((Player) inventory.getHolder()); } @Override - public String toString(@Nullable Event e, boolean debug) { - InventoryHolder holder = invi != null ? invi.getHolder() : null; + public boolean isSameSlot(Slot slot) { + if (slot instanceof InventorySlot inventorySlot) { + return inventorySlot.getInventory().equals(inventory) && inventorySlot.getIndex() == index; + } + return super.equals(slot); + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + InventoryHolder holder = inventory.getHolder(); if (holder instanceof BlockState) holder = new BlockInventoryHolder((BlockState) holder); if (holder != null) { - if (invi instanceof CraftingInventory) // 4x4 crafting grid is contained in player too! + if (inventory instanceof CraftingInventory) // 4x4 crafting grid is contained in player too! return "crafting slot " + index + " of " + Classes.toString(holder); return "inventory slot " + index + " of " + Classes.toString(holder); } - return "inventory slot " + index + " of " + Classes.toString(invi); + return "inventory slot " + index + " of " + Classes.toString(inventory); } } diff --git a/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java b/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java index a5140d1dad4..bfcea69ebf9 100644 --- a/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/ItemFrameSlot.java @@ -11,16 +11,15 @@ * Represents contents of an item frame. */ public class ItemFrameSlot extends Slot { - - private ItemFrame frame; - + + private final ItemFrame frame; + public ItemFrameSlot(ItemFrame frame) { this.frame = frame; } @Override - @Nullable - public ItemStack getItem() { + public @Nullable ItemStack getItem() { return frame.getItem(); } @@ -28,25 +27,28 @@ public ItemStack getItem() { public void setItem(@Nullable ItemStack item) { frame.setItem(item); } - + @Override public int getAmount() { return 1; } - + @Override public void setAmount(int amount) {} - + + public ItemFrame getItemFrame() { + return frame; + } + @Override - public boolean isSameSlot(Slot o) { - if (o instanceof ItemFrameSlot) // Same item frame - return ((ItemFrameSlot) o).frame.equals(frame); - return false; + public boolean isSameSlot(Slot slot) { + return slot instanceof ItemFrameSlot itemFrameSlot + && itemFrameSlot.getItemFrame().equals(frame); } @Override - public String toString(@Nullable Event e, boolean debug) { + public String toString(@Nullable Event event, boolean debug) { return Classes.toString(getItem()); } - + } diff --git a/src/main/java/ch/njol/skript/util/slot/Slot.java b/src/main/java/ch/njol/skript/util/slot/Slot.java index 515cdabfa46..68058c32e56 100644 --- a/src/main/java/ch/njol/skript/util/slot/Slot.java +++ b/src/main/java/ch/njol/skript/util/slot/Slot.java @@ -1,7 +1,5 @@ package ch.njol.skript.util.slot; -import ch.njol.skript.aliases.Aliases; -import ch.njol.skript.aliases.ItemType; import ch.njol.skript.bukkitutil.ItemUtils; import ch.njol.skript.lang.util.common.AnyAmount; import ch.njol.skript.lang.util.common.AnyNamed; @@ -22,8 +20,7 @@ public abstract class Slot implements Debuggable, AnyNamed, AnyAmount { protected Slot() {} - @Nullable - public abstract ItemStack getItem(); + public abstract @Nullable ItemStack getItem(); public abstract void setItem(final @Nullable ItemStack item); diff --git a/src/main/java/ch/njol/skript/util/slot/SlotWithIndex.java b/src/main/java/ch/njol/skript/util/slot/SlotWithIndex.java index 1fff41f286e..95cfb598e52 100644 --- a/src/main/java/ch/njol/skript/util/slot/SlotWithIndex.java +++ b/src/main/java/ch/njol/skript/util/slot/SlotWithIndex.java @@ -4,7 +4,7 @@ * Represents a slot which has index. */ public abstract class SlotWithIndex extends Slot { - + /** * Gets an index of this slot. * @return Index of the slot. @@ -18,12 +18,11 @@ public abstract class SlotWithIndex extends Slot { public int getRawIndex() { return getIndex(); } - + @Override - public boolean isSameSlot(Slot o) { - if (o instanceof SlotWithIndex) { - return getIndex() == ((SlotWithIndex) o).getIndex(); - } - return false; + public boolean isSameSlot(Slot slot) { + return slot instanceof SlotWithIndex slotWithIndex + && getRawIndex() == slotWithIndex.getRawIndex(); } + } diff --git a/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java b/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java index e1d4444213a..cf92a189bd8 100644 --- a/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java +++ b/src/main/java/ch/njol/skript/util/slot/ThrowableProjectileSlot.java @@ -12,39 +12,44 @@ * Represents the displayed item of a throwable projectile. */ public class ThrowableProjectileSlot extends Slot { - - private ThrowableProjectile projectile; - + + private final ThrowableProjectile projectile; + public ThrowableProjectileSlot(ThrowableProjectile projectile) { this.projectile = projectile; } - + @Override public ItemStack getItem() { return projectile.getItem(); } - + @Override public void setItem(@Nullable ItemStack item) { projectile.setItem(item != null ? item : new ItemStack(Material.AIR)); } - + @Override public int getAmount() { return 1; } - + @Override public void setAmount(int amount) {} - + + public ThrowableProjectile getProjectile() { + return projectile; + } + @Override - public boolean isSameSlot(Slot o) { - return o instanceof ThrowableProjectileSlot && ((ThrowableProjectileSlot) o).projectile.equals(projectile); + public boolean isSameSlot(Slot slot) { + return slot instanceof ThrowableProjectileSlot throwableSlot + && throwableSlot.getProjectile().equals(projectile); } - + @Override - public String toString(@Nullable Event e, boolean debug) { + public String toString(@Nullable Event event, boolean debug) { return Classes.toString(getItem()); } - + }