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.
Depuis une section de configuration
Section intitulée « Depuis une section de configuration »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());Depuis le code
Section intitulée « Depuis le code »DisguiseProfile profile = DisguiseProfile.builder() .name(new NameSpec(true, "medieval", "§7Masqué ", "")) .skin("random") .health(new HealthSpec(true, List.of("&4"))) .showArmor(false) .showNbts(false) .build();| Partie | Type | Contrôle |
|---|---|---|
name | NameSpec | L’affichage du nom, sa valeur, son préfixe et son suffixe. |
skin | String | Une valeur source, décrite plus bas. |
health | HealthSpec | L’affichage des cœurs et leur couleur. |
showArmor | boolean | La visibilité de l’armure portée. |
showFire | boolean | La visibilité des flammes quand le joueur brûle. |
showStuckArrows | boolean | La visibilité des flèches plantées. |
showNbts | boolean | La 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.
Les valeurs sources du nom et du skin
Section intitulée « Les valeurs sources du nom et du skin »NameSpec.value et skin partagent la même grammaire, résolue au moment où un joueur est déguisé :
| Valeur | Résultat |
|---|---|
"random" | Une entrée au hasard du pool default. |
| Un nom de pool | Une entrée au hasard de ce pool. |
"%placeholder%" | Le placeholder résolu sur le joueur masqué. |
| Autre chose | La 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.
NameSpec et HealthSpec
Section intitulée « NameSpec et HealthSpec »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é.
Les déguisements par règle
Section intitulée « Les déguisements par règle »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.