Aller au contenu principal

Ghost

Affichez les joueurs d'autres serveurs de votre réseau sous forme de fantômes côté client, avec un interrupteur par joueur.

Privéesv0.1Social
NécessiteTypeWriter0.9.0-beta-177 (BTC build)MySQL (TypeWriter extension)Redis or ValkeyPacketEventsMiniPlaceholdersUiCore (TypeWriter extension)facultatif

Conçue pour le réseau BornToCraft. Cette extension est documentée à titre de référence et n'est pas distribuée.

Présentation​

Sur un réseau de plusieurs serveurs backend, deux joueurs qui se tiennent dans la même carte sur des serveurs différents ne peuvent pas se voir. Ghost règle cela visuellement : chaque serveur publie via Redis la position, la rotation et le skin de ses joueurs, et les autres serveurs les dessinent sous forme de fantômes à l'apparence de joueur, grâce à des paquets. Rien n'est ajouté au monde, et un fantôme n'a aucune entité côté serveur : il ne peut donc être ni frappé, ni poussé, ni ciblé.

Chaque joueur décide s'il voit les fantômes. Le choix est stocké dans un fact TypeWriter, il survit donc aux redémarrages et suit le joueur de serveur en serveur. Les fantômes n'apparaissent qu'entre des serveurs qui partagent le même redis.group-id dans la configuration MySQL, et un serveur ne dessine jamais ses propres joueurs comme des fantômes.

Fonctionnalités​

  • Fantômes inter-serveurs — les joueurs des autres serveurs backend apparaissent avec leur skin, leur position et leur rotation.
  • Rendu uniquement par paquets — construit sur PacketEvents, aucune entité côté serveur n'est créée.
  • Compatible Folia — chaque capture et chaque rendu s'exécute sur le scheduler du joueur concerné.
  • Interrupteur de visibilité — /ghost toggle, une action TypeWriter ou un bouton de menu active et désactive les fantômes par joueur.
  • Choix persistant — la préférence est un fact persistable partagé entre les serveurs.
  • Étiquette de serveur — un suffixe configurable tel que [survival-2] indique d'où vient un fantôme.
  • Limites — la distance de vue, le nombre maximal de fantômes par spectateur, la fréquence de mise à jour et le filtrage des mondes maintiennent le coût borné.
  • Nameplates — si UiCore est installé, les fantômes reçoivent une nameplate au-dessus de la tête.
  • Placeholders — visibilité et nombre de fantômes pour les textes MiniMessage.

Installation​

  1. Installez PacketEvents sur chaque serveur.
  2. Installez l'extension MySQL et activez Redis (ou Valkey) sur chaque serveur. Donnez à chaque serveur un redis.server-name unique et le même redis.group-id. Ghost n'a pas ses propres paramètres Redis.
  3. Placez le JAR de Ghost dans plugins/Typewriter/extensions/ et redémarrez. Le fichier plugins/Typewriter/ghost_player/config.yml est créé au premier démarrage.
  4. Accordez la permission typewriter.ghost.use aux joueurs autorisés à utiliser /ghost. Sans plugin de permissions, seuls les opérateurs le peuvent.
  5. Facultatif : installez UiCore pour dessiner des nameplates au-dessus des fantômes.

Premiers pas​

Laissez les joueurs activer ou désactiver les fantômes depuis un menu ou un PNJ de quête :

  1. Dans le panneau web de TypeWriter, ouvrez une page et ajoutez une entrée de fact Ghost Visibility Fact. Gardez son id par défaut, ghost_visibility_fact : l'extension lit et écrit le fact avec cet identifiant.
  2. Ajoutez une action Ghost Toggle Visibility sur une séquence ou un objet de menu. Renseignez showMessage et hideMessage avec du texte MiniMessage, ou laissez-les vides pour utiliser les messages par défaut.
  3. Ajoutez éventuellement un critère sur le fact Ghost Visibility (la valeur 1 signifie visible, 0 masqué) pour afficher une icône différente dans un menu.
  4. Publiez et connectez-vous à deux serveurs du même groupe. Chaque joueur voit l'autre comme un fantôme avec le suffixe du serveur.
Aucun fantôme visible sur un seul serveur

Un serveur ignore ses propres diffusions. Pour tester, démarrez deux serveurs avec le même redis.group-id et des redis.server-name différents, et placez-vous dans des mondes autorisés à correspondre (voir ci-dessous).

Fonctionnement​

Chaque serveur publie un instantané de chaque joueur local à la fréquence configurée, ainsi qu'un battement de cœur pour que les joueurs inactifs restent en vie. Un fantôme disparaît lorsque son propriétaire quitte le serveur, ou lorsqu'aucune mise à jour n'arrive dans le délai timeout-millis. Chaque message porte un identifiant de session et un numéro de séquence ; les messages tardifs ou dupliqués sont donc ignorés.

Un fantôme est dessiné pour un spectateur lorsque celui-ci a activé les fantômes, que les mondes sont compatibles, que le fantôme se trouve dans la view-distance et que le spectateur a moins de max-ghosts-per-viewer fantômes, les plus proches en premier.

Configuration​

Le fichier est plugins/Typewriter/ghost_player/config.yml. Son schema-version doit valoir 1 ou 2.

