Repository navigation
2.0.0
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
NitriteBuilderqui 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 viaNitriteBuilder.close()lors de l'activation/désactivation du plugin.
-
Gestion du mapping d'entités :
- Création de la classe
PlayerDatapour représenter les joueurs. - Annotation de
PlayerDataavec@Entityet@Idprovenant deorg.dizitart.no2.repository.annotationspour permettre à Nitrite de mapper automatiquement les objets. - Résolution d'erreurs de mapping en enregistrant un convertisseur personnalisé.
- Création de la classe
-
Implémentation d’un EntityConverter personnalisé :
- Création de la classe
PlayerDataConverterimplémentantEntityConverter<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".
- Création de la classe
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.
- Les fichiers statiques (build de l'application React) sont servis depuis le dossier
-
Implémentation des endpoints REST :
- Création de la classe
PlayerControllerqui 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.
- GET
- 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
PlayerServicepour encapsuler la logique d'accès à Nitrite.
- Création de la classe
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
PlayersListqui 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
builddans le dossier/webdes ressources du plugin. - Mise à jour du champ
"homepage"dans lepackage.jsonde React pour qu'il corresponde au chemin/(ex."homepage": "/") afin d'assurer la bonne résolution des chemins relatifs aux ressources (JS, CSS, images).
- Build de l'application React (généralement avec
-
Accès à l'application React via Javalin :
- L'application React est accessible à l'URL
http://localhost:7000/et se charge automatiquement grâce au fichierindex.htmlplacé dans le dossier/web.
- L'application React est accessible à l'URL
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
BukkitRunnablepour afficher la liste de tous les joueurs enregistrés dans la console du serveur. - Code exemple dans
StatCraft.javadansonEnable():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.
- Mise en place d'une tâche planifiée (tous les 5 secondes) avec
-
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).
- Toutes les classes Java (NitriteBuilder, PlayerData, PlayerDataConverter, PlayerService, PlayerController et l'intégration Javalin) sont contenues dans le package