package me.tofaa.entitylib; import me.tofaa.entitylib.event.EventHandler; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.logging.Logger; import java.util.stream.Stream; /** * A generic representation of a platform that EntityLib is running on. * @param

The platform handle, for Spigot this would be a JavaPlugin. etc etc. */ public interface Platform

{ /** * Queries a stream of platform specific entities if the platform supports * @throws UnsupportedOperationException if the platform does not support querying entities. * @return a stream of platform specific entities. The stream is not guaranteed to be synchronized. */ @NotNull Stream queryPlatformEntities(); /** * Finds a platform specific entity by its entityId. * @param entityId the entityId of the entity. * @return a future that completes with the entity if found, or null if not found. * @throws UnsupportedOperationException if the platform does not support querying entities. */ @Nullable TrackedEntity findPlatformEntity(int entityId); /** * Gets the entityId integer provider. This can be provided by a platform if needed. * @return the entityId integer provider. */ @NotNull EntityIdProvider getEntityIdProvider(); /** * Gets the UUID provider for entities. This can be provided by a platform if needed. * @return the UUID provider for entities. */ @NotNull EntityUuidProvider getEntityUuidProvider(); /** * Sets the entityId integer provider. This can be provided by a platform if needed. * @param provider the entityId integer provider. */ void setEntityIdProvider(@NotNull EntityIdProvider provider); /** * Sets the UUID provider for entities. This can be provided by a platform if needed. * @param provider */ void setEntityUuidProvider(@NotNull EntityUuidProvider provider); /** * @return the logger EntityLib uses internally. */ @NotNull Logger getLogger(); /** * Gets the event handler for the platform. * @return */ @NotNull EventHandler getEventHandler(); /** * Sets up the API for the platform. This method should be called automatically by the platform. Don't call it yourself. * @param settings */ void setupApi(@NotNull APIConfig settings); /** * @return The API instance. */ EntityLibAPI getAPI(); /** * @return the platforms name. */ String getName(); @NotNull P getHandle(); }