Skip to content

Commit 8eb95f1

Browse files
Make world optional in "enter/leave" event
1 parent b0fef3c commit 8eb95f1

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

src/main/java/org/skriptlang/skriptworldguard/elements/events/EvtRegionEnterLeave.java

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.skriptlang.skriptworldguard.elements.events;
22

3-
import ch.njol.skript.config.Node;
43
import ch.njol.skript.lang.Literal;
54
import ch.njol.skript.lang.SkriptEvent;
65
import ch.njol.skript.lang.SkriptParser.ParseResult;
@@ -14,16 +13,14 @@
1413
import org.jetbrains.annotations.Nullable;
1514
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
1615
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
17-
import org.skriptlang.skript.log.runtime.SyntaxRuntimeErrorProducer;
1816
import org.skriptlang.skript.registration.SyntaxRegistry;
1917
import org.skriptlang.skriptworldguard.worldguard.RegionEnterLeaveEvent;
20-
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
2118
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
2219

23-
public class EvtRegionEnterLeave extends SkriptEvent implements SyntaxRuntimeErrorProducer {
20+
public class EvtRegionEnterLeave extends SkriptEvent {
2421

2522
public static void register(SyntaxRegistry registry) {
26-
String regionPattern = "[the] [worldguard] region[s] [with [the] (name[s]|id[s])|named] %*strings% (in|of) [[the] world] %*string%";
23+
String regionPattern = "[the] [worldguard] region[s] [with [the] (name[s]|id[s])|named] %*strings% [(in|of) [[the] world] %-*string%]";
2724
registry.register(BukkitRegistryKeys.EVENT, BukkitSyntaxInfos.Event.builder(EvtRegionEnterLeave.class, "Region Enter/Leave")
2825
.supplier(EvtRegionEnterLeave::new)
2926
.addEvent(RegionEnterLeaveEvent.class)
@@ -39,18 +36,16 @@ public static void register(SyntaxRegistry registry) {
3936
.addSince("1.0")
4037
.build());
4138
EventValues.registerEventValue(RegionEnterLeaveEvent.class, WorldGuardRegion.class, RegionEnterLeaveEvent::getRegion);
39+
EventValues.registerEventValue(RegionEnterLeaveEvent.class, World.class, event -> event.getRegion().world());
4240
EventValues.registerEventValue(RegionEnterLeaveEvent.class, MoveType.class, RegionEnterLeaveEvent::getMoveType);
4341
}
4442

45-
private Node node;
46-
4743
private @Nullable Literal<String> regionIds;
4844
private @Nullable Literal<String> world;
4945
private boolean isEntering;
5046

5147
@Override
5248
public boolean init(Literal<?>[] args, int matchedPattern, ParseResult parseResult) {
53-
node = getParser().getNode();
5449
if (args.length != 0) {
5550
//noinspection unchecked
5651
regionIds = (Literal<String>) args[0];
@@ -69,27 +64,22 @@ public boolean check(Event event) {
6964
if (regionIds == null) {
7065
return true;
7166
}
72-
assert world != null;
7367

74-
// validate world
75-
World world = Bukkit.getWorld(this.world.getSingle());
68+
World expectedWorld;
7669
if (world == null) {
77-
error("The world '" + this.world.getSingle() + "' does not exist");
78-
return false;
79-
}
80-
81-
// map regions
82-
String[] regionIds = this.regionIds.getAll();
83-
WorldGuardRegion[] regions = new WorldGuardRegion[regionIds.length];
84-
for (int i = 0; i < regionIds.length; i++) {
85-
regions[i] = RegionUtils.getRegion(world, regionIds[i]);
86-
if (regions[i] == null) {
87-
error("The region '" + regionIds[i] + "' does not exist in the world '" + world.getName() + "'");
70+
expectedWorld = null;
71+
} else {
72+
expectedWorld = Bukkit.getWorld(world.getSingle());
73+
if (world == null) {
8874
return false;
8975
}
9076
}
9177

92-
return SimpleExpression.check(regions, region -> region.equals(enterLeaveEvent.getRegion()), false, false);
78+
String foundId = enterLeaveEvent.getRegion().name();
79+
World foundWorld = enterLeaveEvent.getRegion().world();
80+
return SimpleExpression.check(this.regionIds.getAll(),
81+
expectedId -> expectedId.equalsIgnoreCase(foundId) && (expectedWorld == null || expectedWorld.equals(foundWorld)),
82+
false, false);
9383
}
9484

9585
@Override
@@ -104,21 +94,18 @@ public String toString(@Nullable Event event, boolean debug) {
10494
builder.append("exit");
10595
}
10696
if (regionIds != null) {
107-
assert world != null;
10897
builder.append("of");
10998
if (regionIds.isSingle()) {
11099
builder.append("region");
111100
} else {
112101
builder.append("regions");
113102
}
114-
builder.append("named", regionIds, "in the world", world);
103+
builder.append("named", regionIds);
104+
if (world != null) {
105+
builder.append("in the world", world);
106+
}
115107
}
116108
return builder.toString();
117109
}
118110

119-
@Override
120-
public Node getNode() {
121-
return node;
122-
}
123-
124111
}

0 commit comments

Comments
 (0)