Menús
Las ciento dieciocho pantallas, qué carpeta conserva tus cambios y cómo, el esquema de archivo y las acciones que puedes enlazar en otro sitio.
Vienen ciento dieciocho archivos de menú, en dos sitios que se comportan de forma completamente distinta.
| Carpeta | Archivos | Comportamiento |
|---|---|---|
modules/<id>/menus/, y menus/currency_select.yml | 69 | Se escriben si faltan y después se mantienen al día sin deshacer tus cambios. Tuyos. |
menus/admin/ | 49 | La carpeta entera se borra y se vuelve a extraer del jar en cada arranque, cada /sc reload y cada /exylialib reload. |
Treinta y cuatro de esos cuarenta y nueve empiezan con una cabecera que dice que el archivo es tuyo,
que se escribe una vez y nunca se sobrescribe. Otros doce dicen DO NOT EDIT — REGENERATED ON EVERY STARTUP, que es cierto salvo que también pasa en cada recarga; las tres pantallas de salas de duelo no
llevan cabecera. Diga lo que diga la cabecera, lo que edites bajo menus/admin/ se destruye en silencio
en el siguiente reinicio o recarga.
Las excepciones en el otro sentido son modules/warps/menus/warp_setup.yml y las cinco pantallas de
administración de protecciones de modules/protections/menus/: editores de administración que viven
fuera de menus/admin/ y por tanto se conservan como cualquier otro menú tuyo.
Un archivo malformado se nombra en el log y se deja sin registrar, en vez de cargarse vacío en silencio.
Cómo se mantienen al día tus menús
Cada carpeta de menús tuyos se refresca al arrancar y en cada recarga, antes de leer los menús. Para
cada archivo el plugin compara tres cosas: lo que hay en disco, lo que viene esta vez y los valores por
defecto que tenías la última vez, que guarda en .defaults/files/ dentro de la carpeta del plugin.
- Un archivo que falta se escribe.
- Una clave que añade una versión se escribe en tu archivo al momento, comentarios incluidos. Nadie puede haber elegido algo que todavía no existía.
- Un valor por defecto que cambia en una clave que nunca tocaste no se aplica. Espera en
/exylialib updates, donde lo aplicas o te quedas con lo que tienes. - Lo que hayas cambiado o borrado no se toca nunca.
En un servidor que ya tenía los archivos antes de que existiera este seguimiento, cada valor que hay en
disco cuenta como tuyo, y una clave que falta en un archivo se ofrece en /exylialib updates en vez de
escribirse — puede ser una que borraste tú. Un archivo que no se puede leer se deja como está y se
avisa.
Archivos que declaran una versión
Las veintiuna pantallas de protecciones y modules/player-settings/menus/settings.yml llevan
menu-version: 4. Cuando una versión trae un número mayor que el del archivo en disco (un archivo sin
la clave cuenta como 0), el archivo se sustituye entero, con tus cambios, y el anterior se guarda al
lado como <nombre>.yml.v<versión anterior>. Eso queda para un cambio de diseño que un archivo viejo no
puede aguantar.
Una vez que el plugin ha instalado un archivo, si ese archivo desaparece cuenta como borrado por ti, y no
se vuelve a escribir. El menú entonces no se registra: el log nombra el archivo que no se pudo leer, y lo
que abre esa pantalla no hace nada. Para recuperar el archivo que viene con el plugin, borra también su
copia en .defaults/files/ — la misma ruta, .defaults/files/modules/homes/menus/homes.yml para
modules/homes/menus/homes.yml — y recarga.
Las cabeceras de modules/crates/menus/history.yml, modules/crates/menus/preview.yml, las tres
pantallas de modules/economy/menus/ y menus/currency_select.yml siguen diciendo que se escriben una
vez y nunca se sobrescriben. Tus cambios se conservan, pero las claves que añade una versión se escriben
en ellos como se explica arriba.
La ventana de intercambio, modules/trade/window.yml, no es un archivo de menú — sus ranuras las fija
el plugin — pero se mantiene al día de la misma forma. Consulta
Intercambio y baúles.
Los menús de jugador
Estos son los que merece la pena estilizar.
| Menú | Lo abre |
|---|---|
homes/homes | /home, /homes |
homes/home_edit | Un home de esa lista |
warps/warp_list | /warp |
rtp/rtp | /rtp sin mundo |
near/near_list | /near, con display-mode: UI |
tpa/tpa_confirm | Enviar un /tpa con la confirmación activada |
kits/list | /kit |
kits/preview | /kit preview, /kitadmin preview |
kits/container | Una shulker o un bundle dentro de la vista previa de un kit |
rewards/list | /rewards |
rewards/preview | /rewards preview, /rewardsadmin preview, una recompensa de esa lista |
crates/preview | /crates, /crates preview, clic derecho en un bloque de caja |
crates/history | /crates history |
bounties/bounty_list | /bounty |
bounties/bounty_contributions | Una cabeza de esa lista |
bounties/bounty_place_confirm | /bounty place |
graves/graves | /graves |
rankup/rankup | /rankup |
playtime-rewards/playtime-rewards | /playtime |
farming/farming | /farming |
stats/stats | La acción stats_open (/stats nunca se registra — ver Combate) |
stats/stats-leaderboard | Una fila de stat de esa pantalla |
missions/missions | /missions |
seasons/seasons | /seasons |
seasons/season_board | Una temporada de esa lista |
votes/vote | /vote |
boosters/boosters | /boosters |
economy/wallet | /wallet, /economy wallet |
economy/top | /baltop, /economy top |
economy/history | /economy history |
shop/shop | /shop |
shop/category | /shop <categoría>, una categoría de la tienda |
shop/amount | Un producto de una categoría |
market/market | /market |
market/my_listings | /market mine |
market/preview | Un anuncio |
market/confirm | Comprar un anuncio |
auctions/auctions | /auction |
auctions/my_auctions | /auction mine |
auctions/bid | Una subasta de la lista |
orders/orders | /orders |
orders/my_orders | /orders mine |
orders/fill | Un pedido del tablón |
vaults/vaults | /vault sin número |
afk-zones/afkzone_preview | /afkzone preview <id> |
player-settings/settings | /settings |
protections/list | /protections |
protections/logs | /protections logs |
protections/manage | Una protección de esa lista |
protections/shop, members, roles, permissions, bans, market, subregions, subregion, rent, warps, warp, perks, merge | Botones de las pantallas de protecciones |
menus/currency_select | Cualquier pantalla que tenga que preguntar la moneda — anunciar en el mercado, empezar una subasta, poner un pedido |
Las pantallas de protecciones se explican en Protecciones.
Las pantallas de administración
Cuarenta y nueve archivos en menus/admin/, un flujo por módulo, alcanzables desde el comando de
administración de ese módulo: minas con sus niveles, composición y cadenas de desgaste; cajas con sus
premios, animación y pity; plantillas de cofre y cofres colocados; spawners de objetos y sus posiciones;
zonas de power-up, sus entradas y sus posiciones; zonas de regeneración y su rejilla de flags; salas de
duelo y sus flags; portales; plataformas de salto; zonas AFK; warps; kits; recompensas; recompensas por
cabeza; categorías y productos de la tienda; monedas y los ajustes de economía; y actualizaciones de
objetos.
Funcionan, y no deberías editarlas. El plugin sustituye la carpeta desde el jar para que un botón añadido en una versión llegue a servidores que ya la tienen.
Fuera de esa carpeta, modules/warps/menus/warp_setup.yml es el editor de warps, y
modules/protections/menus/ guarda las pantallas de administración de protecciones — admin,
admin_protection, tiers, tier y cleanup, a las que se llega desde /protections admin. Esas
seis se conservan como cualquier menú tuyo. Consulta
Administrar protecciones.
El esquema de archivo
Un archivo de menú es:
title: "…"
size: 54
type: PAGINATION
open_sounds: ["UI_BUTTON_CLICK|1.0|1.0"]
click_sounds: []
refresh: { mode: SMART, interval: 40 }
filler:
global: { material: GRAY_STAINED_GLASS_PANE, name: " " }
pagination: { material: BARRIER, name: "Nada aquí" }
pagination:
slots: '10-16,19-25,28-34'
item_template: { material: "%icon%", name: "%name%", lore: [], actions: ["survivalcore:…"] }
navigation:
previous: { slot: 45, material: ARROW }
next: { slot: 53, material: ARROW }
items:
close: { slot: 49, material: BARRIER, name: "Cerrar", actions: ["survivalcore:close_menu"] }| Clave | Qué hace |
|---|---|
size | Siempre size, nunca rows |
type | Decorativo. Un menú pagina porque tiene un bloque pagination:, no por esto |
refresh | {mode: ON_CLICK, click_delay: 4} o {mode: SMART, interval: N} |
filler.global | El fondo |
filler.custom.<nombre> | Un segundo relleno con sus propios slots |
filler.pagination | Lo que se dibuja cuando la lista está vacía |
pagination.slots | '0-35', o un conjunto de rangos separados por comas |
sections | Grupos de ranuras con nombre, con sus propias plantillas y navegación. Los usan la vista previa de kit y su pantalla de contenedor, la vista previa de recompensa, la tienda y sus categorías, y la vista previa del mercado |
animation | center_out |
menu-version | Solo en los archivos que declaran una; ver arriba. No la toques |
Plantillas de estado
Una lista paginada puede dibujar una fila distinta según su estado.
modules/kits/menus/list.yml tiene cuatro — item_template, cooldown_template, used_template,
locked_template — y la sección de reclamo de la vista previa de kit tiene seis.
Acciones
La clave es siempre actions:, una lista de cadenas. El tipo de clic es un prefijo dentro de la
cadena:
actions:
- "left: survivalcore:mine_edit %mine_id%"
- "right: survivalcore:mine_delete %mine_id%"
- "shift_left: survivalcore:mine_set_weight %mine_id%"left:, right:, middle:, shift_left:, shift_right: y drop: son los prefijos; sin prefijo
vale cualquier clic. survivalcore:<nombre> es una de las trescientas treinta y siete acciones de este
plugin; close, previous_page y next_page son de ExyliaLib.
Materiales
Un material de Bukkit, un placeholder (%kit_icon%), basehead-<base64>, playerhead-%name% o
playerhead:%name%. Las dos formas de cabeza se usan en los archivos que vienen.
Acciones que merece la pena enlazar en otro sitio
El plugin registra 337 acciones bajo el espacio survivalcore:, y funcionan desde cualquier menú de
ExyliaLib de cualquier plugin: un selector de hub, un NPC, un objeto de hotbar. Cada una no hace nada
mientras su módulo está apagado. Las que más merece la pena conocer:
| Acción | Qué abre |
|---|---|
survivalcore:homes_open | Los homes del jugador |
survivalcore:warp_open_list | La lista de warps |
survivalcore:kit_open_list | La lista de kits |
survivalcore:reward_open_list | La lista de recompensas |
survivalcore:crate_open_list | La lista de cajas |
survivalcore:rankup_open | La escalera de rangos |
survivalcore:stats_open | El perfil de estadísticas del jugador |
survivalcore:missions_open | Las misiones |
survivalcore:seasons_open | La lista de temporadas |
survivalcore:votes_open | La pantalla de votos |
survivalcore:boosters_open | Los potenciadores del jugador |
survivalcore:shop_open | La tienda |
survivalcore:market_open | El mercado |
survivalcore:auctions_open | La casa de subastas |
survivalcore:orders_open | El tablón de pedidos |
survivalcore:vaults_open | La lista de baúles del jugador |
survivalcore:graves_open | Las tumbas del jugador |
survivalcore:protections_open | Las protecciones del jugador |
survivalcore:settings_open | La pantalla de preferencias |
survivalcore:close_menu | Cerrar |
Cada acción que cambia estado de administración vuelve a comprobar el permiso de su módulo dentro del manejador. Poner un botón de administración en un menú de jugador no le da acceso a nadie: solo le da un botón que se niega.
survivalcore:spawner_import_from_chest y survivalcore:lc_import_from_chest implementan un flujo
completo de "haz clic en un cofre para importar su contenido como tabla de loot", y ningún menú que
viene llama a ninguna de las dos. Enlazarla en tu propio menú es la única forma de alcanzarla.
¿Falta algo en esta página? Dínoslo en Discord