33import ch .njol .skript .lang .util .common .AnyContains ;
44import ch .njol .skript .lang .util .common .AnyNamed ;
55import com .sk89q .worldedit .bukkit .BukkitAdapter ;
6+ import com .sk89q .worldedit .math .BlockVector2 ;
7+ import com .sk89q .worldedit .regions .CuboidRegion ;
8+ import com .sk89q .worldedit .regions .Polygonal2DRegion ;
9+ import com .sk89q .worldedit .regions .Region ;
10+ import com .sk89q .worldguard .protection .regions .ProtectedCuboidRegion ;
11+ import com .sk89q .worldguard .protection .regions .ProtectedPolygonalRegion ;
612import com .sk89q .worldguard .protection .regions .ProtectedRegion ;
13+ import org .bukkit .Chunk ;
714import org .bukkit .Location ;
815import org .bukkit .World ;
916import org .jetbrains .annotations .NotNull ;
@@ -65,6 +72,10 @@ public String name() {
6572
6673 @ Override
6774 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+ }
6879 Location location = Converters .convert (object , Location .class );
6980 return location != null && region .contains (BukkitAdapter .asBlockVector (location ));
7081 }
@@ -74,4 +85,27 @@ public boolean isSafeToCheck(Object value) {
7485 return value != null ;
7586 }
7687
88+ /*
89+ * Utility
90+ */
91+
92+ /**
93+ * Converts this region into a WorldEdit {@link Region}.
94+ * @return A region representing the physical area of this region.
95+ * @throws IllegalArgumentException If this region does not encompass a physical area ({@link ProtectedRegion#isPhysicalArea()}).
96+ */
97+ public Region asWorldEditRegion () {
98+ Region worldEditRegion ;
99+ if (region instanceof ProtectedPolygonalRegion polygonalRegion ) { // Not as simple as a cube...
100+ worldEditRegion = new Polygonal2DRegion (BukkitAdapter .adapt (world ), polygonalRegion .getPoints (),
101+ polygonalRegion .getMinimumPoint ().getY (), polygonalRegion .getMaximumPoint ().getY ());
102+ } else if (region instanceof ProtectedCuboidRegion ) {
103+ worldEditRegion = new CuboidRegion (BukkitAdapter .adapt (world ),
104+ region .getMinimumPoint (), region .getMaximumPoint ());
105+ } else {
106+ throw new IllegalArgumentException ("Unexpected region type: " + region .getClass ());
107+ }
108+ return worldEditRegion ;
109+ }
110+
77111}
0 commit comments