Skip to content

Commit 29966c2

Browse files
Switch to modern syntax registration
1 parent 2c2ddb4 commit 29966c2

File tree

13 files changed

+104
-75
lines changed

13 files changed

+104
-75
lines changed

src/main/java/org/skriptlang/skriptworldguard/SkriptWorldGuard.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import ch.njol.skript.hooks.regions.ResidenceHook;
1111
import ch.njol.skript.hooks.regions.WorldGuardHook;
1212
import ch.njol.skript.lang.ParseContext;
13+
import ch.njol.skript.lang.SyntaxElement;
1314
import ch.njol.skript.registrations.Classes;
1415
import ch.njol.skript.util.Version;
1516
import ch.njol.yggdrasil.Fields;
@@ -23,12 +24,14 @@
2324
import org.jetbrains.annotations.Nullable;
2425
import org.skriptlang.skript.addon.AddonModule;
2526
import org.skriptlang.skript.addon.SkriptAddon;
27+
import org.skriptlang.skript.registration.SyntaxRegistry;
2628
import org.skriptlang.skript.util.ClassLoader;
2729
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
2830
import org.skriptlang.skriptworldguard.worldguard.WorldGuardEventHandler.Factory;
2931
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
3032

3133
import java.io.StreamCorruptedException;
34+
import java.lang.reflect.InvocationTargetException;
3235
import java.util.regex.Matcher;
3336
import java.util.regex.Pattern;
3437

@@ -181,6 +184,15 @@ public void load(SkriptAddon addon) {
181184
.basePackage("org.skriptlang.skriptworldguard.elements")
182185
.deep(true)
183186
.initialize(true)
187+
.forEachClass(clazz -> {
188+
if (SyntaxElement.class.isAssignableFrom(clazz)) {
189+
try {
190+
clazz.getMethod("register", SyntaxRegistry.class).invoke(null, addon.syntaxRegistry());
191+
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
192+
getLogger().severe("Failed to load syntax class: " + e);
193+
}
194+
}
195+
})
184196
.build()
185197
.loadClasses(SkriptWorldGuard.class, getFile());
186198
}

src/main/java/org/skriptlang/skriptworldguard/elements/conditions/CondCanBuildInRegions.java

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

3-
import ch.njol.skript.Skript;
43
import ch.njol.skript.doc.Description;
54
import ch.njol.skript.doc.Examples;
65
import ch.njol.skript.doc.Name;
@@ -17,6 +16,8 @@
1716
import org.bukkit.event.Event;
1817
import org.jetbrains.annotations.NotNull;
1918
import org.jetbrains.annotations.Nullable;
19+
import org.skriptlang.skript.registration.SyntaxInfo;
20+
import org.skriptlang.skript.registration.SyntaxRegistry;
2021
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
2122
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
2223

