Zum Hauptinhalt springen

NPCs erstellen

webapp_banner.jpg

Lege Definitionen mit eindeutigen Dateinamen einschließlich .yml unter plugins/EliteMobs/npcs/ ab. Speichere die Datei und führe /em reload aus, bevor du einen neuen NPC platzierst. Als Spieler mit elitemobs.place.npc verwendest du /em place npc <npcfilename.yml> an der gewünschten Position und mit der gewünschten Blickrichtung. Eine Datei kann mehrere Platzierungen enthalten.

Eine andere NPC-Datei wiederverwenden​

Eine NPC-Datei kann mit extends auf einer anderen NPC-Datei aufbauen und dann nur das ändern, was sich unterscheidet:

extends: my_base_npc.yml
name: "&aSecond Guard"
spawnLocations:
- my_world,20,64,20,90,0

Die Datei erbt jeden Wert von der Basis und überschreibt die Schlüssel, die sie selbst setzt. Verschachtelte Abschnitte wie patrol werden Schlüssel für Schlüssel zusammengeführt; eine Liste wie dialog ersetzt die Liste der Basis vollständig. Gib die Basis nur mit ihrem Dateinamen an, ohne Ordnerpfad. Sie muss eine andere Datei in npcs sein, auch in einem Unterordner, und kann ihrerseits eine weitere Basis erweitern.

isEnabled, spawnLocation und spawnLocations werden nie geerbt, sodass jede Datei ihre eigenen Platzierungen behält. Eine Basis mit isEnabled: false kann als Vorlage dienen: Dateien, die sie erweitern, werden trotzdem geladen. EliteMobs schreibt keine Standardwerte in eine Datei, die extends verwendet. Eine fehlende Basis, ein Pfad in extends oder eine Schleife aus extends-Verweisen deaktiviert die Datei mit einer Warnung in der Konsole. Der Patrouillen-Editor verwendet extends, wenn er eine Platzierung aus einer Datei mit mehreren Platzierungen herauslöst.

Konfigurationseinstellungen​

isEnabled​

Aktiviert die Definition beim Laden der Konfigurationen. Lade sie nach Änderungen neu. Ein SCROLL_APPLIER erscheint außerdem nur bei aktiviertem useEliteItemScrolls.

SchlüsselWerteStandard
isEnabledWahrheitswerttrue
Beispiel
isEnabled: true

name​

Legt den Anzeigenamen mit Unterstützung für Farbcodes fest. EliteMobs registriert diesen Text in seiner Übersetzungs-CSV und verwendet die Übersetzung der eingestellten Sprache, sofern vorhanden.

SchlüsselWerteStandard
nameTextleere Zeichenfolge
Beispiel
name: "&aEnn Peecee"

create_npc_name.jpg


Anordnung der Beschriftung​

Name und Rolle haben eine feste Anordnung. Es gibt keine NPC-spezifischen Einstellungen nameplateScale oder nameplateLineGap. Normale und verkleidete NPCs richten ihre Beschriftung nach der Körper- beziehungsweise Verkleidungshöhe aus. Kompatible FreeMinecraftModels-Modelle verwalten ihre Beschriftung selbst; ModelEngine behält seinen eigenen Namen, während EliteMobs die Rolle anzeigt. Persönliche Questmarkierungen stehen darüber.

Bei aktiviertem Glücksspiel ergänzt der besondere NPC gambling_den_owner.yml die Gewinne des Hauses in derselben Beschriftung und aktualisiert sie ungefähr jede Sekunde.

scale​

Skaliert den zugrunde liegenden Dorfbewohner über das Größenattribut von Minecraft. Ein Modell oder eine Verkleidung kann die eigene sichtbare Größe steuern; diese muss der Skalierung des Dorfbewohners daher nicht folgen.

SchlüsselWerteStandard
scaleMultiplikator1.0

Beim Skalieren stellt 1.0 die Standardgröße dar. Um die Entität größer zu machen, erhöhe den Wert (z. B. 1.2). Um die Entität kleiner zu machen, verringere den Wert (z. B. 0.8).

Beispiel
scale: 1.2

role​

Legt die rein optische Rollenbeschriftung unter dem Namen fest. Sie unterstützt Farbcodes und wird in der Übersetzungs-CSV registriert.

SchlüsselWerteStandard
roleTextleere Zeichenfolge
Beispiel
role: "&c<Red Fellow>"

create_npc_role.jpg


profession​

Legt den Beruf des Dorfbewohners fest. Dieser bestimmt das Aussehen, wenn weder Verkleidung noch eigenes Modell verwendet werden.

