diff --git a/src/resources/callback/CallbackManager.java b/src/resources/callback/CallbackManager.java index 945276e88..f15745a7d 100644 --- a/src/resources/callback/CallbackManager.java +++ b/src/resources/callback/CallbackManager.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import resources.control.Assert; import resources.server_info.Log; public class CallbackManager extends BaseCallbackManager { @@ -74,22 +75,31 @@ public class CallbackManager extends BaseCallbackManager { } public boolean isQueueEmpty() { + Assert.test(running.get() >= 0); return running.get() == 0; } public boolean callOnEach(CallCallback call) { synchronized (callbacks) { running.incrementAndGet(); - return call(() -> { - for (T callback : callbacks) { - try { - call.run(callback); - } catch (Exception e) { - Log.e(this, e); + boolean ret = call(() -> { + try { + for (T callback : callbacks) { + try { + call.run(callback); + } catch (Throwable t) { + Log.e(this, t); + } } + } catch (Throwable t) { + Log.e(this, t); + } finally { + running.decrementAndGet(); } - running.decrementAndGet(); }); + if (!ret) + running.decrementAndGet(); + return ret; } } diff --git a/src/resources/objects/awareness/TerrainMap.java b/src/resources/objects/awareness/TerrainMap.java index 79dc52fd6..6eb6a9c02 100644 --- a/src/resources/objects/awareness/TerrainMap.java +++ b/src/resources/objects/awareness/TerrainMap.java @@ -142,8 +142,8 @@ public class TerrainMap { return aware; int sX = calculateIndex(obj.getX())-1; int sZ = calculateIndex(obj.getZ())-1; - for (int z = sZ; z < sZ+2; ++z) { - for (int x = sX; x < sX+2; ++x) { + for (int z = sZ; z <= sZ+2; ++z) { + for (int x = sX; x <= sX+2; ++x) { getWithinAwareness(x, z, obj, aware); } }