« Plugin:Écurie » : différence entre les versions
De Nefald
Autres actions
Aucun résumé des modifications |
Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0) |
||
| (6 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
{{SHORTDESC:Gestion d'écuries RP : mise en pension, acheminements de montures et stockage physique de compagnons}} | |||
{{Infobox Plugin | |||
|nom=Écurie | |||
|type=roleplay | |||
|dev=[[Scriptomancien|Nefald]] | |||
|status=Installé | |||
|grade=[[Pérégrin]] | |||
|sources=https://git.nefald.fr/minecraft/plugins/ecurie | |||
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel) | |||
}} | |||
'''Écurie''' est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald. | |||
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. | |||
Permet aux joueurs de mettre leurs | |||
== Prérequis == | == Prérequis == | ||
| Ligne 28 : | Ligne 34 : | ||
Le plugin charge sans aucune de ces dépendances optionnelles. | Le plugin charge sans aucune de ces dépendances optionnelles. | ||
== Installation == | == Installation == | ||
# Déposer <code>Ecurie-<version>.jar</code> dans <code>plugins/</code> | |||
# Redémarrer le serveur | |||
# Éditer <code>plugins/Ecurie/config.yml</code> et <code>lang.yml</code> | |||
# Créer les étables via les commandes admin (voir ci-dessous) | |||
== Configuration == | == Configuration == | ||
=== | === config.yml === | ||
<syntaxhighlight lang="yaml"> | <syntaxhighlight lang="yaml"> | ||
database: | database: | ||
file: "ecurie.db" | # '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: | transfer: | ||
base-delay-seconds: 600 # Délai de base pour un | 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 | 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> | </syntaxhighlight> | ||
=== lang.yml === | |||
Tous les messages joueurs. Supporte les balises MiniMessage (<code><red></code>, <code><gold></code>, etc.). | |||
Variables disponibles selon le message : <code>{name}</code>, <code>{amount}</code>, <code>{dest}</code>, <code>{time}</code>, <code>{count}</code>, <code>{stable_id}</code>, <code>{n}</code>, <code>{x}</code>, <code>{y}</code>, <code>{z}</code>. | |||
== Commandes == | |||
=== | === Commandes joueurs === | ||
{| class="wikitable" | |||
/ecurie | ! Commande !! Description !! Permission | ||
|- | |||
| <code>/ecurie gui [dialog/inventory]</code> || Modifie le type d'interface préféré du joueur (sauvegardé en PDC) || <code>ecurie.use</code> | |||
</ | |} | ||
=== Commandes d'administration === | |||
=== | |||
{| class="wikitable" | |||
/ecurie horse free < | ! Commande !! Description !! Permission | ||
</ | |- | ||
| <code>/ecurie wand [on/off]</code> || Active ou désactive le wand (bâton de sélection pour délimiter les étables) || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie create <nom> [type]</code> || Crée une étable dans la sélection wand et scanne automatiquement les boxes. Types : <code>STABLE</code>, <code>RELAY</code>, <code>TERRESTRE</code>, <code>AQUATIQUE</code>, <code>VOLIERE</code>. || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie delete <id></code> || Supprime l'étable spécifiée (rend ses compagnons orphelins) || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie setnpc <stable_id></code> || Lie le NPC Citizens le plus proche (≤5 blocs) à l'étable en lui attribuant son nom/skin par défaut || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie list</code> || Liste toutes les étables enregistrées || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie tp <stable_id/nom></code> || Téléporte le joueur en face du NPC de l'étable spécifiée (sécurité anticollision intégrée) || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie box scan <stable_id></code> || Relance la détection des blocs cibles (box) dans la sélection wand pour cette étable || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie box list <stable_id></code> || Liste les coordonnées de toutes les boxes de l'étable spécifiée || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie box delete <box_id></code> || Supprime définitivement la box spécifiée || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie show [on/off]</code> || Active ou désactive l'affichage de particules colorées sur les blocs de box (vert=libre, rouge=occupé) || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie horse free <horse_id></code> || Supprime définitivement un compagnon de la base de données || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie horse orphans</code> || Liste tous les compagnons orphelins (sans écurie suite à une suppression) || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie horse reassign <horse_id> <stable_id></code> || Réassigne un compagnon orphelin à une box libre de l'étable spécifiée || <code>ecurie.admin</code> | |||
|- | |||
| <code>/ecurie reload</code> || Recharge les fichiers de configuration <code>config.yml</code> et de traduction <code>lang.yml</code> || <code>ecurie.admin</code> | |||
|} | |||
Les blocs cibles de boxes détectés par défaut selon le type d'écurie sont : | |||
* <code>STABLE</code> / <code>TERRESTRE</code> : '''WATER_CAULDRON''' | |||
* <code>AQUATIQUE</code> : '''PRISMARINE''' | |||
* <code>VOLIERE</code> : '''DAYLIGHT_DETECTOR''' | |||
== Permissions == | |||
{| class="wikitable" | |||
! Permission !! Description !! Défaut | |||
|- | |||
| <code>ecurie.admin</code> || Accès complet aux commandes d'administration <code>/ecurie</code> || op | |||
|- | |||
| <code>ecurie.use</code> || Interaction avec les NPCs Maître d'Écurie et utilisation de <code>/ecurie gui</code> || true | |||
< | |} | ||
/ | |||
</ | |||
== Workflow admin — Créer une étable == | == Workflow admin — Créer une étable == | ||
| Ligne 129 : | Ligne 185 : | ||
=== Étapes === | === Étapes === | ||
# '''Construire l'étable''' — poser le bloc cible dans chaque stalle (ex: <code>WATER_CAULDRON</code> pour TERRESTRE, <code>PRISMARINE</code> pour AQUATIQUE). | |||
# '''Activer le wand''' : <code>/ecurie wand on</code> → clic gauche (point A) + clic droit (coin B) pour délimiter la région | |||
# '''Créer et scanner''' : <code>/ecurie create <nom> [type]</code> — crée l'étable ET enregistre automatiquement les boxes détectées. | |||
# '''Lier un NPC''' : placer un Citizens devant l'étable, s'en approcher à < 5 blocs : <code>/ecurie setnpc <stable_id></code> (le nom et le skin par défaut sont appliqués automatiquement). | |||
=== Visualiser les boxes === | === Visualiser les boxes === | ||
| Ligne 147 : | Ligne 203 : | ||
/ecurie show off | /ecurie show off | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Workflow joueur — Interagir avec une étable == | == 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 ( | 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) : | ||
* '''Dialog (par défaut)''' : | * '''Dialog (par défaut)''' : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG. | ||
* '''Inventory''' : | * '''Inventory''' : Inventaire classique sous forme de coffre. | ||
Une GUI s'ouvre avec les actions suivantes : | Une GUI s'ouvre avec les actions suivantes : | ||
=== | === Mettre en pension === | ||
# Amener le compagnon à côté ou le monter | |||
# Cliquer '''Mettre en pension''' dans la GUI | |||
# '''Si le compagnon n'a pas de nom custom''' (nom générique ou absent) → une enclume s'ouvre pour le nommer | |||
# '''Si le compagnon a déjà un nom custom''' → mise en pension directe sans nommage | |||
# Coût : <code>prices.store</code> en sols | |||
=== | === Reprendre un compagnon === | ||
# Cliquer '''Reprendre un compagnon''' | |||
# Choisir le compagnon dans la liste | |||
# Coût : <code>prices.retrieve</code> en sols | |||
=== | === Demander un acheminement === | ||
L'acheminement peut être initié depuis l'écurie de départ ou d'arrivée : | |||
* '''Depuis l'écurie d'origine ( | * '''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 ( | * '''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 | * '''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 === | ||
# Cliquer '''Modifier le registre''' | |||
# Choisir le compagnon dans la liste | |||
# Une enclume s'ouvre pré-remplie avec le nom actuel — modifier ou confirmer | |||
# Coût : <code>prices.rename</code> en sols (défaut 50) | |||
=== Mes | === Mes compagnons === | ||
Vue globale de tous les | Vue globale de tous les compagnons du joueur, toutes étables confondues. | ||
== Placeholders (PlaceholderAPI) == | == Placeholders (PlaceholderAPI) == | ||
| Ligne 194 : | Ligne 246 : | ||
! Placeholder !! Valeur | ! Placeholder !! Valeur | ||
|- | |- | ||
| | | <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) | ||
|- | |- | ||
| | | <code>%ecurie_horse_stable_<n>%</code> || Nom de l'étable du n-ième compagnon | ||
|- | |- | ||
| | | <code>%ecurie_horse_health_<n>%</code> || Santé (ex : <code>18.0/20.0</code>) | ||
|} | |} | ||
== Notes techniques == | == Notes techniques == | ||
* '''Stockage''' : SQLite embarqué ( | * '''Stockage''' : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP. | ||
* ''' | * '''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 <code>/ecurie setnpc</code>. Sert d'interface pour toutes les interactions joueur. Nom et skin configurables dans <code>npc</code> (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 <code>groom</code> (config.yml). | |||
* '''Mort en box''' : perte définitive, slot libéré | * '''Mort en box''' : perte définitive, slot libéré | ||
* '''Banco''' : intégré par réflexion pure (aucun jar requis à la compilation) | * '''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'''. | * '''Stockage universel''' : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers '''MyPet'''. | ||
* '''Typage des écuries (RPG)''' : Les familiers aquatiques | * '''Typage des écuries (RPG)''' : Les familiers aquatiques ne peuvent aller que dans une écurie <code>AQUATIQUE</code>. Les familiers volants dans une <code>VOLIERE</code>. Les familiers terrestres dans une <code>TERRESTRE</code> ou <code>STABLE</code>. Les restrictions sont activables via l'option <code>restrict-stable-types</code>. | ||
* '''MyPet''' : | * '''MyPet''' : Le plugin révoque automatiquement le MyPet lors de la mise en pension (via <code>/petsendaway</code>) pour éviter les doublons dans le monde, et restaure correctement ses états. | ||
* '''Transferts''' : vérifiés toutes les 10 secondes en async | * '''Transferts''' : vérifiés toutes les 10 secondes en async | ||
== Build == | == Build == | ||
| Ligne 239 : | Ligne 277 : | ||
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab. | Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab. | ||
== Changelog == | == Changelog == | ||
| Ligne 253 : | Ligne 289 : | ||
| 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.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 | | 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.0 | | 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 <code>/ecurie gui</code> sauvegardé par PDC. Affichage des tarifs et gestion asynchrone sécurisée. | ||
|- | |- | ||
| 1. | | 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. | | 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]] | |||
[[Catégorie:Plugin installé]] | |||