SchlüsselWerteStandard
professionBerufNITWIT
Beispiel
profession: NITWIT

create_npc_profession.jpg


greetings​

Begrüßungen werden versucht, wenn eine Näherungsprüfung den Spieler erstmals innerhalb von activationRadius erkennt. Ein zufälliger Eintrag erscheint als schwebende Sprechblase nur für diesen Spieler, ungefähr 5 Sekunden lang. Die Liste wird in der Übersetzungs-CSV registriert. Sprechen erfordert canTalk und einen abgelaufenen Dialog-Cooldown.

SchlüsselWerteStandard
greetingsTextlistekeine

Der Begrüßungsversuch erfolgt nur beim erkannten Eintritt. Blockiert ihn der gemeinsame Cooldown, wird er nicht wiederholt, solange der Spieler im Radius bleibt.

Beispiel
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog​

Legt die Sprechblasen fest. Jeder Versuch wählt einen Eintrag zufällig aus, statt die Liste der Reihe nach zu lesen. Die Liste wird in der Übersetzungs-CSV registriert.

  • CHAT versucht einen Dialog bei Interaktion, normalerweise per Rechtsklick. FreeMinecraftModels leitet auch Linksklicks auf Modelle an die Interaktionsverarbeitung weiter.
  • Andere Typen versuchen Dialoge bei späteren Näherungsprüfungen innerhalb von activationRadius; die erste Prüfung versucht eine Begrüßung.

Ein wörtliches \n erzeugt übereinanderstehende Zeilen. Verwende einfache YAML-Anführungszeichen oder schreibe \\n innerhalb doppelter Anführungszeichen. Das gilt auch für Begrüßungen und Abschiede.

SchlüsselWerteStandard
dialogTextlistekeine
Beispiel
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell​

Legt zufällig ausgewählte Abschiede als Sprechblasen fest. Die Liste wird in der Übersetzungs-CSV registriert.

SchlüsselWerteStandard
farewellTextlistekeine

Beim Schließen einer beliebigen Inventaransicht mit nicht leerem Titel werden Abschiede naher NPCs versucht. Die Suche reicht entlang jeder Achse 5 Blöcke um den Spieler und ist nicht auf den Eigentümer des Menüs beschränkt. Mehrere NPCs können sprechen. Das Verlassen von activationRadius löst keinen Abschied aus.

Beispiel
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk​

Steuert die eingebauten Sprechblasen. false unterdrückt greetings, dialog und farewell, deaktiviert aber keine Menüs, Befehle, Lua-Skripte, Questdialoge, Näherungserkennung oder Questmarkierungen.

SchlüsselWerteStandard
canTalkWahrheitswerttrue
Beispiel
canTalk: true

activationRadius​

Legt den Erkennungsradius in Blöcken fest.

SchlüsselWerteStandard
activationRadiusDezimalzahl3.0

Die Prüfung läuft alle 100 Ticks, ungefähr 5 Sekunden, mit dreidimensionalem Abstand und ohne Sichtlinienprüfung. Stehende NPCs können Spieler ansehen, beim Eintritt begrüßen und bei späteren Prüfungen sprechen. 0 oder weniger deaktiviert diese Interaktionen einschließlich der Lua-Näherungshooks. Markierungen von QUEST_GIVER und CUSTOM_QUEST_GIVER verwenden unabhängig davon 30 Blöcke und können bei activationRadius: 0 erscheinen. Sie zeigen verfügbare und abzugebende Quests des jeweiligen Spielers.

Während sich eine Patrouille bewegt oder bearbeitet wird, sind Prüfung und Sprechblasen unterdrückt. patrol.pauseNearPlayersRadius und patrol.faceNearbyPlayers steuern Pausen und Blickrichtung bei Spielern; siehe Patrouillen.

Beispiel
activationRadius: 3.0

scripts​

Legt die Lua-Skripte des NPCs aus plugins/EliteMobs/npc_scripts/ fest. Die Endung .lua ist optional und wird bei Bedarf ergänzt.

SchlüsselWerteStandard
scriptsTextlistekeine

Die gemeinsame MagmaCore-Lua-Engine unterstützt on_spawn, on_game_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter und on_zone_leave. Der Tick-Hook für NPCs heißt on_game_tick. Jeder NPC erhält eigene Skriptinstanzen; kleinere Prioritäten laufen zuerst. Ein Skript nur mit Tick-Hook benötigt zur Initialisierung zusätzlich ein gegebenenfalls leeres on_spawn. Siehe Lua-NPC-Skripte für API und Beispiele.

