Escribir menús

Primer menú #

Cada archivo .yml dentro de plugins/CrossMenu/menus/ es un menú. La ruta sin .yml se convierte en su identificador.

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

Usa type: confirm o type: input para menús de confirmación y de entrada de texto. Los jugadores de Bedrock reciben formularios nativos cuando Geyser o Floodgate están disponibles. Los diálogos de Java se usan cuando el servidor los admite; en caso contrario, CrossMenu abre la versión de cofre.

Abrir un menú sin comando #

Además de open-commands, un menú puede abrirse cuando un jugador entra o hace clic con un objeto concreto:

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

El open-permission, el open-requirement y el límite de frecuencia de apertura del menú se aplican como siempre. Un clic que coincide se cancela, así que el objeto no hace nada más. Solo un menú puede reclamar un activador: si dos menús reclaman la misma entrada o el mismo objeto y clic, gana el que tiene el identificador que va primero y la consola lo indica. Para un NPC de Citizens, dale al NPC un comando de jugador crossmenu open <menu>.

Componentes #

Pon las definiciones compartidas en cualquier archivo .yml dentro de plugins/CrossMenu/components/. Cada clave de nivel superior es un componente.

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

dark-pane:
  material: BLACK_STAINED_GLASS_PANE
  name: " "

Usa un componente en un menú y sobrescribe solo lo que cambia:

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

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

Los componentes se combinan de izquierda a derecha. Las claves escritas en el menú siempre ganan. Las listas y los valores escalares se reemplazan por completo. Una clave local vacía elimina el valor heredado. Los nombres desconocidos, los bucles y los conflictos de tipo se notifican con su archivo de origen y su línea.

Diseños matrix #

Una matrix hace legibles los diseños de inventario. Cada fila debe contener exactamente nueve caracteres. . y los espacios son celdas vacías.

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 cubre las celdas que ningún objeto visible ocupa y siempre se dibuja detrás de los objetos normales. Los números de ranura y los símbolos pueden usarse en el mismo menú.

Acciones y requisitos #

Las acciones habituales incluyen comandos de jugador y de consola, mensajes, anuncios, sonidos, títulos, navegación entre menús, cerrar, actualizar, conectar, cambios de economía y cambios de objetos.

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

Los requisitos abarcan permisos, dinero, experiencia, objetos, comparaciones, detección de Java/Bedrock, mundo, modo de juego, fecha/hora y grupos lógicos. Se aceptan alias de DeluxeMenus como perm, hasitem, equals, greater than, not equal to y !=.

[player] ejecuta el comando exactamente como está escrito. Si ningún plugin registra ese comando, no pasa nada y el jugador no ve ningún mensaje (DeluxeMenus muestra aquí el «Unknown command» del servidor). Escribe tú mismo un comando nuevo una vez para comprobar que existe.

Consulta los menús de ejemplo incluidos para ver tipos de clic, paginación, animaciones, cálculos, listas generadas, variantes de idioma, tiempos de espera y límites de uso.