Skip to content

2.2.0

Choose a tag to compare

@Loutreee Loutreee released this 28 Feb 12:44
· 31 commits to master since this release

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 :
      • blockScore pour les blocs minés
      • craftScore pour les items craftés
      • mobScore pour les mobs tués
      • timeScore pour le temps de jeu (1 point par minute)
    • Ajout d’un champ totalScore qui est la somme des sous-scores.
  • Méthodes d'incrémentation :

    • Ajout des méthodes addBlockScore(int amount), addCraftScore(int amount), addMobScore(int amount), et addTimeScore(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.

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 timeScore et au totalScore.
  • Mise à jour du champ lastPlayTime pour assurer la continuité.

2. Chargement de la Configuration

  • ConfigLoader :

    • Lecture du fichier config.yml pour 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).
    • Fournit des méthodes telles que getBlockScore(Material), getMobScore(EntityType) et getCraftScore(Material) qui sont utilisées par le ScoreService pour incrémenter les scores.
  • 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 le totalScore.
    • Chaque snapshot inclut également un timestamp (format ISO) pour tracer l'évolution dans le temps.
  • 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é par timestamp décroissant).
    • Les maps (blocs minés, items craftés, mobs tués) ainsi que les sous-scores (blockScore, craftScore, mobScore, timeScore) et le totalScore sont 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.

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 via event.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 incrementItemCrafted dans StatsManager a été modifiée pour accepter une quantité en paramètre.

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) via configLoader.getWebPort().
    • Javalin est configuré pour servir les fichiers statiques depuis le dossier /web du classpath et exposer les endpoints REST.
  • Endpoints API supplémentaires :

    • Ajout de contrôleurs pour exposer les statistiques, tels que :
      • /api/allstats pour obtenir tous les snapshots.
      • D’autres endpoints pour interroger les statistiques par catégorie (blocs, items, mobs, temps de jeu).