package jalse.entities; import java.util.Objects; import java.util.Optional; import jalse.misc.AbstractIdentifiable; /** * Entity change event for {@link EntityListener}. This is a unique event that contains the relevant * {@link Entity} and it's parent {@link EntityContainer} (even if the Entity has been killed). * * @author Elliot Ford * * @see EntityContainer * */ public class EntityEvent extends AbstractIdentifiable { private final Entity entity; private final EntityContainer container; private final EntityContainer destination; /** * Creates a new EntityEvent with a random ID. * * @param container * Parent container for the Entity. * @param entity * Entity the event is for. */ public EntityEvent(final EntityContainer container, final Entity entity) { this(container, entity, null); } /** * Creates a new EntityEvent with a random ID. * * @param container * Parent container for the entity. * @param entity * Entity the event is for. * @param destination * Destination container for transfer events (can be null). */ public EntityEvent(final EntityContainer container, final Entity entity, final EntityContainer destination) { this.container = Objects.requireNonNull(container); this.entity = Objects.requireNonNull(entity); this.destination = destination; } /** * Gets the Entity's parent container. * * @return Entity's parent container. */ public EntityContainer getContainer() { return container; } /** * Get the destination container for the transfer event. * * @return Destination container or null if there was not one. */ public EntityContainer getDestinationContainer() { return destination; } /** * Gets the event entity. * * @return The entity the event was triggered for. */ public Entity getEntity() { return entity; } /** * Get the destination container for the transfer event. * * @return Optional containing the destination container or empty optional if nothing was * transferred. */ public Optional<EntityContainer> getOptDestinationContainer() { return Optional.ofNullable(destination); } /** * Checks whether this is a transfer event. * * @return Whether there is a destination container. */ public boolean isTransfer() { return destination != null; } }