Repository navigation
2.2.0
1. Gestion des Statistiques et Calcul du Score
a. Score par catégorie et score global
-
Nouveaux champs dans PlayerStats :
- Ajout de sous-scores pour chaque catégorie :
blockScorepour les blocs minéscraftScorepour les items craftésmobScorepour les mobs tuéstimeScorepour le temps de jeu (1 point par minute)
- Ajout d’un champ
totalScorequi est la somme des sous-scores.
- Ajout de sous-scores pour chaque catégorie :
-
Méthodes d'incrémentation :
- Ajout des méthodes
addBlockScore(int amount),addCraftScore(int amount),addMobScore(int amount), etaddTimeScore(int amount)dans PlayerStats. - Lors des événements (bloc cassé, item crafté, mob tué), on récupère la valeur du score depuis la config via ScoreService et on incrémente le sous-score correspondant ET le
totalScore.
- Ajout des méthodes
b. Gestion du temps de jeu
- Lors de l'insertion d'un snapshot, le temps de jeu actuel (exprimé en minutes via
Statistic.PLAY_ONE_MINUTE) est comparé avec le dernier temps enregistré (lastPlayTime). - La différence (différence en minutes) est ajoutée au
timeScoreet autotalScore. - Mise à jour du champ
lastPlayTimepour assurer la continuité.
2. Chargement de la Configuration
-
ConfigLoader :
- Lecture du fichier
config.ymlpour récupérer :- Le port à utiliser pour l’API REST (
Web.port). - Les listes de scores pour les blocs, mobs et crafts (chaque entrée définit un nom et un score).
- Le port à utiliser pour l’API REST (
- Fournit des méthodes telles que
getBlockScore(Material),getMobScore(EntityType)etgetCraftScore(Material)qui sont utilisées par le ScoreService pour incrémenter les scores.
- Lecture du fichier
-
ScoreService :
- Une couche intermédiaire qui encapsule l’accès aux scores via le ConfigLoader.
- Fournit notamment une méthode
getTimeScore()renvoyant 1 point par minute.
3. Insertion et Restauration des Snapshots
a. Insertion des snapshots
-
StatsSnapshotService :
- La méthode
insertPlayerSnapshot(...)a été mise à jour pour enregistrer dans le document les maps de statistiques ainsi que les sous-scores (blockScore,craftScore,mobScore,timeScore) et letotalScore. - Chaque snapshot inclut également un timestamp (format ISO) pour tracer l'évolution dans le temps.
- La méthode
-
Insertion programmée et à la déconnexion :
- Une tâche planifiée (toutes les 30 secondes) insère un snapshot pour tous les joueurs connectés.
- Lors du PlayerQuitEvent, un snapshot est inséré immédiatement pour sauvegarder l'état final des statistiques du joueur.
b. Restauration depuis le dernier snapshot
- StatsManager.initializePlayerStats(Player) :
- Lorsqu’un joueur se connecte, la méthode interroge la collection
"playerStatsSnapshots"pour récupérer le snapshot le plus récent (trié partimestampdécroissant). - Les maps (blocs minés, items craftés, mobs tués) ainsi que les sous-scores (
blockScore,craftScore,mobScore,timeScore) et letotalScoresont réinjectés dans l’objet PlayerStats. - Ceci permet à l'accumulation des statistiques de reprendre là où elle s'était arrêtée avant redémarrage ou déconnexion.
- Lorsqu’un joueur se connecte, la méthode interroge la collection
4. Correction du Comptage lors du Craft
- Problème des sticks :
- Lors du craft d’un item comme des sticks, le joueur reçoit un lot (par exemple, 4 sticks) au lieu d’un seul.
- Solution :
- Dans l'événement
onCraftItem, on récupère le résultat de la recette viaevent.getRecipe().getResult()et on multiplie la quantité de base par le nombre de fois que le craft est effectué (en cas de shift-click, par exemple). - La méthode
incrementItemCrafteddans StatsManager a été modifiée pour accepter une quantité en paramètre.
- Dans l'événement
5. API REST et Serveur Web
-
Utilisation de Javalin 6 :
- Le port utilisé pour démarrer Javalin est désormais chargé depuis le fichier de configuration (
config.yml) viaconfigLoader.getWebPort(). - Javalin est configuré pour servir les fichiers statiques depuis le dossier
/webdu classpath et exposer les endpoints REST.
- Le port utilisé pour démarrer Javalin est désormais chargé depuis le fichier de configuration (
-
Endpoints API supplémentaires :
- Ajout de contrôleurs pour exposer les statistiques, tels que :
/api/allstatspour obtenir tous les snapshots.- D’autres endpoints pour interroger les statistiques par catégorie (blocs, items, mobs, temps de jeu).
- Ajout de contrôleurs pour exposer les statistiques, tels que :