diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 3d1d9a17..3715bf3b 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -192,7 +192,7 @@ public abstract class SWGObject implements Serializable, Comparable { // Get a pre-parent-removal list of the observers so we can send create/destroy/update messages Set oldObservers = getObservers(); - oldObservers.add(this); + Player prevOwner = getOwner(); // Remove this object from the old parent if one exists SWGObject oldParent = null; @@ -205,8 +205,14 @@ public abstract class SWGObject implements Serializable, Comparable { System.err.println("Failed adding " + this + " to " + container); // Observer notification - Set containerObservers = container.getObservers(); - containerObservers.add(this); + Player newOwner = getOwner(); + Set containerObservers = getObservers(); + if (prevOwner != newOwner) { + if (prevOwner != null) + oldObservers.add(prevOwner.getCreatureObject()); + if (newOwner != null) + containerObservers.add(newOwner.getCreatureObject()); + } sendUpdatedContainment(oldObservers, containerObservers); Log.i("Container", "Moved %s from %s to %s", this, oldParent, container); @@ -758,27 +764,23 @@ public abstract class SWGObject implements Serializable, Comparable { return; Set same = new HashSet<>(oldObservers); same.retainAll(newObservers); - + Set added = new HashSet<>(newObservers); added.removeAll(oldObservers); - + Set removed = new HashSet<>(oldObservers); removed.removeAll(newObservers); - + for (SWGObject swgObject : same) { - swgObject.sendSelf(new UpdateContainmentMessage(objectId, parent.getObjectId(), slotArrangement)); + swgObject.getOwner().sendPacket(new UpdateContainmentMessage(objectId, parent.getObjectId(), slotArrangement)); } - + for (SWGObject swgObject : added) { - if (swgObject.getOwner() != null) { - createObject(swgObject.getOwner()); - } + createObject(swgObject.getOwner()); } - + for (SWGObject swgObject : removed) { - if (swgObject.getOwner() != null) { - destroyObject(swgObject.getOwner()); - } + destroyObject(swgObject.getOwner()); } } diff --git a/src/services/galaxy/TravelService.java b/src/services/galaxy/TravelService.java index 3826bd29..a97e0748 100644 --- a/src/services/galaxy/TravelService.java +++ b/src/services/galaxy/TravelService.java @@ -418,7 +418,7 @@ public class TravelService extends Service { ticket.addAttribute("@obj_attr_n:travel_arrival_planet", "@planet_n:" + destination.getLocation().getTerrain().getName()); ticket.addAttribute("@obj_attr_n:travel_arrival_point", destination.getName()); - receiver.getSlottedObject("inventory").addObject(ticket); + ticket.moveToContainer(receiver.getSlottedObject("inventory")); } private void handleTicketUse(TicketUseIntent i) {