MC Toolkit

Poradniki / Polecenia i dane

Ekrany dialogowe: budowanie prawdziwych menu bez moda

Dialogi z datapacków dają ci prawdziwe okno z polami wprowadzania i przyciskami. Oto struktura JSON, sposób w jaki przycisk uruchamia komendę, oraz porównanie z obejściem opartym na książce.

Menu serwerowe kiedyś tworzono jako pisane książki ze klikalnymi stronami albo jako interfejs skrzyni podrabiany ramkami na przedmioty. Dialogi zastąpiły jedno i drugie prawdziwym ekranem.

Czym jest dialog

Plik JSON w datapacku, który opisuje okno:

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" } }
}

Następnie /dialog show @p my_pack:welcome.

Typy

TypKształt
noticetekst plus jeden przycisk zamknięcia
confirmationtak / nie, każdy z własną akcją
multi_actionsiatka przycisków
server_linkswbudowana lista linków
dialog_listmenu, które otwiera inne dialogi

multi_action to koń roboczy — to wybór klasy, sklep, lista warpów.

Przyciski uruchamiają komendy

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

Podobnie jak clickEvent na czacie, uruchamia się to jako klikający Gracz, na jego poziomie uprawnień. Przycisk wywołujący komendę dostępną tylko dla operatorów nic nie zrobi dla zwykłego Gracza. Standardowym obejściem jest cel trigger: przycisk uruchamia /trigger warp set 1, a funkcja tykająca wykonuje część uprzywilejowaną.

Pola wprowadzania

"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" } } ] }
]

Wartości trafiają do komendy przez przycisk, którego akcja to minecraft:dynamic/run_command: jego template przyjmuje $(key) dla każdego pola wprowadzania. Zwykły przycisk run_command nie otrzymuje niczego.

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

Wywoływana funkcja jest wtedy makrem:

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

Prefiks $ na początku linii i $(key) do podstawienia, na obu końcach. To cały mechanizm wiązania i to właśnie czyni dialogi naprawdę użytecznymi, a nie tylko dekoracyjnymi.

Dlaczego to bije obejście z książką

  • To ekran, więc wstrzymuje wprowadzanie, zamiast siedzieć w historii czatu.
  • Pola wprowadzania naprawdę istnieją. Książka mogła zaoferować tylko linki.
  • Nie wymaga przedmiotu. Niczego nie można zgubić, upuścić ani zduplikować.
  • Zamyka się czysto i nie można do niego przewinąć z powrotem.

Jedyna rzecz, w której książki wciąż wypadają lepiej, to dłuższe czytanie — treść dialogu nie jest dobrym miejscem na trzy strony lore.

Style punktów trasy

To samo narzędzie obsługuje punkty trasy na pasku lokalizatora, których style są zasobami paczki zasobów (assets/<namespace>/waypoint_style/) kontrolującymi sprite'y i odległości zanikania śledzonego Gracza lub pozycji; kolor ustawia się osobno za pomocą /waypoint modify <target> color. Przydatne do znaczników drużyny, gdzie bossbar byłby zbyt nachalny.

Buduj ekrany dialogowe z polami wprowadzania i przyciskami oraz dostosowuj style punktów trasy w Dialog Input & Waypoint Style Builder.

Kreator dialogów i stylów punktów trasy →

Więcej poradników

Zobacz wszystkie →