Créer des PNJ
Paramètres de configuration
isEnabled
Définit si un PNJ est activé.
| Clé | Valeurs | Défaut |
|---|---|---|
isEnabled | Boolean | true |
Exemple
isEnabled: true
name
Définit le nom d'affichage d'un PNJ. Prend en charge les Codes de couleur et les clés de traduction pour les serveurs multilingues.
| Clé | Valeurs | Défaut |
|---|---|---|
name | String | aucun |
Exemple
name: "&aEnn Peecee"

scale
Définit l'échelle (la taille) du PNJ. Ceci est appliqué via l'attribut vanilla generic_scale sur l'entité sous-jacente.
| Clé | Valeurs | Défaut |
|---|---|---|
scale | Multiplier | 1.0 |
Lors de la mise à l'échelle, 1.0 représente la taille par défaut. Pour agrandir l'entité, augmentez la valeur (par exemple, 1.2). Pour rapetisser l'entité, diminuez la valeur (par exemple, 0.8).
Exemple
scale: 1.2
role
Définit le rôle du PNJ, sous le nom. Purement visuel. Prend en charge les Codes de couleur et les clés de traduction pour les serveurs multilingues.
| Clé | Valeurs | Défaut |
|---|---|---|
role | String | aucun |
Exemple
role: "&c<Red Fellow>"

profession
Définit la profession du PNJ, qui détermine son apparence (skin) lorsqu'il n'utilise pas de déguisement.
| Clé | Valeurs | Défaut |
|---|---|---|
profession | Profession | NITWIT |
Exemple
profession: NITWIT

greetings
Définit la liste des salutations que le PNJ peut prononcer lorsqu'un joueur entre pour la première fois dans son activationRadius. Une entrée est choisie au hasard et affichée sous forme de bulle de chat flottante au-dessus du PNJ (visible uniquement par ce joueur, pendant environ 5 secondes). Prend en charge les clés de traduction pour les serveurs multilingues.
Une salutation ne se déclenche qu'à l'entrée dans le rayon, et non de façon répétée tant que le joueur y reste.
| Clé | Valeurs | Défaut |
|---|---|---|
greetings | String List | aucun |
Exemple
greetings:
- Hi there!
- Good day.

dialog
Définit les lignes que le PNJ peut prononcer sous forme de bulle de chat flottante. Une entrée est choisie au hasard à chaque fois (la liste n'est pas lue dans l'ordre). Prend en charge les clés de traduction pour les serveurs multilingues.
Le moment du déclenchement dépend de l'interactionType :
- Les PNJ
CHATprononcent une ligne de dialogue lorsqu'un joueur fait un clic droit dessus. - Tous les autres
interactionTypeprononcent une ligne de dialogue à chaque analyse de proximité tant qu'un joueur reste dans l'activationRadius.
Un \n littéral à l'intérieur d'une ligne la découpe en plusieurs lignes empilées dans la bulle.
| Clé | Valeurs | Défaut |
|---|---|---|
dialog | String List | aucun |
Exemple
dialog:
- I like apples!
- Sure is hot.

farewell
Définit les messages d'adieu du PNJ. Une entrée est choisie au hasard et affichée sous forme de bulle de chat flottante. Prend en charge les clés de traduction pour les serveurs multilingues.
Les adieux se déclenchent lorsqu'un joueur ferme un menu d'inventaire en se tenant à moins de 5 blocs du PNJ — typiquement juste après avoir fermé un menu de boutique, de quête ou d'arène. Ils ne se déclenchent pas lorsqu'un joueur sort simplement de l'activationRadius.
| Clé | Valeurs | Défaut |
|---|---|---|
farewell | String List | aucun |
Exemple
farewell:
- Until next time!
- Bye!