@@ -35,11 +36,12 @@
3536
@Since("1.0")
3637
public class CondCanBuildInRegions extends Condition {
3738

38-
static {
39-
Skript.registerCondition(CondCanBuildInRegions.class,
40-
"%players% (can|(is|are) allowed to) build (%-directions% %-locations%|[in] %-worldguardregions%)",
41-
"%players% (can('t|not)|(is|are)(n't| not) allowed to) build (%-directions% %-locations%|[in] %-worldguardregions%)"
42-
);
39+
public static void register(SyntaxRegistry registry) {
40+
registry.register(SyntaxRegistry.CONDITION, SyntaxInfo.builder(CondCanBuildInRegions.class)
41+
.supplier(CondCanBuildInRegions::new)
42+
.addPatterns("%players% (can|(is|are) allowed to) build (%-directions% %-locations%|[in] %-worldguardregions%)",
43+
"%players% (can('t|not)|(is|are)(n't| not) allowed to) build (%-directions% %-locations%|[in] %-worldguardregions%)")
44+
.build());
4345
}
4446

4547
private Expression<Player> players;

src/main/java/org/skriptlang/skriptworldguard/elements/conditions/CondIsMemberOwner.java

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

3-
import ch.njol.skript.Skript;
3+
import ch.njol.skript.conditions.base.PropertyCondition;
4+
import ch.njol.skript.conditions.base.PropertyCondition.PropertyType;
45
import ch.njol.skript.doc.Description;
56
import ch.njol.skript.doc.Examples;
67
import ch.njol.skript.doc.Name;
@@ -15,6 +16,8 @@
1516
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
1617
import org.jetbrains.annotations.NotNull;
1718
import org.jetbrains.annotations.Nullable;
19+
import org.skriptlang.skript.registration.SyntaxInfo;
20+
import org.skriptlang.skript.registration.SyntaxRegistry;
1821
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
1922
import org.bukkit.OfflinePlayer;
2023
import org.bukkit.event.Event;
@@ -31,11 +34,13 @@
3134
@Since("1.0")
3235
public class CondIsMemberOwner extends Condition {
3336

34-
static {
35-
Skript.registerCondition(CondIsMemberOwner.class,
36-
"%offlineplayers/strings% (is|are) ([a] member|owner:[the|an] owner) of %worldguardregions%",
37-
"%offlineplayers/strings% (is|are)(n't| not) ([a] member|owner:[the|an] owner) of %worldguardregions%"
38-
);
37+
public static void register(SyntaxRegistry registry) {
38+
registry.register(SyntaxRegistry.CONDITION, SyntaxInfo.builder(CondIsMemberOwner.class)
39+
.supplier(CondIsMemberOwner::new)
40+
.addPatterns(PropertyCondition.getPatterns(PropertyType.BE,
41+
"([a] member|owner:[the|an] owner) of %worldguardregions%",
42+
"offlineplayers/strings"))
43+
.build());
3944
}
4045

4146
private Expression<Object> users;

src/main/java/org/skriptlang/skriptworldguard/elements/conditions/CondIsValidId.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import ch.njol.skript.doc.Since;
99
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
1010
import org.jetbrains.annotations.NotNull;
11+
import org.skriptlang.skript.registration.SyntaxRegistry;
1112

1213
@Name("Is Valid Region ID")
1314
@Description({
@@ -19,8 +20,8 @@
1920
@Since("1.0")
2021
public class CondIsValidId extends PropertyCondition<String> {
2122

22-
static {
23-
register(CondIsValidId.class, "[a] valid [worldguard] region id", "strings");
23+
public static void register(SyntaxRegistry registry) {
24+
register(registry, CondIsValidId.class, "[a] valid [worldguard] region id", "strings");
2425
}
2526

2627
@Override

src/main/java/org/skriptlang/skriptworldguard/elements/conditions/CondRegionContains.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.sk89q.worldedit.bukkit.BukkitAdapter;
1515
import org.jetbrains.annotations.NotNull;
1616
import org.jetbrains.annotations.Nullable;
17+
import org.skriptlang.skript.registration.SyntaxInfo;
18+
import org.skriptlang.skript.registration.SyntaxRegistry;
1719
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
1820
import org.bukkit.Location;
1921
import org.bukkit.event.Event;
@@ -30,13 +32,15 @@
3032
@Since("1.0")
3133
public class CondRegionContains extends Condition {
3234

33-
static { // TODO see what can be done about requiring 'region' as it looks quite dumb in region events with the region expression
34-
Skript.registerCondition(CondRegionContains.class,
35-
"[the] [worldguard] region %worldguardregions% contain[s] %locations%",
36-
"%locations% (is|are) ([contained] in|part of) [the] [worldguard] region %worldguardregions%",
37-
"[the] [worldguard] region %worldguardregions% (do|does)(n't| not) contain %locations%",
38-
"%locations% (is|are)(n't| not) (contained in|part of) [the] [worldguard] region %worldguardregions%"
39-
);
35+
public static void register(SyntaxRegistry registry) {
36+
// TODO see what can be done about requiring 'region' as it looks quite dumb in region events with the region expression
37+
registry.register(SyntaxRegistry.CONDITION, SyntaxInfo.builder(CondRegionContains.class)
38+
.supplier(CondRegionContains::new)
39+
.addPatterns("[the] [worldguard] region %worldguardregions% contain[s] %locations%",
40+
"%locations% (is|are) ([contained] in|part of) [the] [worldguard] region %worldguardregions%",
41+
"[the] [worldguard] region %worldguardregions% (do|does)(n't| not) contain %locations%",
42+
"%locations% (is|are)(n't| not) (contained in|part of) [the] [worldguard] region %worldguardregions%")
43+
.build());
4044
}
4145

4246
private Expression<WorldGuardRegion> regions;

src/main/java/org/skriptlang/skriptworldguard/elements/effects/EffCreateRegion.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
2020
import org.jetbrains.annotations.NotNull;
2121
import org.jetbrains.annotations.Nullable;
22+
import org.skriptlang.skript.registration.SyntaxInfo;
23+
import org.skriptlang.skript.registration.SyntaxRegistry;
2224
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
2325
import org.bukkit.Location;
2426
import org.bukkit.World;
@@ -48,12 +50,13 @@
4850
@Since("1.0")
4951
public class EffCreateRegion extends Effect {
5052

51-
static {
52-
Skript.registerEffect(EffCreateRegion.class,
53-
"create [a] [:temporary] global [worldguard] region [named] %string% [in %world%]",
54-
"create [a] [:temporary] [cuboid|rectangular] [worldguard] region [named] %string% [in %-world%] (between|from) %location% (to|and) %location%",
55-
"create [a] [:temporary] polygonal [worldguard] region [named] %string% [in %-world%] with [a] min[imum] height of %number% and [a] max[imum] height of %number% with [the] points %locations%"
56-
);
53+
public static void register(SyntaxRegistry registry) {
54+
registry.register(SyntaxRegistry.EFFECT, SyntaxInfo.builder(EffCreateRegion.class)
55+
.supplier(EffCreateRegion::new)
56+
.addPatterns("create [a] [:temporary] global [worldguard] region [named] %string% [in %world%]",
57+
"create [a] [:temporary] [cuboid|rectangular] [worldguard] region [named] %string% [in %-world%] (between|from) %location% (to|and) %location%",
58+
"create [a] [:temporary] polygonal [worldguard] region [named] %string% [in %-world%] with [a] min[imum] height of %number% and [a] max[imum] height of %number% with [the] points %locations%")
59+
.build());
5760
}
5861

5962
// Shared Values

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

Lines changed: 22 additions & 18 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.Skript;
43
import ch.njol.skript.lang.Literal;
54
import ch.njol.skript.lang.SkriptEvent;
65
import ch.njol.skript.lang.SkriptParser.ParseResult;
@@ -10,28 +9,33 @@
109
import org.bukkit.event.Event;
1110
import org.jetbrains.annotations.NotNull;
1211
import org.jetbrains.annotations.Nullable;
12+
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
13+
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
14+
import org.skriptlang.skript.registration.SyntaxRegistry;
1315
import org.skriptlang.skriptworldguard.worldguard.RegionEnterLeaveEvent;
1416
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
1517

1618
public class EvtRegionEnterLeave extends SkriptEvent {
1719

18-
static {
19-
Skript.registerEvent("WorldGuard Region Enter", EvtRegionEnterLeave.class, RegionEnterLeaveEvent.class,
20-
"enter[ing] of ([a] region|%-worldguardregions%)",
21-
"(region|%-worldguardregions%) enter[ing]",
22-
"(leav(e|ing)|exit[ing]) of ([a] region|%-worldguardregions%)",
23-
"(region|%-worldguardregions%) (leav(e|ing)|exit[ing])")
24-
.description("Called when a player enters or leaves a region or the given region(s)")
25-
.examples("on region enter:",
26-
"\tsend \"You entered %region%\"")
27-
.requiredPlugins("WorldGuard 7")
28-
.since("1.0");
29-
EventValues.registerEventValue(RegionEnterLeaveEvent.class, WorldGuardRegion.class,
30-
RegionEnterLeaveEvent::getRegion, EventValues.TIME_NOW);
31-
EventValues.registerEventValue(RegionEnterLeaveEvent.class, Player.class,
32-
RegionEnterLeaveEvent::getPlayer, EventValues.TIME_NOW);
33-
EventValues.registerEventValue(RegionEnterLeaveEvent.class, MoveType.class,
34-
RegionEnterLeaveEvent::getMoveType, EventValues.TIME_NOW);
20+
public static void register(SyntaxRegistry registry) {
21+
registry.register(BukkitRegistryKeys.EVENT, BukkitSyntaxInfos.Event.builder(EvtRegionEnterLeave.class, "WorldGuard Region Enter")
22+
.supplier(EvtRegionEnterLeave::new)
23+
.addEvent(RegionEnterLeaveEvent.class)
24+
.addPatterns("enter[ing] of ([a] region|%-worldguardregions%)",
25+
"(region|%-worldguardregions%) enter[ing]",
26+
"(leav(e|ing)|exit[ing]) of ([a] region|%-worldguardregions%)",
27+
"(region|%-worldguardregions%) (leav(e|ing)|exit[ing])")
28+
.addDescription("Called when a player enters or leaves a region (or the specified region(s))")
29+
.addExample("""
30+
on region enter:
31+
send "You entered %region%"
32+
""")
33+
.addRequiredPlugin("WorldGuard 7")
34+
.addSince("1.0")
35+
.build());
36+
EventValues.registerEventValue(RegionEnterLeaveEvent.class, WorldGuardRegion.class, RegionEnterLeaveEvent::getRegion);
37+
EventValues.registerEventValue(RegionEnterLeaveEvent.class, Player.class, RegionEnterLeaveEvent::getPlayer);
38+
EventValues.registerEventValue(RegionEnterLeaveEvent.class, MoveType.class, RegionEnterLeaveEvent::getMoveType);
3539
}
3640

3741
private @Nullable Literal<WorldGuardRegion> regions;

src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprBlocksInRegion.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import ch.njol.util.Kleenean;
1212
import org.jetbrains.annotations.NotNull;
1313
import org.jetbrains.annotations.Nullable;
14+
import org.skriptlang.skript.registration.SyntaxRegistry;
1415
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
1516
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
1617
import org.bukkit.block.Block;
@@ -27,8 +28,8 @@
2728
@Since("1.0")
2829
public class ExprBlocksInRegion extends PropertyExpression<WorldGuardRegion, Block> {
2930

30-
static {
31-
register(ExprBlocksInRegion.class, Block.class, "blocks", "worldguardregions");
31+
public static void register(SyntaxRegistry registry) {
32+
register(registry, ExprBlocksInRegion.class, Block.class, "blocks", "worldguardregions");
3233
}
3334

3435
@Override

src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprMoveType.java

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

3-
import ch.njol.skript.Skript;
43
import ch.njol.skript.doc.Description;
54
import ch.njol.skript.doc.Examples;
65
import ch.njol.skript.doc.Name;
76
import ch.njol.skript.doc.RequiredPlugins;
87
import ch.njol.skript.doc.Since;
98
import ch.njol.skript.expressions.base.EventValueExpression;
10-
import ch.njol.skript.lang.ExpressionType;
119
import com.sk89q.worldguard.session.MoveType;
1210
import org.bukkit.event.Event;
1311
import org.jetbrains.annotations.NotNull;
1412
import org.jetbrains.annotations.Nullable;
13+
import org.skriptlang.skript.registration.SyntaxRegistry;
1514

1615
@Name("WorldGuard Move Type")
1716
@Description("The WorldGuard move type in a WorldGuard region enter/leave event.")
@@ -23,10 +22,8 @@
2322
@Since("1.0")
2423
public class ExprMoveType extends EventValueExpression<MoveType> {
2524

26-
static {
27-
Skript.registerExpression(ExprMoveType.class, MoveType.class, ExpressionType.SIMPLE,
28-
"[the] [worldguard] move[ ]type"
29-
);
25+
public static void register(SyntaxRegistry registry) {
26+
register(registry, ExprMoveType.class, MoveType.class, "[worldguard] move[ ]type");
3027
}
3128

3229
public ExprMoveType() {

src/main/java/org/skriptlang/skriptworldguard/elements/expressions/ExprRegion.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package org.skriptlang.skriptworldguard.elements.expressions;
22

3-
import ch.njol.skript.Skript;
43
import ch.njol.skript.doc.Description;
54
import ch.njol.skript.doc.Examples;
65
import ch.njol.skript.doc.Name;
76
import ch.njol.skript.doc.RequiredPlugins;
87
import ch.njol.skript.doc.Since;
98
import ch.njol.skript.expressions.base.EventValueExpression;
10-
import ch.njol.skript.lang.ExpressionType;
119
import org.jetbrains.annotations.NotNull;
1210
import org.jetbrains.annotations.Nullable;
11+
import org.skriptlang.skript.registration.SyntaxRegistry;
1312
import org.skriptlang.skriptworldguard.worldguard.WorldGuardRegion;
1413
import org.bukkit.event.Event;
1514

@@ -23,10 +22,8 @@
2322
@Since("1.0")
2423
public class ExprRegion extends EventValueExpression<WorldGuardRegion> {
2524

26-
static {
27-
Skript.registerExpression(ExprRegion.class, WorldGuardRegion.class, ExpressionType.SIMPLE,
28-
"[the] [worldguard] region"
29-
);
25+
public static void register(SyntaxRegistry registry) {
26+
register(registry, ExprRegion.class, WorldGuardRegion.class, "[worldguard] region");
3027
}
3128

3229
public ExprRegion() {

0 commit comments

Comments
 (0)