Menüs schreiben

Erstes Menü #

Jede .yml-Datei unter plugins/CrossMenu/menus/ ist ein Menü. Der Pfad ohne .yml wird zu seiner ID.

yaml
title: "&8Shop"
rows: 3
open-commands: [shop]

items:
  diamonds:
    slot: 13
    material: DIAMOND
    name: "&bDiamonds"
    lore:
      - "&7Click to buy"
    left-actions:
      - "[console] give {player} diamond 1"
      - "[message] &aPurchased."

Verwende type: confirm oder type: input für Bestätigungs- und Texteingabemenüs. Bedrock-Spieler erhalten native Formulare, wenn Geyser oder Floodgate verfügbar ist. Java-Dialoge werden verwendet, wenn der Server sie unterstützt; andernfalls öffnet CrossMenu die Truhenversion.

Ein Menü ohne Befehl öffnen #

Neben open-commands kann sich ein Menü öffnen, wenn ein Spieler beitritt oder mit einem bestimmten Gegenstand klickt:

yaml
open-triggers:
  join: true # open shortly after joining
  join-delay-ticks: 40 # default 20, allowed 1-1200
  item:
    material: COMPASS # the item in the main hand
    name: "&aServer menu" # optional; colour codes are ignored when comparing
    click: right # right (default), left or any

open-permission, open-requirement und das Öffnungs-Ratenlimit des Menüs gelten wie gewohnt. Ein passender Klick wird abgebrochen, der Gegenstand tut also nichts anderes. Nur ein Menü kann einen Auslöser beanspruchen: Beanspruchen zwei Menüs denselben Beitritt oder denselben Gegenstand samt Klick, gewinnt das Menü, dessen ID zuerst kommt, und die Konsole meldet das. Gib einem Citizens-NPC den Spielerbefehl crossmenu open <menu>.

Komponenten #

Lege gemeinsame Definitionen in eine beliebige .yml-Datei unter plugins/CrossMenu/components/. Jeder Schlüssel der obersten Ebene ist eine Komponente.

yaml
# components/common.yml
close-button:
  material: BARRIER
  name: "&cClose"
  actions: ["[close]"]

dark-pane:
  material: BLACK_STAINED_GLASS_PANE
  name: " "

Verwende eine Komponente in einem Menü und überschreibe nur, was sich ändert:

yaml
items:
  close:
    component: close-button
    slot: 22

  back:
    extends: [close-button, dark-pane]
    slot: 18
    name: "&eBack"

Komponenten werden von links nach rechts zusammengeführt. Im Menü geschriebene Schlüssel gewinnen immer. Listen und Skalarwerte werden als Ganzes ersetzt. Ein leerer lokaler Schlüssel entfernt den geerbten Wert. Unbekannte Namen, Schleifen und Typkonflikte werden mit Quelldatei und Zeile gemeldet.

Matrix-Layouts #

Eine Matrix macht Inventar-Layouts lesbar. Jede Zeile muss genau neun Zeichen enthalten. . und Leerzeichen sind leere Zellen.

yaml
rows: 3
matrix:
  - "OOOOOOOOO"
  - "O..S.C..O"
  - "OOOOOOOOO"

items:
  shop:
    symbol: S
    material: EMERALD
    name: "&aShop"
  close:
    symbol: C
    component: close-button

fill-item:
  material: GRAY_STAINED_GLASS_PANE
  name: " "

fill-item deckt Zellen ab, die kein sichtbarer Gegenstand belegt, und wird immer hinter normalen Gegenständen gezeichnet. Slot- Nummern und Symbole können im selben Menü verwendet werden.

Aktionen und Bedingungen #

Zu den gängigen Aktionen gehören Spieler- und Konsolenbefehle, Nachrichten, Broadcasts, Sounds, Titel, Menü- Navigation, Schließen, Aktualisieren, Verbinden, Wirtschaftsänderungen und Gegenstandsänderungen.

yaml
left-actions:
  - "[takemoney] 250"
  - "[console] give {player} diamond 1"
  - "[sound] entity.player.levelup"

left-click-requirement:
  requirements:
    funds:
      type: has money
      amount: 250
  deny-actions:
    - "[message] &cYou need $250."

Bedingungen decken Berechtigungen, Geld, Erfahrung, Gegenstände, Vergleiche, Java-/Bedrock-Erkennung, Welt, Spielmodus, Datum/Uhrzeit und logische Gruppen ab. DeluxeMenus-Aliase wie perm, hasitem, equals, greater than, not equal to und != werden akzeptiert.

[player] führt den Befehl genau so aus, wie er geschrieben steht. Registriert kein Plugin diesen Befehl, passiert nichts, und der Spieler sieht keine Nachricht (DeluxeMenus zeigt hier das „Unknown command“ des Servers). Tippe einen neuen Befehl einmal selbst ein, um zu prüfen, ob er existiert.

Klicktypen, Seitenwechsel, Animationen, Berechnungen, generierte Listen, Sprachvarianten, Abklingzeiten und Nutzungslimits findest du in den mitgelieferten Beispielmenüs.