Installer le plugin
Installer le plugin Forgewatch sur un serveur Hytale et le lier au dashboard.
1. Construire le jar
Prérequis : un JDK 17 ou plus récent pour lancer Gradle. Le JDK 25 cible est téléchargé automatiquement (toolchain Gradle + foojay).
# 1. Copier l'API serveur Hytale (fournie avec le serveur dédié) : cp /chemin/vers/hytale/server/HytaleServer.jar plugin/libs/HytaleServer.jar # 2. Construire : cd plugin && ./gradlew build
| Jar produit | Contenu | Usage |
|---|---|---|
plugin/hytale/build/libs/forgewatch-0.1.0.jar | cœur + adaptateur Hytale + manifest.json | À déposer dans le dossier mods/ du serveur |
plugin/core/build/libs/forgewatch-core-0.1.0.jar | cœur + simulateur (aucune dépendance) | Mode --simulate, tests |
Sans libs/HytaleServer.jar, le module hytale est ignoré (avec un message explicite) : seul le jar cœur et simulateur est produit.
2. Lier le serveur
Dans le dashboard, allez dans Onboarding (ou Vue d'ensemble → Ajouter un serveur), nommez le serveur, puis Générer le code. Le code est valable 10 minutes et ne sert qu'une fois.
Déposez
forgewatch-0.1.0.jardansmods/, puis redémarrez le serveur.Dans la console du serveur, ou en jeu avec la permission
forgewatch.admin, tapez :/fw link K7QP-3MZX
Le serveur passe « en ligne » dans le dashboard, en général en quelques secondes et en moins de 60 s.
Commandes disponibles :
| Commande | Effet |
|---|---|
/fw link <code> | Liaison du serveur, ou reliaison après une rotation de clé |
/fw status | État : lié, connecté, taille du tampon, nombre de bans, dernière erreur |
/fw ban <joueur> [motif] | Ban propagé à tout le réseau (plan Réseau) ou à ce serveur |
3. Configuration (mods/Forgewatch/forgewatch.properties)
Le fichier est créé au premier démarrage et complété par /fw link.
# URL de l'API Forgewatch api.url=https://api.forgewatch.io # Clé du serveur (secrète, écrite par /fw link) server.key=fw_… server.id=… # Sel de pseudonymisation des joueurs (écrit par /fw link) account.salt=… # Collecte du chat (désactivée par défaut ; pilotée aussi depuis le dashboard) chat.enabled=false # Transmettre les pseudos (les identifiants restent toujours hachés) privacy.send_display_names=true # Intervalle d'envoi des lots (secondes) flush.interval.seconds=10 # Intervalle des relevés de santé TPS / mémoire / joueurs (secondes) health.interval.seconds=30 # Taille maximale du tampon hors ligne (les plus anciens événements sont supprimés au-delà) buffer.capacity=10000
4. Garanties de fonctionnement
Aucune I/O sur le fil du jeu. Les événements vont dans un tampon mémoire sans verrou ; un fil dédié (
forgewatch-net) se charge du réseau et du disque.API injoignable. Le jeu continue normalement. Jusqu'à 10 000 événements sont conservés (les plus anciens sont supprimés au-delà), avec reconnexion en backoff exponentiel (1 s → 60 s) et repli HTTPS si le WebSocket échoue.
Bans. Synchronisation complète au démarrage (
GET /v1/bans), puis application en temps réel. Un joueur banni est expulsé à la connexion.Pseudonymisation. L'UUID du joueur ne quitte jamais le serveur ; seul
HMAC-SHA256(sel du compte, UUID)est envoyé.Performance. Le test
CapturePerformanceTestéchoue si le surcoût de capture dépasse 1 ms par tick (mesure sur 10 000 événements).
5. Tester sans le jeu (mode simulation)
cd plugin ./gradlew :core:simulate --args="--api http://localhost:4000 --code K7QP-3MZX --players 40 --chat" # ou, avec un Java 25 installé : java -jar core/build/libs/forgewatch-core-0.1.0.jar --simulate --api http://localhost:4000 --code K7QP-3MZX
Options : --players N (taille du vivier), --interval S (envoi), --health S, --chat, --duration S, --data-dir DIR.
Le simulateur :
génère des connexions, déconnexions, messages de chat, commandes et creux de TPS ;
affiche chaque ban reçu (
Ban reçu : …) et chaque expulsion.
6. Adaptateur Hytale : points à vérifier
L'API serveur de Hytale n'étant pas encore stabilisée publiquement, HytalePlatform est écrit d'après les exemples publics de plugins. Chaque appel incertain est marqué // TODO(hytale-api): vérifier ; la liste complète figure dans DECISIONS.md. Tout le reste du plugin (cœur, tests, simulateur) ne dépend que de l'interface GamePlatform.