diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index aac0678a6..c626ccad9 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -64,6 +64,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -81,6 +82,7 @@ public abstract class SWGObject extends BaselineObject implements Comparable dataAttributes; private ContainerPermissions containerPermissions; private transient Set objectsAware; + private transient Set customObservers; private transient BuildoutArea buildoutArea; private transient Player owner; private List > arrangement; @@ -109,7 +111,8 @@ public abstract class SWGObject extends BaselineObject implements Comparable(); + this.objectsAware = new HashSet<>(); + this.customObservers = new HashSet<>(); this.slots = new HashMap<>(); this.containedObjects = Collections.synchronizedMap(new HashMap()); this.attributes = new LinkedHashMap<>(); @@ -121,6 +124,7 @@ public abstract class SWGObject extends BaselineObject implements Comparable(); + customObservers = new HashSet<>(); buildoutArea = null; owner = null; } @@ -772,6 +776,39 @@ public abstract class SWGObject extends BaselineObject implements Comparable getCustomObservers() { + Set custom; + if (parent != null) + custom = parent.getCustomObservers(); + else + custom = new HashSet<>(); + synchronized (customObservers) { + Iterator observerIter = customObservers.iterator(); + while (observerIter.hasNext()) { + SWGObject observer = observerIter.next(); + if (observer.getOwner() == null) + observerIter.remove(); + else + custom.add(observer); + } + } + return custom; + } + public Set getObservers() { Player owner = getOwner(); SWGObject parent = getParent(); @@ -789,6 +826,7 @@ public abstract class SWGObject extends BaselineObject implements Comparable observers = new HashSet<>(); for (SWGObject aware : nearby) {