Aller au contenu

Déguisements

Un DisguiseProfile est la version code de la section disguise de config.yml : le nom, le skin, les cœurs et les détails d’objets sous lesquels apparaît un joueur masqué.

Une zone qui ne définit aucun déguisement utilise celui de config.yml, ce qui est en général ce qu’on veut : les administrateurs règlent l’apparence, votre plugin décide du lieu et du moment.

L’intégration la plus simple lit le déguisement dans votre propre fichier de configuration, avec les clés que les administrateurs connaissent déjà :

.disguise(getConfig().getConfigurationSection("events.koth.hider"))

Les clés absentes de la section retombent sur le déguisement global : un administrateur peut donc ne surcharger que le préfixe et hériter du reste.

Pour lire un profil sans ouvrir de zone :

DisguiseProfile profile = DisguiseProfile.fromSection(section, DisguiseProfile.defaults());
DisguiseProfile profile = DisguiseProfile.builder()
.name(new NameSpec(true, "medieval", "§7Masqué ", ""))
.skin("random")
.health(new HealthSpec(true, List.of("&4")))
.showArmor(false)
.showNbts(false)
.build();
PartieTypeContrôle
nameNameSpecL’affichage du nom, sa valeur, son préfixe et son suffixe.
skinStringUne valeur source, décrite plus bas.
healthHealthSpecL’affichage des cœurs et leur couleur.
showArmorbooleanLa visibilité de l’armure portée.
showFirebooleanLa visibilité des flammes quand le joueur brûle.
showStuckArrowsbooleanLa visibilité des flèches plantées.
showNbtsbooleanLa visibilité des détails d’objets.

DisguiseProfile.defaults() donne la base neutre : un nom et un skin au hasard, avec les cœurs, l’armure et les effets tous visibles.

NameSpec.value et skin partagent la même grammaire, résolue au moment où un joueur est déguisé :

ValeurRésultat
"random"Une entrée au hasard du pool default.
Un nom de poolUne entrée au hasard de ce pool.
"%placeholder%"Le placeholder résolu sur le joueur masqué.
Autre choseLa valeur elle-même : un nom fixe, une clé d’entrée de skins.yml, ou un pseudo.

DisguiseProfile.RANDOM et DisguiseProfile.DEFAULT_POOL contiennent les deux mots-clés, et isRandom(String) comme isPlaceholder(String) permettent de classer une valeur au besoin.

Les pools eux-mêmes viennent de usernames.yml et de skins.yml. Votre plugin ne peut pas en ajouter à l’exécution : un profil construit en code fait donc référence à des pools que l’administrateur a configurés.

public record NameSpec(boolean show, String value, String prefix, String suffix) {}
public record HealthSpec(boolean show, List<String> colors) {}

prefix et suffix acceptent les codes couleur et les placeholders, y compris les relationnels résolus pour chaque observateur. Attention : ils sont stockés déjà traduits. Un profil construit depuis une section de configuration a vu ses codes & convertis, alors qu’un profil que vous construisez en code garde la chaîne telle que vous la passez. Utilisez donc le signe de section si vous le construisez vous-même.

HealthSpec.colors prend une seule entrée pour une couleur fixe, ou plusieurs pour en tirer une au hasard à chaque déguisement. Une liste vide retombe sur le rouge foncé.

Une règle de révélation peut afficher une cible sous un second déguisement plutôt que sous sa vraie identité. Dans zones.yml, c’est le bloc disguise de la règle. Via l’API, cette possibilité n’est pas exposée sur ZoneBuilder : une règle qui correspond révèle le vrai joueur.

Pour obtenir le même effet depuis le code, pilotez l’apparence par le déguisement de la zone en utilisant des placeholders qui varient déjà d’un joueur à l’autre, ou définissez la zone dans zones.yml et démarrez-la avec /sh start depuis votre plugin.