Skip to content

2.1.0

Choose a tag to compare

@Loutreee Loutreee released this 27 Feb 16:07
· 32 commits to master since this release

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é).
  • 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(), et setMobsKilled() pour initialiser les compteurs à partir d'un snapshot (permet de reprendre après redémarrage).

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 StatsManager et combinés avec le temps de jeu (via Statistic.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.

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 /web du classpath.
    • Javalin est configuré pour servir ces fichiers via le chemin / (ou un autre chemin dédié).

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 le package.json a é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.