Ein Name ohne passende geladene Skriptdefinition wird mit Warnung übersprungen; der NPC erscheint trotzdem. Beachte die Groß-/Kleinschreibung und lade nach Änderungen neu.

Ein Questdialog kann den Klick vor on_npc_interact verbrauchen. Andernfalls läuft dieser Hook vor der konfigurierten Interaktion und bricht sie nicht ab.

Beispiel
scripts:
- wave.lua

interactionType​

Legt die Art der Interaktion fest, die der NPC durchführt.

SchlüsselWerteStandard
interactionTypeSpeziell [1]NONE
Beispiel
interactionType: TELEPORT_BACK

noPreviousLocationMessage​

Nachricht von TELEPORT_BACK, wenn kein Rückkehrort gespeichert ist. Der Ort ist der Ausgangspunkt einer EliteMobs-Teleportation von außerhalb einer EliteMobs-Welt, nicht die letzte gelaufene Position oder der Todesort. Die Rückkehr verwendet das normale EliteMobs-Teleportverfahren samt Verzögerung und Abbruchregeln. Die Nachricht unterstützt Farbcodes und wird in der Übersetzungs-CSV registriert.

SchlüsselWerteStandard
noPreviousLocationMessageTextleere Zeichenfolge
Beispiel
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout​

Minuten bis zum Entfernen des erschienenen NPCs. 0 oder weniger deaktiviert den Timer. Die gespeicherte Platzierung und die Definition bleiben bestehen; der NPC kann nach Neuladen, Neustart oder Wiederherstellung des Chunks zurückkehren.

Zum Löschen einer Platzierung aktiviere /em remove, schlage den NPC und beende den Modus erneut mit /em remove. Erforderlich ist elitemobs.remove. Bei Listen wird der passende Eintrag entfernt; eine alte Definition mit Einzelposition wird deaktiviert. Entferne beim Umstieg auf spawnLocations den alten Schlüssel spawnLocation, sonst kann dieser bei leerer Liste wieder aktiv werden.

SchlüsselWerteStandard
timeoutDezimalzahl0 (nie)
Beispiel
timeout: 0

questFileName​

Liste von Questdateien aus plugins/EliteMobs/customquests/ einschließlich .yml für CUSTOM_QUEST_GIVER. Der Schlüssel steht trotz Listenwert im Singular. Das Menü bietet zulässige Quests an und nimmt Quests entgegen, deren Abgabe diesem NPC-Dateinamen zugeordnet ist. Ein Abgabe-NPC kann daher eine leere Angebotsliste haben. Alle Platzierungen derselben Datei teilen diese Identität. Individuelle Questberechtigungen und Voraussetzungen gelten weiterhin.

SchlüsselWerteStandard
questFileNameTextlistekeine
Beispiel
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise​

Legt die Verkleidung fest und benötigt LibsDisguises. Ein erfolgreich geladenes eigenes Modell hat Vorrang.

SchlüsselWerteStandard
disguiseLibsDisguises-Formatkeiner
Beispiel
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData​

Legt die Daten für eine benutzerdefinierte LibsDisguises-Verkleidung fest.

SchlüsselWerteStandard
customDisguiseDataLibsDisguises-Formatkeiner
Beispiel
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}

create_npc_custom_disguise.jpg


customModel​

Legt ein Modell für FreeMinecraftModels oder ModelEngine fest. Installiere es zuerst beim ausgewählten Anbieter und trage dann seine ID ein. Sind beide verfügbar, wird FreeMinecraftModels bevorzugt; ein fehlendes FMM-Modell bewirkt keinen Wechsel zu ModelEngine. Lädt kein Modell, verwendet der NPC seine Verkleidung oder das normale Dorfbewohneraussehen. Siehe Eigene Modelle.

SchlüsselWerteStandard
customModelTextkeiner
Beispiel
customModel: MY_MODEL_ONE

Klassentrainer und Transport​

Verwende interactionType: CLASS_TRAINER mit classRoot zur Auswahl des Klassenzweigs. Beginne mit den mitgelieferten Definitionen class_trainer_*.yml. Prüfungen und Fortschritt erklärt Advanced Combat System.

Bei interactionType: TRANSPORT enthält transportRoutes Routen-IDs ohne .yml; ein Klick öffnet die Zielauswahl. Siehe Transportrouten.

arena​

Legt den Dateinamen der Arena fest, für die der NPC ein Menü öffnet (erfordert den interactionType ARENA_MASTER).

SchlüsselWerteStandard
arenaDateinamekeiner
Beispiel
arena: my_arena.yml