canTalk
Définit si le PNJ peut parler. Lorsque ce paramètre vaut false, le PNJ n'affiche jamais de bulle de chat : greetings, dialog et farewell sont donc tous supprimés.
| Clé | Valeurs | Défaut |
|---|---|---|
canTalk | Boolean | true |
Exemple
canTalk: true
activationRadius
Définit le rayon, en blocs, auquel un PNJ peut détecter l'approche d'un joueur.
La proximité est analysée toutes les 5 secondes. Tant qu'un joueur est dans le rayon, le PNJ pivote pour lui faire face, les indicateurs de quête sont affichés (pour les PNJ QUEST_GIVER / CUSTOM_QUEST_GIVER) et greetings / dialog sont déclenchés. Régler ce paramètre à 0 (ou moins) désactive entièrement la détection de proximité pour ce PNJ.
| Clé | Valeurs | Défaut |
|---|---|---|
activationRadius | Double | 3.0 |
Exemple
activationRadius: 3.0
scripts
Définit les scripts Lua attachés à ce PNJ. Les fichiers de script sont chargés depuis plugins/EliteMobs/npc_scripts/. L'extension .lua est optionnelle — elle est ajoutée automatiquement si vous l'omettez.
| Clé | Valeurs | Défaut |
|---|---|---|
scripts | String List | aucun |
Les scripts de PNJ s'exécutent sur le moteur Lua partagé MagmaCore et prennent en charge les hooks suivants : on_spawn, on_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter et on_zone_leave. Consultez Scripts Lua de PNJ pour l'API complète et des exemples.
Un nom de fichier de script qui ne correspond à aucun fichier de npc_scripts/ est ignoré avec un avertissement ; le PNJ apparaît quand même.
Exemple
scripts:
- wave.lua
interactionType
Définit le type d'interaction que le PNJ effectuera.
| Clé | Valeurs | Défaut |
|---|---|---|
interactionType | Spécial [1] | NONE |
Exemple
interactionType: TELEPORT_BACK
noPreviousLocationMessage
Lorsqu'un PNJ Téléporteur n'a aucun emplacement précédent vers lequel téléporter un joueur, il affichera ce message. Accepte les Codes de couleur et les clés de traduction pour les serveurs multilingues.
| Clé | Valeurs | Défaut |
|---|---|---|
noPreviousLocationMessage | String | aucun |
Exemple
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

timeout
Définit la durée, en minutes, avant qu'un PNJ ne disparaisse définitivement.
| Clé | Valeurs | Défaut |
|---|---|---|
timeout | Double | 0 (jamais) |
Exemple
timeout: 0
questFileName
Définit les quêtes que le PNJ donne.
| Clé | Valeurs | Défaut |
|---|---|---|
questFileName | String List | aucun |
Exemple
questFileName:
- my_quest_one.yml
- my_quest_two.yml
disguise
Définit le déguisement LibsDisguises du PNJ.
| Clé | Valeurs | Défaut |
|---|---|---|
disguise | Format LibsDisguises | aucun |
Exemple
disguise: SKELETON

customDisguiseData
Définit les données d'un déguisement LibsDisguises personnalisé.
| Clé | Valeurs | Défaut |
|---|---|---|
customDisguiseData | Format LibsDisguises | aucun |
Exemple
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

