|
|
| (5 versions intermédiaires par le même utilisateur non affichées) |
| Ligne 1 : |
Ligne 1 : |
| {{SHORTDESC:Gestion des écuries RP}} | | {{SHORTDESC:Mets tes montures et compagnons en pension auprès des Maîtres d'Écurie et fais-les voyager entre les étables de Nefald}} |
|
| |
|
| {{Infobox Plugin | | {{Infobox Plugin |
| |nom=Écurie | | | nom = Écurie |
| |type=roleplay | | | image = Logo_Ecurie.png |
| |dev=[[Scriptomancien|Nefald]] | | | type = roleplay |
| |status=Installé | | | dev = Nefald |
| |grade=[[Pérégrin]] | | | status = installé |
| |sources=https://git.nefald.fr/minecraft/plugins/ecurie | | | grade = Architecte |
| |dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel) | | | 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) |
| }} | | }} |
|
| |
|
| '''Écurie''' est un plugin PaperMC de gestion des compagnons 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 montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (''acheminements''), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.
| | == Où trouver une écurie == |
|
| |
|
| == Prérequis ==
| | 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. |
|
| |
|
| {| class="wikitable"
| | À 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
| |
| |-
| |
| | 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` ===
| |
| | |
| <syntaxhighlight lang="yaml">
| |
| database:
| |
| # 'sqlite' ou 'mysql'
| |
| type: "sqlite"
| |
|
| |
| # Configuration SQLite
| |
| sqlite:
| |
| file: "ecurie.db"
| |
|
| |
| # Configuration MySQL / MariaDB (HikariCP)
| |
| mysql:
| |
| host: "localhost"
| |
| port: 3306
| |
| database: "ecurie"
| |
| username: "root"
| |
| password: "password"
| |
| pool:
| |
| maximum-pool-size: 10
| |
| minimum-idle: 2
| |
| | |
| # Interface GUI par défaut (modifiable par joueur via /ecurie gui)
| |
| # 'dialog' = Interface textuelle native Paper (1.21.6+, recommandé)
| |
| # 'inventory' = Menu d'inventaire classique
| |
| gui-type: "dialog"
| |
| | |
| transfer:
| |
| base-delay-seconds: 600 # Délai de base pour un acheminement (10 min)
| |
| delay-per-100-blocks: 30 # Délai additionnel par 100 blocs de distance
| |
| animation-distance: 15.0 # Distance (blocs) pour l'animation de départ/arrivée
| |
| | |
| # Tarifs des services en écus/sols (0 = gratuit)
| |
| prices:
| |
| store: 10 # Mise en pension
| |
| retrieve: 5 # Récupération d'un compagnon
| |
| rename: 50 # Modification du registre (renommage)
| |
| transfer-base: 20 # Coût de base d'un acheminement
| |
| transfer-per-100: 5 # Coût additionnel par tranche de 100 blocs
| |
| # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100
| |
| | |
| # NPC "Maître d'Écurie" : PNJ d'interface lié à l'étable (via /ecurie setnpc)
| |
| npc:
| |
| default-name: "Maître d'Écurie"
| |
| default-skin-value: "<base64 skin>" # Valeur de texture NameMC
| |
| default-skin-signature: "<signature>" # Signature de la texture
| |
| animation:
| |
| enabled: false # Animation périodique du bras (secouage)
| |
| delay-ticks: 300
| |
| | |
| # NPC "Palefrenier" : PNJ temporaire, spawné uniquement pour l'animation de départ/arrivée
| |
| groom:
| |
| default-name: "Palefrenier"
| |
| default-skin-value: "<base64 skin>"
| |
| default-skin-signature: "<signature>"
| |
| | |
| phantom-horse:
| |
| health: 20.0 # PV du compagnon fantôme en box
| |
| | |
| # Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l'écurie
| |
| # Compagnon aquatique -> Écurie AQUATIQUE uniquement
| |
| # Compagnon volant -> Écurie VOLIERE uniquement
| |
| # Compagnon terrestre -> Écurie TERRESTRE/STABLE uniquement
| |
| restrict-stable-types: true
| |
| | |
| box-blocks:
| |
| # Blocs de ciblage (wand) selon le type d'écurie
| |
| STABLE: WATER_CAULDRON
| |
| TERRESTRE: WATER_CAULDRON
| |
| AQUATIQUE: PRISMARINE
| |
| VOLIERE: DAYLIGHT_DETECTOR
| |
| </syntaxhighlight>
| |
| | |
| === `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`
| |
| | |
| === Sélection de région ===
| |
| | |
| <syntaxhighlight lang="text">
| |
| /ecurie wand [on|off] — Active/désactive le wand (bâton). Clic G = pt 1, clic D = pt 2.
| |
| </syntaxhighlight>
| |
| | |
| === Étables ===
| |
| | |
| <syntaxhighlight lang="text">
| |
| /ecurie create <nom> [type] — Crée l'étable et scanne automatiquement les boxes. Types : STABLE, TERRESTRE, AQUATIQUE, VOLIERE.
| |
| /ecurie delete <id> — Supprime une étable (met les compagnons en statut orphelin)
| |
| /ecurie setnpc <stable_id> — Lie le NPC Citizens le plus proche (≤5 blocs) à l'étable (applique nom et skin auto)
| |
| /ecurie list — Liste toutes les étables
| |
| /ecurie tp <stable_id|nom> — Téléporte le joueur en face du NPC associé à l'étable (sécurité anti-collision)
| |
| </syntaxhighlight>
| |
| | |
| === Boxes ===
| |
| | |
| <syntaxhighlight lang="text">
| |
| /ecurie box scan <stable_id> — Rescanne les blocs cibles dans la sélection wand
| |
| /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)
| |
| </syntaxhighlight>
| |
| | |
| 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 `create` ou `box scan` détecte automatiquement ces blocs dans la région wand et enregistre les boxes immédiatement.
| |
| | |
| === Compagnons ===
| |
| | |
| <syntaxhighlight lang="text">
| |
| /ecurie horse free <horse_id> — Supprime définitivement un compagnon de la DB (urgence admin)
| |
| /ecurie horse orphans — Liste les compagnons orphelins (étable d'origine supprimée)
| |
| /ecurie horse reassign <h_id> <s_id> — Réassigne un compagnon orphelin à une nouvelle étable
| |
| </syntaxhighlight>
| |
| | |
| === Divers ===
| |
|
| |
|
| <syntaxhighlight lang="text">
| | == Mettre un compagnon en pension == |
| /ecurie reload — Recharge config.yml et lang.yml
| |
| </syntaxhighlight>
| |
|
| |
|
| == Commandes joueurs ==
| | # 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. |
|
| |
|
| Permission requise : `ecurie.use` (true par défaut).
| | Ton compagnon est alors gardé dans une box de l'étable, en parfaite sécurité, jusqu'à ce que tu viennes le récupérer. |
|
| |
|
| <syntaxhighlight lang="text">
| | == Le bail de la box == |
| /ecurie gui [dialog|inventory] — Change votre type d'interface (persistant via PDC)
| |
| </syntaxhighlight>
| |
|
| |
|
| == Workflow admin — Créer une étable ==
| | 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. |
|
| |
|
| === Étapes ===
| | * 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. |
|
| |
|
| 1. '''Construire l'étable''' — poser le bloc cible dans chaque stalle (ex: `WATER_CAULDRON` pour TERRESTRE, `PRISMARINE` pour AQUATIQUE).
| | == Récupérer un compagnon == |
| 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 create <nom> [type]` — crée l'étable ET enregistre automatiquement les boxes détectées.
| |
| 4. '''Lier un NPC''' : placer un Citizens devant l'étable, s'en approcher à < 5 blocs : `/ecurie setnpc <stable_id>` (le nom et le skin par défaut sont appliqués automatiquement).
| |
|
| |
|
| === Visualiser les boxes ===
| | # 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. |
|
| |
|
| Après création, afficher les boxes avec particules colorées :
| | == Demander un acheminement == |
| <syntaxhighlight lang="text">
| |
| /ecurie show on
| |
| </syntaxhighlight>
| |
| * Particules '''vertes''' = box libre
| |
| * Particules '''rouges''' = box occupée
| |
|
| |
|
| Désactiver l'affichage :
| | Besoin de retrouver ta monture ailleurs sur Fendral ? Le Maître d'Écurie peut organiser un '''acheminement''' vers une autre étable : |
| <syntaxhighlight lang="text">
| |
| /ecurie show off
| |
| </syntaxhighlight>
| |
|
| |
|
| == Workflow joueur — Interagir avec une étable ==
| | * '''Depuis l'étable de départ''' : choisis '''Demander un acheminement''', sélectionne ton compagnon, puis l'étable de destination. |
| | * '''Depuis l'étable d'arrivée''' : le Maître d'Écurie te propose directement de faire venir un compagnon stationné ailleurs. |
|
| |
|
| Le joueur interagit via clic droit sur le '''Maître d'Écurie''' (NPC Citizens de l'étable). Le plugin propose deux types d'interfaces, configurables librement par chaque joueur (préférence persistante) : | | 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. |
| * '''Dialog (par défaut)''' : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.
| |
| * '''Inventory''' : Inventaire classique sous forme de coffre.
| |
|
| |
|
| Une GUI s'ouvre avec les actions suivantes :
| | == Modifier le registre == |
|
| |
|
| === Mettre en pension ===
| | 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. |
| 1. Amener le compagnon à côté ou le monter
| |
| 2. Cliquer '''Mettre en pension''' dans la GUI
| |
| 3. '''Si le compagnon n'a pas de nom custom''' (nom générique ou absent) → une enclume s'ouvre pour le nommer
| |
| 4. '''Si le compagnon a déjà un nom custom''' → mise en pension directe sans nommage
| |
| 5. Coût : `prices.store` en sols
| |
|
| |
|
| === Reprendre un compagnon === | | == Mes compagnons == |
| 1. Cliquer '''Reprendre un compagnon'''
| |
| 2. Choisir le compagnon dans la liste
| |
| 3. Coût : `prices.retrieve` en sols
| |
|
| |
|
| === Demander un acheminement ===
| | 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. |
| L'acheminement peut être initié depuis l'écurie de départ ou d'arrivée :
| |
| * '''Depuis l'écurie d'origine (envoi sortant) :''' Cliquer '''Demander un acheminement''', sélectionner le compagnon, puis choisir l'écurie de destination.
| |
| * '''Depuis l'écurie d'arrivée (rapatriement entrant) :''' Cliquer '''Demander un acheminement''', le plugin liste vos compagnons situés dans d'autres étables. Cliquer sur l'un d'eux lance directement le rapatriement.
| |
| * '''Calcul de distance :''' Le délai et le coût s'ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).
| |
|
| |
|
| === Modifier le registre === | | == Compagnons acceptés == |
| 1. Cliquer '''Modifier le registre'''
| |
| 2. Choisir le compagnon dans la liste
| |
| 3. Une enclume s'ouvre pré-remplie avec le nom actuel — modifier ou confirmer
| |
| 4. Coût : `prices.rename` en sols (défaut 50)
| |
|
| |
|
| === Mes compagnons ===
| | É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 : |
| Vue globale de tous les compagnons du joueur, toutes étables confondues.
| |
| | |
| == Placeholders (PlaceholderAPI) ==
| |
| | |
| Requiert PlaceholderAPI installé.
| |
|
| |
|
| {| class="wikitable" | | {| class="wikitable" |
| ! Placeholder !! Valeur | | ! Type d'étable !! Compagnons acceptés |
| |-
| |
| | <code>%ecurie_horses_count%</code> || Nombre de compagnons en pension du joueur
| |
| |- | | |- |
| | <code>%ecurie_horse_name_<n>%</code> || Nom du n-ième compagnon (1-indexé, trié par nom) | | | Terrestre || Chevaux, chameaux, cochons, familiers terrestres |
| |- | | |- |
| | <code>%ecurie_horse_stable_<n>%</code> || Nom de l'étable du n-ième compagnon | | | Aquatique || Familiers/montures aquatiques |
| |- | | |- |
| | <code>%ecurie_horse_health_<n>%</code> || Santé (ex : <code>18.0/20.0</code>) | | | Volière || Familiers volants |
| |} | | |} |
|
| |
|
| == Permissions ==
| | {{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.}} |
|
| |
|
| {| class="wikitable"
| | == Tarifs == |
| ! Permission !! Description !! Défaut
| |
| |-
| |
| | <code>ecurie.admin</code> || Accès aux commandes d'administration <code>/ecurie</code> || op
| |
| |-
| |
| | <code>ecurie.use</code> || Interaction avec les PNJ et <code>/ecurie gui</code> || true
| |
| |}
| |
|
| |
|
| == Notes techniques ==
| | 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. |
|
| |
|
| * '''Stockage''' : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.
| | {{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.}} |
| * '''Compagnons fantômes''' : entités invulnérables, sans gravité ni IA, représentant le compagnon en box. Toute monte ou interaction est strictement bloquée. Spawné à côté du bloc de box (pas dessus).
| |
| * '''Affichage du nom''' : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s'affichent via un '''TextDisplay''' passager, nettoyé automatiquement lors du despawn.
| |
| * '''Maître d'Écurie''' : NPC Citizens permanent lié à l'étable via `/ecurie setnpc`. Sert d'interface pour toutes les interactions joueur. Nom et skin configurables dans `npc` (config.yml).
| |
| * '''Palefrenier''' : NPC Citizens temporaire spawné uniquement pendant l'animation de départ ou d'arrivée d'un acheminement. Nom et skin configurables dans `groom` (config.yml).
| |
| * '''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 ne peuvent aller que dans une écurie `AQUATIQUE`. Les familiers volants dans une `VOLIERE`. Les familiers terrestres dans une `TERRESTRE` ou `STABLE`. Les restrictions sont activables via l'option `restrict-stable-types`.
| |
| * '''MyPet''' : Le plugin révoque automatiquement le MyPet lors de la mise en pension (via `/petsendaway`) pour éviter les doublons dans le monde, et restaure correctement ses états.
| |
| * '''Transferts''' : vérifiés toutes les 10 secondes en async
| |
|
| |
|
| == Build == | | == Voir aussi == |
| | |
| <syntaxhighlight lang="bash">
| |
| ./gradlew shadowJar
| |
| # Sortie : build/libs/Ecurie-<version>.jar
| |
| </syntaxhighlight>
| |
| | |
| Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.
| |
| | |
| == Changelog ==
| |
| | |
| {| class="wikitable"
| |
| ! 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 compagnon 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 ; rapatriement depuis l'écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc
| |
| |-
| |
| | 1.1.0 || 2026-06-11 || Support de tous les familiers montables et des MyPet, configuration des prix depuis config.yml, ajout des types d'écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG
| |
| |-
| |
| | 1.2.0 || 2026-06-11 || Architecture GUI hybride : API native Paper Dialog (1.21.6+) en interface par défaut, InventoryFramework en fallback. Choix joueur via `/ecurie gui` sauvegardé par PDC. Affichage des tarifs et gestion asynchrone sécurisée.
| |
| |-
| |
| | 1.3.0 || 2026-06-12 || Terminologie RP : "Mettre en pension", "Acheminement", "Compagnon" ; séparation Maître d'Écurie (interface) / Palefrenier (animation) avec skins distincts ; TextDisplay remplace ArmorStand passager pour les noms en box ; correction spawn fantôme à côté du cauldron (non dessus).
| |
| |-
| |
| | 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l'activité MyPet, et restrictions par type d'écurie.
| |
| |}
| |
|
| |
|
| [[Catégorie:Plugin développé pour Nefald]] | | * [[MyPet]] — familiers combattants |
| [[Catégorie:Plugin installé]] | | * [[Grades]] — accès et permissions selon ton rang |