Listas de Tabulaciones
Tab lists are used in Minecraft to display the list of players currently on a server. SpongeAPI allows for manipulation of the tab list on a per-player basis.
Para obtener una TabList de jugador, simplemente necesita llamar al método Player#getTabList():
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.living.player.tab.TabList;
TabList tablist = player.getTabList();
Ahora que hemos obtenido la TabList
, podemos modificar varios componentes de ella. Por ejemplo: para establecer el encabezado o pie de página de la TabList
, simplemente necesitamos llamar sus métodos apropiados:
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;
tablist.setHeader(Text.of(TextColors.GOLD, "The tab list header"));
tablist.setFooter(Text.of(TextColors.RED, "The tab list footer"));
Podemos llamar el método TabList#setHeaderAndFooter(Text, Text) si queremos modificar ambos de una vez:
tablist.setHeaderAndFooter(Text.of("header"), Text.of("footer"));
Nota
Si quiere modificar el encabezado y el pie de página de la lista de tabulación, es recomendable utilizar el método setHeaderAndFooter()
, individualmente se puede llamar a los métodos TabList#setHeader(Text) y TabList#setFooter(Text), ya que solo envía un paquete en lugar de dos paquetes separados para el encabezado y el pie de página.
Entradas de la Lista de Tabulación
Ahora que hemos establecido el encabezado y el pie de página de la TabList
, también podemos agregar nuestra propia entrada a la lista. Un ejemplo de esto se muestra a continuación:
import org.spongepowered.api.entity.living.player.gamemode.GameModes;
import org.spongepowered.api.entity.living.player.tab.TabListEntry;
import org.spongepowered.api.profile.GameProfile;
TabListEntry entry = TabListEntry.builder()
.list(tablist)
.gameMode(GameModes.SURVIVAL)
.profile(gameProfile)
.build();
tablist.addEntry(entry);
Now let’s break this down. We set the list associated with the TabListEntry to our specified TabList
using the TabListEntry.Builder#list(TabList) method. We then set the game mode of our entry to
GameModes#SURVIVAL. The game mode of our entry is used to determine various things. On the client, it is
used to determine if a player is in creative or perhaps a spectator. If the game mode is spectator, then their name
will also appear gray and italicized. We then need to specify the GameProfile
that the entry is associated with.
The GameProfile
may be constructed using the GameProfile#of()
method, or it can be obtained from a real
profile, such as a player. For more information, see the Administrador de Perfiles del Juego article. To apply the entry to the
tab list, we simply need to call the TabList#addEntry(TabListEntry) method.
Podemos desarrollar nuestro ejemplo básico para cosas específicas como el nombre para mostrar o el estado latente de la entrada:
TabListEntry entry = TabListEntry.builder()
.list(tablist)
.displayName(Text.of("Spongie"))
.latency(0)
.profile(gameProfile)
.build();
tablist.addEntry(entry);
Aquí, establecemos el nombre para mostrar de nuestra entrada que aparecerá abajo de Spongie utilizando el método TabListEntry.Builder#displayName(Text). Luego, establecemos la latencia para nuestra TabListEntry
para cinco barras. Vea el método TabListEntry#setLatency(int) para más información sobre como especificar otros tipos de barras para nuestra entrada.
Modificación de Entradas Actuales
Utilizando la TabList
, podemos obtener actualmente entradas en la TabList
para nuestra propia modificación. Para obtener una entrada específica, utilice el método TabList#getEntry(UUID). Este método devolverá Optional.empty()
si el UUID especificado no puede ser encontrado. Un ejemplo se muestra a continuación:
import java.util.Optional;
Optional<TabListEntry> optional = tablist.getEntry(uuid);
if (optional.isPresent()) {
TabListEntry entry = optional.get();
}
Con esto, podemos utilizar los métodos en TabListEntry
para modificar el modo de juego, la latencia y el nombre para mostrar de la entrada:
entry.setDisplayName(Text.of("Pretender Spongie"));
entry.setLatency(1000);
entry.setGameMode(GameModes.SPECTATOR);
As an alternative to getting entries, we can also remove a specified entry. We must simply call the
TabList#removeEntry(UUID) method, specifying the UUID
of the entry that we wish to remove. As with
getEntry(UUID)
, this will return Optional.empty()
if the specified UUID cannot be found.
Si no tenemos una entrada específica para modificar, entonces podemos iterar por medio de todas las TabListEntry
s en una TabList
. Solo necesitamos llamar al método TabList#getEntries() para obtener una Collection<TabListEntry>
que podemos iterar.