# 📜 Instructions & Consignes du Projet - GamingCore (Système de Guilde) Ce document consigne les directives d'architecture, règles de développement et spécifications fonctionnelles du projet **GamingCore**. --- ## 🎯 1. Vision du Projet Développement d'un système de **Guilde complet, modulaire et hautement configurable** pour Minecraft (Paper 1.20.1+ / Java 21 LTS - target Java 17). --- ## 📐 2. Règles & Standards de Développement ### 🔹 Conception du Code * **Méthodes & Logique Métier d'Abord** : Tout le système doit reposer sur des méthodes et services métier découplés (Managers, Repositories, Calculators), indépendants du système de commande ou d'UI. * **Dynamisme & Modularité** : Le code doit être découpé en parties logiques claires et évolutives. * **Documentation Obligatoire** : **Chaque méthode** doit comporter une Javadoc / un commentaire détaillé explicitant : * Son rôle et son comportement. * Ses paramètres (`@param`). * Sa valeur de retour (`@return`). * Les éventuelles exceptions levées (`@throws`). ### 🔹 Dépendances & Intégrations * **Paper API 1.20.4** : API Bukkit/Paper cross-version. * **Vault API 1.7.1** : Gestion de l'économie (dépôt, retrait, vérification de solde). * **WorldGuard 7.0.9 & WorldEdit 7.3.0** : Intégration et compatibilité régionale. * **Kyori Adventure & MiniMessage** : Couleurs HEX, gradients et composants de texte modernes. * **XSeries 13.0.0** : Abstraction des matériaux, sons et particules. --- ## 🏰 3. Spécifications Métier du Système de Guilde ### 1. Structure d'une Guilde * Création soumise à un coût économique (Vault) et au claim obligatoire du chunk initial. * Données : `UUID`, `nom`, `tag`, `description`, `solde bancaire`, `point de ralliement (home)`, `membres`, `rangs`, `claims`. ### 2. Rangs & Permissions Dynamiques par Guilde * Chaque guilde peut créer, renommer, hiérarchiser (priorité) et supprimer ses propres rangs. * Rangs initiaux par défaut à la création : * **👑 Chef (Leader)** : Priorité maximale (100), toutes les permissions, non supprimable. * **⚔ Officier (Officer)** : Priorité intermédiaire (50), gestion des membres et claims. * **🛡 Membre (Member)** : Priorité de base (1), rang par défaut des recrues. * Permissions granulaires configurables par rang : * `CLAIM`, `UNCLAIM`, `SET_HOME`, `HOME`, `INVITE`, `KICK`, `PROMOTE`, `DEMOTE`, `MANAGE_RANKS`, `BANK_DEPOSIT`, `BANK_WITHDRAW`, `BUILD`, `BREAK`, `INTERACT`, `CONTAINER`. ### 3. Moteur Économique & Calcul Spatio-Temporel des Chunks Le prix d'acquisition d'un nouveau chunk suit la formule spatio-temporelle avec surchauffe glissante sur 24h : $$\text{PrixFinal}(N, R) = \left[ P_{\text{base}} \times (1 + \text{Taux})^{(N - 1)^\alpha} + (N - 1) \times \text{Palier} \right] \times \left[ 1 + \left( k_{\text{base}} + k_{\text{taille}} \times \left(\frac{N}{10}\right) \right) \times R^{\delta} \right]$$ * **$N$** : Nombre total de chunks possédés. * **$R$** : Nombre de chunks achetés dans les dernières 24h (décroissance automatique). * **Effet d'échelle** : La surchauffe temporelle est plus sévère pour une grande guilde que pour une petite. ### 4. Banque de Guilde * Solde partagé avec dépôts libres et retraits sécurisés par permissions de rang. ### 5. Invitations * Invitations temporaires expirables (ex: 60s) avec acceptation/refus. ### 6. Protection Territoriale & Listeners * Protection des blocs, conteneurs, portes et explosions sur les chunks de guilde en fonction des permissions de rang du joueur. --- ## 🗂️ 4. Organisation des Packages ``` fr.luc.gamingcore/ ├── Main.java (Point d'entrée du plugin) ├── model/ (Entités et Enums du domaine) │ ├── Guild.java │ ├── GuildMember.java │ ├── GuildRank.java │ ├── GuildPermission.java │ ├── GuildClaim.java │ └── GuildInvite.java ├── economy/ (Gestion économique & Formule mathématique) │ ├── EconomyManager.java │ └── ChunkPriceCalculator.java ├── database/ (Persistance SQLite/MySQL) │ ├── DatabaseManager.java │ └── GuildRepository.java ├── manager/ (Logique métier et services) │ ├── GuildManager.java │ └── InviteManager.java ├── listener/ (Interception des événements et protection) │ └── TerritoryProtectionListener.java └── util/ (Utilitaires de texte et formatage) └── TextUtil.java ```