Skip to content

Commit 0f13e75

Browse files
Switch to Property system
1 parent 23f12b7 commit 0f13e75

2 files changed

Lines changed: 50 additions & 35 deletions

File tree

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,17 @@
1919
import com.sk89q.worldguard.protection.managers.RegionManager;
2020
import com.sk89q.worldguard.protection.managers.RemovalStrategy;
2121
import com.sk89q.worldguard.session.MoveType;
22+
import org.bukkit.Chunk;
23+
import org.bukkit.Location;
2224
import org.bukkit.World;
2325
import org.bukkit.plugin.Plugin;
2426
import org.bukkit.plugin.java.JavaPlugin;
2527
import org.jetbrains.annotations.Nullable;
2628
import org.skriptlang.skript.addon.AddonModule;
2729
import org.skriptlang.skript.addon.SkriptAddon;
30+
import org.skriptlang.skript.lang.properties.Property;
31+
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
32+
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
2833
import org.skriptlang.skript.registration.SyntaxRegistry;
2934
import org.skriptlang.skript.util.ClassLoader;
3035
import org.skriptlang.skriptworldguard.worldguard.RegionUtils;
@@ -166,7 +171,25 @@ public void change(WorldGuardRegion[] regions, Object @Nullable [] delta, Change
166171
}
167172
}
168173
}
169-
}));
174+
})
175+
.property(Property.NAME, "The name (ID) of a region as text. Cannot be changed.", addon,
176+
ExpressionPropertyHandler.of(WorldGuardRegion::name, String.class))
177+
.property(Property.CONTAINS, "Regions can contain chunks and locations.", addon,
178+
new ContainsHandler<WorldGuardRegion, Object>() {
179+
@Override
180+
public boolean contains(WorldGuardRegion region, Object element) {
181+
return switch (element) {
182+
case Chunk chunk -> region.contains(chunk);
183+
case Location location -> region.contains(location);
184+
default -> false;
185+
};
186+
}
187+
188+
@Override
189+
public Class<?>[] elementTypes() {
190+
return new Class[]{Chunk.class, Location.class};
191+
}
192+
}));
170193

171194
Classes.registerClass(new EnumClassInfo<>(MoveType.class, "worldguardmovetype", "worldguard move types")
172195
.user("worldguard ?move(ment)? ?types?")
Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.skriptlang.skriptworldguard.worldguard;
22

3-
import ch.njol.skript.lang.util.common.AnyContains;
4-
import ch.njol.skript.lang.util.common.AnyNamed;
53
import com.sk89q.worldedit.bukkit.BukkitAdapter;
64
import com.sk89q.worldedit.math.BlockVector2;
75
import com.sk89q.worldedit.regions.CuboidRegion;
@@ -14,15 +12,13 @@
1412
import org.bukkit.Location;
1513
import org.bukkit.World;
1614
import org.jetbrains.annotations.NotNull;
17-
import org.skriptlang.skript.lang.converter.Converters;
1815

1916
/**
2017
* A utility record for associating a {@link ProtectedRegion} with a {@link World}.
2118
* @param world The world {@code region} is within.
2219
* @param region WorldGuard region.
2320
*/
24-
public record WorldGuardRegion(World world, ProtectedRegion region)
25-
implements Comparable<WorldGuardRegion>, AnyNamed, AnyContains<Object> {
21+
public record WorldGuardRegion(World world, ProtectedRegion region) implements Comparable<WorldGuardRegion> {
2622

2723
/**
2824
* A helper method to provide a standardized way to stringify a {@link WorldGuardRegion} from its components.
@@ -37,52 +33,31 @@ public static String toString(World world, String id) {
3733

3834
@Override
3935
public boolean equals(Object other) {
40-
if (other instanceof WorldGuardRegion otherRegion) {
41-
return otherRegion.world() == world && otherRegion.region().getId().equals(region.getId());
36+
if (other instanceof WorldGuardRegion(World otherWorld, ProtectedRegion otherRegion)) {
37+
return world == otherWorld && region.getId().equals(otherRegion.getId());
4238
}
4339
return false;
4440
}
4541

4642
@Override
47-
public String toString() {
43+
public @NotNull String toString() {
4844
return toString(world, region.getId());
4945
}
5046

51-
/*
52-
* Comparable
53-
*/
54-
55-
@Override
56-
public int compareTo(@NotNull WorldGuardRegion other) {
57-
return Integer.compare(this.region.getPriority(), other.region.getPriority());
58-
}
59-
60-
/*
61-
* AnyNamed
47+
/**
48+
* @return The name (ID) of this region.
6249
*/
63-
64-
@Override
6550
public String name() {
6651
return region.getId();
6752
}
6853

6954
/*
70-
* AnyContains
55+
* Comparable
7156
*/
7257

7358
@Override
74-
public boolean contains(Object object) {
75-
if (object instanceof Chunk chunk) {
76-
BlockVector2 chunkVector = BlockVector2.at(chunk.getX(), chunk.getZ());
77-
return asWorldEditRegion().getChunks().contains(chunkVector);
78-
}
79-
Location location = Converters.convert(object, Location.class);
80-
return location != null && region.contains(BukkitAdapter.asBlockVector(location));
81-
}
82-
83-
@Override
84-
public boolean isSafeToCheck(Object value) {
85-
return value != null;
59+
public int compareTo(@NotNull WorldGuardRegion other) {
60+
return Integer.compare(this.region.getPriority(), other.region.getPriority());
8661
}
8762

8863
/*
@@ -108,4 +83,21 @@ public Region asWorldEditRegion() {
10883
return worldEditRegion;
10984
}
11085

86+
/**
87+
* @param chunk The chunk to check for.
88+
* @return Whether {@code chunk} is within this region.
89+
*/
90+
public boolean contains(Chunk chunk) {
91+
BlockVector2 chunkVector = BlockVector2.at(chunk.getX(), chunk.getZ());
92+
return asWorldEditRegion().getChunks().contains(chunkVector);
93+
}
94+
95+
/**
96+
* @param location The location to check for.
97+
* @return Whether {@code location} is within this region.
98+
*/
99+
public boolean contains(Location location) {
100+
return region.contains(BukkitAdapter.asBlockVector(location));
101+
}
102+
111103
}

0 commit comments

Comments
 (0)