command​

Befehl für COMMAND. Er läuft im nächsten Tick als klickender Spieler mit dessen normalen Berechtigungen. Lasse den führenden / weg. Dieses Feld ersetzt keine Spielerplatzhalter automatisch und verwendet nicht das EliteMobs-Format für Konsolenbefehle.

SchlüsselWerteStandard
commandTextkeiner
Beispiel
command: say Look at me running a command, how cool!

create_npc_command.jpg


spawnLocation​

Alter Schlüssel für eine einzelne Position. Er wird nur gelesen, wenn spawnLocations fehlt oder leer ist. Neue Platzierungen im Spiel werden in spawnLocations geschrieben; bevorzuge diesen Schlüssel.

Empfohlenes Format: world,x,y,z,yaw,pitch. Die Welt muss bereits geladen sein; die Einstellung lädt sie nicht.

SchlüsselWerteStandard
spawnLocationTextkeiner
Beispiel
spawnLocation: my_world,10,50,10,0,0

spawnLocations​

Mehrere Platzierungen derselben Definition. /em place npc <npcfilename.yml> ergänzt deine auf zwei Nachkommastellen gerundete Position und Blickrichtung und setzt isEnabled: true. Eine identisch gespeicherte Position wird nicht doppelt eingetragen. NPCs werden wiederhergestellt, sobald ihre Chunks Entitäten verarbeiten können.

Das Format jedes Eintrags ist world,x,y,z,yaw,pitch.

SchlüsselWerteStandard
spawnLocationsTextlistekeine
Beispiel
spawnLocations: 
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0

instanced​

Bei true wird der NPC für instanzierte Dungeons als Vorlage registriert. Er erscheint nicht in der Vorlagenwelt, sondern wird für jede Dungeon-Instanz in deren Welt geklont.

SchlüsselWerteStandard
instancedWahrheitswertfalse
Beispiel
instanced: false

syncMovement​

Synchronisiert die Bewegung eines geladenen customModel mit dem zugrunde liegenden Körper. Bei normalen und LibsDisguises-NPCs hat die Einstellung keine Wirkung.

Eine gültige konfigurierte patrol aktiviert die Synchronisierung auch im pausierten Zustand oder bei false. Für Modelle ohne Patrouille bleibt die Einstellung relevant.

SchlüsselWerteStandard
syncMovementWahrheitswerttrue
Beispiel
syncMovement: true

patrol​

Fügt dem NPC eine native, automatisch berechnete Route hinzu. Knoten sind Versätze vom festgelegten Spawnpunkt des NPCs oder, mit patrol.relative: false, exakte Koordinaten in seiner Welt. Lange Segmente werden automatisch geteilt und Chunks nicht zwangsweise geladen. Mit patrol.startNodeWaitSeconds rastet der NPC einmal pro Runde am ersten Knoten, das nur für NPCs verfügbare patrol.pauseNearPlayersRadius pausiert ihn in Spielernähe, und patrol.faceNearbyPlayers dreht ihn während der Pause zu ihnen. NPC- und Boss-Patrouillen beschreibt Schema, Editor, Langstreckenverhalten und Lua-Steuerung.


NPC-Konfigurationsbeispiel
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
spawnLocations:
- my_world,584,55,127,90,10

create_npc_npc.jpg


Speziell [1]​

Im Folgenden findest du die Liste der gültigen NPC-Interaktionstypen:

