1010import ch .njol .skript .util .Utils ;
1111import ch .njol .skript .util .slot .Slot ;
1212import com .destroystokyo .paper .event .player .PlayerArmorChangeEvent ;
13+ import com .destroystokyo .paper .event .player .PlayerArmorChangeEvent .SlotType ;
1314import org .bukkit .event .Event ;
1415import org .bukkit .inventory .EquipmentSlot ;
1516import org .bukkit .inventory .ItemStack ;
1617import org .jetbrains .annotations .Nullable ;
18+ import org .skriptlang .skript .lang .converter .Converter ;
1719
18- import java .util .concurrent . CompletionException ;
20+ import java .util .Map ;
1921
2022public class EvtPlayerArmorChange extends SkriptEvent {
2123
22- private static boolean BODY_SLOT_EXISTS ;
24+ private static final boolean BODY_SLOT_EXISTS = Skript .fieldExists (EquipmentSlot .class , "BODY" );
25+ private static Converter <PlayerArmorChangeEvent , EquipmentSlot > GET_SLOT ;
2326
2427 static {
2528 if (Skript .classExists ("com.destroystokyo.paper.event.player.PlayerArmorChangeEvent" )) {
@@ -36,22 +39,30 @@ public class EvtPlayerArmorChange extends SkriptEvent {
3639 )
3740 .since ("2.5, 2.11 (equipment slots)" );
3841
39- EquipmentSlot bodySlot = null ;
40- try {
41- bodySlot = EquipmentSlot .valueOf ("BODY" );
42- } catch (IllegalArgumentException | NoSuchFieldError | CompletionException ignored ) {};
43- BODY_SLOT_EXISTS = bodySlot != null ;
42+ // get slot function is dependent on version. 1.21.4+ has a new method.
43+ if (Skript .methodExists (PlayerArmorChangeEvent .class , "getSlot" )) {
44+ GET_SLOT = PlayerArmorChangeEvent ::getSlot ;
45+ } else {
46+ //noinspection deprecation
47+ Map <SlotType , EquipmentSlot > slotTypeMap = Map .of (
48+ Enum .valueOf (SlotType .class , "HEAD" ), EquipmentSlot .HEAD ,
49+ Enum .valueOf (SlotType .class , "CHEST" ), EquipmentSlot .CHEST ,
50+ Enum .valueOf (SlotType .class , "LEGS" ), EquipmentSlot .LEGS ,
51+ Enum .valueOf (SlotType .class , "FEET" ), EquipmentSlot .FEET );
52+ GET_SLOT = event -> {
53+ //noinspection deprecation
54+ return slotTypeMap .get (event .getSlotType ());
55+ };
56+ }
4457
45- EventValues .registerEventValue (PlayerArmorChangeEvent .class , EquipmentSlot .class ,
46- event -> switch (event .getSlotType ()) {
47- case HEAD -> EquipmentSlot .HEAD ;
48- case CHEST -> EquipmentSlot .CHEST ;
49- case LEGS -> EquipmentSlot .LEGS ;
50- case FEET -> EquipmentSlot .FEET ;
51- });
52- EventValues .registerEventValue (PlayerArmorChangeEvent .class , ItemStack .class , PlayerArmorChangeEvent ::getOldItem , EventValues .TIME_PAST );
53- EventValues .registerEventValue (PlayerArmorChangeEvent .class , ItemStack .class , PlayerArmorChangeEvent ::getNewItem , EventValues .TIME_FUTURE );
54- EventValues .registerEventValue (PlayerArmorChangeEvent .class , Slot .class , event -> new ch .njol .skript .util .slot .EquipmentSlot (event .getPlayer ().getEquipment (), event .getSlot ()));
58+ // Register event values
59+ EventValues .registerEventValue (PlayerArmorChangeEvent .class , EquipmentSlot .class , GET_SLOT );
60+ EventValues .registerEventValue (PlayerArmorChangeEvent .class , ItemStack .class ,
61+ PlayerArmorChangeEvent ::getOldItem , EventValues .TIME_PAST );
62+ EventValues .registerEventValue (PlayerArmorChangeEvent .class , ItemStack .class ,
63+ PlayerArmorChangeEvent ::getNewItem , EventValues .TIME_FUTURE );
64+ EventValues .registerEventValue (PlayerArmorChangeEvent .class , Slot .class ,
65+ event -> new ch .njol .skript .util .slot .EquipmentSlot (event .getPlayer ().getEquipment (), event .getSlot ()));
5566 }
5667 }
5768
@@ -76,13 +87,7 @@ public boolean check(Event event) {
7687 PlayerArmorChangeEvent changeEvent = (PlayerArmorChangeEvent ) event ;
7788 if (slot == null )
7889 return true ;
79- EquipmentSlot changedSlot = switch (changeEvent .getSlotType ()) {
80- case HEAD -> EquipmentSlot .HEAD ;
81- case CHEST -> EquipmentSlot .CHEST ;
82- case LEGS -> EquipmentSlot .LEGS ;
83- case FEET -> EquipmentSlot .FEET ;
84- };
85- return slot == changedSlot ;
90+ return slot == GET_SLOT .convert (changeEvent );
8691 }
8792
8893 @ Override
0 commit comments