package jalse.entities.methods; import java.util.Objects; import java.util.Set; import java.util.UUID; import java.util.function.Supplier; import jalse.entities.Entity; import jalse.entities.EntityContainer; import jalse.entities.annotations.KillEntities; import jalse.entities.functions.KillEntitiesFunction; /** * This is used for mapping calls to {@link EntityContainer#killEntities()}. * * @author Elliot Ford * * @see KillEntities * @see KillEntitiesFunction * */ public class KillEntitiesMethod implements EntityMethod { private final Set<Supplier<UUID>> idSuppliers; /** * Creates a kill entities method. * * @param idSuppliers * Entity ID suppliers for filtering. */ public KillEntitiesMethod(final Set<Supplier<UUID>> idSuppliers) { this.idSuppliers = Objects.requireNonNull(idSuppliers); } /** * Gets entity ID suppliers. * * @return ID suppliers. */ public Set<Supplier<UUID>> getIDSuppliers() { return idSuppliers; } @Override public Object invoke(final Object proxy, final Entity entity, final Object[] args) throws Throwable { // Kill all if (idSuppliers.isEmpty()) { entity.killEntities(); } // Kill selected else { idSuppliers.stream().map(Supplier::get).forEach(entity::killEntity); } // void return return null; } }