Layouts, frames e slots
Um layout é um bloco nomeado do menu. Você o cria no layoutPool de uma entry Open GUI e lhe dá um id. Os outros layouts o alcançam por esse id.
Escolha um layout
| Layout | Use para | Campos |
|---|---|---|
simple | Menus estáticos, bordas e botões fixos. | items |
flex | Itens posicionados automaticamente em linhas. | items, justifyContent, alignItems, wrap, virtualHeight |
paginated | Uma lista dividida em páginas. | itemsPerPage, slots, items, navigationButtons |
scrollable | Conteúdo maior que a janela. | innerId, virtualWidth, virtualHeight, buttons |
frame | Retângulos independentes. | frames |
composite | Camadas desenhadas umas sobre as outras. | children |
book | Um livro escrito. | pages |
merchant | Trocas de aldeões. | trades |
storage | Slots de itens persistentes. | entry, groupKey, slots |
leaderboard | Um ranking de fact. | leaderboard, x, y, width, height, previousButton, nextButton |
simple
Cada item tem um x (coluna, de 0 a 8) e um y (linha, 0 no topo). É o layout para começar.
dropOnClose devolve o que sobrou nos slots do layout quando o menu fecha (inclusive quando outro menu o substitui): o saque que o jogador não pegou ou um item que ele colocou ali. Só itens com allowPickup são devolvidos, uma única vez; decoração nunca. closeDelivery escolhe como: GIVE_OR_DROP (padrão) coloca no inventário e solta o excedente aos pés do jogador, DROP solta tudo. Vem desativado por padrão, e o editor avisa quando está ativo sem nenhum item recolhível.
flex
O flex ignora o x e o y de seus itens e os distribui da esquerda para a direita, linha após linha, ao longo da largura do menu. justifyContent define como uma linha é distribuída (START, CENTER, END, SPACE_BETWEEN), alignItems onde o bloco fica na vertical dentro de virtualHeight, e wrap se uma linha cheia continua na linha seguinte. Sem wrap, os itens além da última coluna são descartados e registrados no log.
paginated
Os itens são divididos em páginas de itemsPerPage e distribuídos nos slots físicos (o índice do slot é y * 9 + x). Quando slots está vazio, eles preenchem o inventário a partir do canto superior esquerdo. Adicione botões em navigationButtons, um por role:
NEXTePREVIOUSaparecem somente quando há uma página para ir.BACKé sempre exibido e volta ao menu anterior.INDICATORnão é clicável e aparece apenas com duas ou mais páginas. Seu nome e lore aceitam{page},{total_pages},{next_page},{prev_page}e{page_indicator}.
Reserve as células dos botões: as páginas preenchem os slots listados em slots e não evitam os seus botões.
scrollable
Um layout scrollable mostra uma janela sobre o layout indicado em innerId. virtualWidth e virtualHeight dão o tamanho da área completa. Adicione buttons com um direction (UP, DOWN, LEFT, RIGHT) e um step, em slots por clique. Cada botão só é exibido quando há algo para rolar na sua direção.
Com showDefaultButtons ativado (o padrão), uma seta é adicionada para cada direção sem entrada em buttons. defaultStep (no mínimo 1) é o número de slots que essas setas rolam por clique; seus próprios botões mantêm o seu step. Desativado, não há setas padrão.
As setas padrão seguem a mesma regra das suas: só aparecem enquanto o conteúdo puder rolar na sua direção. Sem configuração, são itens de seta simples chamados ▲, ▼, ◀ ou ▶, na coluna da direita (coluna 8) para cima e para baixo e na última linha para esquerda e direita. Elas nunca cobrem nada: se a célula já contém um item de conteúdo, um botão ou uma decoração, a seta simplesmente não é exibida, sem mensagem no console. Altere o item, o nome ou a posição de uma seta na lista scrollArrows de GUI Settings.
showDefaultButtons vem ativado por padrão, então um layout scrollable existente ganha setas. Desative-o, ou posicione as setas em outro lugar, para manter o menu exatamente como estava.
A roda do mouse também rola verticalmente o layout rolável em foco enquanto um menu está aberto. Dê um id único a cada layout rolável e paginado, pois a posição é registrada por id.
frame
Um layout frame lista retângulos: id, x, y, width, height e o layoutId do layout que o preenche. O conteúdo do frame é posicionado em relação ao seu canto superior esquerdo. Um frame sem um layoutId resolvível é ignorado. Use @view como layoutId para que a view ativa o preencha.
Um dashboard típico: uma coluna fixa de abas, um frame de conteúdo rolável e um frame de rodapé.
composite
O composite desenha seus children (ids de layouts) em ordem, com os últimos por cima. Coloque o fundo primeiro, o conteúdo no meio e os botões por último. Um filho que não existe é ignorado, e um laço entre layouts resulta em um layout vazio.
Conecte layouts
Um layout é usado quando é referenciado: por mainLayoutId, por um filho de composite, por um innerId de scrollable ou por um layoutId de frame. Um layout que ninguém referencia simplesmente não é desenhado.
Itens e slots
Veja a seção Menus da página do GUI para os campos de um item.