From 344c9ca6ca77458be9353986ed3d878f3d5bea79 Mon Sep 17 00:00:00 2001 From: Michael Burgess Date: Thu, 6 Aug 2026 23:23:24 -0400 Subject: [PATCH] Add leave-buffer-distance to tolerate knockback at region edges --- src/main/java/com/garbagemule/MobArena/ArenaImpl.java | 7 +++++++ src/main/java/com/garbagemule/MobArena/MASpawnThread.java | 2 +- .../java/com/garbagemule/MobArena/framework/Arena.java | 2 ++ src/main/resources/res/settings.yml | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java index bce7344..a020d3a 100644 --- a/src/main/java/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/main/java/com/garbagemule/MobArena/ArenaImpl.java @@ -134,6 +134,7 @@ public class ArenaImpl implements Arena private Map everyWaveMap, afterWaveMap, waveTiersMap; private double spawnpointMinDistanceSquared; private double spawnpointMaxDistanceSquared; + private int leaveBufferDistance; // Misc private ArenaListener eventListener; @@ -220,6 +221,7 @@ public class ArenaImpl implements Arena this.waveTiersMap = MAUtils.getArenaRewardMap(plugin, section, name, "tiers"); this.spawnpointMinDistanceSquared = Math.pow(settings.getDouble("spawnpoint-min-distance", 0), 2); this.spawnpointMaxDistanceSquared = Math.pow(settings.getDouble("spawnpoint-max-distance", 15), 2); + this.leaveBufferDistance = settings.getInt("leave-buffer-distance", 3); // Misc this.eventListener = new ArenaListener(this, plugin); @@ -403,6 +405,11 @@ public class ArenaImpl implements Arena return spawnpointMaxDistanceSquared; } + @Override + public int getLeaveBufferDistance() { + return leaveBufferDistance; + } + @Override public WaveManager getWaveManager() { return waveManager; diff --git a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java index e60050c..e7c15ba 100644 --- a/src/main/java/com/garbagemule/MobArena/MASpawnThread.java +++ b/src/main/java/com/garbagemule/MobArena/MASpawnThread.java @@ -345,7 +345,7 @@ public class MASpawnThread implements Runnable private void removeCheatingPlayers() { List players = new ArrayList<>(arena.getPlayersInArena()); for (Player p : players) { - if (region.contains(p.getLocation())) { + if (region.contains(p.getLocation(), arena.getLeaveBufferDistance())) { continue; } diff --git a/src/main/java/com/garbagemule/MobArena/framework/Arena.java b/src/main/java/com/garbagemule/MobArena/framework/Arena.java index d9f556a..63fed52 100644 --- a/src/main/java/com/garbagemule/MobArena/framework/Arena.java +++ b/src/main/java/com/garbagemule/MobArena/framework/Arena.java @@ -86,6 +86,8 @@ public interface Arena double getSpawnpointMaxDistanceSquared(); + int getLeaveBufferDistance(); + WaveManager getWaveManager(); ArenaListener getEventListener(); diff --git a/src/main/resources/res/settings.yml b/src/main/resources/res/settings.yml index 54719e5..1733102 100644 --- a/src/main/resources/res/settings.yml +++ b/src/main/resources/res/settings.yml @@ -29,6 +29,7 @@ wave-interval: 15 final-wave: 0 spawnpoint-min-distance: 0 spawnpoint-max-distance: 15 +leave-buffer-distance: 3 monster-limit: 100 monster-exp: false keep-exp: false