diff --git a/conv_save.md b/conv_save.md new file mode 100644 index 0000000..101738d --- /dev/null +++ b/conv_save.md @@ -0,0 +1,105 @@ +# 📜 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.