From bd7e19a089b219866480587abcfbff45f761fb6c Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Sat, 8 Aug 2015 14:19:04 -0500 Subject: [PATCH] Fixed crash from previous commit where a player zones inside a building --- src/resources/objects/SWGObject.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 4b90426a8..050d57905 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -634,10 +634,14 @@ public abstract class SWGObject implements Serializable, Comparable { } private Set getObservers(SWGObject childObject) { + return getObserversFromSet(objectsAware, childObject); + } + + private Set getObserversFromSet(Set aware, SWGObject childObject) { if (getParent() == null) { Set observers = new HashSet<>(); - synchronized (objectsAware) { - for (SWGObject obj : objectsAware) { + synchronized (aware) { + for (SWGObject obj : aware) { Player p = obj.getOwner(); if (childObject.isValidPlayer(p)) observers.add(obj); @@ -648,7 +652,7 @@ public abstract class SWGObject implements Serializable, Comparable { childObject.getChildrenObservers(observers, this); return observers; } else { - return getParent().getObservers(childObject); // Search for top level parent + return getParent().getObserversFromSet(aware, childObject); // Search for top level parent } } @@ -753,13 +757,15 @@ public abstract class SWGObject implements Serializable, Comparable { public void updateObjectAwareness(Set withinRange) { synchronized (objectsAware) { - withinRange.addAll(getObservers()); + Set observers = getObserversFromSet(withinRange, this); Set outOfRange = new HashSet<>(objectsAware); outOfRange.removeAll(withinRange); + outOfRange.removeAll(observers); for (SWGObject o : outOfRange) { awarenessOutOfRange(o); o.awarenessOutOfRange(this); } + withinRange.addAll(observers); for (SWGObject o : withinRange) { awarenessInRange(o); o.awarenessInRange(this);