Tab Lists

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

Nous pouvons appeler la méthode TabList#setHeaderAndFooter(Text, Text) si nous voulons modifier les deux à la fois :

tablist.setHeaderAndFooter(Text.of("header"), Text.of("footer"));

Note

Si vous voulez modifier l’en-tête et le bas de page de la tab list, il est recommandé d’utiliser la méthode setHeaderAndFooter() plutôt qu’appeler les méthodes TabList#setHeader(Text) et TabList#setFooter(Text) individuellement, car cela envoie un seul paquet au lieu d’en envoyer deux séparés pour l’en-tête et le bas de page.

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(Text.of("Spongie"))
    .latency(0)
    .profile(gameProfile)
    .build();
tablist.addEntry(entry);

Ici, nous définissons le nom d’affichage de notre entrée qui va apparaître en tant que Spongie en utilisant la méthode TabListEntry.Builder#displayName(Text). Nous définissons ensuite la latence pour notre TabListEntry à cinq barres. Voir la méthode TabListEntry#setLatency(int) pour plus d’informations sur comment spécifier d’autres types de barres à notre entrée.

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(Text.of("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.