<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.nefald.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hiob</id>
	<title>Nefald - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nefald.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hiob"/>
	<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/Sp%C3%A9cial:Contributions/Hiob"/>
	<updated>2026-08-05T20:26:39Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5807</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5807"/>
		<updated>2026-08-05T16:03:14Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Restaure le contenu écrasé par le job CI &amp;quot;Doc publique&amp;quot; (rev 5805 était un stub générique) + ajoute une section sur les marqueurs de carte (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Bibliothèque technique commune du serveur, à l&#039;origine de plusieurs effets visibles en jeu (balises de quête, restrictions)}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = NefaldCore&lt;br /&gt;
| type = utilitaire&lt;br /&gt;
| dev = [[Scriptomancien|Nefald]]&lt;br /&gt;
| status = Installé&lt;br /&gt;
| sources = https://git.nefald.fr/minecraft/plugins/nefaldcore&lt;br /&gt;
| dépendance = [[Plugin:WorldGuard|WorldGuard]] (optionnel), [[Plugin:MythicMobs|MythicMobs]] (optionnel), [[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:Dynmap|Dynmap]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NefaldCore&#039;&#039;&#039; est la bibliothèque technique commune aux plugins développés par Nefald. Il n&#039;a pas de vocation RP en soi, mais plusieurs de ses fonctionnalités sont directement visibles en jeu.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Balises de quête ===&lt;br /&gt;
&lt;br /&gt;
Certaines quêtes ou membres du staff peuvent poser une balise de localisation, visible dans la barre de repérage (locator bar). Vos balises actives sont consultables avec :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/questtrack list&amp;lt;/code&amp;gt; || Affiche vos balises de quête actives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Marqueurs sur la carte ===&lt;br /&gt;
&lt;br /&gt;
NefaldCore fournit aux autres plugins le nécessaire pour afficher des marqueurs sur la [https://map.nefald.fr carte interactive] — c&#039;est ce mécanisme qui affiche par exemple les étables sur la [[Plugin:Écurie|carte du plugin Écurie]].&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin:Écurie]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5806</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5806"/>
		<updated>2026-08-05T16:01:38Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Ajoute une section sur les marqueurs de la carte interactive (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Mets tes montures et compagnons en pension auprès des Maîtres d&#039;Écurie et fais-les voyager entre les étables de Nefald}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = Écurie&lt;br /&gt;
| image = Logo_Ecurie.png&lt;br /&gt;
| type = roleplay&lt;br /&gt;
| dev = Nefald&lt;br /&gt;
| status = installé&lt;br /&gt;
| grade = Architecte&lt;br /&gt;
| sources = [https://git.nefald.fr/minecraft/plugins/ecurie Gitlab]&lt;br /&gt;
| dépendance = [[Plugin:NefaldCore]] (obligatoire), [[Plugin:Citizens]] (softdep, requis en pratique — seul point d&#039;entrée joueur), [[Plugin:PlaceholderAPI]] (softdep), [[Plugin:MyPet]] (softdep)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; te permet de mettre tes montures et familiers en pension auprès d&#039;un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039;, un PNJ posté devant chaque étable du monde. Ton compagnon est gardé en sécurité, à l&#039;abri des mobs et des voleurs, et tu peux le faire voyager d&#039;une étable à l&#039;autre sans avoir à parcourir toi-même la distance.&lt;br /&gt;
&lt;br /&gt;
== Où trouver une écurie ==&lt;br /&gt;
&lt;br /&gt;
Les étables sont construites par l&#039;Intendance dans les principales cités et zones de Fendral. Chacune est tenue par un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : clique-droit sur lui pour ouvrir le registre de l&#039;étable.&lt;br /&gt;
&lt;br /&gt;
À ton tout premier clic sur un Maître d&#039;Écurie donné, il t&#039;explique son service en détail. Les fois suivantes, il t&#039;accueille d&#039;une phrase différente à chaque passage — et te remercie après chaque service rendu.&lt;br /&gt;
&lt;br /&gt;
== Mettre un compagnon en pension ==&lt;br /&gt;
&lt;br /&gt;
# Amène ton compagnon à côté de toi (ou monte-le).&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, puis choisis &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039;.&lt;br /&gt;
# S&#039;il n&#039;a pas encore de nom, une enclume s&#039;ouvre pour le baptiser avant de le confier.&lt;br /&gt;
# Le coût affiché couvre la mise en pension &#039;&#039;&#039;et&#039;&#039;&#039; le bail prépayé (voir ci-dessous) — tout est réglé en une fois.&lt;br /&gt;
&lt;br /&gt;
Ton compagnon est alors gardé dans une box de l&#039;étable, en parfaite sécurité, jusqu&#039;à ce que tu viennes le récupérer.&lt;br /&gt;
&lt;br /&gt;
== Le bail de la box ==&lt;br /&gt;
&lt;br /&gt;
Chaque pension inclut un &#039;&#039;&#039;bail prépayé&#039;&#039;&#039; : 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.&lt;br /&gt;
&lt;br /&gt;
* Le bail est &#039;&#039;&#039;prolongeable&#039;&#039;&#039; à tout moment depuis le menu de récupération.&lt;br /&gt;
* Si le bail expire — ou si tu désertes le serveur trop longtemps — le Maître d&#039;Écurie ne peut plus garantir la box : ton compagnon est mis &#039;&#039;&#039;En Réserve&#039;&#039;&#039; pour libérer la place.&lt;br /&gt;
* Un compagnon &#039;&#039;&#039;En Réserve&#039;&#039;&#039; n&#039;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).&lt;br /&gt;
* Tu peux activer le &#039;&#039;&#039;renouvellement automatique&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
== Récupérer un compagnon ==&lt;br /&gt;
&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, choisis &#039;&#039;&#039;Pension &amp;amp; récupération&#039;&#039;&#039;.&lt;br /&gt;
# Sélectionne ton compagnon dans la liste.&lt;br /&gt;
# Le tarif dépend de son état : récupération normale, ou tarif majoré s&#039;il est En Réserve.&lt;br /&gt;
&lt;br /&gt;
== Demander un acheminement ==&lt;br /&gt;
&lt;br /&gt;
Besoin de retrouver ta monture ailleurs sur Fendral ? Le Maître d&#039;Écurie peut organiser un &#039;&#039;&#039;acheminement&#039;&#039;&#039; vers une autre étable :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable de départ&#039;&#039;&#039; : choisis &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionne ton compagnon, puis l&#039;étable de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable d&#039;arrivée&#039;&#039;&#039; : le Maître d&#039;Écurie te propose directement de faire venir un compagnon stationné ailleurs.&lt;br /&gt;
&lt;br /&gt;
Le délai et le coût du voyage dépendent de la distance réelle entre les deux étables — plus c&#039;est loin, plus c&#039;est long et cher. Un &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; (PNJ temporaire) anime le départ et l&#039;arrivée de ton compagnon.&lt;br /&gt;
&lt;br /&gt;
== Modifier le registre ==&lt;br /&gt;
&lt;br /&gt;
Envie de rebaptiser ton compagnon ? Choisis &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039; dans le menu du Maître d&#039;Écurie : une enclume s&#039;ouvre, pré-remplie avec le nom actuel — modifie-le ou confirme tel quel.&lt;br /&gt;
&lt;br /&gt;
== Mes compagnons ==&lt;br /&gt;
&lt;br /&gt;
Cette entrée du menu te donne une vue d&#039;ensemble de &#039;&#039;&#039;tous&#039;&#039;&#039; tes compagnons en pension, toutes étables confondues — pratique pour savoir où se trouve chacun avant de demander un acheminement.&lt;br /&gt;
&lt;br /&gt;
== Compagnons acceptés ==&lt;br /&gt;
&lt;br /&gt;
Écurie accepte toutes les montures classiques (chevaux, chameaux, cochons sellés, striders) ainsi que tous les familiers [[MyPet]]. Selon le type d&#039;étable, seuls certains compagnons sont acceptés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type d&#039;étable !! Compagnons acceptés&lt;br /&gt;
|-&lt;br /&gt;
| Terrestre || Chevaux, chameaux, cochons, familiers terrestres&lt;br /&gt;
|-&lt;br /&gt;
| Aquatique || Familiers/montures aquatiques&lt;br /&gt;
|-&lt;br /&gt;
| Volière || Familiers volants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Info|Un familier [[MyPet]] mis en pension est automatiquement rappelé pour éviter qu&#039;il ne traîne en double dans le monde. Il te sera rendu dans son état actuel à la récupération.}}&lt;br /&gt;
&lt;br /&gt;
== Tarifs ==&lt;br /&gt;
&lt;br /&gt;
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&#039;Intendance et peuvent varier d&#039;une étable à l&#039;autre — le Maître d&#039;Écurie t&#039;affiche toujours le prix avant confirmation.&lt;br /&gt;
&lt;br /&gt;
{{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.}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[MyPet]] — familiers combattants&lt;br /&gt;
* [[Grades]] — accès et permissions selon ton rang&lt;br /&gt;
&lt;br /&gt;
== Sur la carte ==&lt;br /&gt;
&lt;br /&gt;
Chaque étable apparaît comme marqueur sur la [https://map.nefald.fr carte interactive], calque « Écuries » — pratique pour repérer d&#039;un coup d&#039;œil où déposer ou récupérer un compagnon. L&#039;icône du marqueur change selon le type d&#039;étable :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type d&#039;étable !! Icône&lt;br /&gt;
|-&lt;br /&gt;
| Terrestre || Cheval&lt;br /&gt;
|-&lt;br /&gt;
| Aquatique || Dauphin&lt;br /&gt;
|-&lt;br /&gt;
| Volière || Poule&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le popup du marqueur affiche le nombre de boxes libres avant de t&#039;y rendre.&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5805</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5805"/>
		<updated>2026-08-05T15:52:40Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: ajout de la page de base pour NefaldCore (28b890b4)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:NefaldCore est un plugin système pour les fonctionnalités avancées du serveur Nefald.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=NefaldCore&lt;br /&gt;
|type=Système&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=&lt;br /&gt;
|sources=[[https://git.nefald.fr/Nefald/NefaldCore|Dépôt Git]]&lt;br /&gt;
|dependance=Dynmap&lt;br /&gt;
|softdepend=&lt;br /&gt;
|description=NefaldCore fournit des outils internes pour l&#039;intégration et l&#039;extension des fonctionnalités du serveur.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
NefaldCore est un plugin système conçu pour faciliter l&#039;intégration de fonctionnalités avancées sur le serveur Nefald. Il agit comme une base pour d&#039;autres plugins et outils, notamment en gérant des interactions avec des services comme Dynmap.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Ce plugin ne fournit pas de commandes directement accessibles aux joueurs.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Ce plugin ne définit pas de permissions pour les joueurs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
NefaldCore est installé et configuré par l&#039;équipe d&#039;administration. Aucune action n&#039;est requise de la part des joueurs.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Ce plugin est essentiel au bon fonctionnement de certaines fonctionnalités du serveur.&lt;br /&gt;
* Pour toute question, contactez un membre de l&#039;équipe d&#039;administration.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5804</id>
		<title>Plugin:Ecurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5804"/>
		<updated>2026-08-05T15:52:33Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: ajout icônes Dynmap personnalisées (6bda9dfc)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gérez vos écuries et visualisez-les sur la carte Dynmap.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Ecurie&lt;br /&gt;
|description=Plugin permettant la gestion des écuries et leur affichage sur Dynmap.&lt;br /&gt;
|type=Gestion, Utilitaire&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=&lt;br /&gt;
|sources=&lt;br /&gt;
|dependance=Dynmap&lt;br /&gt;
|commandes=&lt;br /&gt;
|permissions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Le plugin Ecurie permet aux joueurs de gérer leurs écuries et d&#039;afficher leur emplacement sur la carte Dynmap du serveur. Les icônes personnalisées rendent les écuries facilement identifiables.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Aucune commande utilisateur n&#039;est actuellement documentée pour ce plugin.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Aucune permission utilisateur n&#039;est actuellement documentée pour ce plugin.&lt;br /&gt;
&lt;br /&gt;
== Installation (joueur) ==&lt;br /&gt;
Aucune installation spécifique n&#039;est requise pour les joueurs. Le plugin fonctionne automatiquement une fois installé par les administrateurs.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Les écuries sont visibles sur la carte Dynmap avec des icônes personnalisées (cheval, poulet, table de cartographie).&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5803</id>
		<title>Plugin:Ecurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5803"/>
		<updated>2026-08-05T15:52:26Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: b95bd12d - Ajout description utilisateur et infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gérez et visualisez vos montures sur la carte Dynmap du serveur.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Ecurie&lt;br /&gt;
|type=Utilitaire&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=Non spécifiée&lt;br /&gt;
|sources=[[Projet:Ecurie|Dépôt interne]]&lt;br /&gt;
|dependance=[[Dynmap]]&lt;br /&gt;
|plateforme=Bukkit/Spigot&lt;br /&gt;
|commandes_principales=/ecurie&lt;br /&gt;
|permissions=ecurie.utiliser&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Le plugin &#039;&#039;Ecurie&#039;&#039; permet aux joueurs de visualiser leurs montures (chevaux, etc.) sur la carte interactive du serveur via [[Dynmap]]. Les icônes des montures sont affichées en temps réel, offrant une meilleure immersion et un suivi pratique de vos animaux.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Aucune commande publique n&#039;est actuellement documentée pour les joueurs. Les fonctionnalités sont accessibles automatiquement via l&#039;intégration avec Dynmap.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
* &#039;&#039;&#039;ecurie.utiliser&#039;&#039;&#039; : Permet de voir ses montures sur la carte Dynmap.&lt;br /&gt;
&lt;br /&gt;
== Installation (joueur) ==&lt;br /&gt;
Aucune installation spécifique n&#039;est requise pour les joueurs. Le plugin fonctionne automatiquement si vous possédez des montures enregistrées sur le serveur.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Les icônes des montures sont conçues en pixel-art pour une meilleure intégration visuelle.&lt;br /&gt;
* Les données sont synchronisées automatiquement au démarrage du serveur.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5802</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5802"/>
		<updated>2026-08-05T15:52:16Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: b8853222 - Ajout de la documentation utilisateur pour NefaldCore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:NefaldCore est un plugin central pour les fonctionnalités personnalisées du serveur Nefald.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=NefaldCore&lt;br /&gt;
|type=Utilitaire&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=&lt;br /&gt;
|sources=Interne&lt;br /&gt;
|dependance=&lt;br /&gt;
|softdependance=Dynmap&lt;br /&gt;
|description=NefaldCore fournit les bases techniques pour les fonctionnalités avancées du serveur, incluant l&#039;intégration avec Dynmap pour les marqueurs personnalisés.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
NefaldCore est un plugin interne qui permet d&#039;étendre les fonctionnalités du serveur Nefald. Il sert de fondation pour d&#039;autres modules et assure une intégration fluide avec des plugins comme Dynmap pour afficher des icônes et marqueurs personnalisés sur la carte du serveur.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Aucune commande n&#039;est directement accessible aux joueurs pour ce plugin.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Aucune permission n&#039;est requise pour les joueurs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Ce plugin est préinstallé sur le serveur Nefald. Aucune action n&#039;est requise de la part des joueurs.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Ce plugin est principalement technique et n&#039;a pas d&#039;impact visible pour les joueurs.&lt;br /&gt;
* Il est maintenu par l&#039;équipe d&#039;administration du serveur.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5801</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5801"/>
		<updated>2026-08-05T15:52:09Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: b094721e - Ajout description utilisateur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:NefaldCore est une bibliothèque partagée entre les plugins développés par Nefald, fournissant des outils et fonctionnalités communes pour améliorer l&#039;expérience de jeu.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=NefaldCore&lt;br /&gt;
|type=Bibliothèque&lt;br /&gt;
|dev=Nefald&lt;br /&gt;
|status=Actif&lt;br /&gt;
|sources=[https://git.nefald.fr/minecraft/plugins/nefaldcore Gitlab Nefald]&lt;br /&gt;
|dependance=&lt;br /&gt;
|version=&lt;br /&gt;
|api-version=&lt;br /&gt;
|site=&lt;br /&gt;
|discord=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
NefaldCore est un plugin central qui sert de fondation aux autres plugins développés par l&#039;équipe Nefald. Il fournit des outils et des services communs pour faciliter le développement et l&#039;intégration des fonctionnalités sur le serveur.&lt;br /&gt;
&lt;br /&gt;
Ce plugin ne propose pas directement de commandes ou de fonctionnalités visibles pour les joueurs, mais il est essentiel au bon fonctionnement des autres plugins Nefald.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Ce plugin ne dispose pas de commandes accessibles aux joueurs.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Ce plugin ne définit pas de permissions spécifiques pour les joueurs.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
NefaldCore est installé automatiquement en tant que dépendance des autres plugins Nefald. Aucune action n&#039;est requise de la part des joueurs.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Ce plugin est indispensable pour le fonctionnement des autres plugins Nefald.&lt;br /&gt;
* Aucune configuration manuelle n&#039;est nécessaire pour les joueurs.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5800</id>
		<title>Plugin:Ecurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5800"/>
		<updated>2026-08-05T15:52:02Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: 93c4fa35 - Ajout des fonctionnalités utilisateur et intégration Dynmap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gérez vos écuries, louez des boxes et interagissez avec les PNJ dédiés.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Ecurie&lt;br /&gt;
|type=Gestion, Roleplay&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=1.6.1&lt;br /&gt;
|dependance=[[Plugin:Dynmap|Dynmap]] (optionnel), [[Plugin:NefaldCore]]&lt;br /&gt;
|sources=Interne (Nefald)&lt;br /&gt;
|commandes_principales=/ecurie&lt;br /&gt;
|permissions=ecurie.use&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Le plugin &#039;&#039;&#039;Ecurie&#039;&#039;&#039; permet aux joueurs de gérer des écuries sur le serveur. Vous pouvez :&lt;br /&gt;
* Louer des boxes pour y loger vos chevaux.&lt;br /&gt;
* Interagir avec des PNJ dédiés pour créer ou gérer vos écuries.&lt;br /&gt;
* Visualiser les écuries disponibles via la carte [[Plugin:Dynmap|Dynmap]] (si activée).&lt;br /&gt;
&lt;br /&gt;
Les écuries sont représentées par des marqueurs sur la carte Dynmap, affichant leur type, le nombre de boxes disponibles et le nom du PNJ associé.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/ecurie&#039;&#039;&#039; || Affiche l&#039;aide du plugin. || ecurie.use&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/ecurie info&#039;&#039;&#039; || Affiche les informations sur une écurie proche. || ecurie.use&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;/ecurie list&#039;&#039;&#039; || Liste les écuries disponibles. || ecurie.use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
* &#039;&#039;&#039;ecurie.use&#039;&#039;&#039; : Permet d&#039;utiliser les commandes de base du plugin.&lt;br /&gt;
&lt;br /&gt;
== Installation (pour les joueurs) ==&lt;br /&gt;
Aucune installation n&#039;est requise. Le plugin est activé par défaut sur le serveur. Utilisez simplement les commandes ou interagissez avec les PNJ pour gérer vos écuries.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Les écuries sont visibles sur la carte Dynmap si le plugin est activé.&lt;br /&gt;
* Les boxes inoccupés peuvent être loués via les PNJ ou les commandes.&lt;br /&gt;
* Un système de bail et d&#039;inactivité gère automatiquement la libération des boxes.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5799</id>
		<title>Plugin:Ecurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5799"/>
		<updated>2026-08-05T15:51:51Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: amélioration des icônes pixel-art (poule et table de cartographie)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gérez votre écurie et vos animaux avec des fonctionnalités optimisées pour Minecraft.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Ecurie&lt;br /&gt;
|type=Gestion des entités&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Actif&lt;br /&gt;
|version=1.0&lt;br /&gt;
|sources=[[https://git.nefald.fr/nefald/ecurie|Dépôt Git Nefald]]&lt;br /&gt;
|dependance=&lt;br /&gt;
|api=&lt;br /&gt;
|mc_version=1.20+&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Le plugin &#039;&#039;&#039;Ecurie&#039;&#039;&#039; permet aux joueurs de gérer leurs animaux et leurs équipements liés à l&#039;élevage de manière intuitive. Il inclut des icônes personnalisées pour une meilleure expérience utilisateur, notamment pour les poules et les tables de cartographie.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
* Gestion simplifiée des animaux (poules, chevaux, etc.).&lt;br /&gt;
* Icônes pixel-art optimisées pour une meilleure visibilité.&lt;br /&gt;
* Intégration avec les mécaniques de jeu existantes.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Aucune commande utilisateur n&#039;est actuellement documentée pour ce plugin.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Aucune permission utilisateur n&#039;est requise pour les fonctionnalités de base.&lt;br /&gt;
&lt;br /&gt;
== Installation (joueur) ==&lt;br /&gt;
Le plugin est activé par défaut sur le serveur. Aucune installation supplémentaire n&#039;est nécessaire.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Les icônes des poules et des tables de cartographie ont été améliorées pour un rendu plus net.&lt;br /&gt;
* Pour toute suggestion ou problème, contactez l&#039;équipe via le canal dédié sur Discord.&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Module:Infobox/Configs/Plugin&amp;diff=5798</id>
		<title>Module:Infobox/Configs/Plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Module:Infobox/Configs/Plugin&amp;diff=5798"/>
		<updated>2026-08-03T09:33:29Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Port depuis codex.nefald.fr : ajout section Sous-pages (détection automatique via Module:Infobox/SousPages) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local sousPages = require(&#039;Module:Infobox/SousPages&#039;)&lt;br /&gt;
&lt;br /&gt;
local config = {&lt;br /&gt;
    titre = function(args) &lt;br /&gt;
        return args.nom or &#039;{{PAGENAME}}&#039; &lt;br /&gt;
    end,&lt;br /&gt;
    &lt;br /&gt;
    icone = {&lt;br /&gt;
        type = &#039;fas&#039;,&lt;br /&gt;
        nom = &#039;puzzle-piece&#039;&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
    image = function(args) &lt;br /&gt;
        if args.image then&lt;br /&gt;
            return {&lt;br /&gt;
                nom = args.image,&lt;br /&gt;
                taille = args.tailleimage or &amp;quot;280x200px&amp;quot;,&lt;br /&gt;
                legende = args.legende or args.nom or &#039;{{PAGENAME}}&#039;&lt;br /&gt;
            }&lt;br /&gt;
        end&lt;br /&gt;
        return nil&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    sections = {&lt;br /&gt;
        {&lt;br /&gt;
            champs = {&lt;br /&gt;
                { &lt;br /&gt;
                    cle = &#039;type&#039;, &lt;br /&gt;
                    label = &#039;Type&#039;, &lt;br /&gt;
                    process = function(value, args)&lt;br /&gt;
                        if not value or value == &#039;&#039; then&lt;br /&gt;
                            return nil&lt;br /&gt;
                        end&lt;br /&gt;
                        &lt;br /&gt;
                        -- Configuration locale des types&lt;br /&gt;
                        local typeValues = {&lt;br /&gt;
                            [&#039;api&#039;] = &#039;API&#039;,&lt;br /&gt;
                            [&#039;économie&#039;] = &#039;Économie&#039;,&lt;br /&gt;
                            [&#039;pvp&#039;] = &#039;PvP&#039;,&lt;br /&gt;
                            [&#039;roleplay&#039;] = &#039;Roleplay&#039;,&lt;br /&gt;
                            [&#039;administration&#039;] = &#039;Administration&#039;,&lt;br /&gt;
                            [&#039;protection&#039;] = &#039;Protection&#039;,&lt;br /&gt;
                            [&#039;premium&#039;] = &#039;Premium&#039;,&lt;br /&gt;
                            [&#039;cosmétique&#039;] = &#039;Cosmétique&#039;,&lt;br /&gt;
                            [&#039;communication&#039;] = &#039;Communication&#039;,&lt;br /&gt;
                            [&#039;construction&#039;] = &#039;Construction&#039;,&lt;br /&gt;
                            [&#039;utilitaire&#039;] = &#039;Utilitaire&#039;,&lt;br /&gt;
                            [&#039;mini-jeu&#039;] = &#039;Mini-jeu&#039;,&lt;br /&gt;
                            [&#039;modération&#039;] = &#039;Modération&#039;,&lt;br /&gt;
                            [&#039;monde&#039;] = &#039;Monde&#039;,&lt;br /&gt;
                            [&#039;inventaire&#039;] = &#039;Inventaire&#039;,&lt;br /&gt;
                            [&#039;terraforming&#039;] = &#039;Terraforming&#039;,&lt;br /&gt;
                            [&#039;transport&#039;] = &#039;Transport&#039;,&lt;br /&gt;
                            [&#039;magie&#039;] = &#039;Magie&#039;,&lt;br /&gt;
                            [&#039;mob&#039;] = &#039;Mob&#039;&lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
                        -- Séparer par virgule et traiter chaque type&lt;br /&gt;
                        local types = mw.text.split(value, &#039;,&#039;)&lt;br /&gt;
                        local displayTypes = {}&lt;br /&gt;
                        local hasError = false&lt;br /&gt;
                        local errorMsg = &#039;&#039;&lt;br /&gt;
                        &lt;br /&gt;
                        for _, typeItem in ipairs(types) do&lt;br /&gt;
                            local cleanValue = mw.text.trim(mw.ustring.lower(typeItem))&lt;br /&gt;
                            &lt;br /&gt;
                            if typeValues[cleanValue] then&lt;br /&gt;
                                table.insert(displayTypes, typeValues[cleanValue])&lt;br /&gt;
                            else&lt;br /&gt;
                                hasError = true&lt;br /&gt;
                                errorMsg = errorMsg .. &#039;&amp;lt;span style=&amp;quot;color: red; font-weight: bold;&amp;quot;&amp;gt;Type invalide: &amp;quot;&#039; .. typeItem .. &#039;&amp;quot;&amp;lt;/span&amp;gt; &#039;&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                        &lt;br /&gt;
                        if hasError then&lt;br /&gt;
                            return errorMsg .. &#039;[[Catégorie:Pages avec erreurs]]&#039;&lt;br /&gt;
                        end&lt;br /&gt;
                        &lt;br /&gt;
                        -- Joindre les types avec &amp;quot;, &amp;quot; pour l&#039;affichage&lt;br /&gt;
                        return table.concat(displayTypes, &#039;, &#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;dev&#039;, label = &#039;Développeur&#039; },&lt;br /&gt;
                { &lt;br /&gt;
                    cle = &#039;status&#039;, &lt;br /&gt;
                    label = &#039;Statut&#039;,&lt;br /&gt;
                    process = function(value, args)&lt;br /&gt;
                        if not value or value == &#039;&#039; then&lt;br /&gt;
                            return nil&lt;br /&gt;
                        end&lt;br /&gt;
                        &lt;br /&gt;
                        -- Configuration locale des statuts&lt;br /&gt;
                        local statusValues = {&lt;br /&gt;
                            [&#039;installé&#039;] = &#039;[[:Catégorie:Plugin installé|Installé]]&#039;,&lt;br /&gt;
                            [&#039;non-installé&#039;] = &#039;[[:Catégorie:Plugin non-installé|Non-installé]]&#039;&lt;br /&gt;
                        }&lt;br /&gt;
                        &lt;br /&gt;
                        local cleanValue = mw.text.trim(mw.ustring.lower(value))&lt;br /&gt;
                        &lt;br /&gt;
                        if statusValues[cleanValue] then&lt;br /&gt;
                            return statusValues[cleanValue]&lt;br /&gt;
                        else&lt;br /&gt;
                            return &#039;&amp;lt;span style=&amp;quot;color: red; font-weight: bold;&amp;quot;&amp;gt;Statut invalide: &amp;quot;&#039; .. value .. &#039;&amp;quot;&amp;lt;/span&amp;gt;[[Catégorie:Pages avec erreurs]]&#039;&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;grade&#039;, label = &#039;Grade requis&#039; }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            titre = &#039;Ressources&#039;,&lt;br /&gt;
            champs = {&lt;br /&gt;
                { cle = &#039;docs&#039;, label = &#039;Documentation&#039;,&lt;br /&gt;
                  process = function(value, args, frame)&lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        if value:match(&#039;^%[.+%]$&#039;) then&lt;br /&gt;
                            return frame:preprocess(value)&lt;br /&gt;
                        elseif value:match(&#039;^https?://&#039;) then&lt;br /&gt;
                            return frame:preprocess(&#039;[&#039; .. value .. &#039; Documentation]&#039;)&lt;br /&gt;
                        else&lt;br /&gt;
                            return &#039;[[&#039; .. value .. &#039;]]&#039;&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil&lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;website&#039;, label = &#039;Site web&#039;,&lt;br /&gt;
                  process = function(value, args, frame)&lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        if value:match(&#039;^%[.+%]$&#039;) then&lt;br /&gt;
                            return frame:preprocess(value)&lt;br /&gt;
                        elseif value:match(&#039;^https?://&#039;) then&lt;br /&gt;
                            return frame:preprocess(&#039;[&#039; .. value .. &#039; Site web]&#039;)&lt;br /&gt;
                        else&lt;br /&gt;
                            return &#039;[[&#039; .. value .. &#039;]]&#039;&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil&lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;bukkit&#039;, label = &#039;Bukkit&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://dev.bukkit.org/projects/&#039; .. value .. &#039; Bukkit]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;hangar&#039;, label = &#039;Hangar&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://hangar.papermc.io/&#039; .. value .. &#039; Hangar]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;modrinth&#039;, label = &#039;Modrinth&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://modrinth.com/plugin/&#039; .. value .. &#039; Modrinth]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;builtbybit&#039;, label = &#039;BuiltByBit&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://builtbybit.com/resources/&#039; .. value .. &#039; BuiltByBit]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;polymart&#039;, label = &#039;Polymart&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://polymart.org/product/&#039; .. value .. &#039; Polymart]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;spigot&#039;, label = &#039;Spigot&#039;,&lt;br /&gt;
                  process = function(value, args, frame) &lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        return frame:preprocess(&#039;[https://www.spigotmc.org/resources/&#039; .. value .. &#039; Spigot]&#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil &lt;br /&gt;
                  end&lt;br /&gt;
                },&lt;br /&gt;
                { cle = &#039;sources&#039;, label = &#039;Code source&#039;,&lt;br /&gt;
                  process = function(value, args, frame)&lt;br /&gt;
                    if value and value ~= &#039;&#039; then&lt;br /&gt;
                        if value:match(&#039;^%[.+%]$&#039;) then&lt;br /&gt;
                            return frame:preprocess(value)&lt;br /&gt;
                        elseif value:match(&#039;^https?://&#039;) then&lt;br /&gt;
                            local domain = value:match(&#039;://([^/]+)&#039;)&lt;br /&gt;
                            local siteName = &#039;Source&#039;&lt;br /&gt;
                            if domain:match(&#039;github%.com&#039;) then&lt;br /&gt;
                                siteName = &#039;GitHub&#039;&lt;br /&gt;
                            elseif domain:match(&#039;gitlab%.com&#039;) then&lt;br /&gt;
                                siteName = &#039;GitLab&#039;&lt;br /&gt;
                            elseif domain:match(&#039;bitbucket%.org&#039;) then&lt;br /&gt;
                                siteName = &#039;Bitbucket&#039;&lt;br /&gt;
                            end&lt;br /&gt;
                            return frame:preprocess(&#039;[&#039; .. value .. &#039; &#039; .. siteName .. &#039;]&#039;)&lt;br /&gt;
                        else&lt;br /&gt;
                            return value&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                    return nil&lt;br /&gt;
                  end&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            titre = &#039;Compatibilité&#039;,&lt;br /&gt;
            champs = {&lt;br /&gt;
                { cle = &#039;dépendance&#039;, label = &#039;Dépendance(s)&#039; },&lt;br /&gt;
                { cle = &#039;compatibilité&#039;, label = &#039;Compatible avec&#039; }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            titre = &#039;Sous-pages&#039;,&lt;br /&gt;
            champs = {&lt;br /&gt;
                {&lt;br /&gt;
                    cle = &#039;sous_pages&#039;,&lt;br /&gt;
                    process = function(value, args, frame)&lt;br /&gt;
                        return sousPages.build(args, { sousPagesNamespace = &#039;Plugin&#039; }, frame)&lt;br /&gt;
                    end&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    categories = function(args, config, frame)&lt;br /&gt;
        local cats = {}&lt;br /&gt;
        &lt;br /&gt;
        -- Configuration des catégories par type&lt;br /&gt;
        local typeCategories = {&lt;br /&gt;
            [&#039;api&#039;] = &#039;Plugin d\&#039;API&#039;,&lt;br /&gt;
            [&#039;économie&#039;] = &#039;Plugin d\&#039;économie&#039;,&lt;br /&gt;
            [&#039;pvp&#039;] = &#039;Plugin de PvP&#039;,&lt;br /&gt;
            [&#039;roleplay&#039;] = &#039;Plugin de roleplay&#039;,&lt;br /&gt;
            [&#039;administration&#039;] = &#039;Plugin d\&#039;administration&#039;,&lt;br /&gt;
            [&#039;protection&#039;] = &#039;Plugin de protection&#039;,&lt;br /&gt;
            [&#039;cosmétique&#039;] = &#039;Plugin cosmétique&#039;,&lt;br /&gt;
            [&#039;communication&#039;] = &#039;Plugin de communication&#039;,&lt;br /&gt;
            [&#039;construction&#039;] = &#039;Plugin de construction&#039;,&lt;br /&gt;
            [&#039;utilitaire&#039;] = &#039;Plugin utilitaire&#039;,&lt;br /&gt;
            [&#039;mini-jeu&#039;] = &#039;Plugin de mini-jeux&#039;,&lt;br /&gt;
            [&#039;modération&#039;] = &#039;Plugin de modération&#039;,&lt;br /&gt;
            [&#039;premium&#039;] = &#039;Plugin premium&#039;,&lt;br /&gt;
            [&#039;monde&#039;] = &#039;Plugin de monde&#039;,&lt;br /&gt;
            [&#039;inventaire&#039;] = &#039;Plugin d\&#039;inventaire&#039;,&lt;br /&gt;
            [&#039;terraforming&#039;] = &#039;Plugin de terraforming&#039;,&lt;br /&gt;
            [&#039;transport&#039;] = &#039;Plugin de transport&#039;,&lt;br /&gt;
            [&#039;magie&#039;] = &#039;Plugin de magie&#039;,&lt;br /&gt;
            [&#039;mob&#039;] = &#039;Plugin de mobs&#039;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        -- Configuration des catégories par statut&lt;br /&gt;
        local statusCategories = {&lt;br /&gt;
            [&#039;installé&#039;] = &#039;Plugin installé&#039;,&lt;br /&gt;
            [&#039;non-installé&#039;] = &#039;Plugin non-installé&#039;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        -- Catégories basées sur le(s) type(s)&lt;br /&gt;
        if args.type then&lt;br /&gt;
            -- Séparer par virgule et traiter chaque type&lt;br /&gt;
            local types = mw.text.split(args.type, &#039;,&#039;)&lt;br /&gt;
            &lt;br /&gt;
            for _, typeItem in ipairs(types) do&lt;br /&gt;
                local cleanType = mw.text.trim(mw.ustring.lower(typeItem))&lt;br /&gt;
                if typeCategories[cleanType] then&lt;br /&gt;
                    table.insert(cats, typeCategories[cleanType])&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- Catégorie basée sur le statut&lt;br /&gt;
        if args.status then&lt;br /&gt;
            local cleanStatus = mw.text.trim(mw.ustring.lower(args.status))&lt;br /&gt;
            if statusCategories[cleanStatus] then&lt;br /&gt;
                table.insert(cats, statusCategories[cleanStatus])&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        return cats&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return config&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Mod%C3%A8le:Infobox/styles.css&amp;diff=5797</id>
		<title>Modèle:Infobox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Mod%C3%A8le:Infobox/styles.css&amp;diff=5797"/>
		<updated>2026-08-03T09:32:42Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Port depuis codex.nefald.fr : classe .infobox-souspage-active pour la page courante en gras dans la liste des sous-pages (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.infobox-table {&lt;br /&gt;
    z-index: 3 !important;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    width: 400px;&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    margin-bottom: var(--space-md);&lt;br /&gt;
    padding-bottom: 20px !important;&lt;br /&gt;
    background: var(--color-surface-1);&lt;br /&gt;
    border: 1px solid var(--border-color-base);&lt;br /&gt;
    border-radius: var(--border-radius-medium);&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
    text-align: left;&lt;br /&gt;
    display: block;&lt;br /&gt;
    /* Propriétés de flottement */&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: 20px;&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
    /* Position relative pour l&#039;icône absolue */&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header {&lt;br /&gt;
    padding: 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-image {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    background: var(--background-color-button-quiet--hover);&lt;br /&gt;
    margin-bottom: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-image img {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title {&lt;br /&gt;
    color: var(--color-emphasized);&lt;br /&gt;
    font-size: 1.4rem !important;&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    line-height: 1.4;&lt;br /&gt;
    margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-subtitle {&lt;br /&gt;
    color: var(--color-subtle);&lt;br /&gt;
    font-size: 0.9rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-body {&lt;br /&gt;
    padding: 0 15px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-section-title {&lt;br /&gt;
    padding-top: 15px;&lt;br /&gt;
    border-top: 1px solid var(--border-color-base);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
    font-size: 1rem;&lt;br /&gt;
    color: var(--color-emphasized);&lt;br /&gt;
    margin-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-row {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    margin-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label {&lt;br /&gt;
    color: var(--color-subtle);&lt;br /&gt;
    font-size: 0.8125rem;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 0.75px;&lt;br /&gt;
    flex: 0 0 40%;&lt;br /&gt;
    padding-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-value {&lt;br /&gt;
    flex: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Page courante dans la liste &amp;quot;Sous-pages&amp;quot; : mise en évidence, non cliquable */&lt;br /&gt;
.infobox-souspage-active {&lt;br /&gt;
    color: var(--color-emphasized);&lt;br /&gt;
    font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style pour l&#039;icône en bas à droite */&lt;br /&gt;
.infobox-icon-bottom {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    bottom: 10px;&lt;br /&gt;
    right: 15px;&lt;br /&gt;
    font-size: 1.2em;&lt;br /&gt;
    color: var(--color-subtle);&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media only screen and (max-width: 720px) {&lt;br /&gt;
    .infobox-table {&lt;br /&gt;
        float: none;&lt;br /&gt;
        margin-right: auto;&lt;br /&gt;
        margin-left: auto;&lt;br /&gt;
        margin-top: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .infobox-icon-bottom {&lt;br /&gt;
        bottom: 8px;&lt;br /&gt;
        right: 12px;&lt;br /&gt;
        font-size: 1.1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Module:Infobox/Core&amp;diff=5796</id>
		<title>Module:Infobox/Core</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Module:Infobox/Core&amp;diff=5796"/>
		<updated>2026-08-03T09:32:16Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Port depuis codex.nefald.fr : masquage des sections vides, champs sans label pleine largeur, icône configurable par fonction (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Fonction pour générer le lien de carte dynamique&lt;br /&gt;
local function buildMapLink(args)&lt;br /&gt;
    -- Vérifier les champs obligatoires&lt;br /&gt;
    if not args.x or args.x == &#039;&#039; then return nil end&lt;br /&gt;
    if not args.y or args.y == &#039;&#039; then return nil end&lt;br /&gt;
    if not args.z or args.z == &#039;&#039; then return nil end&lt;br /&gt;
    if not args.worldname or args.worldname == &#039;&#039; then return nil end&lt;br /&gt;
    &lt;br /&gt;
    -- Valeurs par défaut pour les champs optionnels&lt;br /&gt;
    local mapname = args.mapname or &#039;flat&#039;&lt;br /&gt;
    local zoom = args.zoom or &#039;4&#039;&lt;br /&gt;
    &lt;br /&gt;
    -- Construction de l&#039;URL&lt;br /&gt;
    local url = string.format(&lt;br /&gt;
        &#039;https://map.nefald.fr/?worldname=%s&amp;amp;mapname=%s&amp;amp;zoom=%s&amp;amp;x=%s&amp;amp;y=%s&amp;amp;z=%s&#039;,&lt;br /&gt;
        mw.uri.encode(args.worldname, &#039;PATH&#039;),&lt;br /&gt;
        mw.uri.encode(mapname, &#039;PATH&#039;),&lt;br /&gt;
        zoom,&lt;br /&gt;
        args.x,&lt;br /&gt;
        args.y,&lt;br /&gt;
        args.z&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    -- Retourner le lien formaté&lt;br /&gt;
    return string.format(&#039;[%s %s, %s, %s]&#039;, url, args.x, args.y, args.z)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Fonction de validation du champ &amp;quot;type&amp;quot;&lt;br /&gt;
local function validateTypeField(args, config)&lt;br /&gt;
    local typeValue = args.type or args[&#039;type&#039;]&lt;br /&gt;
    &lt;br /&gt;
    -- Si pas de configuration pour le type, pas de validation&lt;br /&gt;
    if not config.typeField then&lt;br /&gt;
        return { valid = true }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Si le champ est requis et vide&lt;br /&gt;
    if config.typeField.required and (not typeValue or typeValue == &#039;&#039;) then&lt;br /&gt;
        return { &lt;br /&gt;
            error = &#039;Le champ &amp;quot;type&amp;quot; est obligatoire.&#039;,&lt;br /&gt;
            valid = false &lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Si pas de valeur, mais pas requis, c&#039;est valide&lt;br /&gt;
    if not typeValue or typeValue == &#039;&#039; then&lt;br /&gt;
        return { valid = true }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Nettoyer la valeur&lt;br /&gt;
    local cleanType = mw.text.trim(mw.ustring.lower(typeValue))&lt;br /&gt;
    &lt;br /&gt;
    -- Vérifier si la valeur est dans la liste autorisée&lt;br /&gt;
    if config.typeField.allowedValues and not config.typeField.allowedValues[cleanType] then&lt;br /&gt;
        local errorMsg = config.typeField.errorMessage or &#039;Valeur de type non autorisée : &#039; .. typeValue&lt;br /&gt;
        return { &lt;br /&gt;
            error = errorMsg,&lt;br /&gt;
            valid = false &lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return { &lt;br /&gt;
        valid = true,&lt;br /&gt;
        cleanValue = cleanType,&lt;br /&gt;
        displayValue = config.typeField.allowedValues and config.typeField.allowedValues[cleanType] and config.typeField.allowedValues[cleanType].display or typeValue&lt;br /&gt;
    }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Fonction pour gérer la catégorisation automatique&lt;br /&gt;
local function addCategories(args, config, frame)&lt;br /&gt;
    -- Vérifier qu&#039;on est dans le namespace principal (0) ou namespace plugin (3000)&lt;br /&gt;
    local title = mw.title.getCurrentTitle()&lt;br /&gt;
    if title.namespace ~= 0 and title.namespace ~= 3000 then&lt;br /&gt;
        return &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local categoryString = &#039;&#039;&lt;br /&gt;
    &lt;br /&gt;
    -- Nouvelles catégories configurables (fonction categories)&lt;br /&gt;
    if type(config.categories) == &#039;function&#039; then&lt;br /&gt;
        local cats = config.categories(args, config, frame)&lt;br /&gt;
        if cats then&lt;br /&gt;
            for _, cat in ipairs(cats) do&lt;br /&gt;
                categoryString = categoryString .. &#039;[[Catégorie:&#039; .. cat .. &#039;]]&#039;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return categoryString&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.build(args, config, frame)&lt;br /&gt;
    if not args.nom or args.nom == &#039;&#039; then&lt;br /&gt;
        return &#039;&amp;lt;div class=&amp;quot;error&amp;quot;&amp;gt;Nom requis pour l\&#039;infobox&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Validation du champ type&lt;br /&gt;
    local typeValidation = validateTypeField(args, config)&lt;br /&gt;
    if not typeValidation.valid then&lt;br /&gt;
        return &#039;&amp;lt;div class=&amp;quot;error&amp;quot;&amp;gt;&#039; .. typeValidation.error .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;infobox-table&#039;)&lt;br /&gt;
        :attr(&#039;role&#039;, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- En-tête avec nom&lt;br /&gt;
    local header = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;infobox-header&#039;)&lt;br /&gt;
    &lt;br /&gt;
    if args.image and args.image ~= &#039;&#039; then&lt;br /&gt;
        local imageDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;infobox-image&#039;)&lt;br /&gt;
        &lt;br /&gt;
        local imageSize = args.tailleimage or &#039;280px&#039;&lt;br /&gt;
        local imageCode = string.format(&#039;[[Fichier:%s|%s|center&#039;, args.image, imageSize)&lt;br /&gt;
        if args.legende and args.legende ~= &#039;&#039; then&lt;br /&gt;
            imageCode = imageCode .. &#039;|&#039; .. args.legende&lt;br /&gt;
        end&lt;br /&gt;
        imageCode = imageCode .. &#039;]]&#039;&lt;br /&gt;
        &lt;br /&gt;
        imageDiv:wikitext(imageCode)&lt;br /&gt;
        header:node(imageDiv)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Titre sans icône (icône déplacée en bas à droite)&lt;br /&gt;
    local titleDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;infobox-title&#039;)&lt;br /&gt;
        :wikitext(args.nom)&lt;br /&gt;
    &lt;br /&gt;
    header:node(titleDiv)&lt;br /&gt;
&lt;br /&gt;
    if args.soustitre and args.soustitre ~= &#039;&#039; then&lt;br /&gt;
        local subtitleDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;infobox-subtitle&#039;)&lt;br /&gt;
            :wikitext(args.soustitre)&lt;br /&gt;
        header:node(subtitleDiv)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    root:node(header)&lt;br /&gt;
&lt;br /&gt;
    -- Corps avec les champs&lt;br /&gt;
    local body = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;infobox-body&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- Vérifier si on a des coordonnées complètes&lt;br /&gt;
    local mapLink = buildMapLink(args)&lt;br /&gt;
    local coordinatesDisplayed = false&lt;br /&gt;
&lt;br /&gt;
    for _, section in ipairs(config.sections or {}) do&lt;br /&gt;
        -- Les lignes de la section sont accumulées ici et intégrées au body seulement&lt;br /&gt;
        -- si au moins une a du contenu — sinon le section-title reste orphelin (ex. une&lt;br /&gt;
        -- section &amp;quot;Sous-pages&amp;quot; ou &amp;quot;Compatibilité&amp;quot; entièrement vide sur cette page).&lt;br /&gt;
        local sectionRows = {}&lt;br /&gt;
&lt;br /&gt;
        for _, champ in ipairs(section.champs or {}) do&lt;br /&gt;
            -- Gestion spéciale pour les coordonnées&lt;br /&gt;
            if mapLink and not coordinatesDisplayed and (champ.cle == &#039;x&#039; or champ.cle == &#039;y&#039; or champ.cle == &#039;z&#039; or champ.cle == &#039;worldname&#039; or champ.cle == &#039;coordonnees&#039;) then&lt;br /&gt;
                local rowDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                    :addClass(&#039;infobox-row&#039;)&lt;br /&gt;
                &lt;br /&gt;
                local labelDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                    :addClass(&#039;infobox-label&#039;)&lt;br /&gt;
                    :wikitext(&#039;Coordonnées&#039;)&lt;br /&gt;
                &lt;br /&gt;
                local valueDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                    :addClass(&#039;infobox-value&#039;)&lt;br /&gt;
                    :wikitext(mapLink)&lt;br /&gt;
                &lt;br /&gt;
                rowDiv:node(labelDiv):node(valueDiv)&lt;br /&gt;
                table.insert(sectionRows, rowDiv)&lt;br /&gt;
                coordinatesDisplayed = true&lt;br /&gt;
                &lt;br /&gt;
            -- Traitement normal des autres champs (ignorer x, y, z, worldname s&#039;ils sont déjà affichés comme coordonnées)&lt;br /&gt;
            elseif not (mapLink and (champ.cle == &#039;x&#039; or champ.cle == &#039;y&#039; or champ.cle == &#039;z&#039; or champ.cle == &#039;worldname&#039; or champ.cle == &#039;mapname&#039; or champ.cle == &#039;zoom&#039;)) then&lt;br /&gt;
                local rawValue = args[champ.cle]&lt;br /&gt;
                &lt;br /&gt;
                -- Si le champ a une valeur OU une fonction process qui peut générer une valeur&lt;br /&gt;
                if (rawValue and rawValue ~= &#039;&#039;) or champ.process then&lt;br /&gt;
                    local finalValue = rawValue&lt;br /&gt;
                    &lt;br /&gt;
                    -- Appliquer la fonction process si elle existe&lt;br /&gt;
                    if champ.process and type(champ.process) == &#039;function&#039; then&lt;br /&gt;
                        finalValue = champ.process(rawValue, args, frame)&lt;br /&gt;
                    end&lt;br /&gt;
                    &lt;br /&gt;
                    -- N&#039;afficher que si on a une valeur finale&lt;br /&gt;
                    if finalValue and finalValue ~= &#039;&#039; then&lt;br /&gt;
                        local rowDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                            :addClass(&#039;infobox-row&#039;)&lt;br /&gt;
&lt;br /&gt;
                        local valueDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                            :addClass(&#039;infobox-value&#039;)&lt;br /&gt;
&lt;br /&gt;
                        -- Champ sans label (ex. liste pleine largeur type Sous-pages) :&lt;br /&gt;
                        -- pas de colonne label, la valeur devient seule enfant flex du&lt;br /&gt;
                        -- row et occupe donc naturellement 100% de la largeur.&lt;br /&gt;
                        if champ.label and champ.label ~= &#039;&#039; then&lt;br /&gt;
                            local labelDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                                :addClass(&#039;infobox-label&#039;)&lt;br /&gt;
                                :wikitext(champ.label)&lt;br /&gt;
                            rowDiv:node(labelDiv)&lt;br /&gt;
                        end&lt;br /&gt;
                        &lt;br /&gt;
                        -- Formatage spécial pour le champ &amp;quot;type&amp;quot;&lt;br /&gt;
                        if champ.cle == &#039;type&#039; and typeValidation.displayValue then&lt;br /&gt;
                            valueDiv:wikitext(typeValidation.displayValue)&lt;br /&gt;
                        else&lt;br /&gt;
                            valueDiv:wikitext(finalValue)&lt;br /&gt;
                        end&lt;br /&gt;
&lt;br /&gt;
                        rowDiv:node(valueDiv)&lt;br /&gt;
                        table.insert(sectionRows, rowDiv)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if #sectionRows &amp;gt; 0 then&lt;br /&gt;
            if section.titre then&lt;br /&gt;
                local sectionDiv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
                    :addClass(&#039;infobox-section-title&#039;)&lt;br /&gt;
                    :wikitext(section.titre)&lt;br /&gt;
                body:node(sectionDiv)&lt;br /&gt;
            end&lt;br /&gt;
            for _, rowDiv in ipairs(sectionRows) do&lt;br /&gt;
                body:node(rowDiv)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    root:node(body)&lt;br /&gt;
    &lt;br /&gt;
    -- Traiter l&#039;icône APRÈS avoir construit tout le HTML&lt;br /&gt;
    local finalResult = tostring(root)&lt;br /&gt;
    &lt;br /&gt;
    if config.icone then&lt;br /&gt;
        local iconeConfig = config.icone&lt;br /&gt;
        if type(iconeConfig) == &#039;function&#039; then&lt;br /&gt;
            iconeConfig = iconeConfig(args) or {}&lt;br /&gt;
        end&lt;br /&gt;
        local iconeType = iconeConfig.type or &#039;fas&#039;&lt;br /&gt;
        local iconeNom = iconeConfig.nom&lt;br /&gt;
        &lt;br /&gt;
        -- Utiliser mw.getCurrentFrame() si frame n&#039;est pas disponible&lt;br /&gt;
        local currentFrame = frame or mw.getCurrentFrame()&lt;br /&gt;
        local iconeContent = &#039;{{#&#039; .. iconeType .. &#039;:&#039; .. iconeNom .. &#039;}}&#039;&lt;br /&gt;
        &lt;br /&gt;
        if currentFrame then&lt;br /&gt;
            iconeContent = currentFrame:preprocess(iconeContent)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        -- Créer la div d&#039;icône séparément et l&#039;ajouter au résultat&lt;br /&gt;
        local iconeHtml = string.format(&lt;br /&gt;
            &#039;&amp;lt;div class=&amp;quot;infobox-icon-bottom&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
            iconeContent&lt;br /&gt;
        )&lt;br /&gt;
        &lt;br /&gt;
        -- Injecter l&#039;icône juste avant la fermeture de la div principale&lt;br /&gt;
        finalResult = finalResult:gsub(&#039;&amp;lt;/div&amp;gt;$&#039;, iconeHtml .. &#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Ajouter les catégories automatiques&lt;br /&gt;
    local categories = addCategories(args, config, frame)&lt;br /&gt;
    &lt;br /&gt;
    return finalResult .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Module:Infobox/SousPages&amp;diff=5795</id>
		<title>Module:Infobox/SousPages</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Module:Infobox/SousPages&amp;diff=5795"/>
		<updated>2026-08-03T09:31:30Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Port depuis codex.nefald.fr : détection automatique des sous-pages dans l&amp;#039;infobox (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Construit la liste des sous-pages en wikiliens, séparateur • sur une ligne.&lt;br /&gt;
-- config.sousPagesNamespace : namespace DPL à interroger (&#039;&#039; = espace principal, &#039;Plugin&#039; = ns Plugin, etc.)&lt;br /&gt;
-- Retourne nil si aucune sous-page, ou si args.sous_pages == &#039;non&#039; (opt-out manuel).&lt;br /&gt;
--&lt;br /&gt;
-- Si la page courante est elle-même une sous-page (ex. Plugin:NefaldCore/API), on liste les&lt;br /&gt;
-- pages sœurs (enfants de la racine, ex. NefaldCore) et la page courante apparaît en gras,&lt;br /&gt;
-- non cliquable (.infobox-souspage-active), comme sur Modèle:Navigation_sous-pages.&lt;br /&gt;
-- Sinon (page principale), on liste ses propres sous-pages, aucune n&#039;est la page courante.&lt;br /&gt;
function p.build(args, config, frame)&lt;br /&gt;
    if args.sous_pages == &#039;non&#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local title = mw.title.getCurrentTitle()&lt;br /&gt;
    local namespace = (config and config.sousPagesNamespace) or &#039;&#039;&lt;br /&gt;
    local base = (title.text ~= title.rootText) and title.rootText or title.text&lt;br /&gt;
&lt;br /&gt;
    -- Séparateur &#039;@@&#039; improbable dans un titre : évite tout souci de trim d&#039;espaces/retours&lt;br /&gt;
    -- à la ligne par MediaWiki sur les arguments de #dpl.&lt;br /&gt;
    -- skipthispage=no : DPL exclut par défaut la page appelante de ses propres résultats ;&lt;br /&gt;
    -- sur une sous-page on veut au contraire qu&#039;elle apparaisse (pour le bold .infobox-souspage-active).&lt;br /&gt;
    local dpl = &#039;{{#dpl:namespace=&#039; .. namespace&lt;br /&gt;
        .. &#039;|titlematch=&#039; .. base .. &#039;/%&#039;&lt;br /&gt;
        .. &#039;|format=,%PAGE%,@@,&#039;&lt;br /&gt;
        .. &#039;|skipthispage=no&#039;&lt;br /&gt;
        .. &#039;|ignorecase=true|order=ascending|ordermethod=title}}&#039;&lt;br /&gt;
&lt;br /&gt;
    local raw = frame:preprocess(dpl)&lt;br /&gt;
    if not raw then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    raw = mw.text.trim(raw)&lt;br /&gt;
    if raw == &#039;&#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local parts = {}&lt;br /&gt;
    for fullTitle in (raw .. &#039;@@&#039;):gmatch(&#039;(.-)@@&#039;) do&lt;br /&gt;
        local trimmed = mw.text.trim(fullTitle)&lt;br /&gt;
        if trimmed ~= &#039;&#039; then&lt;br /&gt;
            local display = trimmed:match(&#039;([^/]+)$&#039;) or trimmed&lt;br /&gt;
            if trimmed == title.prefixedText then&lt;br /&gt;
                table.insert(parts, &#039;&amp;lt;span class=&amp;quot;infobox-souspage-active&amp;quot;&amp;gt;&#039; .. display .. &#039;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
            else&lt;br /&gt;
                table.insert(parts, &#039;[[&#039; .. trimmed .. &#039;|&#039; .. display .. &#039;]]&#039;)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if #parts == 0 then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return frame:preprocess(table.concat(parts, &#039; • &#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5794</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5794"/>
		<updated>2026-08-03T08:57:47Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Ajoute logo à l&amp;#039;infobox, reproduit infobox codex.nefald.fr (image, grade, dépendance détaillée) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Mets tes montures et compagnons en pension auprès des Maîtres d&#039;Écurie et fais-les voyager entre les étables de Nefald}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = Écurie&lt;br /&gt;
| image = Logo_Ecurie.png&lt;br /&gt;
| type = roleplay&lt;br /&gt;
| dev = Nefald&lt;br /&gt;
| status = installé&lt;br /&gt;
| grade = Architecte&lt;br /&gt;
| sources = [https://git.nefald.fr/minecraft/plugins/ecurie Gitlab]&lt;br /&gt;
| dépendance = [[Plugin:NefaldCore]] (obligatoire), [[Plugin:Citizens]] (softdep, requis en pratique — seul point d&#039;entrée joueur), [[Plugin:PlaceholderAPI]] (softdep), [[Plugin:MyPet]] (softdep)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; te permet de mettre tes montures et familiers en pension auprès d&#039;un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039;, un PNJ posté devant chaque étable du monde. Ton compagnon est gardé en sécurité, à l&#039;abri des mobs et des voleurs, et tu peux le faire voyager d&#039;une étable à l&#039;autre sans avoir à parcourir toi-même la distance.&lt;br /&gt;
&lt;br /&gt;
== Où trouver une écurie ==&lt;br /&gt;
&lt;br /&gt;
Les étables sont construites par l&#039;Intendance dans les principales cités et zones de Fendral. Chacune est tenue par un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : clique-droit sur lui pour ouvrir le registre de l&#039;étable.&lt;br /&gt;
&lt;br /&gt;
À ton tout premier clic sur un Maître d&#039;Écurie donné, il t&#039;explique son service en détail. Les fois suivantes, il t&#039;accueille d&#039;une phrase différente à chaque passage — et te remercie après chaque service rendu.&lt;br /&gt;
&lt;br /&gt;
== Mettre un compagnon en pension ==&lt;br /&gt;
&lt;br /&gt;
# Amène ton compagnon à côté de toi (ou monte-le).&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, puis choisis &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039;.&lt;br /&gt;
# S&#039;il n&#039;a pas encore de nom, une enclume s&#039;ouvre pour le baptiser avant de le confier.&lt;br /&gt;
# Le coût affiché couvre la mise en pension &#039;&#039;&#039;et&#039;&#039;&#039; le bail prépayé (voir ci-dessous) — tout est réglé en une fois.&lt;br /&gt;
&lt;br /&gt;
Ton compagnon est alors gardé dans une box de l&#039;étable, en parfaite sécurité, jusqu&#039;à ce que tu viennes le récupérer.&lt;br /&gt;
&lt;br /&gt;
== Le bail de la box ==&lt;br /&gt;
&lt;br /&gt;
Chaque pension inclut un &#039;&#039;&#039;bail prépayé&#039;&#039;&#039; : 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.&lt;br /&gt;
&lt;br /&gt;
* Le bail est &#039;&#039;&#039;prolongeable&#039;&#039;&#039; à tout moment depuis le menu de récupération.&lt;br /&gt;
* Si le bail expire — ou si tu désertes le serveur trop longtemps — le Maître d&#039;Écurie ne peut plus garantir la box : ton compagnon est mis &#039;&#039;&#039;En Réserve&#039;&#039;&#039; pour libérer la place.&lt;br /&gt;
* Un compagnon &#039;&#039;&#039;En Réserve&#039;&#039;&#039; n&#039;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).&lt;br /&gt;
* Tu peux activer le &#039;&#039;&#039;renouvellement automatique&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
== Récupérer un compagnon ==&lt;br /&gt;
&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, choisis &#039;&#039;&#039;Pension &amp;amp; récupération&#039;&#039;&#039;.&lt;br /&gt;
# Sélectionne ton compagnon dans la liste.&lt;br /&gt;
# Le tarif dépend de son état : récupération normale, ou tarif majoré s&#039;il est En Réserve.&lt;br /&gt;
&lt;br /&gt;
== Demander un acheminement ==&lt;br /&gt;
&lt;br /&gt;
Besoin de retrouver ta monture ailleurs sur Fendral ? Le Maître d&#039;Écurie peut organiser un &#039;&#039;&#039;acheminement&#039;&#039;&#039; vers une autre étable :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable de départ&#039;&#039;&#039; : choisis &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionne ton compagnon, puis l&#039;étable de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable d&#039;arrivée&#039;&#039;&#039; : le Maître d&#039;Écurie te propose directement de faire venir un compagnon stationné ailleurs.&lt;br /&gt;
&lt;br /&gt;
Le délai et le coût du voyage dépendent de la distance réelle entre les deux étables — plus c&#039;est loin, plus c&#039;est long et cher. Un &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; (PNJ temporaire) anime le départ et l&#039;arrivée de ton compagnon.&lt;br /&gt;
&lt;br /&gt;
== Modifier le registre ==&lt;br /&gt;
&lt;br /&gt;
Envie de rebaptiser ton compagnon ? Choisis &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039; dans le menu du Maître d&#039;Écurie : une enclume s&#039;ouvre, pré-remplie avec le nom actuel — modifie-le ou confirme tel quel.&lt;br /&gt;
&lt;br /&gt;
== Mes compagnons ==&lt;br /&gt;
&lt;br /&gt;
Cette entrée du menu te donne une vue d&#039;ensemble de &#039;&#039;&#039;tous&#039;&#039;&#039; tes compagnons en pension, toutes étables confondues — pratique pour savoir où se trouve chacun avant de demander un acheminement.&lt;br /&gt;
&lt;br /&gt;
== Compagnons acceptés ==&lt;br /&gt;
&lt;br /&gt;
Écurie accepte toutes les montures classiques (chevaux, chameaux, cochons sellés, striders) ainsi que tous les familiers [[MyPet]]. Selon le type d&#039;étable, seuls certains compagnons sont acceptés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type d&#039;étable !! Compagnons acceptés&lt;br /&gt;
|-&lt;br /&gt;
| Terrestre || Chevaux, chameaux, cochons, familiers terrestres&lt;br /&gt;
|-&lt;br /&gt;
| Aquatique || Familiers/montures aquatiques&lt;br /&gt;
|-&lt;br /&gt;
| Volière || Familiers volants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Info|Un familier [[MyPet]] mis en pension est automatiquement rappelé pour éviter qu&#039;il ne traîne en double dans le monde. Il te sera rendu dans son état actuel à la récupération.}}&lt;br /&gt;
&lt;br /&gt;
== Tarifs ==&lt;br /&gt;
&lt;br /&gt;
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&#039;Intendance et peuvent varier d&#039;une étable à l&#039;autre — le Maître d&#039;Écurie t&#039;affiche toujours le prix avant confirmation.&lt;br /&gt;
&lt;br /&gt;
{{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.}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[MyPet]] — familiers combattants&lt;br /&gt;
* [[Grades]] — accès et permissions selon ton rang&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Fichier:Logo_Ecurie.png&amp;diff=5793</id>
		<title>Fichier:Logo Ecurie.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Fichier:Logo_Ecurie.png&amp;diff=5793"/>
		<updated>2026-08-03T08:57:30Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Import depuis codex.nefald.fr (redimensionné pour cap 2 Mo) pour infobox Plugin:Écurie (via upload-file on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Logo du plugin [[Plugin:Écurie]]. Importé depuis codex.nefald.fr (redimensionné 2048→1024px, cap upload serveur 2 Mo).&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5792</id>
		<title>Plugin:Ecurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:Ecurie&amp;diff=5792"/>
		<updated>2026-08-03T08:05:51Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Doc publique: précise les interactions PNJ et la gestion des box (6bbac8a1)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gérez la pension et la location de box pour vos chevaux dans les écuries Nefald.}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Ecurie&lt;br /&gt;
|type=Gestion&lt;br /&gt;
|dev=Hiob&lt;br /&gt;
|status=Stable&lt;br /&gt;
|version=1.0.0+&lt;br /&gt;
|sources=[[https://git.nefald.fr/nefald/ecurie|Dépôt Git Nefald]]&lt;br /&gt;
|dependance=[[Plugin:NefaldCore|NefaldCore]] ≥ 0.1.0&lt;br /&gt;
|api=Spigot&lt;br /&gt;
|bukkit=1.16+&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Le plugin &#039;&#039;&#039;Ecurie&#039;&#039;&#039; permet aux joueurs de mettre en pension leurs chevaux dans des box physiques, de les récupérer ou de les transférer vers d&#039;autres écuries. Les box peuvent être loués temporairement (prépayés par défaut pour 7 jours) et sont gérés via un système de bail.&lt;br /&gt;
&lt;br /&gt;
Lors de la mise en pension, de la récupération ou du transfert d&#039;un cheval, un message de remerciement aléatoire est affiché par le PNJ de l&#039;écurie.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
* Mise en pension de chevaux dans des box physiques.&lt;br /&gt;
* Récupération ou transfert de chevaux entre écuries.&lt;br /&gt;
* Location temporaire de box (prépayée par défaut pour 7 jours).&lt;br /&gt;
* Prolongation manuelle ou automatique (via &#039;&#039;&#039;Auto-Renew&#039;&#039;&#039;) du bail.&lt;br /&gt;
* Gestion des chevaux en réserve (si bail expiré ou inactivité &amp;gt;14 jours).&lt;br /&gt;
* Messages aléatoires affichés par les PNJ lors des interactions.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
Aucune commande directe n&#039;est disponible pour les joueurs. Toutes les interactions se font via les PNJ des écuries.&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
Aucune permission spécifique n&#039;est requise pour les joueurs. Les fonctionnalités sont accessibles à tous.&lt;br /&gt;
&lt;br /&gt;
== Installation (joueur) ==&lt;br /&gt;
Aucune installation n&#039;est requise pour les joueurs. Le plugin est activé automatiquement sur les serveurs Nefald équipés d&#039;écuries.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Les chevaux non récupérés après expiration du bail ou après 14 jours d&#039;inactivité sont automatiquement placés en &#039;&#039;&#039;Réserve&#039;&#039;&#039;. Ils peuvent être récupérés auprès du PNJ moyennant une pénalité de stockage.&lt;br /&gt;
* L&#039;option &#039;&#039;&#039;Auto-Renew&#039;&#039;&#039; permet de prolonger automatiquement le bail sans intervention du joueur (via prélèvement sur le compte Banco/Vault).&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5791</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5791"/>
		<updated>2026-08-03T06:50:36Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Réécriture — recentre l&amp;#039;article sur le joueur (doc admin déplacée vers codex.nefald.fr), corrige gui-type/SQLite/blocs box obsolètes, ajoute bail prépayé/réserve (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Mets tes montures et compagnons en pension auprès des Maîtres d&#039;Écurie et fais-les voyager entre les étables de Nefald}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = Écurie&lt;br /&gt;
| type = roleplay&lt;br /&gt;
| dev = [[Scriptomancien|Nefald]]&lt;br /&gt;
| status = Installé&lt;br /&gt;
| sources = https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
| dépendance = [[Plugin:Citizens|Citizens]], [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; te permet de mettre tes montures et familiers en pension auprès d&#039;un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039;, un PNJ posté devant chaque étable du monde. Ton compagnon est gardé en sécurité, à l&#039;abri des mobs et des voleurs, et tu peux le faire voyager d&#039;une étable à l&#039;autre sans avoir à parcourir toi-même la distance.&lt;br /&gt;
&lt;br /&gt;
== Où trouver une écurie ==&lt;br /&gt;
&lt;br /&gt;
Les étables sont construites par l&#039;Intendance dans les principales cités et zones de Fendral. Chacune est tenue par un &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : clique-droit sur lui pour ouvrir le registre de l&#039;étable.&lt;br /&gt;
&lt;br /&gt;
À ton tout premier clic sur un Maître d&#039;Écurie donné, il t&#039;explique son service en détail. Les fois suivantes, il t&#039;accueille d&#039;une phrase différente à chaque passage — et te remercie après chaque service rendu.&lt;br /&gt;
&lt;br /&gt;
== Mettre un compagnon en pension ==&lt;br /&gt;
&lt;br /&gt;
# Amène ton compagnon à côté de toi (ou monte-le).&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, puis choisis &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039;.&lt;br /&gt;
# S&#039;il n&#039;a pas encore de nom, une enclume s&#039;ouvre pour le baptiser avant de le confier.&lt;br /&gt;
# Le coût affiché couvre la mise en pension &#039;&#039;&#039;et&#039;&#039;&#039; le bail prépayé (voir ci-dessous) — tout est réglé en une fois.&lt;br /&gt;
&lt;br /&gt;
Ton compagnon est alors gardé dans une box de l&#039;étable, en parfaite sécurité, jusqu&#039;à ce que tu viennes le récupérer.&lt;br /&gt;
&lt;br /&gt;
== Le bail de la box ==&lt;br /&gt;
&lt;br /&gt;
Chaque pension inclut un &#039;&#039;&#039;bail prépayé&#039;&#039;&#039; : 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.&lt;br /&gt;
&lt;br /&gt;
* Le bail est &#039;&#039;&#039;prolongeable&#039;&#039;&#039; à tout moment depuis le menu de récupération.&lt;br /&gt;
* Si le bail expire — ou si tu désertes le serveur trop longtemps — le Maître d&#039;Écurie ne peut plus garantir la box : ton compagnon est mis &#039;&#039;&#039;En Réserve&#039;&#039;&#039; pour libérer la place.&lt;br /&gt;
* Un compagnon &#039;&#039;&#039;En Réserve&#039;&#039;&#039; n&#039;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).&lt;br /&gt;
* Tu peux activer le &#039;&#039;&#039;renouvellement automatique&#039;&#039;&#039; 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.&lt;br /&gt;
&lt;br /&gt;
== Récupérer un compagnon ==&lt;br /&gt;
&lt;br /&gt;
# Clique-droit sur le Maître d&#039;Écurie, choisis &#039;&#039;&#039;Pension &amp;amp; récupération&#039;&#039;&#039;.&lt;br /&gt;
# Sélectionne ton compagnon dans la liste.&lt;br /&gt;
# Le tarif dépend de son état : récupération normale, ou tarif majoré s&#039;il est En Réserve.&lt;br /&gt;
&lt;br /&gt;
== Demander un acheminement ==&lt;br /&gt;
&lt;br /&gt;
Besoin de retrouver ta monture ailleurs sur Fendral ? Le Maître d&#039;Écurie peut organiser un &#039;&#039;&#039;acheminement&#039;&#039;&#039; vers une autre étable :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable de départ&#039;&#039;&#039; : choisis &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionne ton compagnon, puis l&#039;étable de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;étable d&#039;arrivée&#039;&#039;&#039; : le Maître d&#039;Écurie te propose directement de faire venir un compagnon stationné ailleurs.&lt;br /&gt;
&lt;br /&gt;
Le délai et le coût du voyage dépendent de la distance réelle entre les deux étables — plus c&#039;est loin, plus c&#039;est long et cher. Un &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; (PNJ temporaire) anime le départ et l&#039;arrivée de ton compagnon.&lt;br /&gt;
&lt;br /&gt;
== Modifier le registre ==&lt;br /&gt;
&lt;br /&gt;
Envie de rebaptiser ton compagnon ? Choisis &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039; dans le menu du Maître d&#039;Écurie : une enclume s&#039;ouvre, pré-remplie avec le nom actuel — modifie-le ou confirme tel quel.&lt;br /&gt;
&lt;br /&gt;
== Mes compagnons ==&lt;br /&gt;
&lt;br /&gt;
Cette entrée du menu te donne une vue d&#039;ensemble de &#039;&#039;&#039;tous&#039;&#039;&#039; tes compagnons en pension, toutes étables confondues — pratique pour savoir où se trouve chacun avant de demander un acheminement.&lt;br /&gt;
&lt;br /&gt;
== Compagnons acceptés ==&lt;br /&gt;
&lt;br /&gt;
Écurie accepte toutes les montures classiques (chevaux, chameaux, cochons sellés, striders) ainsi que tous les familiers [[MyPet]]. Selon le type d&#039;étable, seuls certains compagnons sont acceptés :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type d&#039;étable !! Compagnons acceptés&lt;br /&gt;
|-&lt;br /&gt;
| Terrestre || Chevaux, chameaux, cochons, familiers terrestres&lt;br /&gt;
|-&lt;br /&gt;
| Aquatique || Familiers/montures aquatiques&lt;br /&gt;
|-&lt;br /&gt;
| Volière || Familiers volants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Info|Un familier [[MyPet]] mis en pension est automatiquement rappelé pour éviter qu&#039;il ne traîne en double dans le monde. Il te sera rendu dans son état actuel à la récupération.}}&lt;br /&gt;
&lt;br /&gt;
== Tarifs ==&lt;br /&gt;
&lt;br /&gt;
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&#039;Intendance et peuvent varier d&#039;une étable à l&#039;autre — le Maître d&#039;Écurie t&#039;affiche toujours le prix avant confirmation.&lt;br /&gt;
&lt;br /&gt;
{{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.}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[MyPet]] — familiers combattants&lt;br /&gt;
* [[Grades]] — accès et permissions selon ton rang&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5790</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5790"/>
		<updated>2026-08-01T14:37:46Z</updated>

		<summary type="html">&lt;p&gt;Hiob : /* Effets passifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Bibliothèque technique commune du serveur, à l&#039;origine de plusieurs effets visibles en jeu (balises de quête, restrictions)}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = NefaldCore&lt;br /&gt;
| type = utilitaire&lt;br /&gt;
| dev = [[Scriptomancien|Nefald]]&lt;br /&gt;
| status = Installé&lt;br /&gt;
| sources = https://git.nefald.fr/minecraft/plugins/nefaldcore&lt;br /&gt;
| dépendance = [[Plugin:WorldGuard|WorldGuard]] (optionnel), [[Plugin:MythicMobs|MythicMobs]] (optionnel), [[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel), [[Plugin:Citizens|Citizens]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NefaldCore&#039;&#039;&#039; est la bibliothèque technique commune aux plugins développés par Nefald. Il n&#039;a pas de vocation RP en soi, mais plusieurs de ses fonctionnalités sont directement visibles en jeu.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Balises de quête ===&lt;br /&gt;
&lt;br /&gt;
Certaines quêtes ou membres du staff peuvent poser une balise de localisation, visible dans la barre de repérage (locator bar). Vos balises actives sont consultables avec :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/questtrack list&amp;lt;/code&amp;gt; || Affiche vos balises de quête actives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin:Écurie]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5789</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5789"/>
		<updated>2026-08-01T14:35:08Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Suppression de la feature de boost de vitesse (roadboost) — retirée du plugin (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Bibliothèque technique commune du serveur, à l&#039;origine de plusieurs effets visibles en jeu (balises de quête, restrictions)}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = NefaldCore&lt;br /&gt;
| type = utilitaire&lt;br /&gt;
| dev = [[Scriptomancien|Nefald]]&lt;br /&gt;
| status = Installé&lt;br /&gt;
| sources = https://git.nefald.fr/minecraft/plugins/nefaldcore&lt;br /&gt;
| dépendance = [[Plugin:WorldGuard|WorldGuard]] (optionnel), [[Plugin:MythicMobs|MythicMobs]] (optionnel), [[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel), [[Plugin:Citizens|Citizens]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NefaldCore&#039;&#039;&#039; est la bibliothèque technique commune aux plugins développés par Nefald. Il n&#039;a pas de vocation RP en soi, mais plusieurs de ses fonctionnalités sont directement visibles en jeu.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Balises de quête ===&lt;br /&gt;
&lt;br /&gt;
Certaines quêtes ou membres du staff peuvent poser une balise de localisation, visible dans la barre de repérage (locator bar). Vos balises actives sont consultables avec :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/questtrack list&amp;lt;/code&amp;gt; || Affiche vos balises de quête actives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Effets passifs ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Coffres de l&#039;End&#039;&#039;&#039; — l&#039;ouverture d&#039;un coffre de l&#039;End (ender chest) est bloquée sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;Happy Ghast&#039;&#039;&#039; — les Happy Ghasts rencontrés en jeu sont en réalité une créature custom Nefald, pas l&#039;entité vanilla.&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin:Écurie]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5788</id>
		<title>Plugin:NefaldCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:NefaldCore&amp;diff=5788"/>
		<updated>2026-08-01T14:31:52Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Création — doc joueur NefaldCore : boost de vitesse, balises de quête, effets passifs (coffres End, Happy Ghast) (via create-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Bibliothèque technique commune du serveur, à l&#039;origine de plusieurs effets visibles en jeu (vitesse sur route, balises de quête)}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom = NefaldCore&lt;br /&gt;
| type = utilitaire&lt;br /&gt;
| dev = [[Scriptomancien|Nefald]]&lt;br /&gt;
| status = Installé&lt;br /&gt;
| sources = https://git.nefald.fr/minecraft/plugins/nefaldcore&lt;br /&gt;
| dépendance = [[Plugin:WorldGuard|WorldGuard]] (optionnel), [[Plugin:MythicMobs|MythicMobs]] (optionnel), [[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel), [[Plugin:Citizens|Citizens]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NefaldCore&#039;&#039;&#039; est la bibliothèque technique commune aux plugins développés par Nefald. Il n&#039;a pas de vocation RP en soi, mais plusieurs de ses fonctionnalités sont directement visibles en jeu.&lt;br /&gt;
&lt;br /&gt;
== Fonctionnalités ==&lt;br /&gt;
&lt;br /&gt;
=== Boost de vitesse sur route ===&lt;br /&gt;
&lt;br /&gt;
Marcher (ou chevaucher une monture) sur un bloc d&#039;&#039;&#039;&#039;âme-sol (soul soil)&#039;&#039;&#039; donne un bonus de vitesse de déplacement, à pied comme monté. L&#039;effet est actif sur Fendral, Kaldrah, Väsk et le Nether de Fendral.&lt;br /&gt;
&lt;br /&gt;
Chaque joueur peut désactiver l&#039;effet pour lui-même :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roadboost&amp;lt;/code&amp;gt; || Bascule le boost de vitesse sur route (actif/inactif)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roadboost on&amp;lt;/code&amp;gt; || Réactive le boost&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roadboost off&amp;lt;/code&amp;gt; || Désactive le boost pour vous-même&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Balises de quête ===&lt;br /&gt;
&lt;br /&gt;
Certaines quêtes ou membres du staff peuvent poser une balise de localisation, visible dans la barre de repérage (locator bar). Vos balises actives sont consultables avec :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/questtrack list&amp;lt;/code&amp;gt; || Affiche vos balises de quête actives&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Effets passifs ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Coffres de l&#039;End&#039;&#039;&#039; — l&#039;ouverture d&#039;un coffre de l&#039;End (ender chest) est bloquée sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;Happy Ghast&#039;&#039;&#039; — les Happy Ghasts rencontrés en jeu sont en réalité une créature custom Nefald, pas l&#039;entité vanilla.&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Plugin:Écurie]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=%C3%89veill%C3%A9s_de_fer&amp;diff=5785</id>
		<title>Éveillés de fer</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=%C3%89veill%C3%A9s_de_fer&amp;diff=5785"/>
		<updated>2026-06-18T05:28:50Z</updated>

		<summary type="html">&lt;p&gt;Hiob : gallerie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Créatures mécaniques utilisées pour le transport de charges lourdes ou de personnes}}&lt;br /&gt;
{{Infobox Transport&lt;br /&gt;
| nom           = Éveillés de fer&lt;br /&gt;
| soustitre     = Transport vers le continent ressource&lt;br /&gt;
| image         = Eveillé poulpe.png&lt;br /&gt;
| tailleimage   = 300px&lt;br /&gt;
| legende       = Eveillé de Glemdäl&lt;br /&gt;
| type          = Animal mécanique&lt;br /&gt;
| mode          = Transport collectif&lt;br /&gt;
| utilisation   = Transport de citoyen vers le continent ressource&lt;br /&gt;
| vitesse       = NC&lt;br /&gt;
| disponibilite = Tous les citoyens&lt;br /&gt;
| statut        = Fonctionnel&lt;br /&gt;
| localisation  = Chaque Cité-État&lt;br /&gt;
}}&lt;br /&gt;
{{Lettrine|L|texte=es Éveillés de fer}} ont été conçus par le Maître Artificier Veythas, ces créatures sont des assemblages de métal et d’énergie magique, capables de se déplacer avec une grâce presque vivante. Leur fonctionnement repose sur des runes gravées dans leur structure, alimentées par une essence cristalline rare, le Souffle du Dragon.&lt;br /&gt;
&lt;br /&gt;
Personne ne maîtrise pleinement leur création. Les artificiers actuels ne savent que les réparer et les alimenter, mais leur origine exacte reste un secret jalousement gardé.&lt;br /&gt;
&lt;br /&gt;
Ces créatures mécaniques sont principalement utilisées pour le transport de charges lourdes ou de personnes. Elles sont aujourd&#039;hui surtout utilisée pour assurer les liens depuis les [[Cités-États]] avec [[Kaldrah]], continent dont sont extraits une grande partie des ressources de [[Fendral]].&lt;br /&gt;
&lt;br /&gt;
Ainsi chaque Cité-État est dotée d&#039;un éveillé :&lt;br /&gt;
&lt;br /&gt;
* [[Mahj&#039;Akar]] dispose d&#039;une Abeille &lt;br /&gt;
* [[Ald&#039;Vidsom|Ald&#039;Vidsom]] bénéfice d&#039;une Grenouille&lt;br /&gt;
* [[Glemdäl]] est dotée d&#039;un Poulpe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Eveillé abeille.png|Eveillé de fer abeille&lt;br /&gt;
Eveillé grenouille.png|Eveillé de fer grenouille&lt;br /&gt;
Eveillé poulpe.png|Eveillé de fer poulpe&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
[[Catégorie:Transport]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5784</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5784"/>
		<updated>2026-06-12T22:39:22Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion d&#039;écuries RP : mise en pension, acheminements de montures et stockage physique de compagnons}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Déposer &amp;lt;code&amp;gt;Ecurie-&amp;amp;lt;version&amp;amp;gt;.jar&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;plugins/&amp;lt;/code&amp;gt;&lt;br /&gt;
# Redémarrer le serveur&lt;br /&gt;
# Éditer &amp;lt;code&amp;gt;plugins/Ecurie/config.yml&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== config.yml ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  # &#039;sqlite&#039; ou &#039;mysql&#039;&lt;br /&gt;
  type: &amp;quot;sqlite&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # Configuration SQLite&lt;br /&gt;
  sqlite:&lt;br /&gt;
    file: &amp;quot;ecurie.db&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # Configuration MySQL / MariaDB (HikariCP)&lt;br /&gt;
  mysql:&lt;br /&gt;
    host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port: 3306&lt;br /&gt;
    database: &amp;quot;ecurie&amp;quot;&lt;br /&gt;
    username: &amp;quot;root&amp;quot;&lt;br /&gt;
    password: &amp;quot;password&amp;quot;&lt;br /&gt;
    pool:&lt;br /&gt;
      maximum-pool-size: 10&lt;br /&gt;
      minimum-idle: 2&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
# Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l&#039;écurie&lt;br /&gt;
# Compagnon aquatique -&amp;gt; Écurie AQUATIQUE uniquement&lt;br /&gt;
# Compagnon volant -&amp;gt; Écurie VOLIERE uniquement&lt;br /&gt;
# Compagnon terrestre -&amp;gt; Écurie TERRESTRE/STABLE uniquement&lt;br /&gt;
restrict-stable-types: true&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== lang.yml ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (&amp;lt;code&amp;gt;&amp;amp;lt;red&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;gold&amp;amp;gt;&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
Variables disponibles selon le message : &amp;lt;code&amp;gt;{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{amount}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{dest}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{time}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{count}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{stable_id}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{n}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{x}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{y}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{z}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
&lt;br /&gt;
=== Commandes joueurs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie gui [dialog/inventory]&amp;lt;/code&amp;gt; || Modifie le type d&#039;interface préféré du joueur (sauvegardé en PDC) || &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie wand [on/off]&amp;lt;/code&amp;gt; || Active ou désactive le wand (bâton de sélection pour délimiter les étables) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; || Crée une étable dans la sélection wand et scanne automatiquement les boxes. Types : &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RELAY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie delete &amp;amp;lt;id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime l&#039;étable spécifiée (rend ses compagnons orphelins) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Lie le NPC Citizens le plus proche (&amp;amp;le;5 blocs) à l&#039;étable en lui attribuant son nom/skin par défaut || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie list&amp;lt;/code&amp;gt; || Liste toutes les étables enregistrées || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie tp &amp;amp;lt;stable_id/nom&amp;amp;gt;&amp;lt;/code&amp;gt; || Téléporte le joueur en face du NPC de l&#039;étable spécifiée (sécurité anticollision intégrée) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box scan &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Relance la détection des blocs cibles (box) dans la sélection wand pour cette étable || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box list &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Liste les coordonnées de toutes les boxes de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box delete &amp;amp;lt;box_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement la box spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie show [on/off]&amp;lt;/code&amp;gt; || Active ou désactive l&#039;affichage de particules colorées sur les blocs de box (vert=libre, rouge=occupé) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse free &amp;amp;lt;horse_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement un compagnon de la base de données || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse orphans&amp;lt;/code&amp;gt; || Liste tous les compagnons orphelins (sans écurie suite à une suppression) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse reassign &amp;amp;lt;horse_id&amp;amp;gt; &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Réassigne un compagnon orphelin à une box libre de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie reload&amp;lt;/code&amp;gt; || Recharge les fichiers de configuration &amp;lt;code&amp;gt;config.yml&amp;lt;/code&amp;gt; et de traduction &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les blocs cibles de boxes détectés par défaut selon le type d&#039;écurie sont :&lt;br /&gt;
* &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès complet aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les NPCs Maître d&#039;Écurie et utilisation de &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: &amp;lt;code&amp;gt;WATER_CAULDRON&amp;lt;/code&amp;gt; pour TERRESTRE, &amp;lt;code&amp;gt;PRISMARINE&amp;lt;/code&amp;gt; pour AQUATIQUE).&lt;br /&gt;
# &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie wand on&amp;lt;/code&amp;gt; → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
# &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
# &#039;&#039;&#039;Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;amp;lt; 5 blocs : &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; (le nom et le skin par défaut sont appliqués automatiquement).&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
# Amener le compagnon à côté ou le monter&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
# &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
# &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.store&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
# Choisir le compagnon dans la liste&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.retrieve&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
# Choisir le compagnon dans la liste&lt;br /&gt;
# Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.rename&amp;lt;/code&amp;gt; en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via &amp;lt;code&amp;gt;/ecurie setnpc&amp;lt;/code&amp;gt;. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans &amp;lt;code&amp;gt;npc&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans &amp;lt;code&amp;gt;groom&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : Les familiers aquatiques ne peuvent aller que dans une écurie &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;. Les familiers volants dans une &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. Les familiers terrestres dans une &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;. Les restrictions sont activables via l&#039;option &amp;lt;code&amp;gt;restrict-stable-types&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : Le plugin révoque automatiquement le MyPet lors de la mise en pension (via &amp;lt;code&amp;gt;/petsendaway&amp;lt;/code&amp;gt;) pour éviter les doublons dans le monde, et restaure correctement ses états.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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 &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; sauvegardé par PDC. Affichage des tarifs et gestion asynchrone sécurisée.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l&#039;activité MyPet, et restrictions par type d&#039;écurie.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5783</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5783"/>
		<updated>2026-06-12T22:37:59Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
# Déposer &amp;lt;code&amp;gt;Ecurie-&amp;amp;lt;version&amp;amp;gt;.jar&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;plugins/&amp;lt;/code&amp;gt;&lt;br /&gt;
# Redémarrer le serveur&lt;br /&gt;
# Éditer &amp;lt;code&amp;gt;plugins/Ecurie/config.yml&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== config.yml ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  # &#039;sqlite&#039; ou &#039;mysql&#039;&lt;br /&gt;
  type: &amp;quot;sqlite&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # Configuration SQLite&lt;br /&gt;
  sqlite:&lt;br /&gt;
    file: &amp;quot;ecurie.db&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # Configuration MySQL / MariaDB (HikariCP)&lt;br /&gt;
  mysql:&lt;br /&gt;
    host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port: 3306&lt;br /&gt;
    database: &amp;quot;ecurie&amp;quot;&lt;br /&gt;
    username: &amp;quot;root&amp;quot;&lt;br /&gt;
    password: &amp;quot;password&amp;quot;&lt;br /&gt;
    pool:&lt;br /&gt;
      maximum-pool-size: 10&lt;br /&gt;
      minimum-idle: 2&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
# Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l&#039;écurie&lt;br /&gt;
# Compagnon aquatique -&amp;gt; Écurie AQUATIQUE uniquement&lt;br /&gt;
# Compagnon volant -&amp;gt; Écurie VOLIERE uniquement&lt;br /&gt;
# Compagnon terrestre -&amp;gt; Écurie TERRESTRE/STABLE uniquement&lt;br /&gt;
restrict-stable-types: true&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== lang.yml ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (&amp;lt;code&amp;gt;&amp;amp;lt;red&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;gold&amp;amp;gt;&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
Variables disponibles selon le message : &amp;lt;code&amp;gt;{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{amount}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{dest}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{time}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{count}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{stable_id}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{n}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{x}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{y}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{z}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
&lt;br /&gt;
=== Commandes joueurs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie gui [dialog/inventory]&amp;lt;/code&amp;gt; || Modifie le type d&#039;interface préféré du joueur (sauvegardé en PDC) || &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie wand [on/off]&amp;lt;/code&amp;gt; || Active ou désactive le wand (bâton de sélection pour délimiter les étables) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; || Crée une étable dans la sélection wand et scanne automatiquement les boxes. Types : &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RELAY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie delete &amp;amp;lt;id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime l&#039;étable spécifiée (rend ses compagnons orphelins) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Lie le NPC Citizens le plus proche (&amp;amp;le;5 blocs) à l&#039;étable en lui attribuant son nom/skin par défaut || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie list&amp;lt;/code&amp;gt; || Liste toutes les étables enregistrées || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie tp &amp;amp;lt;stable_id/nom&amp;amp;gt;&amp;lt;/code&amp;gt; || Téléporte le joueur en face du NPC de l&#039;étable spécifiée (sécurité anticollision intégrée) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box scan &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Relance la détection des blocs cibles (box) dans la sélection wand pour cette étable || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box list &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Liste les coordonnées de toutes les boxes de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box delete &amp;amp;lt;box_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement la box spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie show [on/off]&amp;lt;/code&amp;gt; || Active ou désactive l&#039;affichage de particules colorées sur les blocs de box (vert=libre, rouge=occupé) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse free &amp;amp;lt;horse_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement un compagnon de la base de données || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse orphans&amp;lt;/code&amp;gt; || Liste tous les compagnons orphelins (sans écurie suite à une suppression) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse reassign &amp;amp;lt;horse_id&amp;amp;gt; &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Réassigne un compagnon orphelin à une box libre de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie reload&amp;lt;/code&amp;gt; || Recharge les fichiers de configuration &amp;lt;code&amp;gt;config.yml&amp;lt;/code&amp;gt; et de traduction &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les blocs cibles de boxes détectés par défaut selon le type d&#039;écurie sont :&lt;br /&gt;
* &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès complet aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les NPCs Maître d&#039;Écurie et utilisation de &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: &amp;lt;code&amp;gt;WATER_CAULDRON&amp;lt;/code&amp;gt; pour TERRESTRE, &amp;lt;code&amp;gt;PRISMARINE&amp;lt;/code&amp;gt; pour AQUATIQUE).&lt;br /&gt;
# &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie wand on&amp;lt;/code&amp;gt; → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
# &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
# &#039;&#039;&#039;Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;amp;lt; 5 blocs : &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; (le nom et le skin par défaut sont appliqués automatiquement).&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
# Amener le compagnon à côté ou le monter&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
# &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
# &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.store&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
# Choisir le compagnon dans la liste&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.retrieve&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
# Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
# Choisir le compagnon dans la liste&lt;br /&gt;
# Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
# Coût : &amp;lt;code&amp;gt;prices.rename&amp;lt;/code&amp;gt; en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via &amp;lt;code&amp;gt;/ecurie setnpc&amp;lt;/code&amp;gt;. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans &amp;lt;code&amp;gt;npc&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans &amp;lt;code&amp;gt;groom&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : Les familiers aquatiques ne peuvent aller que dans une écurie &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;. Les familiers volants dans une &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. Les familiers terrestres dans une &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;. Les restrictions sont activables via l&#039;option &amp;lt;code&amp;gt;restrict-stable-types&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : Le plugin révoque automatiquement le MyPet lors de la mise en pension (via &amp;lt;code&amp;gt;/petsendaway&amp;lt;/code&amp;gt;) pour éviter les doublons dans le monde, et restaure correctement ses états.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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 &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; sauvegardé par PDC. Affichage des tarifs et gestion asynchrone sécurisée.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l&#039;activité MyPet, et restrictions par type d&#039;écurie.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5782</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5782"/>
		<updated>2026-06-12T22:36:45Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1. Déposer &amp;lt;code&amp;gt;Ecurie-&amp;amp;lt;version&amp;amp;gt;.jar&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;plugins/&amp;lt;/code&amp;gt;&lt;br /&gt;
2. Redémarrer le serveur&lt;br /&gt;
3. Éditer &amp;lt;code&amp;gt;plugins/Ecurie/config.yml&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
4. Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== config.yml ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  # &#039;sqlite&#039; ou &#039;mysql&#039;&lt;br /&gt;
  type: &amp;quot;sqlite&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # Configuration SQLite&lt;br /&gt;
  sqlite:&lt;br /&gt;
    file: &amp;quot;ecurie.db&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # Configuration MySQL / MariaDB (HikariCP)&lt;br /&gt;
  mysql:&lt;br /&gt;
    host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port: 3306&lt;br /&gt;
    database: &amp;quot;ecurie&amp;quot;&lt;br /&gt;
    username: &amp;quot;root&amp;quot;&lt;br /&gt;
    password: &amp;quot;password&amp;quot;&lt;br /&gt;
    pool:&lt;br /&gt;
      maximum-pool-size: 10&lt;br /&gt;
      minimum-idle: 2&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
# Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l&#039;écurie&lt;br /&gt;
# Compagnon aquatique -&amp;gt; Écurie AQUATIQUE uniquement&lt;br /&gt;
# Compagnon volant -&amp;gt; Écurie VOLIERE uniquement&lt;br /&gt;
# Compagnon terrestre -&amp;gt; Écurie TERRESTRE/STABLE uniquement&lt;br /&gt;
restrict-stable-types: true&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== lang.yml ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (&amp;lt;code&amp;gt;&amp;amp;lt;red&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;gold&amp;amp;gt;&amp;lt;/code&amp;gt;, etc.).&lt;br /&gt;
Variables disponibles selon le message : &amp;lt;code&amp;gt;{name}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{amount}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{dest}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{time}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{count}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{stable_id}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{n}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{x}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{y}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{z}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
&lt;br /&gt;
=== Commandes joueurs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie gui [dialog/inventory]&amp;lt;/code&amp;gt; || Modifie le type d&#039;interface préféré du joueur (sauvegardé en PDC) || &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie wand [on/off]&amp;lt;/code&amp;gt; || Active ou désactive le wand (bâton de sélection pour délimiter les étables) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; || Crée une étable dans la sélection wand et scanne automatiquement les boxes. Types : &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RELAY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie delete &amp;amp;lt;id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime l&#039;étable spécifiée (rend ses compagnons orphelins) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Lie le NPC Citizens le plus proche (&amp;amp;le;5 blocs) à l&#039;étable en lui attribuant son nom/skin par défaut || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie list&amp;lt;/code&amp;gt; || Liste toutes les étables enregistrées || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie tp &amp;amp;lt;stable_id/nom&amp;amp;gt;&amp;lt;/code&amp;gt; || Téléporte le joueur en face du NPC de l&#039;étable spécifiée (sécurité anticollision intégrée) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box scan &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Relance la détection des blocs cibles (box) dans la sélection wand pour cette étable || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box list &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Liste les coordonnées de toutes les boxes de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box delete &amp;amp;lt;box_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement la box spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie show [on/off]&amp;lt;/code&amp;gt; || Active ou désactive l&#039;affichage de particules colorées sur les blocs de box (vert=libre, rouge=occupé) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse free &amp;amp;lt;horse_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement un compagnon de la base de données || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse orphans&amp;lt;/code&amp;gt; || Liste tous les compagnons orphelins (sans écurie suite à une suppression) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse reassign &amp;amp;lt;horse_id&amp;amp;gt; &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Réassigne un compagnon orphelin à une box libre de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie reload&amp;lt;/code&amp;gt; || Recharge les fichiers de configuration &amp;lt;code&amp;gt;config.yml&amp;lt;/code&amp;gt; et de traduction &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les blocs cibles de boxes détectés par défaut selon le type d&#039;écurie sont :&lt;br /&gt;
* &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt; : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès complet aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les NPCs Maître d&#039;Écurie et utilisation de &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: &amp;lt;code&amp;gt;WATER_CAULDRON&amp;lt;/code&amp;gt; pour TERRESTRE, &amp;lt;code&amp;gt;PRISMARINE&amp;lt;/code&amp;gt; pour AQUATIQUE).&lt;br /&gt;
2. &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie wand on&amp;lt;/code&amp;gt; → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
3. &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
4. &#039;&#039;&#039;Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;amp;lt; 5 blocs : &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; (le nom et le skin par défaut sont appliqués automatiquement).&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
1. Amener le compagnon à côté ou le monter&lt;br /&gt;
2. Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
3. &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
4. &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
5. Coût : &amp;lt;code&amp;gt;prices.store&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Coût : &amp;lt;code&amp;gt;prices.retrieve&amp;lt;/code&amp;gt; en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
4. Coût : &amp;lt;code&amp;gt;prices.rename&amp;lt;/code&amp;gt; en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;amp;lt;n&amp;amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via &amp;lt;code&amp;gt;/ecurie setnpc&amp;lt;/code&amp;gt;. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans &amp;lt;code&amp;gt;npc&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans &amp;lt;code&amp;gt;groom&amp;lt;/code&amp;gt; (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : Les familiers aquatiques ne peuvent aller que dans une écurie &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;. Les familiers volants dans une &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. Les familiers terrestres dans une &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;. Les restrictions sont activables via l&#039;option &amp;lt;code&amp;gt;restrict-stable-types&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : Le plugin révoque automatiquement le MyPet lors de la mise en pension (via &amp;lt;code&amp;gt;/petsendaway&amp;lt;/code&amp;gt;) pour éviter les doublons dans le monde, et restaure correctement ses états.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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 &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; sauvegardé par PDC. Affichage des tarifs et gestion asynchrone sécurisée.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l&#039;activité MyPet, et restrictions par type d&#039;écurie.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5781</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5781"/>
		<updated>2026-06-12T22:34:37Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1. Déposer `Ecurie-&amp;lt;version&amp;gt;.jar` dans `plugins/`&lt;br /&gt;
2. Redémarrer le serveur&lt;br /&gt;
3. Éditer `plugins/Ecurie/config.yml` et `lang.yml`&lt;br /&gt;
4. Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== `config.yml` ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  # &#039;sqlite&#039; ou &#039;mysql&#039;&lt;br /&gt;
  type: &amp;quot;sqlite&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # Configuration SQLite&lt;br /&gt;
  sqlite:&lt;br /&gt;
    file: &amp;quot;ecurie.db&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # Configuration MySQL / MariaDB (HikariCP)&lt;br /&gt;
  mysql:&lt;br /&gt;
    host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port: 3306&lt;br /&gt;
    database: &amp;quot;ecurie&amp;quot;&lt;br /&gt;
    username: &amp;quot;root&amp;quot;&lt;br /&gt;
    password: &amp;quot;password&amp;quot;&lt;br /&gt;
    pool:&lt;br /&gt;
      maximum-pool-size: 10&lt;br /&gt;
      minimum-idle: 2&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
# Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l&#039;écurie&lt;br /&gt;
# Compagnon aquatique -&amp;gt; Écurie AQUATIQUE uniquement&lt;br /&gt;
# Compagnon volant -&amp;gt; Écurie VOLIERE uniquement&lt;br /&gt;
# Compagnon terrestre -&amp;gt; Écurie TERRESTRE/STABLE uniquement&lt;br /&gt;
restrict-stable-types: true&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== `lang.yml` ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (`&amp;lt;red&amp;gt;`, `&amp;lt;gold&amp;gt;`, etc.).&lt;br /&gt;
Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.&lt;br /&gt;
&lt;br /&gt;
== Commandes ==&lt;br /&gt;
&lt;br /&gt;
=== Commandes joueurs ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie gui [dialog/inventory]&amp;lt;/code&amp;gt; || Modifie le type d&#039;interface préféré du joueur (sauvegardé en PDC) || &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie wand [on/off]&amp;lt;/code&amp;gt; || Active ou désactive le wand (bâton de sélection pour délimiter les étables) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie create &amp;amp;lt;nom&amp;amp;gt; [type]&amp;lt;/code&amp;gt; || Crée une étable dans la sélection wand et scanne automatiquement les boxes. Types : &amp;lt;code&amp;gt;STABLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RELAY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TERRESTRE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AQUATIQUE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOLIERE&amp;lt;/code&amp;gt;. || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie delete &amp;amp;lt;id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime l&#039;étable spécifiée (rend ses compagnons orphelins) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie setnpc &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Lie le NPC Citizens le plus proche (&amp;amp;le;5 blocs) à l&#039;étable en lui attribuant son nom/skin par défaut || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie list&amp;lt;/code&amp;gt; || Liste toutes les étables enregistrées || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie tp &amp;amp;lt;stable_id/nom&amp;amp;gt;&amp;lt;/code&amp;gt; || Téléporte le joueur en face du NPC de l&#039;étable spécifiée (sécurité anticollision intégrée) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box scan &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Relance la détection des blocs cibles (box) dans la sélection wand pour cette étable || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box list &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Liste les coordonnées de toutes les boxes de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie box delete &amp;amp;lt;box_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement la box spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie show [on/off]&amp;lt;/code&amp;gt; || Active ou désactive l&#039;affichage de particules colorées sur les blocs de box (vert=libre, rouge=occupé) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse free &amp;amp;lt;horse_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Supprime définitivement un compagnon de la base de données || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse orphans&amp;lt;/code&amp;gt; || Liste tous les compagnons orphelins (sans écurie suite à une suppression) || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie horse reassign &amp;amp;lt;horse_id&amp;amp;gt; &amp;amp;lt;stable_id&amp;amp;gt;&amp;lt;/code&amp;gt; || Réassigne un compagnon orphelin à une box libre de l&#039;étable spécifiée || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/ecurie reload&amp;lt;/code&amp;gt; || Recharge les fichiers de configuration &amp;lt;code&amp;gt;config.yml&amp;lt;/code&amp;gt; et de traduction &amp;lt;code&amp;gt;lang.yml&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les blocs cibles de boxes détectés par défaut selon le type d&#039;écurie sont :&lt;br /&gt;
* `STABLE` / `TERRESTRE` : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* `AQUATIQUE` : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* `VOLIERE` : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès complet aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les NPCs Maître d&#039;Écurie et utilisation de &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: `WATER_CAULDRON` pour TERRESTRE, `PRISMARINE` pour AQUATIQUE).&lt;br /&gt;
2. &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : `/ecurie wand on` → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
3. &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : `/ecurie create &amp;lt;nom&amp;gt; [type]` — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
4. &#039;&#039;&#039;Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;lt; 5 blocs : `/ecurie setnpc &amp;lt;stable_id&amp;gt;` (le nom et le skin par défaut sont appliqués automatiquement).&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
1. Amener le compagnon à côté ou le monter&lt;br /&gt;
2. Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
3. &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
4. &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
5. Coût : `prices.store` en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Coût : `prices.retrieve` en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
4. Coût : `prices.rename` en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via `/ecurie setnpc`. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans `npc` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans `groom` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : 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&#039;option `restrict-stable-types`.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : 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.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l&#039;activité MyPet, et restrictions par type d&#039;écurie.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5780</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5780"/>
		<updated>2026-06-12T22:32:07Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Mise à jour des commandes, permissions, configuration MySQL et restrictions par type (v1.4.0)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1. Déposer `Ecurie-&amp;lt;version&amp;gt;.jar` dans `plugins/`&lt;br /&gt;
2. Redémarrer le serveur&lt;br /&gt;
3. Éditer `plugins/Ecurie/config.yml` et `lang.yml`&lt;br /&gt;
4. Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== `config.yml` ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  # &#039;sqlite&#039; ou &#039;mysql&#039;&lt;br /&gt;
  type: &amp;quot;sqlite&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  # Configuration SQLite&lt;br /&gt;
  sqlite:&lt;br /&gt;
    file: &amp;quot;ecurie.db&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # Configuration MySQL / MariaDB (HikariCP)&lt;br /&gt;
  mysql:&lt;br /&gt;
    host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port: 3306&lt;br /&gt;
    database: &amp;quot;ecurie&amp;quot;&lt;br /&gt;
    username: &amp;quot;root&amp;quot;&lt;br /&gt;
    password: &amp;quot;password&amp;quot;&lt;br /&gt;
    pool:&lt;br /&gt;
      maximum-pool-size: 10&lt;br /&gt;
      minimum-idle: 2&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
# Si vrai, restreint le stockage et le transfert selon le type du compagnon et de l&#039;écurie&lt;br /&gt;
# Compagnon aquatique -&amp;gt; Écurie AQUATIQUE uniquement&lt;br /&gt;
# Compagnon volant -&amp;gt; Écurie VOLIERE uniquement&lt;br /&gt;
# Compagnon terrestre -&amp;gt; Écurie TERRESTRE/STABLE uniquement&lt;br /&gt;
restrict-stable-types: true&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== `lang.yml` ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (`&amp;lt;red&amp;gt;`, `&amp;lt;gold&amp;gt;`, etc.).&lt;br /&gt;
Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.&lt;br /&gt;
&lt;br /&gt;
== Commandes admin ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.admin` (op par défaut). Alias : `/ec`&lt;br /&gt;
&lt;br /&gt;
=== Sélection de région ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie wand [on|off]                 — Active/désactive le wand (bâton). Clic G = pt 1, clic D = pt 2.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étables ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie create &amp;lt;nom&amp;gt; [type]           — Crée l&#039;étable et scanne automatiquement les boxes. Types : STABLE, TERRESTRE, AQUATIQUE, VOLIERE.&lt;br /&gt;
/ecurie delete &amp;lt;id&amp;gt;                   — Supprime une étable (met les compagnons en statut orphelin)&lt;br /&gt;
/ecurie setnpc &amp;lt;stable_id&amp;gt;            — Lie le NPC Citizens le plus proche (≤5 blocs) à l&#039;étable (applique nom et skin auto)&lt;br /&gt;
/ecurie list                          — Liste toutes les étables&lt;br /&gt;
/ecurie tp &amp;lt;stable_id|nom&amp;gt;            — Téléporte le joueur en face du NPC associé à l&#039;étable (sécurité anti-collision)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boxes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie box scan &amp;lt;stable_id&amp;gt;          — Rescanne les blocs cibles dans la sélection wand&lt;br /&gt;
/ecurie box list &amp;lt;stable_id&amp;gt;          — Liste les boxes d&#039;une étable&lt;br /&gt;
/ecurie box delete &amp;lt;box_id&amp;gt;           — Supprime une box&lt;br /&gt;
/ecurie show [on|off]                 — Affiche les boxes en surbrillance (particules colorées : vertes=libre, rouges=occupée)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Détection : chaque stalle doit contenir un bloc spécifique configuré dans `config.yml` (`box-blocks`). Par défaut :&lt;br /&gt;
* `STABLE` / `TERRESTRE` : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* `AQUATIQUE` : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* `VOLIERE` : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
La commande `create` ou `box scan` détecte automatiquement ces blocs dans la région wand et enregistre les boxes immédiatement.&lt;br /&gt;
&lt;br /&gt;
=== Compagnons ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie horse free &amp;lt;horse_id&amp;gt;         — Supprime définitivement un compagnon de la DB (urgence admin)&lt;br /&gt;
/ecurie horse orphans                 — Liste les compagnons orphelins (étable d&#039;origine supprimée)&lt;br /&gt;
/ecurie horse reassign &amp;lt;h_id&amp;gt; &amp;lt;s_id&amp;gt;  — Réassigne un compagnon orphelin à une nouvelle étable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Divers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie reload                        — Recharge config.yml et lang.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commandes joueurs ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.use` (true par défaut).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie gui [dialog|inventory]        — Change votre type d&#039;interface (persistant via PDC)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: `WATER_CAULDRON` pour TERRESTRE, `PRISMARINE` pour AQUATIQUE).&lt;br /&gt;
2. &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : `/ecurie wand on` → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
3. &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : `/ecurie create &amp;lt;nom&amp;gt; [type]` — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
4. &#039;&#039;&#039;Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;lt; 5 blocs : `/ecurie setnpc &amp;lt;stable_id&amp;gt;` (le nom et le skin par défaut sont appliqués automatiquement).&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
1. Amener le compagnon à côté ou le monter&lt;br /&gt;
2. Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
3. &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
4. &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
5. Coût : `prices.store` en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Coût : `prices.retrieve` en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
4. Coût : `prices.rename` en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les PNJ et &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (local) ou base de données MySQL / MariaDB via HikariCP.&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via `/ecurie setnpc`. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans `npc` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans `groom` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : 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&#039;option `restrict-stable-types`.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : 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.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|-&lt;br /&gt;
| 1.4.0 || 2026-06-13 || Ajout de la commande /ecurie tp, support de MySQL / MariaDB via HikariCP, correction de la persistance de l&#039;activité MyPet, et restrictions par type d&#039;écurie.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=MediaWiki:Citizen.css&amp;diff=5779</id>
		<title>MediaWiki:Citizen.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=MediaWiki:Citizen.css&amp;diff=5779"/>
		<updated>2026-06-12T19:29:15Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Harmonisation avec Blog / Forum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================&lt;br /&gt;
 * Mediawiki:Citizen.css — Nefald Wiki&lt;br /&gt;
 * Palette centralisée OKLCH + support light/dark/auto&lt;br /&gt;
 * Harmonisé avec Ghost Jaeger et Flarum Hyvan&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
/* 1. Typographie &amp;amp; Polices Nefald (Importation Google Fonts) */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=VT323&amp;amp;family=Oswald:wght@300;400;500;600;700&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 1. PALETTE NEFALD — Variables personnalisées&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
:root {&lt;br /&gt;
/* -- Typographie globale Citizen -- */&lt;br /&gt;
--font-family-citizen-base: &#039;Oswald&#039;;&lt;br /&gt;
--font-family-citizen-monospace: &#039;VT323&#039;, monospace;&lt;br /&gt;
&lt;br /&gt;
/* -- Angles droits rigides (Esthétique Nefald / Hyvan / Jaeger) -- */&lt;br /&gt;
--border-radius-base: 2px;&lt;br /&gt;
&lt;br /&gt;
/* -- Couleur progressive Citizen (#5a8db8 en OKLCH pour l&#039;accentuation) -- */&lt;br /&gt;
--color-progressive-oklch__l: 60.15%;&lt;br /&gt;
--color-progressive-oklch__c: 0.134;&lt;br /&gt;
--color-progressive-oklch__h: 246.33;&lt;br /&gt;
&lt;br /&gt;
/* -- Palette sémantique Nefald (light par défaut) -- */&lt;br /&gt;
&lt;br /&gt;
/* Success */&lt;br /&gt;
--nefald-success-bg:     oklch(93% 0.08 145);&lt;br /&gt;
--nefald-success-text:   oklch(35% 0.12 145);&lt;br /&gt;
--nefald-success-border: oklch(75% 0.14 145);&lt;br /&gt;
&lt;br /&gt;
/* Danger */&lt;br /&gt;
--nefald-danger-bg:      oklch(93% 0.07 25);&lt;br /&gt;
--nefald-danger-text:    oklch(38% 0.14 25);&lt;br /&gt;
--nefald-danger-border:  oklch(70% 0.16 25);&lt;br /&gt;
&lt;br /&gt;
/* Warning */&lt;br /&gt;
--nefald-warning-bg:     oklch(95% 0.09 85);&lt;br /&gt;
--nefald-warning-text:   oklch(42% 0.13 75);&lt;br /&gt;
--nefald-warning-border: oklch(78% 0.15 85);&lt;br /&gt;
&lt;br /&gt;
/* Info */&lt;br /&gt;
--nefald-info-bg:        oklch(93% 0.06 230);&lt;br /&gt;
--nefald-info-text:      oklch(38% 0.12 230);&lt;br /&gt;
--nefald-info-border:    oklch(72% 0.14 230);&lt;br /&gt;
&lt;br /&gt;
/* Neutral */&lt;br /&gt;
--nefald-neutral-bg:     oklch(94% 0.01 230);&lt;br /&gt;
--nefald-neutral-text:   oklch(40% 0.02 230);&lt;br /&gt;
--nefald-neutral-border: oklch(78% 0.02 230);&lt;br /&gt;
&lt;br /&gt;
/* Tip (violet) */&lt;br /&gt;
--nefald-tip-bg:         oklch(94% 0.06 310);&lt;br /&gt;
--nefald-tip-text:       oklch(35% 0.14 310);&lt;br /&gt;
--nefald-tip-border:     oklch(55% 0.18 310);&lt;br /&gt;
&lt;br /&gt;
/* Question (cyan) */&lt;br /&gt;
--nefald-question-bg:     oklch(94% 0.06 200);&lt;br /&gt;
--nefald-question-text:   oklch(35% 0.12 200);&lt;br /&gt;
--nefald-question-border: oklch(55% 0.16 200);&lt;br /&gt;
&lt;br /&gt;
/* Accent */&lt;br /&gt;
--nefald-accent:         oklch(53.25% 0.1679 230);&lt;br /&gt;
--nefald-accent-subtle:  oklch(93% 0.05 230);&lt;br /&gt;
&lt;br /&gt;
/* Recherche dans la page */&lt;br /&gt;
--nefald-highlight-bg:             oklch(90% 0.18 85);&lt;br /&gt;
--nefald-highlight-text:           oklch(25% 0.08 75);&lt;br /&gt;
--nefald-highlight-active-bg:      oklch(78% 0.20 60);&lt;br /&gt;
--nefald-highlight-active-text:    oklch(20% 0.10 55);&lt;br /&gt;
--nefald-highlight-active-outline: oklch(65% 0.22 55);&lt;br /&gt;
&lt;br /&gt;
/* -- Variables Roadmap (dérivées de la palette) -- */&lt;br /&gt;
--roadmap-idea-bg:           var(--nefald-neutral-bg);&lt;br /&gt;
--roadmap-idea-text:         var(--nefald-neutral-text);&lt;br /&gt;
--roadmap-idea-border:       var(--nefald-neutral-border);&lt;br /&gt;
&lt;br /&gt;
--roadmap-planned-bg:        var(--nefald-warning-bg);&lt;br /&gt;
--roadmap-planned-text:      var(--nefald-warning-text);&lt;br /&gt;
--roadmap-planned-border:    var(--nefald-warning-border);&lt;br /&gt;
&lt;br /&gt;
--roadmap-inprogress-bg:     var(--nefald-info-bg);&lt;br /&gt;
--roadmap-inprogress-text:   var(--nefald-info-text);&lt;br /&gt;
--roadmap-inprogress-border: var(--nefald-info-border);&lt;br /&gt;
&lt;br /&gt;
--roadmap-done-bg:           var(--nefald-success-bg);&lt;br /&gt;
--roadmap-done-text:         var(--nefald-success-text);&lt;br /&gt;
--roadmap-done-border:       var(--nefald-success-border);&lt;br /&gt;
&lt;br /&gt;
--roadmap-cancelled-bg:      var(--nefald-danger-bg);&lt;br /&gt;
--roadmap-cancelled-text:    var(--nefald-danger-text);&lt;br /&gt;
--roadmap-cancelled-border:  var(--nefald-danger-border);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* -- Mode sombre (manuel) -- */&lt;br /&gt;
:root.skin-theme-clientpref-night {&lt;br /&gt;
/* Surcharges des surfaces Citizen pour le thème sombre Nefald (Jaeger/Hyvan) */&lt;br /&gt;
--color-surface-0: #0a0c10; /* Fond de page principal (nefald-ink) */&lt;br /&gt;
--color-surface-1: #11161d; /* Cartes, modales et menus déroulants (nefald-ink-2) */&lt;br /&gt;
--color-surface-2: #1a2230; /* Éléments surélevés (nefald-ink-3) */&lt;br /&gt;
--color-surface-3: #1c2532; /* Zones de survol / lignes subtiles (nefald-rule) */&lt;br /&gt;
--color-surface-4: #2a3a4e; /* Éléments actifs / acier (nefald-steel) */&lt;br /&gt;
&lt;br /&gt;
/* Textes */&lt;br /&gt;
--color-base: #c8d1de;        /* Texte général (nefald-cream) */&lt;br /&gt;
--color-emphasized: #e6ecf3;  /* Titres et en-têtes (nefald-cream-bright) */&lt;br /&gt;
--color-subtle: #7c8694;      /* Légendes et métadonnées (nefald-muted) */&lt;br /&gt;
--color-link: #8eb4d4;        /* Liens (nefald-blue-light) */&lt;br /&gt;
--color-link-hover: #5a8db8;  /* Liens survolés (nefald-blue-bright) */&lt;br /&gt;
&lt;br /&gt;
/* Frontières */&lt;br /&gt;
--border-color-base: #2a3a4e;&lt;br /&gt;
--border-color-subtle: #1c2532;&lt;br /&gt;
--border-color-interactive: #5a8db8;&lt;br /&gt;
&lt;br /&gt;
/* Sémantique Nefald */&lt;br /&gt;
--nefald-success-bg:     oklch(28% 0.09 145);&lt;br /&gt;
--nefald-success-text:   oklch(82% 0.12 145);&lt;br /&gt;
--nefald-success-border: oklch(45% 0.12 145);&lt;br /&gt;
&lt;br /&gt;
--nefald-danger-bg:      oklch(28% 0.09 25);&lt;br /&gt;
--nefald-danger-text:    oklch(85% 0.10 25);&lt;br /&gt;
--nefald-danger-border:  oklch(48% 0.14 25);&lt;br /&gt;
&lt;br /&gt;
--nefald-warning-bg:     oklch(30% 0.09 75);&lt;br /&gt;
--nefald-warning-text:   oklch(88% 0.12 85);&lt;br /&gt;
--nefald-warning-border: oklch(52% 0.14 80);&lt;br /&gt;
&lt;br /&gt;
--nefald-info-bg:        oklch(28% 0.07 230);&lt;br /&gt;
--nefald-info-text:      oklch(84% 0.10 230);&lt;br /&gt;
--nefald-info-border:    oklch(48% 0.12 230);&lt;br /&gt;
&lt;br /&gt;
--nefald-neutral-bg:     oklch(28% 0.01 230);&lt;br /&gt;
--nefald-neutral-text:   oklch(82% 0.02 230);&lt;br /&gt;
--nefald-neutral-border: oklch(45% 0.02 230);&lt;br /&gt;
&lt;br /&gt;
--nefald-tip-bg:         oklch(25% 0.07 310);&lt;br /&gt;
--nefald-tip-text:       oklch(80% 0.12 310);&lt;br /&gt;
--nefald-tip-border:     oklch(50% 0.16 310);&lt;br /&gt;
&lt;br /&gt;
--nefald-question-bg:     oklch(25% 0.06 200);&lt;br /&gt;
--nefald-question-text:   oklch(80% 0.11 200);&lt;br /&gt;
--nefald-question-border: oklch(50% 0.14 200);&lt;br /&gt;
&lt;br /&gt;
--nefald-accent:         oklch(65% 0.18 230);&lt;br /&gt;
--nefald-accent-subtle:  oklch(28% 0.07 230);&lt;br /&gt;
&lt;br /&gt;
/* Recherche dans la page */&lt;br /&gt;
--nefald-highlight-bg:             oklch(45% 0.18 85);&lt;br /&gt;
--nefald-highlight-text:           oklch(95% 0.05 85);&lt;br /&gt;
--nefald-highlight-active-bg:      oklch(58% 0.22 60);&lt;br /&gt;
--nefald-highlight-active-text:    oklch(98% 0.02 60);&lt;br /&gt;
--nefald-highlight-active-outline: oklch(70% 0.22 55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* -- Mode automatique (suit le système) -- */&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
:root.skin-theme-clientpref-os {&lt;br /&gt;
/* Surcharges des surfaces Citizen pour le thème sombre Nefald (Jaeger/Hyvan) */&lt;br /&gt;
--color-surface-0: #0a0c10;&lt;br /&gt;
--color-surface-1: #11161d;&lt;br /&gt;
--color-surface-2: #1a2230;&lt;br /&gt;
--color-surface-3: #1c2532;&lt;br /&gt;
--color-surface-4: #2a3a4e;&lt;br /&gt;
&lt;br /&gt;
--color-base: #c8d1de;&lt;br /&gt;
--color-emphasized: #e6ecf3;&lt;br /&gt;
--color-subtle: #7c8694;&lt;br /&gt;
--color-link: #8eb4d4;&lt;br /&gt;
--color-link-hover: #5a8db8;&lt;br /&gt;
&lt;br /&gt;
--border-color-base: #2a3a4e;&lt;br /&gt;
--border-color-subtle: #1c2532;&lt;br /&gt;
--border-color-interactive: #5a8db8;&lt;br /&gt;
&lt;br /&gt;
/* Sémantique Nefald */&lt;br /&gt;
--nefald-success-bg:     oklch(28% 0.09 145);&lt;br /&gt;
--nefald-success-text:   oklch(82% 0.12 145);&lt;br /&gt;
--nefald-success-border: oklch(45% 0.12 145);&lt;br /&gt;
&lt;br /&gt;
--nefald-danger-bg:      oklch(28% 0.09 25);&lt;br /&gt;
--nefald-danger-text:    oklch(85% 0.10 25);&lt;br /&gt;
--nefald-danger-border:  oklch(48% 0.14 25);&lt;br /&gt;
&lt;br /&gt;
--nefald-warning-bg:     oklch(30% 0.09 75);&lt;br /&gt;
--nefald-warning-text:   oklch(88% 0.12 85);&lt;br /&gt;
--nefald-warning-border: oklch(52% 0.14 80);&lt;br /&gt;
&lt;br /&gt;
--nefald-info-bg:        oklch(28% 0.07 230);&lt;br /&gt;
--nefald-info-text:      oklch(84% 0.10 230);&lt;br /&gt;
--nefald-info-border:    oklch(48% 0.12 230);&lt;br /&gt;
&lt;br /&gt;
--nefald-neutral-bg:     oklch(28% 0.01 230);&lt;br /&gt;
--nefald-neutral-text:   oklch(82% 0.02 230);&lt;br /&gt;
--nefald-neutral-border: oklch(45% 0.02 230);&lt;br /&gt;
&lt;br /&gt;
--nefald-tip-bg:         oklch(25% 0.07 310);&lt;br /&gt;
--nefald-tip-text:       oklch(80% 0.12 310);&lt;br /&gt;
--nefald-tip-border:     oklch(50% 0.16 310);&lt;br /&gt;
&lt;br /&gt;
--nefald-question-bg:     oklch(25% 0.06 200);&lt;br /&gt;
--nefald-question-text:   oklch(80% 0.11 200);&lt;br /&gt;
--nefald-question-border: oklch(50% 0.14 200);&lt;br /&gt;
&lt;br /&gt;
--nefald-accent:         oklch(65% 0.18 230);&lt;br /&gt;
--nefald-accent-subtle:  oklch(28% 0.07 230);&lt;br /&gt;
&lt;br /&gt;
/* Recherche dans la page */&lt;br /&gt;
--nefald-highlight-bg:             oklch(45% 0.18 85);&lt;br /&gt;
--nefald-highlight-text:           oklch(95% 0.05 85);&lt;br /&gt;
--nefald-highlight-active-bg:      oklch(58% 0.22 60);&lt;br /&gt;
--nefald-highlight-active-text:    oklch(98% 0.02 60);&lt;br /&gt;
--nefald-highlight-active-outline: oklch(70% 0.22 55);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* -- Mode Noir Pur (OLED) -- */&lt;br /&gt;
.skin-theme-clientpref-night.citizen-feature-pure-black-clientpref-1 {&lt;br /&gt;
--color-surface-0: #000000;&lt;br /&gt;
--color-surface-1: #0a0c10;&lt;br /&gt;
--color-surface-2: #11161d;&lt;br /&gt;
--color-surface-3: #1a2230;&lt;br /&gt;
--color-surface-4: #2a3a4e;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* -- Mode Clair -- */&lt;br /&gt;
.skin-theme-clientpref-day {&lt;br /&gt;
/* Progressive color assombrie en mode clair pour l&#039;accessibilité */&lt;br /&gt;
--color-progressive-oklch__l: 43.15%;&lt;br /&gt;
--color-progressive-oklch__c: 0.114;&lt;br /&gt;
--color-progressive-oklch__h: 246.33;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* -- Jaeger background gradient (Effet cinématique du fond) -- */&lt;br /&gt;
.skin-theme-clientpref-night body {&lt;br /&gt;
    background: radial-gradient(ellipse at top, #0e1822 0%, #0a0c10 60%, #0a0c10 100%) !important;&lt;br /&gt;
    background-attachment: fixed !important;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    .skin-theme-clientpref-os body {&lt;br /&gt;
        background: radial-gradient(ellipse at top, #0e1822 0%, #0a0c10 60%, #0a0c10 100%) !important;&lt;br /&gt;
        background-attachment: fixed !important;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 2. TYPOGRAPHIE&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
h1, h2, h3, h4, h5, h6,&lt;br /&gt;
.citizen-sticky-header-page-title {&lt;br /&gt;
font-weight: var(--font-weight-medium);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
h4, h5, h6 {&lt;br /&gt;
letter-spacing: 0.0125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 3. TABLEAUX — Classes sémantiques&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.table-color-success {&lt;br /&gt;
background-color: var(--nefald-success-bg) !important;&lt;br /&gt;
color:            var(--nefald-success-text) !important;&lt;br /&gt;
border-left: 3px solid var(--nefald-success-border) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-danger {&lt;br /&gt;
background-color: var(--nefald-danger-bg) !important;&lt;br /&gt;
color:            var(--nefald-danger-text) !important;&lt;br /&gt;
border-left: 3px solid var(--nefald-danger-border) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-warning {&lt;br /&gt;
background-color: var(--nefald-warning-bg) !important;&lt;br /&gt;
color:            var(--nefald-warning-text) !important;&lt;br /&gt;
border-left: 3px solid var(--nefald-warning-border) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-info {&lt;br /&gt;
background-color: var(--nefald-info-bg) !important;&lt;br /&gt;
color:            var(--nefald-info-text) !important;&lt;br /&gt;
border-left: 3px solid var(--nefald-info-border) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-secondary {&lt;br /&gt;
background-color: var(--nefald-neutral-bg) !important;&lt;br /&gt;
color:            var(--nefald-neutral-text) !important;&lt;br /&gt;
border-left: 3px solid var(--nefald-neutral-border) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-success,&lt;br /&gt;
.table-color-danger,&lt;br /&gt;
.table-color-warning,&lt;br /&gt;
.table-color-info,&lt;br /&gt;
.table-color-secondary {&lt;br /&gt;
transition: filter 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wikitable tr:hover .table-color-success,&lt;br /&gt;
.wikitable tr:hover .table-color-danger,&lt;br /&gt;
.wikitable tr:hover .table-color-warning,&lt;br /&gt;
.wikitable tr:hover .table-color-info,&lt;br /&gt;
.wikitable tr:hover .table-color-secondary {&lt;br /&gt;
filter: brightness(0.95);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-success code,&lt;br /&gt;
.table-color-danger code,&lt;br /&gt;
.table-color-warning code,&lt;br /&gt;
.table-color-info code,&lt;br /&gt;
.table-color-secondary code {&lt;br /&gt;
background-color: rgba(0, 0, 0, 0.1) !important;&lt;br /&gt;
color: inherit !important;&lt;br /&gt;
border: 1px solid rgba(0, 0, 0, 0.15);&lt;br /&gt;
padding: 2px 6px;&lt;br /&gt;
border-radius: 3px;&lt;br /&gt;
font-size: 0.9em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
:root.skin-theme-clientpref-night .table-color-success code,&lt;br /&gt;
:root.skin-theme-clientpref-night .table-color-danger code,&lt;br /&gt;
:root.skin-theme-clientpref-night .table-color-warning code,&lt;br /&gt;
:root.skin-theme-clientpref-night .table-color-info code,&lt;br /&gt;
:root.skin-theme-clientpref-night .table-color-secondary code {&lt;br /&gt;
background-color: rgba(255, 255, 255, 0.1) !important;&lt;br /&gt;
border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.table-color-success:focus-within,&lt;br /&gt;
.table-color-danger:focus-within,&lt;br /&gt;
.table-color-warning:focus-within,&lt;br /&gt;
.table-color-info:focus-within,&lt;br /&gt;
.table-color-secondary:focus-within {&lt;br /&gt;
outline: 2px solid currentColor;&lt;br /&gt;
outline-offset: -2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 4. COMMAND PALETTE — Repositionnement desktop&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 1000px) {&lt;br /&gt;
.citizen-command-palette {&lt;br /&gt;
left: calc(56px + var(--space-xs)) !important;&lt;br /&gt;
top: 2rem !important;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 5. MENU LATÉRAL (Drawer)&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.citizen-drawer__menu {&lt;br /&gt;
margin-bottom: 0;&lt;br /&gt;
padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-portlet-External {&lt;br /&gt;
position: sticky;&lt;br /&gt;
bottom: 0;&lt;br /&gt;
margin-top: var(--space-md);&lt;br /&gt;
margin-inline: calc(var(--space-xs) * -1);&lt;br /&gt;
padding: var(--space-xs);&lt;br /&gt;
border-top: var(--border-base);&lt;br /&gt;
backdrop-filter: var(--backdrop-filter-frosted-glass);&lt;br /&gt;
font-size: var(--font-size-x-small);&lt;br /&gt;
grid-column: 1 / -1;&lt;br /&gt;
white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-portlet-External .citizen-menu__heading {&lt;br /&gt;
display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-portlet-External ul {&lt;br /&gt;
display: flex;&lt;br /&gt;
overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-portlet-External .mw-list-item a {&lt;br /&gt;
gap: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-drawer__menu [id^=&amp;quot;n-sidebar-label-&amp;quot;] a {&lt;br /&gt;
pointer-events: none;&lt;br /&gt;
margin-left: var(--space-xs);&lt;br /&gt;
padding-left: var(--space-md);&lt;br /&gt;
padding-right: var(--space-xs);&lt;br /&gt;
border-left: 1px solid var(--border-color-base);&lt;br /&gt;
border-radius: 0;&lt;br /&gt;
letter-spacing: 0.05em;&lt;br /&gt;
font-weight: var(--font-weight-normal);&lt;br /&gt;
color: var(--color-subtle) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-drawer__menu [id^=&amp;quot;n-sidebar-icon-&amp;quot;] a {&lt;br /&gt;
font-size: 0;&lt;br /&gt;
content-visibility: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-drawer__menu [id^=&amp;quot;n-sidebar-icon-&amp;quot;] a:before {&lt;br /&gt;
display: block;&lt;br /&gt;
content: &amp;quot;&amp;quot;;&lt;br /&gt;
width: var(--size-icon);&lt;br /&gt;
height: var(--size-icon);&lt;br /&gt;
background-color: currentColor;&lt;br /&gt;
mask-size: contain;&lt;br /&gt;
mask-repeat: no-repeat;&lt;br /&gt;
mask-position: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#n-sidebar-icon-bluesky a:before   { mask-image: url(https://wiki.nefald.fr/images/2/21/IconButton-bluesky.svg); }&lt;br /&gt;
#n-sidebar-icon-discord a:before   { mask-image: url(https://wiki.nefald.fr/images/9/9c/Discord_Icons.svg); }&lt;br /&gt;
#n-sidebar-icon-facebook a:before  { mask-image: url(https://wiki.nefald.fr/images/9/9c/IconButton-facebook.svg); }&lt;br /&gt;
#n-sidebar-icon-ghost a:before     { mask-image: url(https://wiki.nefald.fr/images/f/f6/IconButton-ghost.svg); }&lt;br /&gt;
#n-sidebar-icon-gitlab a:before    { mask-image: url(https://wiki.nefald.fr/images/0/01/IconButton-gitlab.svg); }&lt;br /&gt;
#n-sidebar-icon-helloasso a:before { mask-image: url(https://wiki.nefald.fr/images/c/c3/IconButton-helloasso.svg); }&lt;br /&gt;
#n-sidebar-icon-instagram a:before { mask-image: url(https://wiki.nefald.fr/images/f/f9/ButtonLink-instagram.svg); }&lt;br /&gt;
#n-sidebar-icon-mastodon a:before  { mask-image: url(https://wiki.nefald.fr/images/b/b0/IconButton-mastodon.svg); }&lt;br /&gt;
#n-sidebar-icon-patreon a:before   { mask-image: url(); }&lt;br /&gt;
#n-sidebar-icon-tiktok a:before    { mask-image: url(https://wiki.nefald.fr/images/0/07/IconButton-tiktok.svg); }&lt;br /&gt;
#n-sidebar-icon-twitter a:before   { mask-image: url(https://wiki.nefald.fr/images/3/35/ButtonLink-twitter.svg); }&lt;br /&gt;
#n-sidebar-icon-youtube a:before   { mask-image: url(https://wiki.nefald.fr/images/6/64/IconButton-youtube.svg); }&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 6. FOOTER&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.citizen-footer {&lt;br /&gt;
padding-block: 6rem;&lt;br /&gt;
background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.citizen-footer__siteinfo {&lt;br /&gt;
justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer-icons a {&lt;br /&gt;
border: 0;&lt;br /&gt;
padding: 0;&lt;br /&gt;
background: transparent;&lt;br /&gt;
opacity: var(--opacity-icon-base);&lt;br /&gt;
transition: opacity 250ms ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer-icons a:hover  { opacity: var(--opacity-icon-base--hover); }&lt;br /&gt;
#footer-icons a:active { opacity: var(--opacity-icon-base--active); }&lt;br /&gt;
&lt;br /&gt;
#footer-icons ul,&lt;br /&gt;
#footer-icons li {&lt;br /&gt;
column-gap: var(--space-md);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
width: auto;&lt;br /&gt;
height: 32px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * 7. MODÈLE:RECHERCHE — Surlignage&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
.nefald-highlight {&lt;br /&gt;
background-color: var(--nefald-highlight-bg);&lt;br /&gt;
color: var(--nefald-highlight-text);&lt;br /&gt;
border-radius: 2px;&lt;br /&gt;
padding: 0 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.nefald-highlight--active {&lt;br /&gt;
background-color: var(--nefald-highlight-active-bg);&lt;br /&gt;
color: var(--nefald-highlight-active-text);&lt;br /&gt;
outline: 2px solid var(--nefald-highlight-active-outline);&lt;br /&gt;
outline-offset: 1px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5778</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5778"/>
		<updated>2026-06-11T23:37:33Z</updated>

		<summary type="html">&lt;p&gt;Hiob : style: aligner le formatage sur Plugin:Banco (H1, gras intro, type infobox, séparateurs, code dans tableaux) (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=roleplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Écurie&#039;&#039;&#039; est un plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1. Déposer `Ecurie-&amp;lt;version&amp;gt;.jar` dans `plugins/`&lt;br /&gt;
2. Redémarrer le serveur&lt;br /&gt;
3. Éditer `plugins/Ecurie/config.yml` et `lang.yml`&lt;br /&gt;
4. Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== `config.yml` ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  file: &amp;quot;ecurie.db&amp;quot;          # Chemin relatif au dossier du plugin&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
routes:&lt;br /&gt;
  on-road-speed: 0.35        # Vitesse cheval sur route (vanilla ≈ 0.225)&lt;br /&gt;
  enabled: false             # Routes RP (désactivé en V1)&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie stable setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== `lang.yml` ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (`&amp;lt;red&amp;gt;`, `&amp;lt;gold&amp;gt;`, etc.).&lt;br /&gt;
Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.&lt;br /&gt;
&lt;br /&gt;
== Commandes admin ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.admin` (op par défaut). Alias : `/ec`&lt;br /&gt;
&lt;br /&gt;
=== Wand — sélection de région ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie wand [on|off]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Active/désactive le wand bâton. Clic gauche = point 1, clic droit = point 2. Utilisé pour scanner les boxes d&#039;une étable.&lt;br /&gt;
&lt;br /&gt;
=== Étables ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie stable create &amp;lt;nom&amp;gt; [type]    — Crée l&#039;étable ET scanne automatiquement les boxes. Type: STABLE, TERRESTRE, AQUATIQUE, VOLIERE.&lt;br /&gt;
/ecurie stable delete &amp;lt;id&amp;gt;            — Supprime une étable&lt;br /&gt;
/ecurie stable setnpc &amp;lt;stable_id&amp;gt;     — Lie le NPC Citizens le plus proche (≤5 blocs) à l&#039;étable&lt;br /&gt;
/ecurie stable list                   — Liste toutes les étables&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boxes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie box list &amp;lt;stable_id&amp;gt;          — Liste les boxes d&#039;une étable&lt;br /&gt;
/ecurie box delete &amp;lt;box_id&amp;gt;           — Supprime une box&lt;br /&gt;
/ecurie show [on|off]                 — Affiche les boxes en surbrillance (particules colorées : vertes=libre, rouges=occupée)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Détection : chaque stalle doit contenir un bloc spécifique configuré dans `config.yml` (`box-blocks`). Par défaut :&lt;br /&gt;
* `STABLE` / `TERRESTRE` : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* `AQUATIQUE` : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* `VOLIERE` : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
La commande `stable create` détecte automatiquement tous ces blocs dans la région wand et enregistre les boxes immédiatement.&lt;br /&gt;
&lt;br /&gt;
=== Chevaux ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie horse free &amp;lt;horse_id&amp;gt;         — Libère un compagnon de la DB (urgence admin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Divers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie reload                        — Recharge config.yml et le cache ShowManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commandes joueurs ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.use` (true par défaut).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie gui [dialog|inventory]        — Change votre type d&#039;interface (persistant via PDC)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: `WATER_CAULDRON` pour TERRESTRE, `PRISMARINE` pour AQUATIQUE).&lt;br /&gt;
2. &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : `/ecurie wand on` → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
3. &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : `/ecurie stable create &amp;lt;nom&amp;gt; [type]` — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
4. &#039;&#039;&#039;(Optionnel) Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;lt; 5 blocs : `/ecurie stable setnpc &amp;lt;stable_id&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
1. Amener le compagnon à côté ou le monter&lt;br /&gt;
2. Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
3. &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
4. &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
5. Coût : `prices.store` en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Coût : `prices.retrieve` en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
4. Coût : `prices.rename` en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horses_count%&amp;lt;/code&amp;gt; || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_name_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_stable_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%ecurie_horse_health_&amp;lt;n&amp;gt;%&amp;lt;/code&amp;gt; || Santé (ex : &amp;lt;code&amp;gt;18.0/20.0&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration &amp;lt;code&amp;gt;/ecurie&amp;lt;/code&amp;gt; || op&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ecurie.use&amp;lt;/code&amp;gt; || Interaction avec les PNJ et &amp;lt;code&amp;gt;/ecurie gui&amp;lt;/code&amp;gt; || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (shadowed, pas de dépendance runtime)&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via `/ecurie stable setnpc`. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans `npc` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans `groom` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : 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`.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : Le plugin stocke correctement l&#039;UUID du MyPet et s&#039;assure qu&#039;il est révoqué automatiquement pour éviter les doublons lors du stockage.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5777</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5777"/>
		<updated>2026-06-11T23:29:21Z</updated>

		<summary type="html">&lt;p&gt;Hiob : docs: mise à jour terminologie RP, NPC Maître/Palefrenier, TextDisplay, config npc/groom, changelog 1.3.0, infobox (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Gestion des écuries RP}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
|nom=Écurie&lt;br /&gt;
|type=gameplay&lt;br /&gt;
|dev=[[Scriptomancien|Nefald]]&lt;br /&gt;
|status=Installé&lt;br /&gt;
|grade=[[Pérégrin]]&lt;br /&gt;
|sources=https://git.nefald.fr/minecraft/plugins/ecurie&lt;br /&gt;
|dépendance=[[Plugin:Vault|Vault]] (optionnel), [[Plugin:Banco|Banco]] (optionnel, recommandé), [[Plugin:Citizens|Citizens]] (optionnel), [[Plugin:PlaceholderAPI|PlaceholderAPI]] (optionnel), [[Plugin:MyPet|MyPet]] (optionnel)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Ecurie =&lt;br /&gt;
&lt;br /&gt;
Plugin PaperMC de gestion des compagnons RP pour le serveur Nefald.&lt;br /&gt;
&lt;br /&gt;
Permet aux joueurs de mettre leurs montures en pension dans des étables gérées par des NPCs Citizens. Supporte les transferts inter-étables (&#039;&#039;acheminements&#039;&#039;), la tarification en écus (Banco/Vault), et expose des placeholders PlaceholderAPI.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Dépendance !! Rôle !! Type&lt;br /&gt;
|-&lt;br /&gt;
| PaperMC 1.21.x || Serveur || Obligatoire&lt;br /&gt;
|-&lt;br /&gt;
| Vault || API économie || Optionnel (fallback si Banco absent)&lt;br /&gt;
|-&lt;br /&gt;
| Banco || Économie item-based (écus) || Optionnel (recommandé)&lt;br /&gt;
|-&lt;br /&gt;
| Citizens || NPCs d&#039;interface || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| PlaceholderAPI || Placeholders || Optionnel&lt;br /&gt;
|-&lt;br /&gt;
| MyPet || Détection familiers || Optionnel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Le plugin charge sans aucune de ces dépendances optionnelles.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1. Déposer `Ecurie-&amp;lt;version&amp;gt;.jar` dans `plugins/`&lt;br /&gt;
2. Redémarrer le serveur&lt;br /&gt;
3. Éditer `plugins/Ecurie/config.yml` et `lang.yml`&lt;br /&gt;
4. Créer les étables via les commandes admin (voir ci-dessous)&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== `config.yml` ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
database:&lt;br /&gt;
  file: &amp;quot;ecurie.db&amp;quot;          # Chemin relatif au dossier du plugin&lt;br /&gt;
&lt;br /&gt;
# Interface GUI par défaut (modifiable par joueur via /ecurie gui)&lt;br /&gt;
# &#039;dialog&#039;    = Interface textuelle native Paper (1.21.6+, recommandé)&lt;br /&gt;
# &#039;inventory&#039; = Menu d&#039;inventaire classique&lt;br /&gt;
gui-type: &amp;quot;dialog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
transfer:&lt;br /&gt;
  base-delay-seconds: 600    # Délai de base pour un acheminement (10 min)&lt;br /&gt;
  delay-per-100-blocks: 30   # Délai additionnel par 100 blocs de distance&lt;br /&gt;
  animation-distance: 15.0   # Distance (blocs) pour l&#039;animation de départ/arrivée&lt;br /&gt;
&lt;br /&gt;
routes:&lt;br /&gt;
  on-road-speed: 0.35        # Vitesse cheval sur route (vanilla ≈ 0.225)&lt;br /&gt;
  enabled: false             # Routes RP (désactivé en V1)&lt;br /&gt;
&lt;br /&gt;
# Tarifs des services en écus/sols (0 = gratuit)&lt;br /&gt;
prices:&lt;br /&gt;
  store: 10                  # Mise en pension&lt;br /&gt;
  retrieve: 5                # Récupération d&#039;un compagnon&lt;br /&gt;
  rename: 50                 # Modification du registre (renommage)&lt;br /&gt;
  transfer-base: 20          # Coût de base d&#039;un acheminement&lt;br /&gt;
  transfer-per-100: 5        # Coût additionnel par tranche de 100 blocs&lt;br /&gt;
  # Formule : coût total = transfer-base + (distance / 100) * transfer-per-100&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Maître d&#039;Écurie&amp;quot; : PNJ d&#039;interface lié à l&#039;étable (via /ecurie stable setnpc)&lt;br /&gt;
npc:&lt;br /&gt;
  default-name: &amp;quot;Maître d&#039;Écurie&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;   # Valeur de texture NameMC&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot; # Signature de la texture&lt;br /&gt;
  animation:&lt;br /&gt;
    enabled: false           # Animation périodique du bras (secouage)&lt;br /&gt;
    delay-ticks: 300&lt;br /&gt;
&lt;br /&gt;
# NPC &amp;quot;Palefrenier&amp;quot; : PNJ temporaire, spawné uniquement pour l&#039;animation de départ/arrivée&lt;br /&gt;
groom:&lt;br /&gt;
  default-name: &amp;quot;Palefrenier&amp;quot;&lt;br /&gt;
  default-skin-value: &amp;quot;&amp;lt;base64 skin&amp;gt;&amp;quot;&lt;br /&gt;
  default-skin-signature: &amp;quot;&amp;lt;signature&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
phantom-horse:&lt;br /&gt;
  health: 20.0               # PV du compagnon fantôme en box&lt;br /&gt;
&lt;br /&gt;
box-blocks:&lt;br /&gt;
  # Blocs de ciblage (wand) selon le type d&#039;écurie&lt;br /&gt;
  STABLE: WATER_CAULDRON&lt;br /&gt;
  TERRESTRE: WATER_CAULDRON&lt;br /&gt;
  AQUATIQUE: PRISMARINE&lt;br /&gt;
  VOLIERE: DAYLIGHT_DETECTOR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== `lang.yml` ===&lt;br /&gt;
&lt;br /&gt;
Tous les messages joueurs. Supporte les balises MiniMessage (`&amp;lt;red&amp;gt;`, `&amp;lt;gold&amp;gt;`, etc.).&lt;br /&gt;
Variables disponibles selon le message : `{name}`, `{amount}`, `{dest}`, `{time}`, `{count}`, `{stable_id}`, `{n}`, `{x}`, `{y}`, `{z}`.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Commandes admin ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.admin` (op par défaut). Alias : `/ec`&lt;br /&gt;
&lt;br /&gt;
=== Wand — sélection de région ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie wand [on|off]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Active/désactive le wand bâton. Clic gauche = point 1, clic droit = point 2. Utilisé pour scanner les boxes d&#039;une étable.&lt;br /&gt;
&lt;br /&gt;
=== Étables ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie stable create &amp;lt;nom&amp;gt; [type]    — Crée l&#039;étable ET scanne automatiquement les boxes. Type: STABLE, TERRESTRE, AQUATIQUE, VOLIERE.&lt;br /&gt;
/ecurie stable delete &amp;lt;id&amp;gt;            — Supprime une étable&lt;br /&gt;
/ecurie stable setnpc &amp;lt;stable_id&amp;gt;     — Lie le NPC Citizens le plus proche (≤5 blocs) à l&#039;étable&lt;br /&gt;
/ecurie stable list                   — Liste toutes les étables&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Boxes ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie box list &amp;lt;stable_id&amp;gt;          — Liste les boxes d&#039;une étable&lt;br /&gt;
/ecurie box delete &amp;lt;box_id&amp;gt;           — Supprime une box&lt;br /&gt;
/ecurie show [on|off]                 — Affiche les boxes en surbrillance (particules colorées : vertes=libre, rouges=occupée)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Détection : chaque stalle doit contenir un bloc spécifique configuré dans `config.yml` (`box-blocks`). Par défaut :&lt;br /&gt;
* `STABLE` / `TERRESTRE` : &#039;&#039;&#039;WATER_CAULDRON&#039;&#039;&#039;&lt;br /&gt;
* `AQUATIQUE` : &#039;&#039;&#039;PRISMARINE&#039;&#039;&#039;&lt;br /&gt;
* `VOLIERE` : &#039;&#039;&#039;DAYLIGHT_DETECTOR&#039;&#039;&#039;&lt;br /&gt;
La commande `stable create` détecte automatiquement tous ces blocs dans la région wand et enregistre les boxes immédiatement.&lt;br /&gt;
&lt;br /&gt;
=== Chevaux ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie horse free &amp;lt;horse_id&amp;gt;         — Libère un compagnon de la DB (urgence admin)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Divers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie reload                        — Recharge config.yml et le cache ShowManager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Commandes joueurs ==&lt;br /&gt;
&lt;br /&gt;
Permission requise : `ecurie.use` (true par défaut).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie gui [dialog|inventory]        — Change votre type d&#039;interface (persistant via PDC)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Workflow admin — Créer une étable ==&lt;br /&gt;
&lt;br /&gt;
=== Étapes ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Construire l&#039;étable&#039;&#039;&#039; — poser le bloc cible dans chaque stalle (ex: `WATER_CAULDRON` pour TERRESTRE, `PRISMARINE` pour AQUATIQUE).&lt;br /&gt;
2. &#039;&#039;&#039;Activer le wand&#039;&#039;&#039; : `/ecurie wand on` → clic gauche (point A) + clic droit (coin B) pour délimiter la région&lt;br /&gt;
3. &#039;&#039;&#039;Créer et scanner&#039;&#039;&#039; : `/ecurie stable create &amp;lt;nom&amp;gt; [type]` — crée l&#039;étable ET enregistre automatiquement les boxes détectées.&lt;br /&gt;
4. &#039;&#039;&#039;(Optionnel) Lier un NPC&#039;&#039;&#039; : placer un Citizens devant l&#039;étable, s&#039;en approcher à &amp;lt; 5 blocs : `/ecurie stable setnpc &amp;lt;stable_id&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les boxes ===&lt;br /&gt;
&lt;br /&gt;
Après création, afficher les boxes avec particules colorées :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Particules &#039;&#039;&#039;vertes&#039;&#039;&#039; = box libre&lt;br /&gt;
* Particules &#039;&#039;&#039;rouges&#039;&#039;&#039; = box occupée&lt;br /&gt;
&lt;br /&gt;
Désactiver l&#039;affichage :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/ecurie show off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Workflow joueur — Interagir avec une étable ==&lt;br /&gt;
&lt;br /&gt;
Le joueur interagit via clic droit sur le &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; (NPC Citizens de l&#039;étable). Le plugin propose deux types d&#039;interfaces, configurables librement par chaque joueur (préférence persistante) :&lt;br /&gt;
* &#039;&#039;&#039;Dialog (par défaut)&#039;&#039;&#039; : Fenêtre de dialogue textuelle native (Paper 1.21.6+). Immersif et orienté RPG.&lt;br /&gt;
* &#039;&#039;&#039;Inventory&#039;&#039;&#039; : Inventaire classique sous forme de coffre.&lt;br /&gt;
&lt;br /&gt;
Une GUI s&#039;ouvre avec les actions suivantes :&lt;br /&gt;
&lt;br /&gt;
=== Mettre en pension ===&lt;br /&gt;
1. Amener le compagnon à côté ou le monter&lt;br /&gt;
2. Cliquer &#039;&#039;&#039;Mettre en pension&#039;&#039;&#039; dans la GUI&lt;br /&gt;
3. &#039;&#039;&#039;Si le compagnon n&#039;a pas de nom custom&#039;&#039;&#039; (nom générique ou absent) → une enclume s&#039;ouvre pour le nommer&lt;br /&gt;
4. &#039;&#039;&#039;Si le compagnon a déjà un nom custom&#039;&#039;&#039; → mise en pension directe sans nommage&lt;br /&gt;
5. Coût : `prices.store` en sols&lt;br /&gt;
&lt;br /&gt;
=== Reprendre un compagnon ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Reprendre un compagnon&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Coût : `prices.retrieve` en sols&lt;br /&gt;
&lt;br /&gt;
=== Demander un acheminement ===&lt;br /&gt;
L&#039;acheminement peut être initié depuis l&#039;écurie de départ ou d&#039;arrivée :&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;origine (envoi sortant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, sélectionner le compagnon, puis choisir l&#039;écurie de destination.&lt;br /&gt;
* &#039;&#039;&#039;Depuis l&#039;écurie d&#039;arrivée (rapatriement entrant) :&#039;&#039;&#039; Cliquer &#039;&#039;&#039;Demander un acheminement&#039;&#039;&#039;, le plugin liste vos compagnons situés dans d&#039;autres étables. Cliquer sur l&#039;un d&#039;eux lance directement le rapatriement.&lt;br /&gt;
* &#039;&#039;&#039;Calcul de distance :&#039;&#039;&#039; Le délai et le coût s&#039;ajustent dynamiquement selon la distance réelle (calculée en blocs 3D) entre les deux étables (base + ajustement par tranche de 100 blocs).&lt;br /&gt;
&lt;br /&gt;
=== Modifier le registre ===&lt;br /&gt;
1. Cliquer &#039;&#039;&#039;Modifier le registre&#039;&#039;&#039;&lt;br /&gt;
2. Choisir le compagnon dans la liste&lt;br /&gt;
3. Une enclume s&#039;ouvre pré-remplie avec le nom actuel — modifier ou confirmer&lt;br /&gt;
4. Coût : `prices.rename` en sols (défaut 50)&lt;br /&gt;
&lt;br /&gt;
=== Mes compagnons ===&lt;br /&gt;
Vue globale de tous les compagnons du joueur, toutes étables confondues.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Placeholders (PlaceholderAPI) ==&lt;br /&gt;
&lt;br /&gt;
Requiert PlaceholderAPI installé.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Valeur&lt;br /&gt;
|-&lt;br /&gt;
| `%ecurie_horses_count%` || Nombre de compagnons en pension du joueur&lt;br /&gt;
|-&lt;br /&gt;
| `%ecurie_horse_name_&amp;lt;n&amp;gt;%` || Nom du n-ième compagnon (1-indexé, trié par nom)&lt;br /&gt;
|-&lt;br /&gt;
| `%ecurie_horse_stable_&amp;lt;n&amp;gt;%` || Nom de l&#039;étable du n-ième compagnon&lt;br /&gt;
|-&lt;br /&gt;
| `%ecurie_horse_health_&amp;lt;n&amp;gt;%` || Santé (ex : `18.0/20.0`)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Permissions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Permission !! Description !! Défaut&lt;br /&gt;
|-&lt;br /&gt;
| `ecurie.admin` || Accès aux commandes d&#039;administration `/ecurie` || op&lt;br /&gt;
|-&lt;br /&gt;
| `ecurie.use` || Interaction avec les PNJ et `/ecurie gui` || true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Notes techniques ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Stockage&#039;&#039;&#039; : SQLite embarqué (shadowed, pas de dépendance runtime)&lt;br /&gt;
* &#039;&#039;&#039;Compagnons fantômes&#039;&#039;&#039; : 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).&lt;br /&gt;
* &#039;&#039;&#039;Affichage du nom&#039;&#039;&#039; : Le nom du compagnon (ligne 1, blanc) et le pseudo du propriétaire (ligne 2, gris italique) s&#039;affichent via un &#039;&#039;&#039;TextDisplay&#039;&#039;&#039; passager, nettoyé automatiquement lors du despawn.&lt;br /&gt;
* &#039;&#039;&#039;Maître d&#039;Écurie&#039;&#039;&#039; : NPC Citizens permanent lié à l&#039;étable via `/ecurie stable setnpc`. Sert d&#039;interface pour toutes les interactions joueur. Nom et skin configurables dans `npc` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Palefrenier&#039;&#039;&#039; : NPC Citizens temporaire spawné uniquement pendant l&#039;animation de départ ou d&#039;arrivée d&#039;un acheminement. Nom et skin configurables dans `groom` (config.yml).&lt;br /&gt;
* &#039;&#039;&#039;Mort en box&#039;&#039;&#039; : perte définitive, slot libéré&lt;br /&gt;
* &#039;&#039;&#039;Banco&#039;&#039;&#039; : intégré par réflexion pure (aucun jar requis à la compilation)&lt;br /&gt;
* &#039;&#039;&#039;Stockage universel&#039;&#039;&#039; : Supporte tous les familiers montables (Chevaux, Chameaux, Cochons, Striders) ainsi que tous les familiers &#039;&#039;&#039;MyPet&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Typage des écuries (RPG)&#039;&#039;&#039; : 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`.&lt;br /&gt;
* &#039;&#039;&#039;MyPet&#039;&#039;&#039; : Le plugin stocke correctement l&#039;UUID du MyPet et s&#039;assure qu&#039;il est révoqué automatiquement pour éviter les doublons lors du stockage.&lt;br /&gt;
* &#039;&#039;&#039;Transferts&#039;&#039;&#039; : vérifiés toutes les 10 secondes en async&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./gradlew shadowJar&lt;br /&gt;
# Sortie : build/libs/Ecurie-&amp;lt;version&amp;gt;.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requiert Java 21. La compilation locale sous Java 26+ peut échouer (incompatibilité Groovy/ASM) — utiliser la CI GitLab.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Changelog ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Date !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 2026-05-15 || V1 : pension, récupération, transfert, GUI&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.1 || 2026-05-16 || PlaceholderAPI + garde MyPet&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.2 || 2026-05-18 || Détection boxes : WATER_CAULDRON remplace HAY_BLOCK+Sign, scan+création fusionnés en une commande&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.3 || 2026-05-19 || Nommage : skip enclume si compagnon déjà nommé au stockage ; fix renommage (slot résultat pré-rempli)&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écurie de destination ; animations de départ/arrivée via pathfinding ; attribution automatique de nom/skin pour les NPCs lors du setnpc&lt;br /&gt;
|-&lt;br /&gt;
| 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&#039;écuries (AQUATIQUE, VOLIERE, TERRESTRE) avec blocs de ciblage configurables et validations RPG&lt;br /&gt;
|-&lt;br /&gt;
| 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.&lt;br /&gt;
|-&lt;br /&gt;
| 1.3.0 || 2026-06-12 || Terminologie RP : &amp;quot;Mettre en pension&amp;quot;, &amp;quot;Acheminement&amp;quot;, &amp;quot;Compagnon&amp;quot; ; séparation Maître d&#039;É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).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Plugin développé pour Nefald]]&lt;br /&gt;
[[Catégorie:Plugin installé]]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5776</id>
		<title>Plugin:Écurie</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:%C3%89curie&amp;diff=5776"/>
		<updated>2026-06-11T23:20:04Z</updated>

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

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

		<summary type="html">&lt;p&gt;Hiob : lien&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Les différents grades jouables dans notre communauté.}}&lt;br /&gt;
&lt;br /&gt;
== Général ==&lt;br /&gt;
=== Maraud ===&lt;br /&gt;
[[Fichier:Maraud grade.png|right|200px]]&lt;br /&gt;
Le grade maraud est le grade par défaut, octroyé à tout visiteur. Ils ne peuvent faire que peu de chose sur notre serveur, mis à part parler et visiter.&lt;br /&gt;
{{Article détaillé|Maraud}}&lt;br /&gt;
&lt;br /&gt;
=== Pérégrin ===&lt;br /&gt;
[[Fichier:Peregrin grade.png|right|200px]]Les pérégrins sont à la base de la communauté de Nefald, notre serveur ne pourrait pas exister sans eux. Les pérégrins méritants peuvent obtenir la distinction de Contremaître, signalée par un préfixe spécial.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Pérégrin}}&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
=== Bâtisseur ===&lt;br /&gt;
[[Fichier:Batisseur grade.png|right|200px]]&lt;br /&gt;
Plus proches des architectes, chargés de diriger les contremaîtres sur le chantier, les bâtisseurs ont exactement les mêmes accès que leurs ouvriers, à l&#039;exception du gamemode qui leur permet de se donner du matériel de construction. Ils ont accès au GM1 et donc à des ressources illimitées et peuvent voler.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ce grade est réservé aux pérégrins ayant fait leurs preuves en construction et gestion de projet. Les bâtisseurs restent sous la direction de l&#039;Architecte.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Bâtisseur}}&lt;br /&gt;
&lt;br /&gt;
=== Architecte ===&lt;br /&gt;
[[Fichier:Architecte grade.png|right|200px]]&lt;br /&gt;
Les &#039;&#039;&#039;Architectes&#039;&#039;&#039; sont les grands bâtisseurs du Nefald. Ils ont pour mission de bâtir les grandes villes sur le serveur et d&#039;entretenir les infrastructures existantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils dirigent la branche Construction et sont nommés parmi les Bâtisseurs par le Conseil.&lt;br /&gt;
Ils ont accès à [[WorldGuard]] et [[WorldEdit]] en leurs entiers, ainsi qu&#039;à nombre d&#039;autres plugins.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Architecte}}&lt;br /&gt;
&lt;br /&gt;
== Animation ==&lt;br /&gt;
=== Ménestrel ===&lt;br /&gt;
[[Fichier:Menestrel grade.png|right|200px]]&lt;br /&gt;
Les ménestrels sont les animateurs de Nefald. Ils peuvent s&#039;orienter en trois activités :&amp;lt;br /&amp;gt;&lt;br /&gt;
- L&#039;événementiel : ils créent des évènements pour divertir les joueurs.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le RolePlay : ils créent du contenu RP et des quêtes.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le développement : ils créent du contenu via les scripts et codes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les ménestrels disposent du /broadcast leur permettant de passer des annonces sur le chat. Ils sont la base de l&#039;animation et sont accessibles par candidature.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Ménestrel}}&lt;br /&gt;
&lt;br /&gt;
=== Scribe ===&lt;br /&gt;
[[Fichier:Scribe grade.png|right|200px]]&lt;br /&gt;
Les Scribes sont les dépositaires de notre histoire au travers de ses légendes. Ils rédigent le RolePlay et organisent des événements en conséquence, coordonnent les ménestrels.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils sont choisis pour leurs connaissances du RP, leurs talents événementiels et leurs capacités à diriger l&#039;équipe.&lt;br /&gt;
Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|Scribe}}&lt;br /&gt;
&lt;br /&gt;
== Modération ==&lt;br /&gt;
=== Aspirant ===&lt;br /&gt;
[[Fichier:Aspirant grade.png|right|200px]]&lt;br /&gt;
Le grade Aspirant est un passage obligatoire dans l&#039;accès au grade Officier. Quiconque souhaite devenir Officier doit d&#039;abord postuler au grade Aspirant et y faire ses preuves.&lt;br /&gt;
Les Aspirants guident les marauds et pérégrins, leur permettent de résoudre les problèmes auxquels ils sont confrontés, et modèrent tout comportement indésirable. Ils ont pour cela accès à toutes les commandes nécessaires.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Aspirant}}&lt;br /&gt;
&lt;br /&gt;
=== Officier ===&lt;br /&gt;
[[Fichier:Officier grade.png|right|200px]]&lt;br /&gt;
Les Officiers sont là pour protéger les joueurs et font figure d&#039;autorité en cas de conflit ou de manquement aux règles.&lt;br /&gt;
&lt;br /&gt;
Ils ont quasiment les mêmes fonctions que les Intendants : venir en aide aux joueurs et protéger le serveur. C&#039;est principalement du maintien de l&#039;ordre. Ils sont les bras droits des Intendants et font respecter les règles de manière impartiale.&lt;br /&gt;
Ils peuvent bannir, kicker ou mettre en prison les joueurs.&lt;br /&gt;
Ils sont nommés parmi les Aspirants par les Intendants.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Officier}}&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
=== Scriptomancien ===&lt;br /&gt;
[[Fichier:Scriptomancien grade.png|right|200px]]&lt;br /&gt;
Les Scriptomanciens sont les développeurs de Nefald.&lt;br /&gt;
Ils ont pour mission l&#039;entretien et la création de plugins pour la communauté. Ils sont aussi aptes à développer des scripts Denizen/Campaign/etc.&lt;br /&gt;
Selon leurs connaissances, ils pourront être amenés à participer au bon fonctionnement des sites web et du serveur.&lt;br /&gt;
Ils travaillent main dans la main avec les Scribes dans le cercle de l&#039;Animation. Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|Scriptomancien}}&lt;br /&gt;
&lt;br /&gt;
=== Intendant ===&lt;br /&gt;
[[Fichier:Intendant grade.png|right|200px]]&lt;br /&gt;
Un dernier grade, et non des moindres, est celui d&#039;&#039;&#039;&#039;Intendant&#039;&#039;&#039;. Les Intendants sont les administrateurs du serveur, ont toutes les capacités en jeu, mais assument surtout la lourde responsabilité de présider le &#039;&#039;&#039;Conseil&#039;&#039;&#039;, réunissant l&#039;ensemble de l&#039;équipe, afin de prendre des décisions concernant l&#039;avenir de la communauté. On ne postule pas pour devenir Intendant : on est nommé par les Intendants eux-mêmes.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|Intendant}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prérequis ===&lt;br /&gt;
Tous les grades non membres du Conseil ne peuvent être convoités qu&#039;à la condition d&#039;avoir trois semaines d&#039;ancienneté en tant que pérégrin.&lt;br /&gt;
&lt;br /&gt;
Pour les grades du Conseil, trois mois d&#039;ancienneté minimum sont demandés.&lt;br /&gt;
&lt;br /&gt;
;Cumul des grades&lt;br /&gt;
* Il est possible, sur demande particulière d&#039;un membre déjà gradé, d&#039;envisager un cumul de grades dans des branches différentes. (Par exemple, un Aspirant peut demander à rejoindre les rangs des Bâtisseurs.)&lt;br /&gt;
&lt;br /&gt;
== À propos du Conseil ==&lt;br /&gt;
;Sont uniquement considérés comme faisant partie du Conseil :&lt;br /&gt;
Les [[Scribe]]s, les [[Scriptomancien]]s, les [[Officier]]s, les [[Architecte]]s et les [[Intendant]]s.&amp;lt;br/&amp;gt;Ces grades ne sont accessibles que sur nomination des Intendants.&lt;br /&gt;
C&#039;est en priorité à eux que vous devrez vous adresser en cas de besoin, faisant autorité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Devenir membre du Conseil sur Nefald, c&#039;est (presque) comme rentrer en religion ; on devient membre dans le seul et unique but de servir la communauté sur quatre points distincts : &#039;&#039;&#039;l&#039;animation&#039;&#039;&#039;, &#039;&#039;&#039;la construction&#039;&#039;&#039;, &#039;&#039;&#039;la modération&#039;&#039;&#039; et &#039;&#039;&#039;l&#039;administration&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;À chacun son rôle et ses spécificités. Nous attendrons d&#039;un Officier calme et impartialité, d&#039;un Scribe et d&#039;un Scriptomancien une créativité à toute épreuve, d&#039;un Architecte un talent certain pour la construction et d&#039;un Intendant une réflexion claire et une certaine objectivité.&lt;br /&gt;
&lt;br /&gt;
=== L&#039;Agora ===&lt;br /&gt;
D&#039;autres grades, sans faire partie du Conseil, font figure de relais entre celui-ci et les autres joueurs. Ils sont régulièrement consultés lors des prises de décision.&lt;br /&gt;
&lt;br /&gt;
Les grades ayant ces qualités sont ceux de [[Bâtisseur]], de [[Ménestrel]] et d&#039;[[Aspirant]].&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:flowchart TD&lt;br /&gt;
  %% --- Base ---&lt;br /&gt;
  subgraph Base&lt;br /&gt;
    Maraud[&amp;quot;Maraud&amp;quot;]&lt;br /&gt;
    Pelerin[&amp;quot;Pérégrin&amp;quot;]&lt;br /&gt;
    Maraud --&amp;gt; Pelerin&lt;br /&gt;
    Pelerin -. distinction .-&amp;gt; Contremaitre[&amp;quot;Contremaître ✦&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Branches ---&lt;br /&gt;
  subgraph Construction&lt;br /&gt;
    Batisseur[&amp;quot;Bâtisseur&amp;quot;] --&amp;gt; Architecte[&amp;quot;Architecte&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Animation&lt;br /&gt;
    Menestrel[&amp;quot;Ménestrel&amp;quot;] --&amp;gt; Scribe[&amp;quot;Scribe&amp;quot;]&lt;br /&gt;
    Menestrel -. nomination .-&amp;gt; Scriptomancien[&amp;quot;Scriptomancien&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Moderation[&amp;quot;Modération&amp;quot;]&lt;br /&gt;
    Aspirant[&amp;quot;Aspirant&amp;quot;] --&amp;gt; Officier[&amp;quot;Officier&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Administration&lt;br /&gt;
    Intendant[&amp;quot;Intendant&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Entrées en branches depuis Pérégrin ---&lt;br /&gt;
  Pelerin --&amp;gt; Batisseur&lt;br /&gt;
  Pelerin --&amp;gt; Menestrel&lt;br /&gt;
  Pelerin --&amp;gt; Aspirant&lt;br /&gt;
&lt;br /&gt;
  %% --- Nominations vers l&#039;Administration ---&lt;br /&gt;
  Scribe -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Scriptomancien -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Architecte -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Officier -. nomination .-&amp;gt; Intendant&lt;br /&gt;
&lt;br /&gt;
  %% --- Styles ---&lt;br /&gt;
  classDef council fill:#d1f7c4,stroke:#2b8a3e,stroke-width:1px,color:#0b3d1b;&lt;br /&gt;
  classDef agora fill:#fff3bf,stroke:#f59f00,stroke-width:1px,color:#7a4b00;&lt;br /&gt;
  classDef base fill:#e7f5ff,stroke:#1c7ed6,stroke-width:1px,color:#0b2e59;&lt;br /&gt;
&lt;br /&gt;
  class Scribe,Scriptomancien,Architecte,Officier,Intendant council;&lt;br /&gt;
  class Menestrel,Batisseur,Aspirant agora;&lt;br /&gt;
  class Maraud,Pelerin,Contremaitre base;&lt;br /&gt;
&lt;br /&gt;
  subgraph Legende[ ]&lt;br /&gt;
    leg1[Conseil]:::council&lt;br /&gt;
    leg2[Agora — relais]:::agora&lt;br /&gt;
    leg3[Grades de base]:::base&lt;br /&gt;
  end&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Édit de l&#039;Intendance]]&lt;br /&gt;
[[Catégorie:Guide]]&lt;br /&gt;
[[Catégorie:Grade]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Grades&amp;diff=5773</id>
		<title>Grades</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Grades&amp;diff=5773"/>
		<updated>2026-06-05T21:22:35Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Réorganisation grades : Contremaître en distinction, Scriptomancien → Administration (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Les différents grades jouables dans notre communauté.}}&lt;br /&gt;
&lt;br /&gt;
== Général ==&lt;br /&gt;
=== Maraud ===&lt;br /&gt;
[[Fichier:Maraud grade.png|right|200px]]&lt;br /&gt;
Le grade maraud est le grade par défaut, octroyé à tout visiteur. Ils ne peuvent faire que peu de chose sur notre serveur, mis à part parler et visiter.&lt;br /&gt;
{{Article détaillé|[[Maraud]]}}&lt;br /&gt;
&lt;br /&gt;
=== Pérégrin ===&lt;br /&gt;
[[Fichier:Peregrin grade.png|right|200px]]Les pérégrins sont à la base de la communauté de Nefald, notre serveur ne pourrait pas exister sans eux. Les pérégrins méritants peuvent obtenir la distinction de Contremaître, signalée par un préfixe spécial.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Pérégrin]]}}&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
=== Bâtisseur ===&lt;br /&gt;
[[Fichier:Batisseur grade.png|right|200px]]&lt;br /&gt;
Plus proches des architectes, chargés de diriger les contremaîtres sur le chantier, les bâtisseurs ont exactement les mêmes accès que leurs ouvriers, à l&#039;exception du gamemode qui leur permet de se donner du matériel de construction. Ils ont accès au GM1 et donc à des ressources illimitées et peuvent voler.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ce grade est réservé aux pérégrins ayant fait leurs preuves en construction et gestion de projet. Les bâtisseurs restent sous la direction de l&#039;Architecte.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Bâtisseur]]}}&lt;br /&gt;
&lt;br /&gt;
=== Architecte ===&lt;br /&gt;
[[Fichier:Architecte grade.png|right|200px]]&lt;br /&gt;
Les &#039;&#039;&#039;Architectes&#039;&#039;&#039; sont les grands bâtisseurs du Nefald. Ils ont pour mission de bâtir les grandes villes sur le serveur et d&#039;entretenir les infrastructures existantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils dirigent la branche Construction et sont nommés parmi les Bâtisseurs par le Conseil.&lt;br /&gt;
Ils ont accès à [[WorldGuard]] et [[WorldEdit]] en leurs entiers, ainsi qu&#039;à nombre d&#039;autres plugins.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Architecte]]}}&lt;br /&gt;
&lt;br /&gt;
== Animation ==&lt;br /&gt;
=== Ménestrel ===&lt;br /&gt;
[[Fichier:Menestrel grade.png|right|200px]]&lt;br /&gt;
Les ménestrels sont les animateurs de Nefald. Ils peuvent s&#039;orienter en trois activités :&amp;lt;br /&amp;gt;&lt;br /&gt;
- L&#039;événementiel : ils créent des évènements pour divertir les joueurs.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le RolePlay : ils créent du contenu RP et des quêtes.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le développement : ils créent du contenu via les scripts et codes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les ménestrels disposent du /broadcast leur permettant de passer des annonces sur le chat. Ils sont la base de l&#039;animation et sont accessibles par candidature.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Ménestrel]]}}&lt;br /&gt;
&lt;br /&gt;
=== Scribe ===&lt;br /&gt;
[[Fichier:Scribe grade.png|right|200px]]&lt;br /&gt;
Les Scribes sont les dépositaires de notre histoire au travers de ses légendes. Ils rédigent le RolePlay et organisent des événements en conséquence, coordonnent les ménestrels.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils sont choisis pour leurs connaissances du RP, leurs talents événementiels et leurs capacités à diriger l&#039;équipe.&lt;br /&gt;
Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|[[Scribe]]}}&lt;br /&gt;
&lt;br /&gt;
== Modération ==&lt;br /&gt;
=== Aspirant ===&lt;br /&gt;
[[Fichier:Aspirant grade.png|right|200px]]&lt;br /&gt;
Le grade Aspirant est un passage obligatoire dans l&#039;accès au grade Officier. Quiconque souhaite devenir Officier doit d&#039;abord postuler au grade Aspirant et y faire ses preuves.&lt;br /&gt;
Les Aspirants guident les marauds et pérégrins, leur permettent de résoudre les problèmes auxquels ils sont confrontés, et modèrent tout comportement indésirable. Ils ont pour cela accès à toutes les commandes nécessaires.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Aspirant]]}}&lt;br /&gt;
&lt;br /&gt;
=== Officier ===&lt;br /&gt;
[[Fichier:Officier grade.png|right|200px]]&lt;br /&gt;
Les Officiers sont là pour protéger les joueurs et font figure d&#039;autorité en cas de conflit ou de manquement aux règles.&lt;br /&gt;
&lt;br /&gt;
Ils ont quasiment les mêmes fonctions que les Intendants : venir en aide aux joueurs et protéger le serveur. C&#039;est principalement du maintien de l&#039;ordre. Ils sont les bras droits des Intendants et font respecter les règles de manière impartiale.&lt;br /&gt;
Ils peuvent bannir, kicker ou mettre en prison les joueurs.&lt;br /&gt;
Ils sont nommés parmi les Aspirants par les Intendants.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Officier]]}}&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
=== Scriptomancien ===&lt;br /&gt;
[[Fichier:Scriptomancien grade.png|right|200px]]&lt;br /&gt;
Les Scriptomanciens sont les développeurs de Nefald.&lt;br /&gt;
Ils ont pour mission l&#039;entretien et la création de plugins pour la communauté. Ils sont aussi aptes à développer des scripts Denizen/Campaign/etc.&lt;br /&gt;
Selon leurs connaissances, ils pourront être amenés à participer au bon fonctionnement des sites web et du serveur.&lt;br /&gt;
Ils travaillent main dans la main avec les Scribes dans le cercle de l&#039;Animation. Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|[[Scriptomancien]]}}&lt;br /&gt;
&lt;br /&gt;
=== Intendant ===&lt;br /&gt;
[[Fichier:Intendant grade.png|right|200px]]&lt;br /&gt;
Un dernier grade, et non des moindres, est celui d&#039;&#039;&#039;&#039;Intendant&#039;&#039;&#039;. Les Intendants sont les administrateurs du serveur, ont toutes les capacités en jeu, mais assument surtout la lourde responsabilité de présider le &#039;&#039;&#039;Conseil&#039;&#039;&#039;, réunissant l&#039;ensemble de l&#039;équipe, afin de prendre des décisions concernant l&#039;avenir de la communauté. On ne postule pas pour devenir Intendant : on est nommé par les Intendants eux-mêmes.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Intendant]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prérequis ===&lt;br /&gt;
Tous les grades non membres du Conseil ne peuvent être convoités qu&#039;à la condition d&#039;avoir trois semaines d&#039;ancienneté en tant que pérégrin.&lt;br /&gt;
&lt;br /&gt;
Pour les grades du Conseil, trois mois d&#039;ancienneté minimum sont demandés.&lt;br /&gt;
&lt;br /&gt;
;Cumul des grades&lt;br /&gt;
* Il est possible, sur demande particulière d&#039;un membre déjà gradé, d&#039;envisager un cumul de grades dans des branches différentes. (Par exemple, un Aspirant peut demander à rejoindre les rangs des Bâtisseurs.)&lt;br /&gt;
&lt;br /&gt;
== À propos du Conseil ==&lt;br /&gt;
;Sont uniquement considérés comme faisant partie du Conseil :&lt;br /&gt;
Les [[Scribe]]s, les [[Scriptomancien]]s, les [[Officier]]s, les [[Architecte]]s et les [[Intendant]]s.&amp;lt;br/&amp;gt;Ces grades ne sont accessibles que sur nomination des Intendants.&lt;br /&gt;
C&#039;est en priorité à eux que vous devrez vous adresser en cas de besoin, faisant autorité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Devenir membre du Conseil sur Nefald, c&#039;est (presque) comme rentrer en religion ; on devient membre dans le seul et unique but de servir la communauté sur quatre points distincts : &#039;&#039;&#039;l&#039;animation&#039;&#039;&#039;, &#039;&#039;&#039;la construction&#039;&#039;&#039;, &#039;&#039;&#039;la modération&#039;&#039;&#039; et &#039;&#039;&#039;l&#039;administration&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;À chacun son rôle et ses spécificités. Nous attendrons d&#039;un Officier calme et impartialité, d&#039;un Scribe et d&#039;un Scriptomancien une créativité à toute épreuve, d&#039;un Architecte un talent certain pour la construction et d&#039;un Intendant une réflexion claire et une certaine objectivité.&lt;br /&gt;
&lt;br /&gt;
=== L&#039;Agora ===&lt;br /&gt;
D&#039;autres grades, sans faire partie du Conseil, font figure de relais entre celui-ci et les autres joueurs. Ils sont régulièrement consultés lors des prises de décision.&lt;br /&gt;
&lt;br /&gt;
Les grades ayant ces qualités sont ceux de [[Bâtisseur]], de [[Ménestrel]] et d&#039;[[Aspirant]].&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:flowchart TD&lt;br /&gt;
  %% --- Base ---&lt;br /&gt;
  subgraph Base&lt;br /&gt;
    Maraud[&amp;quot;Maraud&amp;quot;]&lt;br /&gt;
    Pelerin[&amp;quot;Pérégrin&amp;quot;]&lt;br /&gt;
    Maraud --&amp;gt; Pelerin&lt;br /&gt;
    Pelerin -. distinction .-&amp;gt; Contremaitre[&amp;quot;Contremaître ✦&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Branches ---&lt;br /&gt;
  subgraph Construction&lt;br /&gt;
    Batisseur[&amp;quot;Bâtisseur&amp;quot;] --&amp;gt; Architecte[&amp;quot;Architecte&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Animation&lt;br /&gt;
    Menestrel[&amp;quot;Ménestrel&amp;quot;] --&amp;gt; Scribe[&amp;quot;Scribe&amp;quot;]&lt;br /&gt;
    Menestrel -. nomination .-&amp;gt; Scriptomancien[&amp;quot;Scriptomancien&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Moderation[&amp;quot;Modération&amp;quot;]&lt;br /&gt;
    Aspirant[&amp;quot;Aspirant&amp;quot;] --&amp;gt; Officier[&amp;quot;Officier&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Administration&lt;br /&gt;
    Intendant[&amp;quot;Intendant&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Entrées en branches depuis Pérégrin ---&lt;br /&gt;
  Pelerin --&amp;gt; Batisseur&lt;br /&gt;
  Pelerin --&amp;gt; Menestrel&lt;br /&gt;
  Pelerin --&amp;gt; Aspirant&lt;br /&gt;
&lt;br /&gt;
  %% --- Nominations vers l&#039;Administration ---&lt;br /&gt;
  Scribe -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Scriptomancien -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Architecte -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Officier -. nomination .-&amp;gt; Intendant&lt;br /&gt;
&lt;br /&gt;
  %% --- Styles ---&lt;br /&gt;
  classDef council fill:#d1f7c4,stroke:#2b8a3e,stroke-width:1px,color:#0b3d1b;&lt;br /&gt;
  classDef agora fill:#fff3bf,stroke:#f59f00,stroke-width:1px,color:#7a4b00;&lt;br /&gt;
  classDef base fill:#e7f5ff,stroke:#1c7ed6,stroke-width:1px,color:#0b2e59;&lt;br /&gt;
&lt;br /&gt;
  class Scribe,Scriptomancien,Architecte,Officier,Intendant council;&lt;br /&gt;
  class Menestrel,Batisseur,Aspirant agora;&lt;br /&gt;
  class Maraud,Pelerin,Contremaitre base;&lt;br /&gt;
&lt;br /&gt;
  subgraph Legende[ ]&lt;br /&gt;
    leg1[Conseil]:::council&lt;br /&gt;
    leg2[Agora — relais]:::agora&lt;br /&gt;
    leg3[Grades de base]:::base&lt;br /&gt;
  end&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Édit de l&#039;Intendance]]&lt;br /&gt;
[[Catégorie:Guide]]&lt;br /&gt;
[[Catégorie:Grade]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Grades&amp;diff=5770</id>
		<title>Grades</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Grades&amp;diff=5770"/>
		<updated>2026-06-02T21:12:34Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Simplification : suppression Machiniste (incomplet), Contremaître reclassé en distinction optionnelle, candidatures archivées (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Les différents grades jouables dans notre communauté.}}&lt;br /&gt;
&lt;br /&gt;
== Général ==&lt;br /&gt;
=== Maraud ===&lt;br /&gt;
[[Fichier:Maraud grade.png|right|200px]]&lt;br /&gt;
Le grade maraud est le grade par défaut, octroyé à tout visiteur. Ils ne peuvent faire que peu de chose sur notre serveur, mis à part parler et visiter.&lt;br /&gt;
{{Article détaillé|[[Maraud]]}}&lt;br /&gt;
&lt;br /&gt;
=== Pérégrin ===&lt;br /&gt;
[[Fichier:Peregrin grade.png|right|200px]]Les pérégrins sont à la base de la communauté de Nefald, notre serveur ne pourrait pas exister sans eux.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Pérégrin]]}}&lt;br /&gt;
&lt;br /&gt;
=== Contremaître ===&lt;br /&gt;
[[Fichier:Contremaitre grade.png|right|200px]]&lt;br /&gt;
Le Contremaître n&#039;est pas un grade de branche à proprement parler, mais une distinction accordée à des pérégrins prometteurs. Elle donne accès à la boussole magique (téléportation) et signale un engagement sérieux dans la Construction ou l&#039;Animation. L&#039;entrée dans une branche reste ouverte à tout pérégrin ; le titre de Contremaître est un signe de confiance supplémentaire, pas un prérequis.&lt;br /&gt;
{{Article détaillé|[[Contremaître]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
=== Bâtisseur ===&lt;br /&gt;
[[Fichier:Batisseur grade.png|right|200px]]&lt;br /&gt;
Plus proches des architectes, chargés de diriger les contremaîtres sur le chantier, les bâtisseurs ont exactement les mêmes accès que leurs ouvriers, à l&#039;exception du gamemode qui leur permet de se donner du matériel de construction. Ils ont accès au GM1 et donc à des ressources illimitées et peuvent voler.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ce grade est réservé aux pérégrins ayant fait leurs preuves en construction et gestion de projet. Les bâtisseurs restent sous la direction de l&#039;Architecte.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Bâtisseur]]}}&lt;br /&gt;
&lt;br /&gt;
=== Architecte ===&lt;br /&gt;
[[Fichier:Architecte grade.png|right|200px]]&lt;br /&gt;
Les &#039;&#039;&#039;Architectes&#039;&#039;&#039; sont les grands bâtisseurs du Nefald. Ils ont pour mission de bâtir les grandes villes sur le serveur et d&#039;entretenir les infrastructures existantes.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils dirigent la branche Construction et sont nommés parmi les Bâtisseurs par le Conseil.&lt;br /&gt;
Ils ont accès à [[WorldGuard]] et [[WorldEdit]] en leurs entiers, ainsi qu&#039;à nombre d&#039;autres plugins.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Architecte]]}}&lt;br /&gt;
&lt;br /&gt;
== Animation ==&lt;br /&gt;
=== Ménestrel ===&lt;br /&gt;
[[Fichier:Menestrel grade.png|right|200px]]&lt;br /&gt;
Les ménestrels sont les animateurs de Nefald. Ils peuvent s&#039;orienter en trois activités :&amp;lt;br /&amp;gt;&lt;br /&gt;
- L&#039;événementiel : ils créent des évènements pour divertir les joueurs.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le RolePlay : ils créent du contenu RP et des quêtes.&amp;lt;br /&amp;gt;&lt;br /&gt;
- Le développement : ils créent du contenu via les scripts et codes.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les ménestrels disposent du /broadcast leur permettant de passer des annonces sur le chat. Ils sont la base de l&#039;animation et sont accessibles par candidature.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Ménestrel]]}}&lt;br /&gt;
&lt;br /&gt;
=== Scribe ===&lt;br /&gt;
[[Fichier:Scribe grade.png|right|200px]]&lt;br /&gt;
Les Scribes sont les dépositaires de notre histoire au travers de ses légendes. Ils rédigent le RolePlay et organisent des événements en conséquence, coordonnent les ménestrels.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ils sont choisis pour leurs connaissances du RP, leurs talents événementiels et leurs capacités à diriger l&#039;équipe.&lt;br /&gt;
Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|[[Scribe]]}}&lt;br /&gt;
&lt;br /&gt;
=== Scriptomancien ===&lt;br /&gt;
[[Fichier:Scriptomancien grade.png|right|200px]]&lt;br /&gt;
Les Scriptomanciens sont les développeurs de Nefald.&lt;br /&gt;
Ils ont pour mission l&#039;entretien et la création de plugins pour la communauté. Ils sont aussi aptes à développer des scripts Denizen/Campaign/etc.&lt;br /&gt;
Selon leurs connaissances, ils pourront être amenés à participer au bon fonctionnement des sites web et du serveur.&lt;br /&gt;
Ils travaillent main dans la main avec les Scribes dans le cercle de l&#039;Animation. Ils sont nommés par le Conseil.&lt;br /&gt;
{{Article détaillé|[[Scriptomancien]]}}&lt;br /&gt;
&lt;br /&gt;
== Modération ==&lt;br /&gt;
=== Aspirant ===&lt;br /&gt;
[[Fichier:Aspirant grade.png|right|200px]]&lt;br /&gt;
Le grade Aspirant est un passage obligatoire dans l&#039;accès au grade Officier. Quiconque souhaite devenir Officier doit d&#039;abord postuler au grade Aspirant et y faire ses preuves.&lt;br /&gt;
Les Aspirants guident les marauds et pérégrins, leur permettent de résoudre les problèmes auxquels ils sont confrontés, et modèrent tout comportement indésirable. Ils ont pour cela accès à toutes les commandes nécessaires.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Aspirant]]}}&lt;br /&gt;
&lt;br /&gt;
=== Officier ===&lt;br /&gt;
[[Fichier:Officier grade.png|right|200px]]&lt;br /&gt;
Les Officiers sont là pour protéger les joueurs et font figure d&#039;autorité en cas de conflit ou de manquement aux règles.&lt;br /&gt;
&lt;br /&gt;
Ils ont quasiment les mêmes fonctions que les Intendants : venir en aide aux joueurs et protéger le serveur. C&#039;est principalement du maintien de l&#039;ordre. Ils sont les bras droits des Intendants et font respecter les règles de manière impartiale.&lt;br /&gt;
Ils peuvent bannir, kicker ou mettre en prison les joueurs.&lt;br /&gt;
Ils sont nommés parmi les Aspirants par les Intendants.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Officier]]}}&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
=== Intendant ===&lt;br /&gt;
[[Fichier:Intendant grade.png|right|200px]]&lt;br /&gt;
Un dernier grade, et non des moindres, est celui d&#039;&#039;&#039;&#039;Intendant&#039;&#039;&#039;. Les Intendants sont les administrateurs du serveur, ont toutes les capacités en jeu, mais assument surtout la lourde responsabilité de présider le &#039;&#039;&#039;Conseil&#039;&#039;&#039;, réunissant l&#039;ensemble de l&#039;équipe, afin de prendre des décisions concernant l&#039;avenir de la communauté. On ne postule pas pour devenir Intendant : on est nommé par les Intendants eux-mêmes.&lt;br /&gt;
&lt;br /&gt;
{{Article détaillé|[[Intendant]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Prérequis ===&lt;br /&gt;
Tous les grades non membres du Conseil ne peuvent être convoités qu&#039;à la condition d&#039;avoir trois semaines d&#039;ancienneté en tant que pérégrin.&lt;br /&gt;
&lt;br /&gt;
Pour les grades du Conseil, trois mois d&#039;ancienneté minimum sont demandés.&lt;br /&gt;
&lt;br /&gt;
;Cumul des grades&lt;br /&gt;
* Il est possible, sur demande particulière d&#039;un membre déjà gradé, d&#039;envisager un cumul de grades dans des branches différentes. (Par exemple, un Aspirant peut demander à rejoindre les rangs des Bâtisseurs.)&lt;br /&gt;
&lt;br /&gt;
== À propos du Conseil ==&lt;br /&gt;
;Sont uniquement considérés comme faisant partie du Conseil :&lt;br /&gt;
Les [[Scribe]]s, les [[Scriptomancien]]s, les [[Officier]]s, les [[Architecte]]s et les [[Intendant]]s.&amp;lt;br/&amp;gt;Ces grades ne sont accessibles que sur nomination des Intendants.&lt;br /&gt;
C&#039;est en priorité à eux que vous devrez vous adresser en cas de besoin, faisant autorité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Devenir membre du Conseil sur Nefald, c&#039;est (presque) comme rentrer en religion ; on devient membre dans le seul et unique but de servir la communauté sur quatre points distincts : &#039;&#039;&#039;l&#039;animation&#039;&#039;&#039;, &#039;&#039;&#039;la construction&#039;&#039;&#039;, &#039;&#039;&#039;la modération&#039;&#039;&#039; et &#039;&#039;&#039;l&#039;administration&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;À chacun son rôle et ses spécificités. Nous attendrons d&#039;un Officier calme et impartialité, d&#039;un Scribe et d&#039;un Scriptomancien une créativité à toute épreuve, d&#039;un Architecte un talent certain pour la construction et d&#039;un Intendant une réflexion claire et une certaine objectivité.&lt;br /&gt;
&lt;br /&gt;
=== L&#039;Agora ===&lt;br /&gt;
D&#039;autres grades, sans faire partie du Conseil, font figure de relais entre celui-ci et les autres joueurs. Ils sont régulièrement consultés lors des prises de décision.&lt;br /&gt;
&lt;br /&gt;
Les grades ayant ces qualités sont ceux de [[Bâtisseur]], de [[Ménestrel]] et d&#039;[[Aspirant]].&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:flowchart TD&lt;br /&gt;
  %% --- Base ---&lt;br /&gt;
  subgraph Base&lt;br /&gt;
    Maraud[&amp;quot;Maraud&amp;quot;]&lt;br /&gt;
    Pelerin[&amp;quot;Pérégrin&amp;quot;]&lt;br /&gt;
    Maraud --&amp;gt; Pelerin&lt;br /&gt;
    Pelerin -. distinction .-&amp;gt; Contremaitre[&amp;quot;Contremaître ✦&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Branches ---&lt;br /&gt;
  subgraph Construction&lt;br /&gt;
    Batisseur[&amp;quot;Bâtisseur&amp;quot;] --&amp;gt; Architecte[&amp;quot;Architecte&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Animation&lt;br /&gt;
    Menestrel[&amp;quot;Ménestrel&amp;quot;] --&amp;gt; Scribe[&amp;quot;Scribe&amp;quot;]&lt;br /&gt;
    Menestrel -. nomination .-&amp;gt; Scriptomancien[&amp;quot;Scriptomancien&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Moderation[&amp;quot;Modération&amp;quot;]&lt;br /&gt;
    Aspirant[&amp;quot;Aspirant&amp;quot;] --&amp;gt; Officier[&amp;quot;Officier&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  subgraph Administration&lt;br /&gt;
    Intendant[&amp;quot;Intendant&amp;quot;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  %% --- Entrées en branches depuis Pérégrin ---&lt;br /&gt;
  Pelerin --&amp;gt; Batisseur&lt;br /&gt;
  Pelerin --&amp;gt; Menestrel&lt;br /&gt;
  Pelerin --&amp;gt; Aspirant&lt;br /&gt;
&lt;br /&gt;
  %% --- Nominations vers l&#039;Administration ---&lt;br /&gt;
  Scribe -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Scriptomancien -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Architecte -. nomination .-&amp;gt; Intendant&lt;br /&gt;
  Officier -. nomination .-&amp;gt; Intendant&lt;br /&gt;
&lt;br /&gt;
  %% --- Styles ---&lt;br /&gt;
  classDef council fill:#d1f7c4,stroke:#2b8a3e,stroke-width:1px,color:#0b3d1b;&lt;br /&gt;
  classDef agora fill:#fff3bf,stroke:#f59f00,stroke-width:1px,color:#7a4b00;&lt;br /&gt;
  classDef base fill:#e7f5ff,stroke:#1c7ed6,stroke-width:1px,color:#0b2e59;&lt;br /&gt;
&lt;br /&gt;
  class Scribe,Scriptomancien,Architecte,Officier,Intendant council;&lt;br /&gt;
  class Menestrel,Batisseur,Aspirant agora;&lt;br /&gt;
  class Maraud,Pelerin,Contremaitre base;&lt;br /&gt;
&lt;br /&gt;
  subgraph Legende[ ]&lt;br /&gt;
    leg1[Conseil]:::council&lt;br /&gt;
    leg2[Agora — relais]:::agora&lt;br /&gt;
    leg3[Grades de base]:::base&lt;br /&gt;
  end&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Catégorie:Édit de l&#039;Intendance]]&lt;br /&gt;
[[Catégorie:Guide]]&lt;br /&gt;
[[Catégorie:Grade]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5769</id>
		<title>Plugin:DiscordBridge/Lands</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5769"/>
		<updated>2026-04-04T08:55:44Z</updated>

		<summary type="html">&lt;p&gt;Hiob : channel discord&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lands ==&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Se rendre dans {{Discord|id=1489710188666814564|nom=lands}} et exécutez les commandes ci-dessous.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs, Lands. Seuls les membres du Land qui ont liés leur compte Minecraft &amp;gt; Discord, peuvent y accéder. &lt;br /&gt;
Les Ops du serveur Discord ont accès à tous les salons. }}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5768</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5768"/>
		<updated>2026-04-04T08:50:47Z</updated>

		<summary type="html">&lt;p&gt;Hiob : compatibilité&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
| compatibilité = [[Lands]], [[LuckPerms]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour tous les joueurs ==&lt;br /&gt;
==== Commandes en jeu ====&lt;br /&gt;
{{Plugin:DiscordBridge/Commandes}}&lt;br /&gt;
{{Plugin:DiscordBridge/Lier_son_compte}}&lt;br /&gt;
{{Plugin:DiscordBridge/Lands}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Créer une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Activer les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copier le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et le coller dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour que les messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour pouvoir créer un salon Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplacer &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Les synchronisations ne fonctionnent que dans un seul sens selon le paramètre configuré.}}&lt;br /&gt;
&lt;br /&gt;
===== Sens de synchronisation =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Paramètre !! Sens !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || Minecraft → Discord || Le joueur reçoit un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement lorsqu&#039;il lie son compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || Discord → Minecraft || Le joueur reçoit un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon son rôle Discord au moment de la liaison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ces deux paramètres sont indépendants. Les configurer simultanément peut créer des &#039;&#039;&#039;boucles logiques involontaires&#039;&#039;&#039; ou des attributions redondantes. Il est recommandé de n&#039;en utiliser qu&#039;un seul selon l&#039;architecture choisie.}}&lt;br /&gt;
&lt;br /&gt;
=== Architecture recommandée ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cas d&#039;usage !! Paramètre à utiliser !! Paramètre à éviter&lt;br /&gt;
|-&lt;br /&gt;
| Gérer les grades depuis Discord || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Donner un badge Discord aux joueurs liés || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation complète bidirectionnelle || Non supporté nativement || —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|DiscordBridge ne supporte pas la synchronisation bidirectionnelle native. Utiliser les deux paramètres simultanément est possible mais doit être fait consciemment pour éviter les conflits de permissions.}}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécuter &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/lands.yml&amp;lt;/code&amp;gt; || Configuration du module Lands&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/tickets.yml&amp;lt;/code&amp;gt; || Configuration du module Tickets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5767</id>
		<title>Plugin:DiscordBridge/Lands</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5767"/>
		<updated>2026-04-04T08:49:19Z</updated>

		<summary type="html">&lt;p&gt;Hiob : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lands ==&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs, Lands. Seuls les membres du Land qui ont liés leur compte Minecraft &amp;gt; Discord, peuvent y accéder. &lt;br /&gt;
Les Ops du serveur Discord ont accès à tous les salons. }}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lier_son_compte&amp;diff=5766</id>
		<title>Plugin:DiscordBridge/Lier son compte</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lier_son_compte&amp;diff=5766"/>
		<updated>2026-04-04T08:37:59Z</updated>

		<summary type="html">&lt;p&gt;Hiob : lien discord&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison entre votre compte Minecraft et Discord permet une synchronisation automatique des rôles.&lt;br /&gt;
Sur Nefald, la synchronisation se fait dans le sens &#039;&#039;&#039;Discord → Minecraft&#039;&#039;&#039; : les rôles Discord déterminent les groupes attribués en jeu.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|En cas de changement de pseudo ou de rôle sur Discord, la synchronisation n&#039;est pas immédiate — elle s&#039;effectue automatiquement de façon planifiée.}}&lt;br /&gt;
&lt;br /&gt;
==== Étapes ====&lt;br /&gt;
&lt;br /&gt;
# Connectez-vous au serveur Minecraft.&lt;br /&gt;
# Exécutez la commande &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suivez les instructions affichées dans le chat : un code et une commande Discord vous seront fournis.&lt;br /&gt;
# Sur {{Discord|id=1398359022951858196|nom=account-linking}}, envoyez la commande indiquée au bot pour finaliser la liaison.&lt;br /&gt;
# Vos rôles Discord et groupes en jeu sont alors attribués automatiquement.&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=DiscordBridge&amp;diff=5765</id>
		<title>DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=DiscordBridge&amp;diff=5765"/>
		<updated>2026-04-04T08:03:08Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Page redirigée vers Plugin:DiscordBridge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTION [[Plugin:DiscordBridge]]&lt;br /&gt;
&lt;br /&gt;
__AUCUNSOMMAIRE__&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5764</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5764"/>
		<updated>2026-04-04T08:01:49Z</updated>

		<summary type="html">&lt;p&gt;Hiob : transclusion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour tous les joueurs ==&lt;br /&gt;
==== Commandes en jeu ====&lt;br /&gt;
{{Plugin:DiscordBridge/Commandes}}&lt;br /&gt;
{{Plugin:DiscordBridge/Lier_son_compte}}&lt;br /&gt;
{{Plugin:DiscordBridge/Lands}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Créer une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Activer les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copier le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et le coller dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour que les messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour pouvoir créer un salon Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplacer &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Les synchronisations ne fonctionnent que dans un seul sens selon le paramètre configuré.}}&lt;br /&gt;
&lt;br /&gt;
===== Sens de synchronisation =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Paramètre !! Sens !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || Minecraft → Discord || Le joueur reçoit un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement lorsqu&#039;il lie son compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || Discord → Minecraft || Le joueur reçoit un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon son rôle Discord au moment de la liaison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ces deux paramètres sont indépendants. Les configurer simultanément peut créer des &#039;&#039;&#039;boucles logiques involontaires&#039;&#039;&#039; ou des attributions redondantes. Il est recommandé de n&#039;en utiliser qu&#039;un seul selon l&#039;architecture choisie.}}&lt;br /&gt;
&lt;br /&gt;
=== Architecture recommandée ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cas d&#039;usage !! Paramètre à utiliser !! Paramètre à éviter&lt;br /&gt;
|-&lt;br /&gt;
| Gérer les grades depuis Discord || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Donner un badge Discord aux joueurs liés || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation complète bidirectionnelle || Non supporté nativement || —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|DiscordBridge ne supporte pas la synchronisation bidirectionnelle native. Utiliser les deux paramètres simultanément est possible mais doit être fait consciemment pour éviter les conflits de permissions.}}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécuter &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/lands.yml&amp;lt;/code&amp;gt; || Configuration du module Lands&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/tickets.yml&amp;lt;/code&amp;gt; || Configuration du module Tickets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5763</id>
		<title>Plugin:DiscordBridge/Lands</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lands&amp;diff=5763"/>
		<updated>2026-04-04T08:01:23Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Page créée avec « === Créer un salon Discord pour sa Land ===  Les &amp;#039;&amp;#039;&amp;#039;propriétaires d&amp;#039;une Land ou d&amp;#039;une Nation&amp;#039;&amp;#039;&amp;#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.  ==== Conditions requises ====  * Être propriétaire ou disposer des droits sur une Land / Nation. * Avoir son compte Minecraft lié à son compte Discord — voir Lier son compte Discord. * Le plugin Lands doit être installé sur le serveur.  ====... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lier_son_compte&amp;diff=5762</id>
		<title>Plugin:DiscordBridge/Lier son compte</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Lier_son_compte&amp;diff=5762"/>
		<updated>2026-04-04T07:58:32Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Page créée avec « === Lier son compte Discord ===  La liaison entre votre compte Minecraft et Discord permet une synchronisation automatique des rôles. Sur Nefald, la synchronisation se fait dans le sens &amp;#039;&amp;#039;&amp;#039;Discord → Minecraft&amp;#039;&amp;#039;&amp;#039; : les rôles Discord déterminent les groupes attribués en jeu.  {{Bandeau|type=info|En cas de changement de pseudo ou de rôle sur Discord, la synchronisation n&amp;#039;est pas immédiate — elle s&amp;#039;effectue automatiquement de façon planifiée.}}  ==== Éta... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison entre votre compte Minecraft et Discord permet une synchronisation automatique des rôles.&lt;br /&gt;
Sur Nefald, la synchronisation se fait dans le sens &#039;&#039;&#039;Discord → Minecraft&#039;&#039;&#039; : les rôles Discord déterminent les groupes attribués en jeu.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|En cas de changement de pseudo ou de rôle sur Discord, la synchronisation n&#039;est pas immédiate — elle s&#039;effectue automatiquement de façon planifiée.}}&lt;br /&gt;
&lt;br /&gt;
==== Étapes ====&lt;br /&gt;
&lt;br /&gt;
# Connectez-vous au serveur Minecraft.&lt;br /&gt;
# Exécutez la commande &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suivez les instructions affichées dans le chat : un code et une commande Discord vous seront fournis.&lt;br /&gt;
# Sur Discord, envoyez la commande indiquée au bot pour finaliser la liaison.&lt;br /&gt;
# Vos rôles Discord et groupes in-game sont alors attribués automatiquement.&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Commandes&amp;diff=5761</id>
		<title>Plugin:DiscordBridge/Commandes</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge/Commandes&amp;diff=5761"/>
		<updated>2026-04-04T07:48:40Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Page créée avec « {| class=&amp;quot;wikitable&amp;quot; ! Commande !! Description !! Permission |- | &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt; |- | &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt; |- | &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&amp;#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invit... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5760</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5760"/>
		<updated>2026-04-04T06:05:49Z</updated>

		<summary type="html">&lt;p&gt;Hiob : +&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour tous les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
Selon la configuration du serveur, la liaison peut :&lt;br /&gt;
* Attribuer un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement (sync Minecraft → Discord)&lt;br /&gt;
* Attribuer un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon ton rôle Discord (sync Discord → Minecraft)&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Sur Nefald la synchronisation se fait de Discord → Minecraft.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Se connecter au serveur Minecraft.&lt;br /&gt;
# Exécuter &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suivre les instructions affichées dans le chat (un code ou un lien sera fourni).&lt;br /&gt;
# Sur Discord, compléter la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois le compte lié, les rôles Discord et groupes in-game configurés par les administrateurs sont attribués automatiquement.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau |type=info|En cas de changement de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Créer une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Activer les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copier le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et le coller dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour que les messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour pouvoir créer un salon Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplacer &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Les synchronisations ne fonctionnent que dans un seul sens selon le paramètre configuré.}}&lt;br /&gt;
&lt;br /&gt;
===== Sens de synchronisation =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Paramètre !! Sens !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || Minecraft → Discord || Le joueur reçoit un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement lorsqu&#039;il lie son compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || Discord → Minecraft || Le joueur reçoit un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon son rôle Discord au moment de la liaison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ces deux paramètres sont indépendants. Les configurer simultanément peut créer des &#039;&#039;&#039;boucles logiques involontaires&#039;&#039;&#039; ou des attributions redondantes. Il est recommandé de n&#039;en utiliser qu&#039;un seul selon l&#039;architecture choisie.}}&lt;br /&gt;
&lt;br /&gt;
=== Architecture recommandée ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cas d&#039;usage !! Paramètre à utiliser !! Paramètre à éviter&lt;br /&gt;
|-&lt;br /&gt;
| Gérer les grades depuis Discord || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Donner un badge Discord aux joueurs liés || &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Synchronisation complète bidirectionnelle || Non supporté nativement || —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|DiscordBridge ne supporte pas la synchronisation bidirectionnelle native. Utiliser les deux paramètres simultanément est possible mais doit être fait consciemment pour éviter les conflits de permissions.}}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécuter &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/lands.yml&amp;lt;/code&amp;gt; || Configuration du module Lands&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/tickets.yml&amp;lt;/code&amp;gt; || Configuration du module Tickets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5759</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5759"/>
		<updated>2026-04-04T06:02:21Z</updated>

		<summary type="html">&lt;p&gt;Hiob : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
Selon la configuration du serveur, la liaison peut :&lt;br /&gt;
* Attribuer un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement (sync Minecraft → Discord)&lt;br /&gt;
* Attribuer un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon ton rôle Discord (sync Discord → Minecraft)&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Sur Nefald la synchronisation se fait de Discord → Minecraft.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Se connecter au serveur Minecraft.&lt;br /&gt;
# Exécuter &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suivre les instructions affichées dans le chat (un code ou un lien sera fourni).&lt;br /&gt;
# Sur Discord, compléter la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois le compte lié, les rôles Discord et groupes in-game configurés par les administrateurs sont attribués automatiquement.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau |type=info|En cas de changement de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Créer une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Activer les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copier le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et le coller dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour que les messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour pouvoir créer un salon Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplacer &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Les synchronisations ne fonctionnent que dans un seul sens selon le paramètre configuré.}}&lt;br /&gt;
&lt;br /&gt;
===== Sens de synchronisation =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Paramètre !! Sens !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_roles add&amp;lt;/code&amp;gt; || Minecraft → Discord || Le joueur reçoit un &#039;&#039;&#039;rôle Discord&#039;&#039;&#039; automatiquement lorsqu&#039;il lie son compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linking_groups add&amp;lt;/code&amp;gt; || Discord → Minecraft || Le joueur reçoit un &#039;&#039;&#039;groupe LuckPerms&#039;&#039;&#039; in-game selon son rôle Discord au moment de la liaison&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ces deux paramètres sont indépendants. Les configurer simultanément peut créer des &#039;&#039;&#039;boucles logiques involontaires&#039;&#039;&#039; ou des attributions redondantes. Il est recommandé de n&#039;en utiliser qu&#039;un seul selon l&#039;architecture choisie.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécuter &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5758</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5758"/>
		<updated>2026-04-04T05:53:29Z</updated>

		<summary type="html">&lt;p&gt;Hiob : ton neutre&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison de compte associe un compte Minecraft à un compte Discord.&lt;br /&gt;
Elle peut débloquer des rôles Discord automatiques, des groupes in-game et d&#039;autres avantages selon la configuration du serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Se connecter au serveur Minecraft.&lt;br /&gt;
# Exécuter &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suivre les instructions affichées dans le chat (un code ou un lien sera fourni).&lt;br /&gt;
# Sur Discord, compléter la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois le compte lié, les rôles Discord et groupes in-game configurés par les administrateurs sont attribués automatiquement.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau |type=info|En cas de changement de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;&#039;propriétaires d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039; peuvent créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou disposer des droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour la Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Créer une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Activer les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copier le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et le coller dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour que les messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Le compte Minecraft doit être lié à Discord pour pouvoir créer un salon Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplacer &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_allowed_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Restreint la liaison aux joueurs ayant ce rôle Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_roles add&amp;lt;/code&amp;gt; || Ajoute un rôle Discord attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_groups add&amp;lt;/code&amp;gt; || Ajoute un groupe LuckPerms attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_name_sync_ignore_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Exclut les utilisateurs ayant ce rôle de la synchronisation de nom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécuter &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5757</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5757"/>
		<updated>2026-04-04T05:37:29Z</updated>

		<summary type="html">&lt;p&gt;Hiob : /* Commandes Discord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison de compte associe ton compte Minecraft à ton compte Discord.&lt;br /&gt;
Elle peut débloquer des rôles Discord automatiques, des groupes in-game et d&#039;autres avantages selon la configuration du serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Connecte-toi au serveur Minecraft.&lt;br /&gt;
# Exécute &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suis les instructions affichées dans le chat (un code ou un lien te sera fourni).&lt;br /&gt;
# Sur Discord, complète la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois lié, tu reçois automatiquement les rôles Discord et groupes in-game configurés par les administrateurs.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau |type=info|Si vous changez de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Si tu es &#039;&#039;&#039;propriétaire d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039;, tu peux créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou avoir les droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Crée une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Active les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copie le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et colle-le dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Votre compte Minecraft doit être lié à Discord pour que vos messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Votre compte Minecraft doit être lié à Discord pour que vous puissiez créer votre channel Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplace &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_allowed_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Restreint la liaison aux joueurs ayant ce rôle Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_roles add&amp;lt;/code&amp;gt; || Ajoute un rôle Discord attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_groups add&amp;lt;/code&amp;gt; || Ajoute un groupe LuckPerms attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_name_sync_ignore_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Exclut les utilisateurs ayant ce rôle de la synchronisation de nom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécute &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5756</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5756"/>
		<updated>2026-04-04T05:37:03Z</updated>

		<summary type="html">&lt;p&gt;Hiob : bandeaux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison de compte associe ton compte Minecraft à ton compte Discord.&lt;br /&gt;
Elle peut débloquer des rôles Discord automatiques, des groupes in-game et d&#039;autres avantages selon la configuration du serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Connecte-toi au serveur Minecraft.&lt;br /&gt;
# Exécute &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suis les instructions affichées dans le chat (un code ou un lien te sera fourni).&lt;br /&gt;
# Sur Discord, complète la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois lié, tu reçois automatiquement les rôles Discord et groupes in-game configurés par les administrateurs.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau |type=info|Si vous changez de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Si tu es &#039;&#039;&#039;propriétaire d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039;, tu peux créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou avoir les droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Crée une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Active les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copie le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et colle-le dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Votre compte Minecraft doit être lié à Discord pour que vos messages se synchronisent.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Votre compte Minecraft doit être lié à Discord pour que vous puissiez créer votre channel Lands.}}&lt;br /&gt;
{{Bandeau|type=info|Remplace &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_allowed_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Restreint la liaison aux joueurs ayant ce rôle Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_roles add&amp;lt;/code&amp;gt; || Ajoute un rôle Discord attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_groups add&amp;lt;/code&amp;gt; || Ajoute un groupe LuckPerms attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_name_sync_ignore_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Exclut les utilisateurs ayant ce rôle de la synchronisation de nom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécute &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5755</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5755"/>
		<updated>2026-04-03T13:39:25Z</updated>

		<summary type="html">&lt;p&gt;Hiob : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SHORTDESC:Plugin d&#039;intégration entre Minecraft et Discord}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison de compte associe ton compte Minecraft à ton compte Discord.&lt;br /&gt;
Elle peut débloquer des rôles Discord automatiques, des groupes in-game et d&#039;autres avantages selon la configuration du serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Connecte-toi au serveur Minecraft.&lt;br /&gt;
# Exécute &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suis les instructions affichées dans le chat (un code ou un lien te sera fourni).&lt;br /&gt;
# Sur Discord, complète la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois lié, tu reçois automatiquement les rôles Discord et groupes in-game configurés par les administrateurs.&lt;br /&gt;
&lt;br /&gt;
{{Note|Si tu changes de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Si tu es &#039;&#039;&#039;propriétaire d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039;, tu peux créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou avoir les droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Crée une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Active les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copie le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et colle-le dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ne partage jamais le token de ton bot. En cas de fuite, régénère-le immédiatement depuis le portail développeur Discord.}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Remplace &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_allowed_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Restreint la liaison aux joueurs ayant ce rôle Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_roles add&amp;lt;/code&amp;gt; || Ajoute un rôle Discord attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_groups add&amp;lt;/code&amp;gt; || Ajoute un groupe LuckPerms attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_name_sync_ignore_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Exclut les utilisateurs ayant ce rôle de la synchronisation de nom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécute &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
	<entry>
		<id>https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5754</id>
		<title>Plugin:DiscordBridge</title>
		<link rel="alternate" type="text/html" href="https://wiki.nefald.fr/index.php?title=Plugin:DiscordBridge&amp;diff=5754"/>
		<updated>2026-04-03T09:50:49Z</updated>

		<summary type="html">&lt;p&gt;Hiob : Page créée avec « {{Infobox Plugin | nom     = DiscordBridge | image   = Plugin_without_Logo.png | type    = Utilitaire | dev     = incredibleplugins | docs    = https://wiki.incredibleplugins.com/discordbridge | sources =  | grade   =  | status  = installé }}   &amp;#039;&amp;#039;&amp;#039;DiscordBridge&amp;#039;&amp;#039;&amp;#039; est un plugin d&amp;#039;intégration entre le serveur Minecraft et le serveur Discord. Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes, la gestion de tickets, les not... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Plugin&lt;br /&gt;
| nom     = DiscordBridge&lt;br /&gt;
| image   = Plugin_without_Logo.png&lt;br /&gt;
| type    = Utilitaire&lt;br /&gt;
| dev     = incredibleplugins&lt;br /&gt;
| docs    = https://wiki.incredibleplugins.com/discordbridge&lt;br /&gt;
| sources = &lt;br /&gt;
| grade   = &lt;br /&gt;
| status  = installé&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DiscordBridge&#039;&#039;&#039; est un plugin d&#039;intégration entre le serveur Minecraft et le serveur Discord.&lt;br /&gt;
Il relie les deux plateformes en offrant la synchronisation du chat, la liaison de comptes,&lt;br /&gt;
la gestion de tickets, les notifications d&#039;événements et l&#039;intégration avec le plugin [[Lands]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pour les joueurs ==&lt;br /&gt;
&lt;br /&gt;
=== Lier son compte Discord ===&lt;br /&gt;
&lt;br /&gt;
La liaison de compte associe ton compte Minecraft à ton compte Discord.&lt;br /&gt;
Elle peut débloquer des rôles Discord automatiques, des groupes in-game et d&#039;autres avantages selon la configuration du serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes in-game ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; || Lier son compte Discord à son compte Minecraft || &amp;lt;code&amp;gt;discordbridge.command.account.link&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account unlink&amp;lt;/code&amp;gt; || Délier son compte Discord || &amp;lt;code&amp;gt;discordbridge.command.account.unlink&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge invite&amp;lt;/code&amp;gt; || Obtenir le lien d&#039;invitation du serveur Discord || &amp;lt;code&amp;gt;discordbridge.command.invite&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge help [page]&amp;lt;/code&amp;gt; || Afficher l&#039;aide des commandes disponibles || &amp;lt;code&amp;gt;discordbridge.command.help&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Étapes pour lier son compte ====&lt;br /&gt;
&lt;br /&gt;
# Connecte-toi au serveur Minecraft.&lt;br /&gt;
# Exécute &amp;lt;code&amp;gt;/discordbridge account link&amp;lt;/code&amp;gt; en jeu.&lt;br /&gt;
# Suis les instructions affichées dans le chat (un code ou un lien te sera fourni).&lt;br /&gt;
# Sur Discord, complète la liaison en suivant les instructions du bot.&lt;br /&gt;
# Une fois lié, tu reçois automatiquement les rôles Discord et groupes in-game configurés par les administrateurs.&lt;br /&gt;
&lt;br /&gt;
{{Note|Si tu changes de pseudo Discord, la synchronisation du nom peut être automatique selon la configuration du serveur.}}&lt;br /&gt;
&lt;br /&gt;
=== Créer un salon Discord pour sa Land ===&lt;br /&gt;
&lt;br /&gt;
Si tu es &#039;&#039;&#039;propriétaire d&#039;une Land ou d&#039;une Nation&#039;&#039;&#039;, tu peux créer un salon textuel et vocal dédié directement dans le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
==== Conditions requises ====&lt;br /&gt;
&lt;br /&gt;
* Être propriétaire ou avoir les droits sur une Land / Nation.&lt;br /&gt;
* Avoir son compte Minecraft lié à son compte Discord — voir [[#Lier son compte Discord|Lier son compte Discord]].&lt;br /&gt;
* Le plugin [[Lands]] doit être installé sur le serveur.&lt;br /&gt;
&lt;br /&gt;
==== Commandes Discord ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/lands channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Land&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/nations channel create&amp;lt;/code&amp;gt; || Crée un salon Discord pour ta Nation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Les salons sont créés dans la catégorie définie par les administrateurs. Si aucune catégorie n&#039;est configurée, ils apparaissent à la racine du serveur Discord.}}&lt;br /&gt;
&lt;br /&gt;
== Pour les administrateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et configuration du bot ===&lt;br /&gt;
&lt;br /&gt;
==== Prérequis ====&lt;br /&gt;
&lt;br /&gt;
# Crée une application Discord sur le [https://discord.com/developers/applications Portail Développeur Discord].&lt;br /&gt;
# Active les &#039;&#039;&#039;Intents&#039;&#039;&#039; suivants dans l&#039;onglet &#039;&#039;Bot&#039;&#039; :&lt;br /&gt;
#* &#039;&#039;&#039;Server Members Intent&#039;&#039;&#039;&lt;br /&gt;
#* &#039;&#039;&#039;Message Content Intent&#039;&#039;&#039;&lt;br /&gt;
# Lors de l&#039;invitation du bot, les &#039;&#039;&#039;scopes requis&#039;&#039;&#039; sont :&lt;br /&gt;
#* &amp;lt;code&amp;gt;applications.commands&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;bot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Le bot doit disposer des permissions Discord suivantes :&lt;br /&gt;
#* Gérer les salons&lt;br /&gt;
#* Gérer les webhooks&lt;br /&gt;
#* Lire les messages / Voir les salons&lt;br /&gt;
#* Envoyer des messages&lt;br /&gt;
#* Gérer les messages&lt;br /&gt;
#* Intégrer des liens&lt;br /&gt;
#* Joindre des fichiers&lt;br /&gt;
#* Voir l&#039;historique des messages&lt;br /&gt;
#* Ajouter des réactions&lt;br /&gt;
# Copie le &#039;&#039;&#039;token du bot&#039;&#039;&#039; et colle-le dans &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; à l&#039;option &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=warning|Ne partage jamais le token de ton bot. En cas de fuite, régénère-le immédiatement depuis le portail développeur Discord.}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration des modules ===&lt;br /&gt;
&lt;br /&gt;
==== Module Chat ====&lt;br /&gt;
&lt;br /&gt;
Synchronise le chat in-game vers Discord et inversement.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set CHAT_CHANNEL&amp;lt;/code&amp;gt; || Définit le salon Discord recevant les messages du chat in-game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Module Events ====&lt;br /&gt;
&lt;br /&gt;
Envoie des messages dans Discord lors d&#039;événements sur le serveur (connexion, déconnexion, mort, etc.).&lt;br /&gt;
&lt;br /&gt;
* La configuration se fait dans : &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
* Chaque événement peut être désactivé individuellement dans ce fichier.&lt;br /&gt;
&lt;br /&gt;
==== Module Lands ====&lt;br /&gt;
&lt;br /&gt;
Intègre DiscordBridge avec le plugin [[Lands]] pour les annonces et les salons de Land/Nation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_CHAT_CATEGORY&amp;lt;/code&amp;gt; || (Optionnel) Catégorie Discord où seront créés les salons de Land/Nation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_BROADCAST_CHANNEL&amp;lt;/code&amp;gt; || (Optionnel) Salon Discord pour les annonces Lands (guerres, suppressions, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set LANDS_NOTIFY_&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; || Configure les rôles notifiés pour chaque catégorie d&#039;annonce&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Remplace &amp;lt;code&amp;gt;&amp;lt;broadcast_category&amp;gt;&amp;lt;/code&amp;gt; par la catégorie souhaitée (ex : &amp;lt;code&amp;gt;WAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;…).}}&lt;br /&gt;
&lt;br /&gt;
==== Module Linking ====&lt;br /&gt;
&lt;br /&gt;
Gère la liaison entre comptes Minecraft et Discord.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_allowed_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Restreint la liaison aux joueurs ayant ce rôle Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_roles add&amp;lt;/code&amp;gt; || Ajoute un rôle Discord attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_groups add&amp;lt;/code&amp;gt; || Ajoute un groupe LuckPerms attribué automatiquement aux joueurs liés&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config linking_name_sync_ignore_roles add &amp;lt;role&amp;gt;&amp;lt;/code&amp;gt; || Exclut les utilisateurs ayant ce rôle de la synchronisation de nom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Commande in-game (administration) =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge account admin migrate&amp;lt;/code&amp;gt; || Migre les liaisons existantes depuis un autre plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.account.admin.migrate&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{bandeau|type=info|Lors de l&#039;ajout d&#039;un rôle ou d&#039;un groupe, les joueurs déjà liés le reçoivent automatiquement. La mise à jour est planifiée pour éviter toute surcharge sur les grands serveurs.}}&lt;br /&gt;
&lt;br /&gt;
==== Module Tickets ====&lt;br /&gt;
&lt;br /&gt;
Permet aux membres Discord de créer des tickets de support directement depuis le serveur Discord.&lt;br /&gt;
&lt;br /&gt;
===== Configuration requise =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande Discord !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_category_closed&amp;lt;/code&amp;gt; || Catégorie où sont déplacés les tickets fermés avant suppression&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_member_max_tickets&amp;lt;/code&amp;gt; || Nombre maximum de tickets simultanés par utilisateur&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_role_support&amp;lt;/code&amp;gt; || Rôle Discord pouvant voir et gérer tous les tickets&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_deletion_time&amp;lt;/code&amp;gt; || Délai avant suppression d&#039;un ticket fermé (ex : &amp;lt;code&amp;gt;1d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;12h&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_remind_submitter&amp;lt;/code&amp;gt; || Active ou désactive le rappel automatique au créateur (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_staff_unavailable&amp;lt;/code&amp;gt; || Message affiché si aucun staff n&#039;est disponible (nécessite &amp;lt;code&amp;gt;tickets_role_support&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config set tickets_creation_channel&amp;lt;/code&amp;gt; || Salon Discord où le message de création de ticket sera posté&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config type upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config field upsert&amp;lt;/code&amp;gt; || Créer ou mettre à jour les champs d&#039;un type de ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config info create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des informations demandées après création du ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config reason create&amp;lt;/code&amp;gt; || (Optionnel) Prédéfinir des raisons de fermeture de ticket&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Bandeau|type=info|Pour effacer une valeur de configuration, exécute &amp;lt;code&amp;gt;/config set &amp;lt;option&amp;gt;&amp;lt;/code&amp;gt; sans préciser de valeur.}}&lt;br /&gt;
&lt;br /&gt;
=== Commandes d&#039;administration générales ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Commande !! Description !! Permission&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; || Accès aux commandes d&#039;administration || &amp;lt;code&amp;gt;discordbridge.admin.command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/discordbridge admin reload&amp;lt;/code&amp;gt; || Recharge la configuration du plugin || &amp;lt;code&amp;gt;discordbridge.admin.command.reload&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Toutes les sous-commandes de &amp;lt;code&amp;gt;/discordbridge admin&amp;lt;/code&amp;gt; suivent le format de permission : &amp;lt;code&amp;gt;discordbridge.admin.command.&amp;lt;souscommande&amp;gt;&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Placeholders PlaceholderAPI ===&lt;br /&gt;
&lt;br /&gt;
Ces placeholders nécessitent l&#039;installation de [[PlaceholderAPI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Placeholder !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_amount%&amp;lt;/code&amp;gt; || Nombre de joueurs ayant lié leur compte&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur a lié son compte, sinon &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_state%&amp;lt;/code&amp;gt; || État de liaison (texte traduit depuis le fichier de locale)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_id%&amp;lt;/code&amp;gt; || ID Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_name%&amp;lt;/code&amp;gt; || Pseudo Discord de l&#039;utilisateur lié&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster%&amp;lt;/code&amp;gt; || Indique si le joueur booste un serveur Discord du bot (texte)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%discordbridge_module_linking_user_booster_bool%&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; si le joueur booste un serveur Discord du bot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fichiers de configuration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fichier !! Rôle&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/bot.yml&amp;lt;/code&amp;gt; || Configuration principale du bot (token, URL d&#039;invitation, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/events.yml&amp;lt;/code&amp;gt; || Activation et désactivation des événements envoyés sur Discord&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/chat.yml&amp;lt;/code&amp;gt; || Configuration du module chat&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DiscordBridge/Modules/linking.yml&amp;lt;/code&amp;gt; || Configuration du module de liaison de comptes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Lands]] — Plugin de gestion de territoires&lt;br /&gt;
* [[LuckPerms]] — Gestion des permissions et groupes&lt;br /&gt;
* [[PlaceholderAPI]] — Placeholders dynamiques&lt;br /&gt;
* [https://wiki.incredibleplugins.com/discordbridge Documentation officielle DiscordBridge]&lt;/div&gt;</summary>
		<author><name>Hiob</name></author>
	</entry>
</feed>