package jalse.entities;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import jalse.misc.AbstractIdentifiable;
/**
* Entity change event for {@link EntityTypeListener}. This is a unique event that contains the
* relevant {@link Entity}.
*
* @author Elliot Ford
*
* @see Entity
*
*/
public class EntityTypeEvent extends AbstractIdentifiable {
private final Entity entity;
private final Class<? extends Entity> typeChange;
private final Set<Class<? extends Entity>> typeChangeDependants;
/**
* Creates a new EntityTypeEvent with a random ID.
*
* @param entity
* Entity the event is for.
* @param typeChange
* Entity type change.
* @param typeChangeDependants
* Addtional types that were changed due to to this event.
*/
public EntityTypeEvent(final Entity entity, final Class<? extends Entity> typeChange,
final Set<Class<? extends Entity>> typeChangeDependants) {
this.entity = Objects.requireNonNull(entity);
this.typeChange = Objects.requireNonNull(typeChange);
this.typeChangeDependants = Objects.requireNonNull(typeChangeDependants);
}
/**
* Gets the event entity.
*
* @return The entity the event was triggered for.
*/
public Entity getEntity() {
return entity;
}
/**
* Gets the event type change.
*
* @return The type change of the triggering event.
*/
public Class<? extends Entity> getTypeChange() {
return typeChange;
}
public Set<Class<? extends Entity>> getTypeChangeDependants() {
return Collections.unmodifiableSet(typeChangeDependants);
}
}