Files
gaming_core/conv_save.md
T

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
    • 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 : 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.
  • 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) :

  • 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.

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] et softdepend: [WorldEdit] dans plugin.yml.
    • Connexion au RegionContainer de WorldGuard dans 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 (fr.luc.gamingcore.Main) avec uniquement les messages de démarrage (onEnable) et d'arrêt (onDisable).
    • Manifeste 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.