Tab Lists

Avertissement

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

Les tab lists sont utilisées dans Minecraft pour afficher la liste des joueurs qui sont actuellement sur un serveur. SpongeAPI permet de manipuler la tab list pour chaque joueur.

Pour récupérer la TabList d’un joueur, vous devez simplement appeler la méthode Player#getTabList() :

import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.entity.living.player.tab.TabList;

TabList tablist = player.getTabList();

Maintenant que nous avons obtenu la TabList, nous pouvons modifier plusieurs de ses composants. Par exemple, pour modifier l’en-tête ou le bas de page de la TabList, nous devons simplement appeler les méthodes appropriées :

import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;

tablist.setHeader(Component.text("The tab list header", NamedTextColor.GOLD));
tablist.setFooter(Component.text("The tab list footer", NamedTextColor.RED));

We can call the TabList#setHeaderAndFooter(Component, Component) method if we want to alter both of them at once:

tablist.setHeaderAndFooter(Component.text("header"), Component.text("footer"));

Note

If you are wanting to alter the tab list header and footer, it is recommended to use the setHeaderAndFooter() method over individually calling the TabList#setHeader(Component) and TabList#setFooter(Component) methods, as it only sends one packet instead of two separate packets for the header and the footer.

Entrées de la Tab List

Maintenant que nous avons définit l’en-tête et le bas de page de la TabList, nous pouvons également ajouter nos propres entrées à la liste. Un exemple de ceci est illustré ci-dessous :

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);

Maintenant décomposons ceci. Nous définissons la liste associée à la TabListEntry de notre TabList spécifiée en utilisant la méthode TabListEntry.Builder#list(TabList). Nous définissons alors le mode de jeu de notre entrée sur GameModes#SURVIVAL. Le mode de jeu de notre entrée est utilisé pour déterminer diverses choses. Sur le client, c’est utilisé pour déterminer si un joueur est en créatif ou en spectateur. Si le mode de jeu est spectateur, alors ce nom va aussi apparaître en gris et en italique. Nous devons alors spécifier le GameProfile associé à cette entrée. Le GameProfile peut être construit en utilisant la méthode GameProfile#of(), ou il peut être obtenu depuis un vrai profil, comme un joueur. Pour plus d’informations, voir l’article Gestionnaire de Profil de Jeu. Pour appliquer l’entrée à la tab list, nous devons simplement appeler la méthode TabList#addEntry(TabListEntry).

Nous pouvons étoffer notre exemple basique en spécifier des choses spécifiques comme le nom d’affichage ou la latence de l’entrée :

TabListEntry entry = TabListEntry.builder()
    .list(tablist)
    .displayName(Component.text("Spongie"))
    .latency(0)
    .profile(gameProfile)
    .build();
tablist.addEntry(entry);

Here, we set the display name that our entry will appear under to Spongie using the TabListEntry.Builder#displayName(Component) method. We then set the latency for our TabListEntry to five bars. See the TabListEntry#setLatency(int) method for more information on how to specify other types of bars for our entry.

Modifier les Entrées Actuelles

En utilisant la TabList, nous pouvons obtenir les entrées qui sont actuellement sur la TabList pour faire nos propres modifications. Pour obtenir une entrée spécifique, utilisez la méthode TabList#getEntry(UUID). Cette méthode va retourner Optional.empty() si l’UUID spécifié n’a pas pu être trouvé. Un exemple est illustré ci-dessous :

import java.util.Optional;

Optional<TabListEntry> optional = tablist.getEntry(uuid);
if (optional.isPresent()) {
    TabListEntry entry = optional.get();
}

Avec ceci, nous pouvons utiliser les méthodes sur TabListEntry pour modifier le mode de jeu, la latence, et le nom d’affichage de l’entrée :

entry.setDisplayName(Component.text("Pretender Spongie"));
entry.setLatency(1000);
entry.setGameMode(GameModes.SPECTATOR);

Comme une alternative à la récupération d’entrées, nous pouvons aussi enlever une entrée spécifique. Nous devons simplement appeler la méthode TabList#removeEntry(UUID), en spécifiant l”UUID de l’entrée que nous souhaitons enlever. Comme avec getEntry(UUID), cette méthode va retourner Optional.empty() si l’UUID spécifiée n’a pas pu être trouvée.

Si nous n’avons pas d’entrée spécifique à modifier, nous pouvons alors itérer à travers toutes les TabListEntrys dans une TabList. Nous devons juste appeler la méthode TabList#getEntries() pour obtenir une Collection<TabListEntry> à travers laquelle nous pouvons itérer.