Plugin:Écurie
Autres actions
- Ecurie
<img src="nanobanana-output/Ecurie_logo.png" alt="Ecurie Logo" width="300" />
Plugin PaperMC de gestion des chevaux RP pour le serveur Nefald.
Permet aux joueurs de mettre leurs chevaux en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables, la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.
---
- Prérequis
| Dépendance | Rôle | Type | |---|---|---| | PaperMC 1.21.x | Serveur | Obligatoire | | Vault | API économie | Optionnel (fallback si Banco absent) | | Banco | Économie item-based (écus) | Optionnel (recommandé) | | Citizens | NPCs d'interface | Optionnel | | PlaceholderAPI | Placeholders | Optionnel | | MyPet | Détection familiers | Optionnel |
Le plugin charge sans aucune de ces dépendances optionnelles.
---
- Installation
1. Déposer `Ecurie-<version>.jar` dans `plugins/` 2. Redémarrer le serveur 3. Éditer `plugins/Ecurie/config.yml` et `lang.yml` 4. Créer les étables via les commandes admin (voir ci-dessous)
---
- Configuration
- `config.yml`
```yaml database:
file: "ecurie.db" # Chemin relatif au dossier du plugin
transfer:
base-delay-seconds: 600 # Délai de base pour un transfert (10 min) delay-per-100-blocks: 30 # Délai additionnel par 100 blocs de distance
routes:
on-road-speed: 0.35 # Vitesse cheval sur route (vanilla ≈ 0.225) enabled: false # Routes RP (désactivé en V1)
phantom-horse:
health: 20.0 # PV du cheval fantôme en box
```
- `lang.yml`
Tous les messages joueurs. Supporte les balises MiniMessage (`<red>`, `<gold>`, etc.). Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.
---
- Commandes admin
Permission requise : `ecurie.admin` (op par défaut). Alias : `/ec`
- Wand — sélection de région
``` /ecurie wand [on|off] ```
Active/désactive le wand bâton. Clic gauche = point 1, clic droit = point 2. Utilisé pour scanner les boxes d'une étable.
- Étables
``` /ecurie stable create <nom> [type] — Crée l'étable ET scanne automatiquement les boxes. Type: STABLE, TERRESTRE, AQUATIQUE, VOLIERE. /ecurie stable delete <id> — Supprime une étable /ecurie stable setnpc <stable_id> — Lie le NPC Citizens le plus proche (≤5 blocs) à l'étable /ecurie stable list — Liste toutes les étables ```
- Boxes
``` /ecurie box list <stable_id> — Liste les boxes d'une étable /ecurie box delete <box_id> — Supprime une box /ecurie show [on|off] — Affiche les boxes en surbrillance (particules colorées : vertes=libre, rouges=occupée) ```
Détection : chaque stalle doit contenir un bloc spécifique configuré dans `config.yml` (`box-blocks`). Par défaut : - `STABLE` / `TERRESTRE` : **WATER_CAULDRON** - `AQUATIQUE` : **PRISMARINE** - `VOLIERE` : **DAYLIGHT_DETECTOR** La commande `stable create` détecte automatiquement tous ces blocs dans la région wand et enregistre les boxes immédiatement.
- Chevaux
``` /ecurie horse free <horse_id> — Libère un cheval de la DB (urgence admin) ```
- Divers
``` /ecurie reload — Recharge config.yml et le cache ShowManager ```
---
- Commandes joueurs
Permission requise : `ecurie.use` (true par défaut).
``` /ecurie gui [dialog|inventory] — Change votre type d'interface (persistant via PDC) ```
---
- Workflow admin — Créer une étable
- Étapes
1. **Construire l'étable** — poser le bloc cible de la box (ex: `WATER_CAULDRON`, `PRISMARINE`) dans chaque stalle. 2. **Activer le wand** : `/ecurie wand on` → clic gauche (point A) + clic droit (coin B) pour délimiter la région 3. **Créer et scanner** : `/ecurie stable create <nom> [type]` — crée l'étable ET enregistre automatiquement les boxes détectées (selon le type `TERRESTRE`, `AQUATIQUE` ou `VOLIERE`). 4. **(Optionnel) Lier un NPC** : placer un Citizens devant l'étable, s'en approcher à < 5 blocs : `/ecurie stable setnpc <stable_id>`
- Visualiser les boxes
Après création, afficher les boxes avec particules colorées : ``` /ecurie show on ``` - Particules **vertes** = box libre - Particules **rouges** = box occupée
Désactiver l'affichage : ``` /ecurie show off ```
---
- Workflow joueur — Interagir avec une étable
Le joueur interagit via clic droit sur le NPC Citizens de l'étable. Le plugin propose deux types d'interfaces, configurables librement par chaque joueur (la préférence est persistante) : - **Dialog (par défaut)** : Une fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG. - **Inventory** : Un inventaire classique sous forme de coffre pour les habitués.
Une GUI s'ouvre avec les actions suivantes :
- Stocker un cheval
1. Amener le cheval à côté ou le monter 2. Cliquer **Stocker mon cheval** dans la GUI 3. **Si le cheval n'a pas de nom custom** (nom "Horse" ou absent) → une enclume s'ouvre pour nommer le cheval 4. **Si le cheval a déjà un nom custom** → stockage direct sans nommage 5. Coût : `price-in` de l'étable en sols
- Récupérer un cheval
1. Cliquer **Récupérer un cheval** 2. Choisir le cheval dans la liste 3. Coût : `price-out` de l'étable
- Transférer ou Rapatrier un cheval
Le transfert peut être initié depuis l'écurie de départ ou de destination : - **Depuis l'écurie d'origine (Transfert sortant) :** Cliquer **Transférer vers...**, sélectionner le cheval, puis choisir l'écurie de destination. - **Depuis l'écurie d'arrivée (Rapatriement entrant) :** Cliquer **Transférer vers...**, le plugin liste vos chevaux situés dans d'autres étables. Cliquer sur l'un d'eux lance directement le rapatriement vers l'écurie actuelle. - **Calcul de distance :** Le délai de transfert et le coût en écus s'ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (délai/coût de base + ajustement par tranche de 100 blocs).
- Renommer un cheval
1. Cliquer **Renommer un cheval** 2. Choisir le cheval dans la liste 3. Une enclume s'ouvre pré-remplie avec le nom actuel — modifier ou confirmer 4. Coût : `rename-price` en sols (défaut 50)
- Mes chevaux
Vue globale de tous les chevaux du joueur, toutes étables confondues.
---
- Placeholders (PlaceholderAPI)
Requiert PlaceholderAPI installé.
| Placeholder | Valeur | |---|---| | `%ecurie_horses_count%` | Nombre de chevaux en pension du joueur | | `%ecurie_horse_name_<n>%` | Nom du n-ième cheval (1-indexé, trié par nom) | | `%ecurie_horse_stable_<n>%` | Nom de l'étable du n-ième cheval | | `%ecurie_horse_health_<n>%` | Santé (ex : `18.0/20.0`) |
---
- Permissions
| Permission | Description | Défaut | |---|---|---| | `ecurie.admin` | Accès aux commandes d'administration `/ecurie` | op | | `ecurie.use` | Interaction avec les PNJ et `/ecurie gui` | true |
---
- Notes techniques
- **Stockage** : SQLite embarqué (shadowed, pas de dépendance runtime) - **Chevaux fantômes** : entités invulnérables, sans gravité ni IA, représentant le cheval en box. Toute monte ou interaction (inventaire du cheval, etc.) est strictement bloquée pour des raisons de sécurité. - **Double étiquette de nom** : Le nom du cheval (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s'affichent au-dessus du cheval en box grâce à un Armor Stand passager invisible (`Marker`), nettoyé automatiquement lors du despawn. - **Mort en box** : perte définitive, slot libéré - **Banco** : intégré par réflexion pure (aucun jar requis à la compilation) - **Stockage universel** : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers **MyPet**. - **Typage des écuries (RPG)** : Les familiers aquatiques (Dauphin, Calamar MyPet, etc.) ne peuvent aller que dans une écurie de type `AQUATIQUE`. Les familiers volants (Perroquet, Phantom, etc.) dans une `VOLIERE`. Les familiers terrestres dans une `TERRESTRE`. - **MyPet** : Ecurie stocke correctement le `UUID` du MyPet et s'assure qu'il est révoqué automatiquement pour éviter les doublons lors du stockage. - **Transferts** : vérifiés toutes les 10 secondes en async
---
- Build
```bash ./gradlew shadowJar
- Sortie : build/libs/Ecurie-<version>.jar
```
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.
---
- Changelog
| Version | Date | Notes | |---|---|---| | 1.0.0 | 2026-05-15 | V1 : pension, récupération, transfert, GUI | | 1.0.1 | 2026-05-16 | PlaceholderAPI + garde MyPet | | 1.0.2 | 2026-05-18 | Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande | | 1.0.3 | 2026-05-19 | Nommage : skip enclume si cheval déjà nommé au stockage ; fix renommage (slot résultat pré-rempli) | | 1.0.4 | 2026-06-11 | Fix validation renommage ; noms fantômes 2 lignes (ArmorStand passager) ; blocage monte ; correction calcul distance transferts ; possibilité d'initier un transfert (rapatriement) depuis l'écurie de destination ; animations de départ et d'arrivée des chevaux avec PNJ montés via pathfinding local ; attribution automatique de nom/skin configurables par défaut pour les NPCs d'écurie lors du setnpc | | 1.1.0 | 2026-06-11 | Support de tous les familiers montables et des MyPet, configuration des prix en jeu depuis config.yml, ajout des types d'écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage wand configurables et validations RPG pour le stockage. | | 1.2.0 | 2026-06-11 | Architecture GUI hybride : intégration de l'API native Paper Dialog (1.21.6+) en interface par défaut, et maintien d'InventoryFramework en fallback. Choix laissé aux joueurs via `/ecurie gui [dialog|inventory]` sauvegardé par PDC. Affichage ostensible des tarifs et gestion asynchrone sécurisée. |