From e53c0a68fb3ff7869bc63133532a49b0b601b13b Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 25 Nov 2021 21:30:58 +0100 Subject: [PATCH] Properly remove manual viewers Signed-off-by: TheMode --- src/main/java/net/minestom/server/entity/Entity.java | 1 + src/main/java/net/minestom/server/utils/ViewEngine.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index 2aba093ad..515328e8a 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -878,6 +878,7 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler private void removeFromInstance(Instance instance) { EventDispatcher.call(new RemoveEntityFromInstanceEvent(instance, this)); instance.getEntityTracker().unregister(this, position, trackingTarget, trackingUpdate); + this.viewEngine.forManuals(this::removeViewer); } /** diff --git a/src/main/java/net/minestom/server/utils/ViewEngine.java b/src/main/java/net/minestom/server/utils/ViewEngine.java index 68351ba4d..f64ef6723 100644 --- a/src/main/java/net/minestom/server/utils/ViewEngine.java +++ b/src/main/java/net/minestom/server/utils/ViewEngine.java @@ -77,6 +77,12 @@ public final class ViewEngine { } } + public void forManuals(@NotNull Consumer consumer) { + synchronized (mutex) { + this.manualViewers.forEach(consumer); + } + } + public boolean hasPredictableViewers() { // Verify if this entity's viewers can be predicted from surrounding entities synchronized (mutex) {