# 📜 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`
  * Récupération des identifiants stockés dans `.git-credentials` pour authentifier les opérations Git.
  * Vérification de l'existence et accessibilité du dépôt distant `GeminiAntigravityCLI/gaming_core`.

---

## 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 avec `onEnable()`, `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.puml` et 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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/model/OreRarity.java) : Raretés (`COMMON`, `UNCOMMON`, `RARE`, `EPIC`, `LEGENDARY`, `MYTHIC`) avec gradients MiniMessage.
  * [`OreDrop.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/model/OreDrop.java) : Gestion des probabilités, multiplicateurs Fortune et auto-smelt (`XMaterial`).
  * [`CustomOre.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/model/CustomOre.java) : Types de minerais (dureté, stock, réapparition, bloc temporaire).
  * [`BlockLocation.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/model/BlockLocation.java) : Coordonnées immuables et hashables pour le cache mémoire.
  * [`PlacedOreBlock.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/model/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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/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.

* **Couche Métier & Tâches (`fr.luc.gamingcore.mining.manager`)** :
  * [`OreManager.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/manager/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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/mining/listener/BlockProtectionListener.java) : Protection contre les explosions (TNT/Creeper) et les pistons.

* **Commandes & Outils d'Administration (`fr.luc.gamingcore.mining.command`)** :
  * [`MiningCommand.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/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`](file:///C:/D%C3%A9veloppement/gamingcore/src/test/java/fr/luc/gamingcore/mining/OreModelTest.java)).
  * Compilation ShadowJar validée (`gamingcore-1.0.0-SNAPSHOT.jar`).
  * Code commité et synchronisé sur Gitea `origin/main`.

---

## 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`](file:///C:/D%C3%A9veloppement/gamingcore/build.gradle.kts).
  * Configuration de `depend: [WorldGuard]` et `softdepend: [WorldEdit]` dans [`plugin.yml`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/resources/plugin.yml).
  * Connexion au `RegionContainer` de WorldGuard dans [`GamingCore.java`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/GamingCore.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.txt` configuré (`eula=true`).
  * `server.properties` pré-configuré (port 25565, `online-mode=false` pour le dev, spawn-protection=0).
  * `start.bat` configuré 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.jar`
    * `worldguard-bukkit-7.0.9-dist.jar`
    * `GamingCore.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`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/java/fr/luc/gamingcore/Main.java) (`fr.luc.gamingcore.Main`) avec uniquement les messages de démarrage (`onEnable`) et d'arrêt (`onDisable`).
  * Manifeste [`plugin.yml`](file:///C:/D%C3%A9veloppement/gamingcore/src/main/resources/plugin.yml) pointant sur `fr.luc.gamingcore.Main` avec les dépendances `WorldGuard` et `WorldEdit`.
* **Build & Déploiement** :
  * Compilation ShadowJar réussie.
  * Fichier `GamingCore.jar` mis à jour dans `C:\Serveur\Minecraft\1.20.1\plugins\`.
  * Commit et synchronisation Git sur la branche `main`.

---

## 10. Pivot Vers le Système de Guilde & Plan de Développement
* **Cahier des charges établi** :
  * Équipe de joueurs, coût de création, claim obligatoire du 1er chunk.
  * Banque de guilde (Vault), invitations temporaires.
  * Rangs & permissions personnalisables par guilde.
  * Formule mathématique progressive de coût des chunks.
  * Intégration de GUI et textures pixel-art (Resource Pack / Negative Space).
* **Document de référence** : [`docs/guild_dev_plan.md`](file:///C:/D%C3%A9veloppement/gamingcore/docs/guild_dev_plan.md).




