Configurable menus

Every menu has a file in gui/: title, size, position, item, name and description of every button can be changed without touching the code.

Structure of a file

title: "Garage: {name}"
rows: 6
content-slots: 0-44
filler:
  material: GRAY_STAINED_GLASS_PANE
  name: " "
  slots: 45-53
items:
  vehicle:
    material: AUTO
    name: "<white>{name}"
    lore:
      - "<gray>Model: <white>{model}"
  close:
    slot: 45
    material: BARRIER
    name: "<red>Close"
KeyDescription
titleTitle (MiniMessage, with placeholders).
rowsMenu rows, from 1 to 6.
content-slotsSlots filled with the items of paged menus (for example 0-44).
fillerFiller item.
items.<id>A button: slot or slots, material (AUTO lets the plugin choose), model-data, amount, name, lore, glow, hide-flags, enabled and group (buttons in the same group can share a slot).
FileButtons used by the code
garagevehicle, settings, shop, switch, previous, page, next, close
vehicleinfo, enter, spawn, despawn, lock, unlock, doors-open, doors-close, repair, upgrades, trunk, rename, move, delete, back, close
upgradesspeed, tank, acceleration, turning (and the -max variants), back
shopmodel, previous, page, next, back
shop-colorcolor, previous, page, next, back
sell-modelsmodel, previous, page, next, close
sell-commercialpersonal, commercial, back
confirm-salesummary, confirm, cancel
transfer-vehiclesvehicle, previous, page, next, close
confirm-transfersummary, confirm, cancel
pumpamount-1, amount-2, amount-3, full, fill-can
fuel-shopfuel, previous, page, next
fuel-amountamount, previous, page, next, back
garage-settingsmembers, roles, rename, owner, delete, back
membersmember, owner, add, previous, page, next, back
rolesrole, role-default, create, previous, page, next, back
role-pickrole, role-current, previous, page, next, back
role-permissionspermission-on, permission-off, permission-on-locked, permission-off-locked, back
seatsseat-driver-free, seat-driver-taken, seat-free, seat-taken, close
trunktitle only
garage-switchgarage, garage-personal, previous, page, next, back, close
garage-movesame as garage-switch
garage-shopsame as garage-switch
confirm-purchasesummary, confirm, cancel
confirm-garage-deletesummary, confirm, cancel
confirm-vehicle-deletesummary, confirm, cancel

Titles, names and descriptions also accept PlaceholderAPI placeholders (see WorldGuard and other plugins). The files are created on the first start with every button. If a file has an error, the plugin writes it to the log and uses that key's default value.