Skip to content

Commit 73c4ed1

Browse files
authored
Merge branch 'dev/feature' into fix/bli-overshoot
2 parents 7c7de07 + 43dee01 commit 73c4ed1

3 files changed

Lines changed: 41 additions & 27 deletions

File tree

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

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,19 @@
1010
import ch.njol.skript.util.Utils;
1111
import ch.njol.skript.util.slot.Slot;
1212
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
13+
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent.SlotType;
1314
import org.bukkit.event.Event;
1415
import org.bukkit.inventory.EquipmentSlot;
1516
import org.bukkit.inventory.ItemStack;
1617
import 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

2022
public 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

src/main/java/ch/njol/skript/lang/Statement.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public abstract class Statement extends TriggerItem implements SyntaxElement {
4848
log.clear();
4949

5050
Statement statement;
51+
Section.SectionContext sectionContext = ParserInstance.get().getData(Section.SectionContext.class);
5152
if (node != null) {
52-
Section.SectionContext sectionContext = ParserInstance.get().getData(Section.SectionContext.class);
5353
statement = sectionContext.modify(node, items, () -> {
5454
//noinspection unchecked,rawtypes
5555
Statement parsed = (Statement) SkriptParser.parse(input, (Iterator) Skript.getStatements().iterator(), defaultError);
@@ -60,8 +60,10 @@ public abstract class Statement extends TriggerItem implements SyntaxElement {
6060
return parsed;
6161
});
6262
} else {
63-
//noinspection unchecked,rawtypes
64-
statement = (Statement) SkriptParser.parse(input, (Iterator) Skript.getStatements().iterator(), defaultError);
63+
statement = sectionContext.modify(null, null, () -> {
64+
//noinspection unchecked,rawtypes
65+
return (Statement) SkriptParser.parse(input, (Iterator) Skript.getStatements().iterator(), defaultError);
66+
});
6567
}
6668

6769
if (statement != null) {

src/main/resources/lang/default.lang

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,6 +2085,12 @@ inventory actions:
20852085
clone_stack: clone stack
20862086
collect_to_cursor: collect to cursor, collect items to cursor
20872087
unknown: unknown, unsupported, custom
2088+
pickup_from_bundle: pickup from bundle, pickup items from bundle
2089+
pickup_all_into_bundle: pickup all into bundle, pickup all items into bundle
2090+
pickup_some_into_bundle: pickup some into bundle, pickup some items into bundle
2091+
place_from_bundle: place from bundle, place items from bundle
2092+
place_all_into_bundle: place all into bundle, place all items into bundle
2093+
place_some_into_bundle: place some into bundle, place some items into bundle
20882094

20892095
# -- Inventory Click Types --
20902096
click types:
@@ -2144,6 +2150,7 @@ spawn reasons:
21442150
bed: bed
21452151
beehive: beehive
21462152
breeding: breed, breeding
2153+
bucket: release from bucket # 'bucket' alone is problematic
21472154
build_irongolem: built iron golem, build iron golem
21482155
build_snowman: built snowman, build snowman
21492156
build_wither: built wither, build wither

0 commit comments

Comments
 (0)