Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« Plugin:Écurie » : différence entre les versions

De Nefald
Hiob (discussion | contributions)
Page créée avec « # Ecurie <p align="center"> <img src="nanobanana-output/Ecurie_logo.png" alt="Ecurie Logo" width="300" /> </p> 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 | |---|--... »
 
Hiob (discussion | contributions)
Ajoute logo à l'infobox, reproduit infobox codex.nefald.fr (image, grade, dépendance détaillée) (via update-page on MediaWiki MCP Server)
 
(9 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
# Ecurie
{{SHORTDESC:Mets tes montures et compagnons en pension auprès des Maîtres d'Écurie et fais-les voyager entre les étables de Nefald}}


<p align="center">
{{Infobox Plugin
  <img src="nanobanana-output/Ecurie_logo.png" alt="Ecurie Logo" width="300" />
| nom = Écurie
</p>
| image = Logo_Ecurie.png
| type = roleplay
| dev = Nefald
| status = installé
| grade = Architecte
| sources = [https://git.nefald.fr/minecraft/plugins/ecurie Gitlab]
| dépendance = [[Plugin:NefaldCore]] (obligatoire), [[Plugin:Citizens]] (softdep, requis en pratique — seul point d'entrée joueur), [[Plugin:PlaceholderAPI]] (softdep), [[Plugin:MyPet]] (softdep)
}}


Plugin PaperMC de gestion des chevaux RP pour le serveur Nefald.
'''Écurie''' te permet de mettre tes montures et familiers en pension auprès d'un '''Maître d'Écurie''', un PNJ posté devant chaque étable du monde. Ton compagnon est gardé en sécurité, à l'abri des mobs et des voleurs, et tu peux le faire voyager d'une étable à l'autre sans avoir à parcourir toi-même la distance.


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.
== Où trouver une écurie ==


---
Les étables sont construites par l'Intendance dans les principales cités et zones de Fendral. Chacune est tenue par un '''Maître d'Écurie''' : clique-droit sur lui pour ouvrir le registre de l'étable.


## Prérequis
À ton tout premier clic sur un Maître d'Écurie donné, il t'explique son service en détail. Les fois suivantes, il t'accueille d'une phrase différente à chaque passage — et te remercie après chaque service rendu.


| Dépendance | Rôle | Type |
== Mettre un compagnon en pension ==
|---|---|---|
| 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.
# Amène ton compagnon à côté de toi (ou monte-le).
# Clique-droit sur le Maître d'Écurie, puis choisis '''Mettre en pension'''.
# S'il n'a pas encore de nom, une enclume s'ouvre pour le baptiser avant de le confier.
# Le coût affiché couvre la mise en pension '''et''' le bail prépayé (voir ci-dessous) — tout est réglé en une fois.


---
Ton compagnon est alors gardé dans une box de l'étable, en parfaite sécurité, jusqu'à ce que tu viennes le récupérer.


## Installation
== Le bail de la box ==


1. Déposer `Ecurie-<version>.jar` dans `plugins/`
Chaque pension inclut un '''bail prépayé''' : la box est louée pour une durée fixe dès la mise en pension. Tant que le bail court, ton compagnon reste sur place sans rien à payer de plus.
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)


---
* Le bail est '''prolongeable''' à tout moment depuis le menu de récupération.
* Si le bail expire — ou si tu désertes le serveur trop longtemps — le Maître d'Écurie ne peut plus garantir la box : ton compagnon est mis '''En Réserve''' pour libérer la place.
* Un compagnon '''En Réserve''' n'est pas perdu : il reste récupérable auprès du PNJ, moyennant une pénalité de stockage longue durée (tarif de récupération majoré par rapport à une récupération normale).
* Tu peux activer le '''renouvellement automatique''' depuis le menu de récupération : le loyer est alors prélevé directement sur ton compte, même hors ligne, pour éviter que ton compagnon ne finisse En Réserve.


## Configuration
== Récupérer un compagnon ==


### `config.yml`
# Clique-droit sur le Maître d'Écurie, choisis '''Pension & récupération'''.
# Sélectionne ton compagnon dans la liste.
# Le tarif dépend de son état : récupération normale, ou tarif majoré s'il est En Réserve.


```yaml
== Demander un acheminement ==
database:
  file: "ecurie.db"          # Chemin relatif au dossier du plugin


transfer:
Besoin de retrouver ta monture ailleurs sur Fendral ? Le Maître d'Écurie peut organiser un '''acheminement''' vers une autre étable :
  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:
* '''Depuis l'étable de départ''' : choisis '''Demander un acheminement''', sélectionne ton compagnon, puis l'étable de destination.
  on-road-speed: 0.35        # Vitesse cheval sur route (vanilla ≈ 0.225)
* '''Depuis l'étable d'arrivée''' : le Maître d'Écurie te propose directement de faire venir un compagnon stationné ailleurs.
  enabled: false            # Routes RP (désactivé en V1)


phantom-horse:
Le délai et le coût du voyage dépendent de la distance réelle entre les deux étables — plus c'est loin, plus c'est long et cher. Un '''Palefrenier''' (PNJ temporaire) anime le départ et l'arrivée de ton compagnon.
  health: 20.0              # PV du cheval fantôme en box
```


### `lang.yml`
== Modifier le registre ==


Tous les messages joueurs. Supporte les balises MiniMessage (`<red>`, `<gold>`, etc.).
Envie de rebaptiser ton compagnon ? Choisis '''Modifier le registre''' dans le menu du Maître d'Écurie : une enclume s'ouvre, pré-remplie avec le nom actuel — modifie-le ou confirme tel quel.
Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.


---
== Mes compagnons ==


## Commandes admin
Cette entrée du menu te donne une vue d'ensemble de '''tous''' tes compagnons en pension, toutes étables confondues — pratique pour savoir où se trouve chacun avant de demander un acheminement.


Permission requise : `ecurie.admin` (op par défaut). Alias : `/ec`
== Compagnons acceptés ==


### Wand — sélection de région
Écurie accepte toutes les montures classiques (chevaux, chameaux, cochons sellés, striders) ainsi que tous les familiers [[MyPet]]. Selon le type d'étable, seuls certains compagnons sont acceptés :


```
{| class="wikitable"
/ecurie wand [on|off]
! Type d'étable !! Compagnons acceptés
```
|-
| Terrestre || Chevaux, chameaux, cochons, familiers terrestres
|-
| Aquatique || Familiers/montures aquatiques
|-
| Volière || Familiers volants
|}


Active/désactive le wand bâton. Clic gauche = point 1, clic droit = point 2. Utilisé pour scanner les boxes d'une étable.
{{Info|Un familier [[MyPet]] mis en pension est automatiquement rappelé pour éviter qu'il ne traîne en double dans le monde. Il te sera rendu dans son état actuel à la récupération.}}


### Étables
== Tarifs ==


```
Tous les tarifs sont réglés en sols, prélevés directement sur ton compte au moment du service. Les montants exacts (mise en pension + bail, récupération, récupération En Réserve, renommage, acheminement) sont fixés par l'Intendance et peuvent varier d'une étable à l'autre le Maître d'Écurie t'affiche toujours le prix avant confirmation.
/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
{{Bandeau|type=important|Un compagnon mort en box est perdu définitivement. Prends soin de venir le récupérer ou de renouveler son bail à temps.}}


```
== Voir aussi ==
/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 :
* [[MyPet]] — familiers combattants
- `STABLE` / `TERRESTRE` : **WATER_CAULDRON**
* [[Grades]] — accès et permissions selon ton rang
- `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. |
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.