Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,10 @@ public boolean supportsOrdering() {
Comparators.registerComparator(Slot.class, Slot.class, new Comparator<Slot, Slot>() {

@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));
Comment thread
Fusezion marked this conversation as resolved.
}

});
Expand Down
13 changes: 5 additions & 8 deletions src/main/java/ch/njol/skript/util/slot/CursorSlot.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -42,8 +41,7 @@ public Player getPlayer() {
}

@Override
@Nullable
public ItemStack getItem() {
public @Nullable ItemStack getItem() {
if (eventItemStack != null)
return eventItemStack;
return player.getItemOnCursor();
Expand Down Expand Up @@ -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
Expand Down
20 changes: 11 additions & 9 deletions src/main/java/ch/njol/skript/util/slot/DisplayEntitySlot.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand All @@ -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
Expand Down
30 changes: 17 additions & 13 deletions src/main/java/ch/njol/skript/util/slot/DroppedItemSlot.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand All @@ -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());
}

}
101 changes: 49 additions & 52 deletions src/main/java/ch/njol/skript/util/slot/EquipmentSlot.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
}
};

Expand All @@ -118,30 +112,33 @@ 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<org.bukkit.inventory.EquipmentSlot, Integer> BUKKIT_SLOT_INDICES = new HashMap<>();
private static final Map<Integer, org.bukkit.inventory.EquipmentSlot> BUKKIT_SLOT_INDICES_REVERSED = new HashMap<>();

static {
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);
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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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());
}
Expand Down
Loading