Skip to content

2.0.0

Choose a tag to compare

@Loutreee Loutreee released this 21 Feb 14:03
· 33 commits to master since this release

Intégration de la base de données Nitrite

  • Mise en place de Nitrite DB :

    • Intégration de Nitrite 4.3.0 pour stocker les données des joueurs.
    • Création de la classe NitriteBuilder qui initialise la base de données avec MVStore.
    • Configuration du fichier de base de données dans le dossier player_statistics/player_statistic.db.
    • Gestion de l'ouverture (openOrCreate("user", "password")) et fermeture de la base via NitriteBuilder.close() lors de l'activation/désactivation du plugin.
  • Gestion du mapping d'entités :

    • Création de la classe PlayerData pour représenter les joueurs.
    • Annotation de PlayerData avec @Entity et @Id provenant de org.dizitart.no2.repository.annotations pour permettre à Nitrite de mapper automatiquement les objets.
    • Résolution d'erreurs de mapping en enregistrant un convertisseur personnalisé.
  • Implémentation d’un EntityConverter personnalisé :

    • Création de la classe PlayerDataConverter implémentant EntityConverter<PlayerData>.
    • Utilisation de Document.createDocument() pour instancier concrètement les documents.
    • Enregistrement du convertisseur via la méthode en chaîne :
      db = Nitrite.builder()
              .loadModule(storeModule)
              .registerEntityConverter(new PlayerDataConverter())
              .openOrCreate("user", "password");
    • Résolution des erreurs "Invalid repository type" et "Can't convert Document to type PlayerData".

Développement de l'API REST avec Javalin

  • Choix de Javalin 6 :

    • Utilisation de Javalin 6 pour créer une API REST intégrée au plugin.
    • Configuration de Javalin pour démarrer sur le port 28700.
  • Configuration des fichiers statiques :

    • Les fichiers statiques (build de l'application React) sont servis depuis le dossier /web (dans les ressources du plugin).
    • Configuration Javalin pour servir ces fichiers statiques sous le chemin /static:
      app = Javalin.create(config -> {
          config.staticFiles.add(staticFileConfig -> {
              staticFileConfig.directory = "/web"; // Dossier dans le classpath
              staticFileConfig.location = Location.CLASSPATH;
              staticFileConfig.hostedPath = "/static"; // Accessible via http://localhost:7000/static
          });
      }).start(27800);
    • Cela permet de dissocier les endpoints de l'API REST (ex. /api/players) du contenu statique.
  • Implémentation des endpoints REST :

    • Création de la classe PlayerController qui expose les endpoints :
      • GET /api/players : renvoie la liste de tous les joueurs enregistrés.
      • POST /api/players : permet d'ajouter un nouveau joueur via un payload JSON.
    • Utilisation de Javalin et de Jackson (intégré dans Javalin) pour gérer la conversion JSON ⇄ objets Java.
    • Exemple d'endpoint dans PlayerController :
      app.get("/api/players", ctx -> {
          List<PlayerData> players = playerService.getAllPlayers();
          ctx.json(players);
      });
    • Création de la classe PlayerService pour encapsuler la logique d'accès à Nitrite.

Intégration de l'application React

  • Développement de l'application React :

    • Création d'une application React avec Create React App.
    • Installation d'Axios pour effectuer les requêtes HTTP vers l'API REST.
    • Conception d'un composant PlayersList qui récupère et affiche la liste des joueurs via une requête GET à l'API (http://localhost:27800/api/players).
  • Build et intégration dans le plugin :

    • Build de l'application React (généralement avec npm run build).
    • Copie du contenu du dossier build dans le dossier /web des ressources du plugin.
    • Mise à jour du champ "homepage" dans le package.json de React pour qu'il corresponde au chemin / (ex. "homepage": "/") afin d'assurer la bonne résolution des chemins relatifs aux ressources (JS, CSS, images).
  • Accès à l'application React via Javalin :

    • L'application React est accessible à l'URL http://localhost:7000/ et se charge automatiquement grâce au fichier index.html placé dans le dossier /web.

Autres améliorations et fonctionnalités

  • Tâche planifiée pour le log des joueurs :

    • Mise en place d'une tâche planifiée (tous les 5 secondes) avec BukkitRunnable pour afficher la liste de tous les joueurs enregistrés dans la console du serveur.
    • Code exemple dans StatCraft.java dans onEnable() :
      new BukkitRunnable() {
          @Override
          public void run() {
              logAllPlayers();
          }
      }.runTaskTimer(this, 0L, 100L);
    • La méthode logAllPlayers() parcourt le repository Nitrite et affiche chaque nom dans la console.
  • Intégration complète dans le plugin Minecraft :

    • Toutes les classes Java (NitriteBuilder, PlayerData, PlayerDataConverter, PlayerService, PlayerController et l'intégration Javalin) sont contenues dans le package me.loutreee.statCraft.
    • L'API REST et le contenu statique (application React) sont servis via Javalin intégré dans le plugin.
    • Le plugin gère à la fois la logique de jeu (ex. lors de la connexion des joueurs) et la persistance des données (via Nitrite DB).