TypBeschreibung
GUILD_GREETERÖffnet Waffenfertigkeitsboni. Benötigt elitemobs.skill.npc.
CLASS_TRAINERÖffnet den Zweig aus classRoot. Benötigt elitemobs.command.
TRANSPORTÖffnet die Ziele aus transportRoutes.
CHATVersucht bei Interaktion eine zufällige Zeile aus dialog.
CUSTOM_SHOPÖffnet den eigenen Shop. Benötigt elitemobs.shop.custom.npc.
PROCEDURALLY_GENERATED_SHOPÖffnet den generierten Shop. Benötigt elitemobs.shop.dynamic.npc.
BARNicht implementiert. Teilt dem Spieler mit, dass das Feature bald verfügbar ist.
ARENATut nichts. Verwende stattdessen ARENA_MASTER.
QUEST_GIVERÖffnet generierte Quests. Benötigt elitemobs.quest.npc.
CUSTOM_QUEST_GIVERBietet zulässige Quests aus questFileName an und nimmt zugeordnete Abgaben entgegen.
NONEKeine eingebaute Aktion; Skripte, Näherung und Questdialoge bleiben möglich.
SELLÖffnet den Verkauf. Benötigt elitemobs.shop.sell.npc.
TELEPORT_BACKVerwendet den gespeicherten EliteMobs-Rückkehrort. Benötigt elitemobs.back.npc.
SCRAPPERÖffnet die Verschrottung. Benötigt elitemobs.scrap.npc.
REPAIRMANÖffnet Reparaturen. Benötigt elitemobs.repair.npc.
ENCHANTERÖffnet Verzauberungen. Benötigt elitemobs.enchant.npc.
REFINERERSETZT - Teilt dem Spieler mit, dass das Feature ersetzt wurde; Administratoren wird geraten, den NPC zu entfernen
SMELTERERSETZT - Teilt dem Spieler mit, dass das Feature ersetzt wurde; Administratoren wird geraten, den NPC zu entfernen
ENHANCERERSETZT - Teilt dem Spieler mit, dass das Feature ersetzt wurde; Administratoren wird geraten, den NPC zu entfernen
UNBINDERÖffnet die Entbindung. Benötigt elitemobs.unbind.npc.
ARENA_MASTERÖffnet das Arena-Menü für die in arena festgelegte Arena
COMMANDFührt den in command festgelegten Befehl aus
SCROLL_APPLIERÖffnet Elite-Gegenstandsrollen. Benötigt elitemobs.scroll.npc; erscheint nicht bei deaktiviertem useEliteItemScrolls.
ARROW_SHOPÖffnet den Pfeilshop. Benötigt elitemobs.shop.arrow.npc.
GAMBLING_BLACKJACKÖffnet Blackjack. Benötigt elitemobs.gambling.npc.
GAMBLING_COINFLIPÖffnet Münzwurf. Benötigt elitemobs.gambling.npc.
GAMBLING_SLOTSÖffnet den Spielautomaten. Benötigt elitemobs.gambling.npc.
GAMBLING_HIGHERLOWERÖffnet Höher/Tiefer. Benötigt elitemobs.gambling.npc.

Weitere Informationen darüber, was die Interaktionstypen SCRAPPER und ähnliche bewirken, findest du hier.

Hinweise zum NPC-Verhalten​

Zum eingebauten Verhalten gehört außerdem:

  • Bewegung: NPCs stehen normalerweise still und sehen nahe Spieler an. Patrouillen und Skripte können sie bewegen. Die Patrouille steuert die Route statt des normalen Dorfbewohnerverhaltens.
  • Interaktionsreihenfolge: Ein Questdialog kann den Klick vor Lua und der eingebauten Aktion verbrauchen. Sonst folgt auf Lua die konfigurierte Aktion samt Berechtigungsprüfungen. Eine Sperre von einem Tick verhindert wiederholte Interaktionen desselben Spielers über mehrere NPCs hinweg. Das Bearbeiten einer Patrouille blockiert Interaktionen, ihre normale Bewegung nicht.
  • Schutz: NPC-Körper kollidieren nicht wie gewöhnlich. EliteMobs verhindert Schaden, Dorfbewohnerverwandlungen und das Öffnen des normalen Handelsinventars.
  • Beschriftung: Name und Rolle folgen der festen Anordnung oben. Normale und verkleidete NPCs verwenden die aktuelle Körperhöhe; die Skalierung kann daher die Beschriftung verschieben. Kompatible FMM-Modelle verwalten Name und Rolle zusammen.
  • Bedrock: Die Darstellung hängt von der aktiven Modell- und Anzeigeintegration ab. Der aktuelle Renderer verwendet den beibehaltenen Schlüssel bedrockNPCRoleYOffset nicht.
  • Dialog-Cooldown: Jeder NPC teilt 3 Sekunden Wartezeit zwischen allen Spielern. Eine Begrüßung kann dadurch die eines anderen Spielers verhindern. Persönliche Sprechblasen verschwinden nach ungefähr 5 Sekunden.
  • Unsichtbarkeit: NPCs mit Unsichtbarkeitstrankeffekt zeigen keine Sprechblasen.
  • Chunks: NPCs verschwinden beim Entladen und werden wiederhergestellt, wenn der Chunk wieder Entitäten verarbeitet. Die Entitäten werden nicht in der Welt gespeichert; ihre Platzierungen stammen aus den Konfigurationen.
  • Umbenennen: Normale Rechtsklicks auf den Dorfbewohner mit Namensschild in der Haupthand werden mit einer Nachricht abgebrochen. Modelle verwenden eigene Klick-Callbacks; FreeMinecraftModels leitet Links- und Rechtsklicks an die NPC-Interaktionsverarbeitung weiter.