diff --git a/changelog.md b/changelog.md index efbd022..c0eb31f 100644 --- a/changelog.md +++ b/changelog.md @@ -11,6 +11,7 @@ These changes will (most likely) be included in the next version. ## [Unreleased] +- The region overlap check now works across both arena and lobby regions, i.e. all four combinations of intersections between two regions (arena-arena, arena-lobby, lobby-arena, and lobby-lobby) are evaluated. - Arenas with missing regions no longer cause errors in the region overlap check. ## [0.104.1] - 2019-12-31 diff --git a/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java b/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java index a0b5ad1..8c2cc8b 100644 --- a/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java +++ b/src/main/java/com/garbagemule/MobArena/region/ArenaRegion.java @@ -243,23 +243,17 @@ public class ArenaRegion } public boolean intersects(ArenaRegion other) { - if (lobbySetup && other.lobbySetup) { - if (intersects(l1, l2, other.l1, other.l2)) { - return true; - } - } - if (setup && other.setup) { - return intersects(p1, p2, other.p1, other.p2); - } - return false; + return intersects(p1, p2, other.p1, other.p2) + || intersects(p1, p2, other.l1, other.l2) + || intersects(l1, l2, other.p1, other.p2) + || intersects(l1, l2, other.l1, other.l2); } private boolean intersects(Location a1, Location a2, Location b1, Location b2) { - return ( - b1.getBlockX() <= a2.getBlockX() && a1.getBlockX() <= b2.getBlockX() && - b1.getBlockZ() <= a2.getBlockZ() && a1.getBlockZ() <= b2.getBlockZ() && - b1.getBlockY() <= a2.getBlockY() && a1.getBlockY() <= b2.getBlockY() - ); + return (a1 != null && a2 != null && b1 != null && b2 != null) + && b1.getBlockX() <= a2.getBlockX() && a1.getBlockX() <= b2.getBlockX() + && b1.getBlockZ() <= a2.getBlockZ() && a1.getBlockZ() <= b2.getBlockZ() + && b1.getBlockY() <= a2.getBlockY() && a1.getBlockY() <= b2.getBlockY(); } // Region expand