customModel
Définit le modèle personnalisé ModelEngine que le PNJ utilisera.
| Clé | Valeurs | Défaut |
|---|---|---|
customModel | String | aucun |
Exemple
customModel: MY_MODEL_ONE
arena
Définit le nom de fichier de l'arène pour laquelle le PNJ ouvrira un menu (nécessite l'interactionType ARENA_MASTER).
| Clé | Valeurs | Défaut |
|---|---|---|
arena | Filename | aucun |
Exemple
arena: my_arena.yml
command
Définit la commande que le PNJ exécutera (nécessite l'interactionType COMMAND). Les commandes sont exécutées en tant que joueur, pas en tant que console. N'incluez pas le slash initial (/).
| Clé | Valeurs | Défaut |
|---|---|---|
command | String | aucun |
Exemple
command: say Look at me running a command, how cool!
![]()
spawnLocation
Définit un unique emplacement d'apparition pour le PNJ. C'est la clé héritée à emplacement unique : elle n'est lue que si spawnLocations est absente ou vide. Les nouveaux emplacements placés en jeu sont écrits dans spawnLocations à la place ; préférez donc cette clé.
Le format est world,x,y,z,yaw,pitch.
| Clé | Valeurs | Défaut |
|---|---|---|
spawnLocation | String | aucun |
Exemple
spawnLocation: my_world,10,50,10,0,0
spawnLocations
Définit les emplacements d'apparition du PNJ. Un même fichier de PNJ peut être placé à plusieurs endroits ; un PNJ est créé par entrée. Vous devriez les définir via la commande /em place npc <npcfilename.yml>, qui ajoute votre emplacement actuel (y compris la direction dans laquelle vous regardez) à cette liste et définit également isEnabled: true.
Le format de chaque entrée est world,x,y,z,yaw,pitch.
| Clé | Valeurs | Défaut |
|---|---|---|
spawnLocations | String List | aucun |
Exemple
spawnLocations:
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0
instanced
Définit si le PNJ doit être instancié (pour une utilisation dans les donjons instanciés). Lorsqu'il est défini sur true, le PNJ n'apparaît pas dans le monde blueprint ; il est enregistré comme modèle et cloné pour chaque instance de donjon, chaque clone existant dans le monde d'instance correspondant.
| Clé | Valeurs | Défaut |
|---|---|---|
instanced | Boolean | false |
Exemple
instanced: false
syncMovement
Définit si le modèle personnalisé du PNJ doit voir son mouvement synchronisé avec l'entité sous-jacente. Cela n'a d'effet que lorsque customModel est défini et que le modèle est chargé — le paramètre est ignoré pour les PNJ simples et les PNJ LibsDisguises.
| Clé | Valeurs | Défaut |
|---|---|---|
syncMovement | Boolean | true |
Exemple
syncMovement: true
Exemple de configuration de PNJ
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

Spécial [1]
Voici la liste des types d'interaction de PNJ valides :
| Type | Description |
|---|---|
GUILD_GREETER | Ouvre le menu de sélection du bonus de compétence d'arme |
CHAT | Le clic droit fait dire une ligne aléatoire de dialog |
CUSTOM_SHOP | Ouvre le menu de la boutique personnalisée |
PROCEDURALLY_GENERATED_SHOP | Ouvre la boutique générée procéduralement |
BAR | Non implémenté. Indique au joueur que la fonctionnalité arrive bientôt. |
ARENA | Ne fait rien. Utilisez ARENA_MASTER à la place. |
QUEST_GIVER | Ouvre le menu des quêtes générées procéduralement |
CUSTOM_QUEST_GIVER | Ouvre le menu de quête pour une quête spécifique définie dans questFileName |
NONE | Aucune interaction |
SELL | Ouvre le menu de vente |
TELEPORT_BACK | Téléporte les joueurs vers le dernier emplacement hors monde elitemobs où ils se trouvaient |
SCRAPPER | Ouvre le menu de récupération (scrap) |
REPAIRMAN | Ouvre le menu de réparation |
ENCHANTER | Ouvre le menu d'enchantement |
REFINER | REMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ |
SMELTER | REMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ |
ENHANCER | REMPLACÉ - Indique au joueur que la fonctionnalité a été remplacée ; les administrateurs sont invités à retirer le PNJ |
UNBINDER | Ouvre le menu de déliaison |
ARENA_MASTER | Ouvre le menu d'arène pour l'arène définie dans arena |
COMMAND | Exécute la commande définie dans command |
SCROLL_APPLIER | Ouvre le menu des parchemins d'objet d'élite. Le PNJ n'apparaît pas du tout tant que useEliteItemScrolls est désactivé |
ARROW_SHOP | Ouvre le menu de la boutique de flèches |
GAMBLING_BLACKJACK | Ouvre le jeu d'argent de blackjack |
GAMBLING_COINFLIP | Ouvre le jeu d'argent de pile ou face |
GAMBLING_SLOTS | Ouvre le jeu d'argent de machine à sous |
GAMBLING_HIGHERLOWER | Ouvre le jeu d'argent plus haut/plus bas |
Pour plus d'informations sur ce que font les types d'interaction SCRAPPER et similaires, cliquez ici.
Notes sur le comportement des PNJ
Les PNJ ont plusieurs comportements codés en dur qui ne peuvent pas être configurés :
- IA désactivée : les PNJ ne peuvent ni se déplacer ni trouver de chemin. Ils restent à leur emplacement d'apparition. Ils pivotent toutefois sur place pour faire face à un joueur situé dans l'
activationRadius. - Affichage du rôle : le texte du
roleest rendu sur une entité d'affichage de texte flottante au-dessus du PNJ. Le décalage vertical dépend du mode de rendu du PNJ :2.52pour un PNJ simple,2.30pour un PNJ LibsDisguises, et2.3pour un PNJ utilisant uncustomModel. - Étiquette de rôle Bedrock : les clients Bedrock ne peuvent pas rendre les entités d'affichage de texte ; un PNJ déguisé reçoit donc en plus un porte-armure marqueur invisible portant le texte du rôle, affiché uniquement aux joueurs Bedrock et masqué pour les joueurs Java. Sa hauteur est définie par
bedrockNPCRoleYOffsetdansconfig.yml(par défaut2.2). Ce repli nécessite Geyser ou Floodgate sur le serveur backend ; une installation Geyser uniquement sur le proxy le désactive. - Temps de recharge des dialogues : les PNJ attendent 3 secondes entre deux prises de parole pour éviter le chevauchement des messages. Les bulles de chat sont du texte flottant par joueur qui disparaît après environ 5 secondes, et non des messages de chat.
- Invisibilité : un PNJ sous effet de potion d'invisibilité n'affichera pas de bulles de chat.
- Cycle de vie des chunks : les PNJ disparaissent lorsque leur chunk est déchargé et réapparaissent lorsqu'il est rechargé. Les entités de PNJ ne sont jamais enregistrées dans le monde : elles sont recréées à partir de leur fichier de configuration.
- Renommage bloqué : un clic droit sur un PNJ avec une étiquette en main est annulé et le joueur est informé que le PNJ ne peut pas être renommé.
