11 KiB
11 KiB
📜 Sauvegarde de la Conversation - GamingCore Plugin
Date & Heure : 18 Août 2026
Auteur : Luc & Gemini Antigravity
Dépôt Git : https://gitea.luc-rival.fr/GeminiAntigravityCLI/gaming_core.git
Projet : C:\Développement\gamingcore
1. Initialisation & Accès Gitea
- Recherche des informations Gitea :
- Consultation de
C:\Développement\GEMINI.md:- Instance URL :
https://gitea.luc-rival.fr - Utilisateur :
GeminiAntigravityCLI - Email :
gemini@luc-rival.fr
- Instance URL :
- Récupération des identifiants stockés dans
.git-credentialspour authentifier les opérations Git. - Vérification de l'existence et accessibilité du dépôt distant
GeminiAntigravityCLI/gaming_core.
- Consultation de
2. Choix de la Version Java & Minecraft
- Compatibilité Minecraft ciblée : 1.16.5 à 1.20+ (et 1.21+).
- Stratégie JVM / Bytecode :
- SDK de compilation utilisé : Java 21 LTS (ou Java 17).
- Target bytecode (
release) : Java 17. - Évite les erreurs de version JVM (
UnsupportedClassVersionError) tout en bénéficiant de syntaxe moderne.
- Bibliothèques sélectionnées :
- Paper API 1.20.4 : API Bukkit/Paper cross-compatible.
- Kyori Adventure & MiniMessage : Couleurs HEX, gradients et composants de texte.
- XSeries (13.0.0) : Abstraction cross-version des matériaux (
XMaterial), sons et particules de la 1.16 à la 1.21+. - ShadowJar (8.3.6) : Embarquement et relocation des dépendances isolées dans le jar final.
3. Configuration Initiale du Projet Gradle
- Création du projet Gradle dans
C:\Développement\gamingcore. - Fichiers créés :
build.gradle.kts: Définition des dépôts, dépendances, toolchain et configuration du plugin Shadow.src/main/resources/plugin.yml: Manifeste du plugin.src/main/resources/config.yml: Configuration initiale avec préfixe et messages formatés en MiniMessage.src/main/java/fr/luc/gamingcore/GamingCore.java: Classe principale (JavaPlugin)..gitignore: Exclusion des dossiers.gradle,.idea,build/, etc.
4. Résolution de l'erreur IntelliJ (Java 26 vs Gradle 8.12)
- Problème rencontré :
Your build is currently configured to use incompatible Java 26.0.2 and Gradle 8.12. Cannot sync the project. - Cause : IntelliJ a téléchargé par défaut une version expérimentale de Java (Java 26), incompatible avec Gradle 8.12 (supportant jusqu'à Java 23).
- Solution appliquée :
- Définir le SDK du projet sur Java 21 LTS.
- Définir la JVM Gradle dans les paramètres IntelliJ sur Java 21.
- Re-synchroniser Gradle.
5. Simplification & Standardisation du Skeleton
- À la demande de l'utilisateur, simplification vers une structure classique :
GamingCore.java: Classe épurée aveconEnable(),onDisable(),getInstance(),saveDefaultConfig().plugin.yml: Déclaration classique minimale (name,version,main,api-version: '1.16').- Commit et synchronisation Git sur la branche
main.
6. Conception du Système de Minage (Custom Mining)
- Objectif : Créer un système de minerais personnalisés minables plusieurs fois avec gestion des drops et persistance SQLite.
- Spécifications fonctionnelles & tables :
Table ores (Types de minerais)
| Champ | Type | Description |
|---|---|---|
id |
VARCHAR(64) PK | Identifiant unique du minerai (ex: custom_iron) |
block_material |
VARCHAR(64) | Matériau du bloc (ex: IRON_ORE) |
hardness |
DOUBLE | Dureté / résistance du bloc |
rarity |
VARCHAR(32) | Niveau de rareté (COMMON, RARE, EPIC, etc.) |
stock |
INTEGER | Nombre de fois où le bloc est minable avant épuisement |
respawnable |
BOOLEAN | Si le minerai se régénère |
respawn_time |
INTEGER | Temps de régénération en secondes |
temp_block |
VARCHAR(64) | Bloc temporaire d'attente (ex: BEDROCK) |
Table ore_drops (Gestion des drops & taux)
| Champ | Type | Description |
|---|---|---|
id |
INTEGER PK AUTO | Identifiant du drop |
ore_id |
VARCHAR(64) FK | Référence vers le minerai parent |
item_material |
VARCHAR(64) | Item droppé (ex: RAW_IRON) |
default_amount |
INTEGER | Quantité de base |
default_chance |
DOUBLE | Taux de probabilité par défaut (0.0 à 1.0) |
fortunable |
BOOLEAN | Prise en compte de l'enchantement Fortune |
fortune_multiplier |
DOUBLE | Multiplicateur par niveau de Fortune |
smeltable |
BOOLEAN | Auto-smeltable si outil adéquat |
smelted_material |
VARCHAR(64) | Item obtenu si fondu (ex: IRON_INGOT) |
Table placed_ores (Blocs actifs posés dans les mondes)
| Champ | Type | Description |
|---|---|---|
id |
INTEGER PK AUTO | Identifiant unique du bloc posé |
ore_id |
VARCHAR(64) FK | Type de minerai associé |
world |
VARCHAR(64) | Nom du monde Minecraft |
x, y, z |
INTEGER | Coordonnées du bloc |
current_stock |
INTEGER | Stock restant en temps réel |
is_depleted |
BOOLEAN | Indique si le bloc est en attente de réapparition |
next_respawn_at |
BIGINT | Timestamp du prochain respawn |
- Schéma PlantUML généré : Enregistré dans
docs/mining_model.pumlet poussé sur le dépôt Gitea.
7. Implémentation Complète du Système de Minage (Custom Mining)
-
Couche Modèle (
fr.luc.gamingcore.mining.model) :OreRarity.java: Raretés (COMMON,UNCOMMON,RARE,EPIC,LEGENDARY,MYTHIC) avec gradients MiniMessage.OreDrop.java: Gestion des probabilités, multiplicateurs Fortune et auto-smelt (XMaterial).CustomOre.java: Types de minerais (dureté, stock, réapparition, bloc temporaire).BlockLocation.java: Coordonnées immuables et hashables pour le cache mémoire.PlacedOreBlock.java: État en temps réel des blocs actifs posés dans les mondes.
-
Couche Persistance SQLite (
fr.luc.gamingcore.mining.database) :DatabaseManager.java:- Création automatique des tables
ores,ore_drops,placed_ores. - Seeding automatique des minerais de base (
custom_iron,custom_gold,custom_diamond,custom_netherite). - Synchronisation asynchrone des états de minage / régénération.
- Création automatique des tables
-
Couche Métier & Tâches (
fr.luc.gamingcore.mining.manager) :OreManager.java: Cache mémoire haute performance, gestion du minage, calcul des drops, sons/particules XSeries et action bars.RespawnScheduler.java: Tâche répétée (1s) pour régénérer automatiquement les minerais épuisés avec particules et sons.
-
Événements & Sécurité (
fr.luc.gamingcore.mining.listener) :BlockBreakListener.java: Interception du cassage, décrémentation du stock, transformation en bloc temporaire (BEDROCK) et drop personnalisé.BlockProtectionListener.java: Protection contre les explosions (TNT/Creeper) et les pistons.
-
Commandes & Outils d'Administration (
fr.luc.gamingcore.mining.command) :MiningCommand.java:/gamingcore(alias/gc,/mining) avec sous-commandes :/gc ore list: Affiche les minerais configurés et leurs drops./gc ore set <ore_id>: Définit le bloc ciblé comme un minerai personnalisé actif./gc ore remove: Retire le minerai personnalisé du bloc ciblé./gc ore info: Affiche les infos du minerai ciblé (stock restant, temps de respawn, etc.)./gc reload: Recharge la configuration et la BDD.- Auto-complétion (TabCompletion) intégrale.
-
Tests Unitaires & Build :
- Tests JUnit 5 passés avec succès (
OreModelTest.java). - Compilation ShadowJar validée (
gamingcore-1.0.0-SNAPSHOT.jar). - Code commité et synchronisé sur Gitea
origin/main.
- Tests JUnit 5 passés avec succès (
8. Réinitialisation, Intégration WorldGuard & Serveur Paper 1.20.1
-
Nettoyage & Dépendances WorldGuard :
- Suppression de l'ancien système de minage pour repartir sur une architecture basée sur les régions WorldGuard.
- Ajout du repo EngineHub et des dépendances WorldGuard 7.0.9 et WorldEdit 7.3.0 dans
build.gradle.kts. - Configuration de
depend: [WorldGuard]etsoftdepend: [WorldEdit]dansplugin.yml. - Connexion au
RegionContainerde WorldGuard dansGamingCore.java.
-
Installation du Serveur Paper 1.20.1 (
C:\Serveur\Minecraft\1.20.1) :paper-1.20.1.jar(Build 196) téléchargé via l'API PaperMC v3.eula.txtconfiguré (eula=true).server.propertiespré-configuré (port 25565,online-mode=falsepour le dev, spawn-protection=0).start.batconfiguré pour utiliser Java 21 LTS (C:\Users\lucri\.jdks\ms-21.0.12\bin\java.exe) avec flags Aikar.- Plugins installés dans
plugins/:worldedit-bukkit-7.3.1.jarworldguard-bukkit-7.0.9-dist.jarGamingCore.jar
- Test de démarrage : Serveur démarré et validé avec succès (
[GamingCore] Connexion avec WorldGuard 7 etablie avec succes !,Done (5.518s)).
9. Réinitialisation Complète & Classe Main Minimale
- Structure épurée :
- Suppression de toutes les classes annexes.
- Création de la classe principale
Main.java(fr.luc.gamingcore.Main) avec uniquement les messages de démarrage (onEnable) et d'arrêt (onDisable). - Manifeste
plugin.ymlpointant surfr.luc.gamingcore.Mainavec les dépendancesWorldGuardetWorldEdit.
- Build & Déploiement :
- Compilation ShadowJar réussie.
- Fichier
GamingCore.jarmis à jour dansC:\Serveur\Minecraft\1.20.1\plugins\. - Commit et synchronisation Git sur la branche
main.