Repository navigation
2.1.0
Ce changelog récapitule l'ensemble des modifications récentes apportées au plugin StatCraft pour :
- Accumuler les statistiques de jeu en mémoire (blocs minés, items craftés, mobs tués).
- Snapshoter ces statistiques à intervalles réguliers et lors de la déconnexion d'un joueur.
- Exposer ces données via une API REST (Javalin) et servir une application React.
1. Système de Statistiques en Mémoire
Création du StatsManager & PlayerStats
-
StatsManager :
- Gestion d'une map en mémoire associant l'UUID du joueur à un objet
PlayerStats. - Méthodes pour incrémenter les compteurs lors des événements (bloc cassé, item crafté, mob tué).
- Gestion d'une map en mémoire associant l'UUID du joueur à un objet
-
PlayerStats :
- Stocke trois maps :
blocksMined: nombre de blocs minés par type.itemsCrafted: nombre d'items craftés par type.mobsKilled: nombre de mobs tués par type.
- Ajout de méthodes
setBlocksMined(),setItemsCrafted(), etsetMobsKilled()pour initialiser les compteurs à partir d'un snapshot (permet de reprendre après redémarrage).
- Stocke trois maps :
2. Gestion des Événements de Jeu
Événements Utilisés
-
onBlockBreak (BlockBreakEvent)
- Incrémente le compteur correspondant au type de bloc cassé.
- Log détaillé de l'événement (ex: "Alex a miné un bloc de STONE").
-
onCraftItem (CraftItemEvent)
- Incrémente le compteur pour l'item crafté (uniquement lorsque le craft est validé, pas lors de la préparation).
- Log pour confirmer l'item crafté.
-
onEntityDeath (EntityDeathEvent)
- Si un joueur tue un mob, incrémente le compteur du type de mob.
- Log pour indiquer quel type de mob a été tué.
-
onPlayerJoin (PlayerJoinEvent)
- Vérifie et insère le joueur dans la base Nitrite s'il n'y est pas déjà.
- Initialise les compteurs en mémoire à partir du dernier snapshot enregistré dans la base, pour garantir la continuité des statistiques.
-
onPlayerQuit (PlayerQuitEvent)
- Lorsqu'un joueur se déconnecte, un snapshot est immédiatement inséré dans la base pour préserver l'état final des statistiques.
- Supprime les données en mémoire pour libérer des ressources.
3. Snapshots des Statistiques
Insertion Périodique et à la Déconnexion
-
Snapshots Périodiques
- Une tâche planifiée (toutes les 30 secondes / 600 ticks) parcourt tous les joueurs connectés.
- Pour chaque joueur, les compteurs (blocs minés, items craftés, mobs tués) sont lus depuis le
StatsManageret combinés avec le temps de jeu (viaStatistic.PLAY_ONE_MINUTE). - Un snapshot est créé avec un timestamp (format ISO) et inséré dans la collection
"playerStatsSnapshots"dans Nitrite. - Logs détaillés affichant, pour chaque joueur, le détail par type et le total de chaque catégorie.
-
Insertion lors de la Déconnexion
- Lors du
PlayerQuitEvent, un snapshot est inséré immédiatement pour le joueur concerné. - Ceci permet de s'assurer que l'état final des statistiques est sauvegardé, évitant ainsi la réinitialisation à zéro lors d'un redémarrage.
- Lors du
4. API REST et Intégration de l'Application React
API REST avec Javalin
- Javalin 6 est utilisé pour exposer une API REST et servir les fichiers statiques de l'application React.
- Endpoints :
- /api/players : Gère la récupération et l'insertion de données sur les joueurs.
- /api/allstats : Expose l'ensemble des snapshots de statistiques en JSON.
- Configuration des Fichiers Statique :
- Les fichiers issus du build de l'application React sont placés dans le dossier
/webdu classpath. - Javalin est configuré pour servir ces fichiers via le chemin
/(ou un autre chemin dédié).
- Les fichiers issus du build de l'application React sont placés dans le dossier
Application React
- L'application React (buildée avec Create React App) est intégrée dans les ressources du plugin.
- La configuration du champ
"homepage"dans lepackage.jsona été ajustée pour correspondre au chemin de déploiement. - L'application communique avec l'API REST pour afficher les statistiques et réaliser des graphiques d'évolution.
5. Persistance et Reprise après Redémarrage
- Persistance des Snapshots
- Les snapshots sont stockés de manière persistante dans Nitrite.
- Reprise des Données en Mémoire
- Lors de la connexion d'un joueur, le dernier snapshot est récupéré pour initialiser les compteurs dans le
StatsManager. - Ceci permet que les compteurs ne repartent pas de zéro après un redémarrage, assurant la continuité des statistiques.
- Lors de la connexion d'un joueur, le dernier snapshot est récupéré pour initialiser les compteurs dans le