11package org .skriptlang .skriptworldguard .elements .events ;
22
3- import ch .njol .skript .config .Node ;
43import ch .njol .skript .lang .Literal ;
54import ch .njol .skript .lang .SkriptEvent ;
65import ch .njol .skript .lang .SkriptParser .ParseResult ;
1413import org .jetbrains .annotations .Nullable ;
1514import org .skriptlang .skript .bukkit .registration .BukkitRegistryKeys ;
1615import org .skriptlang .skript .bukkit .registration .BukkitSyntaxInfos ;
17- import org .skriptlang .skript .log .runtime .SyntaxRuntimeErrorProducer ;
1816import org .skriptlang .skript .registration .SyntaxRegistry ;
1917import org .skriptlang .skriptworldguard .worldguard .RegionEnterLeaveEvent ;
20- import org .skriptlang .skriptworldguard .worldguard .RegionUtils ;
2118import 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