Escrever menus

Primeiro menu #

Cada arquivo .yml em plugins/CrossMenu/menus/ é um menu. O caminho sem .yml vira o ID dele.

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

Use type: confirm ou type: input para menus de confirmação e de entrada de texto. Jogadores do Bedrock recebem formulários nativos quando o Geyser ou o Floodgate está disponível. Os diálogos do Java são usados quando o servidor os suporta; caso contrário, o CrossMenu abre a versão em baú.

Abrir um menu sem comando #

Além de open-commands, um menu pode abrir quando um jogador entra ou clica com um determinado item:

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

O open-permission, o open-requirement e o limite de frequência de abertura do menu se aplicam como de costume. Um clique que corresponde é cancelado, então o item não faz mais nada. Apenas um menu pode reivindicar um gatilho: se dois menus reivindicarem a mesma entrada ou o mesmo item e clique, vence aquele cujo ID vem primeiro, e o console avisa. Para um NPC do Citizens, dê ao NPC o comando de jogador crossmenu open <menu>.

Componentes #

Coloque as definições compartilhadas em qualquer arquivo .yml em plugins/CrossMenu/components/. Cada chave de nível superior é um componente.

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

dark-pane:
  material: BLACK_STAINED_GLASS_PANE
  name: " "

Use um componente em um menu e sobrescreva apenas o que muda:

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

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

Os componentes são mesclados da esquerda para a direita. As chaves escritas no menu sempre vencem. Listas e valores escalares são substituídos por inteiro. Uma chave local vazia remove o valor herdado. Nomes desconhecidos, laços e conflitos de tipo são informados com o arquivo de origem e a linha.

Layouts matrix #

Uma matrix torna os layouts de inventário legíveis. Cada linha deve conter exatamente nove caracteres. . e espaços são células vazias.

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 cobre as células que nenhum item visível ocupa e sempre é desenhado atrás dos itens normais. Números de slot e símbolos podem ser usados no mesmo menu.

Ações e requisitos #

As ações comuns incluem comandos de jogador e de console, mensagens, anúncios, sons, títulos, navegação entre menus, fechar, atualizar, conectar, alterações de economia e alterações de itens.

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

Os requisitos abrangem permissões, dinheiro, experiência, itens, comparações, detecção de Java/Bedrock, mundo, modo de jogo, data/hora e grupos lógicos. Aliases do DeluxeMenus como perm, hasitem, equals, greater than, not equal to e != são aceitos.

[player] executa o comando exatamente como foi escrito. Se nenhum plugin registrar esse comando, nada acontece e o jogador não vê nenhuma mensagem (o DeluxeMenus mostra aqui o "Unknown command" do servidor). Digite você mesmo um comando novo uma vez para conferir se ele existe.

Veja os menus de exemplo incluídos para tipos de clique, paginação, animações, cálculos, listas geradas, variantes de idioma, tempos de espera e limites de uso.