# 📜 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
```