schema-version: 2

settings:
update-rate: 4
server-suffix: " <gray>[%server%]</gray>"
team-prefix: "Ghosts"
view-distance: 64.0
max-ghosts-per-viewer: 128
timeout-millis: 10000
allowed-worlds:
- "world"
- "dungeon_"
- "hub"

messages:
no-permission: "<red>You do not have permission to use ghost visibility."
players-only: "<red>This command can only be used by a player."
enabled: "<green>Ghost visibility enabled."
disabled: "<yellow>Ghost visibility disabled."
usage: "<gray>Usage: <white>/ghost toggle"

command:
permission: "typewriter.ghost.use"
CléSignification
settings.update-rateTicks entre deux captures de position. Borné de 1 à 20.
settings.server-suffixTexte MiniMessage ajouté après le nom du fantôme. %server% devient le nom du serveur d'origine.
settings.team-prefixPréfixe de l'équipe de scoreboard affichée pour chaque serveur d'origine.
settings.view-distanceDistance maximale en blocs, de 0 à 256. 0 désactive la limite de distance.
settings.max-ghosts-per-viewerFantômes dessinés par spectateur, de 0 à 2000. 0 n'en affiche aucun.
settings.timeout-millisDélai sans mise à jour avant la suppression d'un fantôme, de 2000 à 120000.
settings.allowed-worldsMotifs de noms de mondes considérés comme la même carte d'un serveur à l'autre. Jusqu'à 64 entrées.
messages.*Textes MiniMessage utilisés par /ghost.
command.permissionPermission requise par /ghost.

Mondes. Un fantôme est visible lorsque le spectateur et le fantôme se trouvent dans des mondes de même nom, ou lorsque les deux noms de mondes contiennent le même motif de allowed-worlds (par exemple dungeon_ correspond à dungeon_1 et dungeon_2). La distance ne peut être mesurée qu'à l'intérieur d'un même monde ; avec une view-distance supérieure à 0, les fantômes d'un monde portant un autre nom sont donc masqués. Définissez view-distance sur 0 si vous comptez sur la correspondance par motif.

La connexion Redis, le nom du serveur et l'identifiant de groupe sont lus depuis la configuration MySQL. Le fichier n'est lu qu'une fois au démarrage : redémarrez le serveur après l'avoir modifié.

Commandes​

CommandeDescription
/ghost toggleActive ou désactive la visibilité des fantômes pour vous-même.

Alias : /ghosts, /ghostplayer. Réservée aux joueurs. La permission est command.permission, typewriter.ghost.use par défaut.

Permissions​

PermissionAutorise
typewriter.ghost.use/ghost toggle. Le nom peut être changé avec command.permission. La permission n'est pas enregistrée avec une valeur par défaut ; elle doit donc être accordée.

L'action Ghost Toggle Visibility ne vérifie pas cette permission.

Placeholders​

Balises MiniPlaceholders pour les textes MiniMessage. PlaceholderAPI n'est pas pris en charge.

PlaceholderRenvoie
<ghost_visibility>true lorsque le joueur voit les fantômes, false sinon.
<ghost_visible>1 lorsque le joueur voit les fantômes, 0 sinon.
<ghost_count>Nombre de fantômes distants actuellement connus de ce serveur.

Entrées​

2 entrées, générées depuis la source de l'extension.

Actions1
Faits1

Dépannage​

Aucun fantôme n'apparaît. Vérifiez, dans cet ordre : les deux serveurs utilisent le même redis.group-id non vide et des valeurs de redis.server-name différentes, Redis est connecté (sinon le journal indique « BTC RedisService is not connected; Ghost updates will remain inactive »), le spectateur a activé les fantômes, et les deux joueurs sont dans des mondes compatibles (même nom de monde, ou un motif allowed-worlds commun avec view-distance: 0).

Les joueurs d'un même serveur n'apparaissent jamais comme fantômes. C'est normal : un serveur ignore les messages qu'il a lui-même publiés.

L'extension ne démarre pas avec « Unsupported Ghost custom config schema ». schema-version dans ghost_player/config.yml est en dehors de 1..2. Définissez-le sur 2.

L'extension échoue avec une erreur de nom de serveur. redis.server-name dans la configuration MySQL ne doit contenir que des lettres, des chiffres, ., _ ou -, jusqu'à 64 caractères.

/ghost indique que vous n'avez pas la permission. La permission n'a pas de valeur par défaut. Accordez typewriter.ghost.use (ou la permission que vous avez définie dans command.permission) avec votre plugin de permissions.

Les fantômes disparaissent après quelques secondes. Aucune mise à jour n'est arrivée dans le délai timeout-millis. Vérifiez la latence de Redis, et que le serveur d'origine exécute Ghost avec le même redis.group-id.

Les fantômes n'ont pas de nameplate. Les nameplates proviennent d'UiCore. Installez-le sur le serveur du spectateur. Sans lui, seul le suffixe de serveur dans le nom est affiché.

Extensions associées​

  • MySQL — gère la connexion Redis, le nom du serveur et l'identifiant de groupe utilisés par Ghost.
  • UiCore — dessine des nameplates au-dessus des fantômes lorsqu'il est installé.