Skip to content

Commit e5daaff

Browse files
committed
Start fixing inventory events
1 parent ecd7930 commit e5daaff

File tree

8 files changed

+88
-21
lines changed

8 files changed

+88
-21
lines changed

src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -694,20 +694,21 @@ public World get(final InventoryClickEvent e) {
694694
return e.getWhoClicked().getWorld();
695695
}
696696
}, 0);
697-
EventValues.registerEventValue(InventoryClickEvent.class, Slot.class, new Getter<Slot, InventoryClickEvent>() {
698-
@SuppressWarnings("null")
697+
EventValues.registerEventValue(InventoryClickEvent.class, ItemStack.class, new Getter<ItemStack, InventoryClickEvent>() {
699698
@Override
700699
@Nullable
701-
public Slot get(final InventoryClickEvent e) {
702-
return new InventorySlot(e.getInventory(), e.getSlot());
700+
public ItemStack get(final InventoryClickEvent e) {
701+
if (e instanceof CraftItemEvent)
702+
return ((CraftItemEvent) e).getRecipe().getResult();
703+
return e.getCurrentItem();
703704
}
704705
}, 0);
705-
EventValues.registerEventValue(InventoryClickEvent.class, ItemType.class, new Getter<ItemType, InventoryClickEvent>() {
706+
EventValues.registerEventValue(InventoryClickEvent.class, Slot.class, new Getter<Slot, InventoryClickEvent>() {
706707
@SuppressWarnings("null")
707708
@Override
708709
@Nullable
709-
public ItemType get(final InventoryClickEvent e) {
710-
return new ItemType(e.getCurrentItem());
710+
public Slot get(final InventoryClickEvent e) {
711+
return new InventorySlot(e.getInventory(), e.getSlot());
711712
}
712713
}, 0);
713714
EventValues.registerEventValue(InventoryClickEvent.class, InventoryAction.class, new Getter<InventoryAction, InventoryClickEvent>() {
@@ -717,14 +718,14 @@ public InventoryAction get(final InventoryClickEvent e) {
717718
return e.getAction();
718719
}
719720
}, 0);
720-
// CraftItemEvent
721-
EventValues.registerEventValue(CraftItemEvent.class, ItemStack.class, new Getter<ItemStack, CraftItemEvent>() {
722-
@Override
723-
@Nullable
724-
public ItemStack get(final CraftItemEvent e) {
725-
return e.getRecipe().getResult();
726-
}
727-
}, 0);
721+
// CraftItemEvent REMIND maybe re-add this when Skript parser is reworked?
722+
// EventValues.registerEventValue(CraftItemEvent.class, ItemStack.class, new Getter<ItemStack, CraftItemEvent>() {
723+
// @Override
724+
// @Nullable
725+
// public ItemStack get(final CraftItemEvent e) {
726+
// return e.getRecipe().getResult();
727+
// }
728+
// }, 0);
728729
// PrepareItemCraftEvent
729730
EventValues.registerEventValue(PrepareItemCraftEvent.class, Slot.class, new Getter<Slot, PrepareItemCraftEvent>() {
730731
@SuppressWarnings("null")

src/main/java/ch/njol/skript/classes/data/DefaultComparators.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import ch.njol.skript.registrations.Comparators;
6767
import ch.njol.skript.util.Date;
6868
import ch.njol.skript.util.PotionEffectUtils;
69+
import ch.njol.skript.util.Slot;
6970
import ch.njol.skript.util.StructureType;
7071
import ch.njol.skript.util.Time;
7172
import ch.njol.skript.util.Timeperiod;
@@ -429,7 +430,23 @@ public boolean supportsOrdering() {
429430
return false;
430431
}
431432
});
432-
433+
// Slot - Slot
434+
Comparators.registerComparator(Slot.class, Slot.class, new Comparator<Slot, Slot>() {
435+
436+
@Override
437+
public Relation compare(Slot o1, Slot o2) {
438+
Skript.info("Comparing " + o1.getClass() + " and " + o2.getClass());
439+
if (o1.isSameSlot(o2))
440+
return Relation.EQUAL;
441+
return Relation.NOT_EQUAL;
442+
}
443+
444+
@Override
445+
public boolean supportsOrdering() {
446+
return false;
447+
}
448+
449+
});
433450
}
434451

435452
}

src/main/java/ch/njol/skript/conditions/CondCompare.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ public boolean init(final Expression<?>[] vars, final int matchedPattern, final
153153
}
154154
}
155155
}
156+
156157
return true;
157158
}
158159

src/main/java/ch/njol/skript/events/EvtItem.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ public boolean check(final Event e) {
109109
if (types == null)
110110
return true;
111111
final ItemStack is;
112-
if (e instanceof BlockDispenseEvent) {
112+
if (e instanceof InventoryClickEvent) {
113+
is = ((InventoryClickEvent) e).getCurrentItem();
114+
} else if (e instanceof BlockDispenseEvent) {
113115
is = ((BlockDispenseEvent) e).getItem();
114116
} else if (e instanceof ItemSpawnEvent) {
115117
is = ((ItemSpawnEvent) e).getEntity().getItemStack();

src/main/java/ch/njol/skript/expressions/base/EventValueExpression.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.eclipse.jdt.annotation.Nullable;
3131

3232
import ch.njol.skript.ScriptLoader;
33+
import ch.njol.skript.Skript;
3334
import ch.njol.skript.SkriptAPIException;
3435
import ch.njol.skript.classes.Changer;
3536
import ch.njol.skript.classes.Changer.ChangeMode;

src/main/java/ch/njol/skript/util/EquipmentSlot.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.bukkit.Material;
2727
import org.bukkit.entity.Player;
2828
import org.bukkit.inventory.EntityEquipment;
29+
import org.bukkit.inventory.InventoryHolder;
2930
import org.bukkit.inventory.ItemStack;
3031
import org.eclipse.jdt.annotation.Nullable;
3132

@@ -86,7 +87,7 @@ public void set(EntityEquipment e, @Nullable ItemStack item) {
8687
}
8788

8889
},
89-
HELMET {
90+
HELMET(39) {
9091
@Override
9192
@Nullable
9293
public ItemStack get(final EntityEquipment e) {
@@ -98,7 +99,7 @@ public void set(final EntityEquipment e, final @Nullable ItemStack item) {
9899
e.setHelmet(item);
99100
}
100101
},
101-
CHESTPLATE {
102+
CHESTPLATE(38) {
102103
@Override
103104
@Nullable
104105
public ItemStack get(final EntityEquipment e) {
@@ -110,7 +111,7 @@ public void set(final EntityEquipment e, final @Nullable ItemStack item) {
110111
e.setChestplate(item);
111112
}
112113
},
113-
LEGGINGS {
114+
LEGGINGS(37) {
114115
@Override
115116
@Nullable
116117
public ItemStack get(final EntityEquipment e) {
@@ -122,7 +123,7 @@ public void set(final EntityEquipment e, final @Nullable ItemStack item) {
122123
e.setLeggings(item);
123124
}
124125
},
125-
BOOTS {
126+
BOOTS(36) {
126127
@Override
127128
@Nullable
128129
public ItemStack get(final EntityEquipment e) {
@@ -135,6 +136,16 @@ public void set(final EntityEquipment e, final @Nullable ItemStack item) {
135136
}
136137
};
137138

139+
public final int slotNumber;
140+
141+
EquipSlot() {
142+
slotNumber = -1;
143+
}
144+
145+
EquipSlot(int number) {
146+
slotNumber = number;
147+
}
148+
138149
@Nullable
139150
public abstract ItemStack get(EntityEquipment e);
140151

@@ -168,4 +179,23 @@ public String toString_i() {
168179
return "the " + slot.name().toLowerCase(Locale.ENGLISH) + " of " + Classes.toString(e.getHolder()); // TODO localise?
169180
}
170181

182+
/**
183+
* Gets underlying armor slot enum.
184+
* @return Armor slot.
185+
*/
186+
public EquipSlot getEquipSlot() {
187+
return slot;
188+
}
189+
190+
@Override
191+
public boolean isSameSlot(Slot o) {
192+
if (o instanceof InventorySlot) {
193+
if (slot == EquipSlot.TOOL)
194+
return false; // TODO maybe fix this
195+
return this.slot.slotNumber == ((InventorySlot) o).getIndex();
196+
}
197+
198+
return this.slot == ((EquipmentSlot) o).getEquipSlot();
199+
}
200+
171201
}

src/main/java/ch/njol/skript/util/InventorySlot.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,12 @@ public String toString_i() {
7272
return "slot " + index + " of inventory of " + Classes.toString(invi.getHolder());
7373
return "slot " + index + " of " + Classes.toString(invi);
7474
}
75+
76+
@Override
77+
public boolean isSameSlot(Slot o) {
78+
if (!(o instanceof InventorySlot))
79+
return false;
80+
return this.index == ((InventorySlot) o).getIndex();
81+
}
7582

7683
}

src/main/java/ch/njol/skript/util/Slot.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ public final String toString(final @Nullable Event e, final boolean debug) {
5555
}
5656

5757
protected abstract String toString_i();
58+
59+
/**
60+
* Checks if given slot is in same position with this.
61+
* Ignores slot contents.
62+
* @param o Another slot
63+
* @return True if positions equal, false otherwise.
64+
*/
65+
public abstract boolean isSameSlot(Slot o);
5866
}

0 commit comments

Comments
 (0)