MC Toolkit

Anleitungen / Befehle & Daten

Dialogbildschirme: echte Menüs bauen ohne Mod

Datapack-Dialoge liefern dir ein richtiges Fenster mit Eingabefeldern und Buttons. Hier ist die JSON-Struktur, wie ein Button einen Befehl ausführt und wie das im Vergleich zum Buch-Menü-Hack abschneidet.

Server-Menüs wurden früher als beschreibbare Bücher mit klickbaren Seiten geschrieben oder als Truhen-GUI, die mit Item-Frames nachgebaut wurde. Dialoge haben beides durch einen echten Bildschirm ersetzt.

Was ein Dialog ist

Eine JSON-Datei in einem Datapack, die ein Fenster beschreibt:

data/<namespace>/dialog/welcome.json
{
  "type": "minecraft:notice",
  "title": { "text": "Welcome" },
  "body": [{ "type": "minecraft:plain_message",
             "contents": { "text": "Pick a class to begin." } }],
  "action": { "label": { "text": "Continue" } }
}

Dann /dialog show @p my_pack:welcome.

Die Typen

TypForm
noticeText plus ein Schließen-Button
confirmationJa / Nein, jeweils mit eigener Aktion
multi_actionein Raster aus Buttons
server_linksdie eingebaute Linkliste
dialog_listein Menü, das andere Dialoge öffnet

multi_action ist das Arbeitstier — es ist die Klassenauswahl, der Shop, die Warp-Liste.

Buttons führen Befehle aus

{ "label": { "text": "Warp to spawn" },
  "action": { "type": "minecraft:run_command", "command": "/spawn" } }

Wie clickEvent im Chat wird dies als der klickende Spieler ausgeführt, auf dessen Berechtigungsstufe. Ein Button, der einen nur für Operatoren verfügbaren Befehl aufruft, bewirkt bei einem normalen Spieler nichts. Der übliche Workaround ist ein trigger-Objective: Der Button führt /trigger warp set 1 aus, und eine tickende Funktion erledigt den privilegierten Teil.

Eingabefelder

"inputs": [
  { "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
  { "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
  { "type": "minecraft:single_option", "key": "class", "label": { "text": "Class" }, "options": [
      { "id": "mage", "display": { "text": "Mage" } },
      { "id": "rogue", "display": { "text": "Rogue" } } ] }
]

Werte erreichen einen Befehl über einen Button, dessen Aktion minecraft:dynamic/run_command ist: Sein template nimmt $(key) für jede Eingabe entgegen. Ein einfacher run_command-Button erhält nichts.

"action": {
  "type": "minecraft:dynamic/run_command",
  "template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}

Die aufgerufene Funktion ist dann ein Makro:

$say Welcome $(name), you chose $(class)

Das $-Präfix in der Zeile und $(key) für die Substitution, an beiden Enden. Das ist der gesamte Bindungsmechanismus, und genau das macht Dialoge wirklich nützlich statt nur dekorativ.

Warum das den Buch-Hack schlägt

  • Es ist ein Bildschirm, der die Eingabe pausiert, statt im Chatverlauf zu stehen.
  • Eingabefelder gibt es wirklich. Ein Buch konnte nur Links bieten.
  • Kein Item nötig. Nichts, das verloren gehen, weggeworfen oder dupliziert werden kann.
  • Er schließt sauber und kann nicht zurückgescrollt werden.

Das Einzige, was Bücher noch besser können, ist Langtext-Lesen — ein Dialogkörper ist kein guter Ort für drei Seiten Lore.

Wegpunkt-Stile

Dasselbe Werkzeug deckt auch Wegpunkte in der Locator-Leiste ab, deren Stile Resource-Pack-Assets sind (assets/<namespace>/waypoint_style/), die die Sprites und Ausblenddistanzen eines verfolgten Spielers oder einer Position steuern; die Farbe wird separat mit /waypoint modify <target> color festgelegt. Nützlich für Team-Markierungen, bei denen eine Bossbar zu aufdringlich wäre.

Baue Dialogbildschirme mit Eingabefeldern und Buttons und passe Wegpunkt-Stile an im Dialog Input & Waypoint Style Builder.

Dialog- und Wegpunkt-Baukasten →

Weitere Anleitungen

Alle ansehen →