Skip to content

Commit a7bfd7f

Browse files
Add chunk support to "region contains"
1 parent 1b899b8 commit a7bfd7f

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

src/main/java/org/skriptlang/skriptworldguard/worldguard/RegionUtils.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
import com.google.common.collect.Iterators;
44
import com.sk89q.worldedit.bukkit.BukkitAdapter;
5-
import com.sk89q.worldedit.regions.AbstractRegion;
6-
import com.sk89q.worldedit.regions.CuboidRegion;
7-
import com.sk89q.worldedit.regions.Polygonal2DRegion;
85
import com.sk89q.worldguard.LocalPlayer;
96
import com.sk89q.worldguard.WorldGuard;
107
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
@@ -13,8 +10,6 @@
1310
import com.sk89q.worldguard.protection.RegionResultSet;
1411
import com.sk89q.worldguard.protection.flags.Flags;
1512
import com.sk89q.worldguard.protection.managers.RegionManager;
16-
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
17-
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
1813
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
1914
import com.sk89q.worldguard.protection.regions.RegionContainer;
2015
import org.bukkit.Location;
@@ -177,18 +172,7 @@ private Iterator<Block> nextIterator() {
177172
}
178173
WorldGuardRegion region = regionIterator.next();
179174
World world = region.world();
180-
ProtectedRegion protectedRegion = region.region();
181-
AbstractRegion adaptedRegion;
182-
if (protectedRegion instanceof ProtectedPolygonalRegion polygonalRegion) { // Not as simple as a cube...
183-
adaptedRegion = new Polygonal2DRegion(BukkitAdapter.adapt(world), polygonalRegion.getPoints(),
184-
polygonalRegion.getMinimumPoint().getY(), polygonalRegion.getMaximumPoint().getY());
185-
} else if (protectedRegion instanceof ProtectedCuboidRegion) {
186-
adaptedRegion = new CuboidRegion(BukkitAdapter.adapt(region.world()),
187-
protectedRegion.getMinimumPoint(), protectedRegion.getMaximumPoint());
188-
} else {
189-
throw new IllegalArgumentException("Unexpected region type: " + protectedRegion.getClass());
190-
}
191-
return Iterators.transform(adaptedRegion.iterator(),
175+
return Iterators.transform(region.asWorldEditRegion().iterator(),
192176
blockVector -> world.getBlockAt(blockVector.getX(), blockVector.getY(), blockVector.getZ()));
193177
}
194178

src/main/java/org/skriptlang/skriptworldguard/worldguard/WorldGuardRegion.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@
33
import ch.njol.skript.lang.util.common.AnyContains;
44
import ch.njol.skript.lang.util.common.AnyNamed;
55
import 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;
612
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
13+
import org.bukkit.Chunk;
714
import org.bukkit.Location;
815
import org.bukkit.World;
916
import 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

Comments
 (0)