package tc.oc.commons.bukkit.tablist; import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.GameMode; import org.bukkit.Skin; import org.bukkit.entity.Player; import javax.annotation.Nullable; import java.util.UUID; /** * Content for a slot in a {@link TabView} */ public interface TabEntry { /** * Called by {@link TabView}s when this entry is added to the view */ void addToView(TabView view); /** * Called by {@link TabView}s when this entry is removed from the view */ void removeFromView(TabView view); /** * Called by {@link TabView} during rendering to decide if this entry needs to be rendered */ boolean isDirty(TabView view); /** * Called by {@link TabView} after rendering this entry in the view */ void markClean(TabView view); /** * UUID for the entry. The client's player list is keyed on this, so it must be unique. * If it matches a real player's UUID, this entry will affect the player in all sorts of ways. */ UUID getId(); /** * {@link Player} represented by this entry, or null if it does not represent a player. * The renderer will use this player's metadata to spawn a fake player so that the * hat layer on the entry's icon can be controlled. * * See {@link PlayerTabEntry} for more info. */ @Nullable Player getFakePlayer(TabView view); /** * Entity ID of the fake player mentioned above. If used, this must not collide with any real entites. */ int getFakeEntityId(TabView view); /** * Name for the entry (not visible) */ String getName(TabView view); /** * Content to show in the entry */ BaseComponent getContent(TabView view); /** * Gamemode for the entry. If the entry is linked to a real player, this will change the client's gamemode. */ GameMode getGamemode(); /** * Ping value for the entry */ int getPing(); /** * Skin for the entry's icon */ @Nullable Skin getSkin(TabView view); }