Plugin Config

The main plugin settings live in OFTRelics/config.yml. It controls the relic menus and their slots, the spatial menu, the HUD, the generated resource pack and debug logging. Messages and the admin menu's texts live in OFTRelics/lang.yml. Every option below is annotated inline.

After editing, run /oftrelics reload to apply your changes (or /oftrelics reloadpack if you only changed the resource-pack section or a HUD size or colour).

Sections

SectionWhat it controlsExplained on
debugDiagnostic messages in the consoleAdvanced Configuration
menuWhich menu /relics opens by defaultMenus and HUD
relics-guiThe chest menu, its slots, equip feedback and death dropsThe Gameplay, Menus and HUD
cursor-menuThe spatial menuMenus and HUD
hudThe relic HUDMenus and HUD
resource-packPack generation, hosting and delivery, GUI glyphs and iconsResource Pack

Slot options

Each entry in relics-gui.slots takes these keys:

KeyMeaning
idUnique slot id (lowercase letters, numbers, _, ., -). Equipped relics are saved under it, so renaming a slot gives its relics back to their owners
row, columnPosition in the chest menu (rows 1 to relics-gui.rows, columns 1 to 9)
supportsWhich relics fit: type:<type>, relic:<id> or *. Defaults to *
conditionslibreforge conditions that unlock the slot; [] is always unlocked
empty-displayThe item shown in an unlocked, empty slot: item (an item lookup), model (a gui-icons id), name and lore
locked-displayThe item shown in a locked slot, with the same keys

In a display's name and lore, %slot% is the slot id, a lore line with %supported% is repeated for each supports entry, and a lore line with %conditions% is repeated for each unmet condition's not-met-lines.

Default config.yml

# OFTRelics configuration.
# Keys you add (e.g. cursor-menu.layout.slots, extra resource-pack.gui-glyphs
# or gui-icons) are kept across /oftrelics reload, and default keys missing
# from this file are added back. Whenever this file's keys differ from the
# defaults, eco rewrites the whole file on reload, which drops these comments;
# the bundled copy inside the plugin jar always keeps them.

debug:
  # Master switch for detailed diagnostic messages in the server console.
  enabled: false

  # Categories can be disabled independently while the master switch is on.
  categories:
    relic-loading: true # Config parsing, registry clearing and CustomItem creation.
    recipes: true       # Recipe enablement, validation and registration.
    loot: true          # Every matching loot-table event and chance roll (noisy).
    resource-pack: true # Pack scan, build, hash and publish lifecycle.
    pack-http: false    # Every HTTP request to the built-in pack host (very noisy).
    delivery: true      # Join/status events and pack sends to players.
    display: false      # Item display refreshes (extremely noisy).
    equipment: true     # GUI slot loading, equip/unequip and holder refreshes.

# /oftrelics menu [chest|spatial|admin] and /relics [chest|spatial|admin]
# open a relic menu; each type also needs oftrelics.command.menu.<type>.
menu:
  # What the command opens when no type is given (also a bare /oftrelics):
  # chest, spatial (the cursor menu below) or admin. Players can override it
  # for themselves with /oftrelics style <type> (needs oftrelics.command.style
  # and that type's oftrelics.command.menu.<type>); /oftrelics style default
  # goes back to this.
  default-type: chest

# Relics are equipped here and are no longer activated by holding them.
relics-gui:
  rows: 6
  title: ""
  # Bitmap background rendered through the generated default-font glyph.
  background-glyph: relics_menu

  # (Optional) Whether equipped relics drop when their wearer dies. Equipped
  # relics live outside the player's inventory, so by default (false) they
  # are kept through death. A relic's own "drop-on-death" overrides this.
  # Ignored when the death keeps inventory (keepInventory gamerule, etc).
  drop-on-death: false

  # Feedback played to a player when they equip any relic. sound/particle are
  # Bukkit Sound/Particle enum names. Set enabled: false to turn it all off,
  # or set sound or particle to "" to turn off just that part. (Removing the
  # keys doesn't work: missing default keys are added back on reload.)
  equip-feedback:
    enabled: true
    sound: entity_experience_orb_pickup
    volume: 1.0
    pitch: 1.2
    particle: enchant
    particle-count: 15

  # eco FillerMask. Each character maps to the item at the same index.
  mask:
    items:
      - black_stained_glass_pane name:" "
    pattern:
      - "000000000"
      - "000000000"
      - "000000000"
      - "000000000"
      - "000000000"
      - "000000000"

  # Each column below is a dedicated slot type: one relic type per column,
  # with up to 5 slots stacked down that column (row 1 is the decorative
  # header rendered by the background texture, not a real slot). The top
  # two slots of every column are open by default; the rest require the
  # matching oftrelics.slot.<id> permission.
  #
  # Slots are checked from top to bottom in this list when a relic is
  # shift-left-clicked in the player's inventory.
  slots:
    # ---------------------------------------------------------------- Ring
    - id: ring-1
      row: 2
      column: 1
      # Accepted forms: type:<relic type>, relic:<relic id>, or "*".
      # A bare value is treated as a relic ID if it exists, otherwise as a type.
      supports:
        - type:ring
      # LibReforge conditions. An empty list means the slot is always unlocked.
      conditions: []
      empty-display: &ring-empty-display
        item: structure_void
        model: empty-slot
        name: "&e&lEmpty Ring Slot"
        lore:
          - ""
          - "&7Place a compatible &fRing&7 here."
          - ""
      locked-display: &ring-locked-display
        item: barrier
        model: locked-slot
        name: "&c&lLocked Ring Slot"
        lore:
          - ""
          - "&7This slot must be unlocked before"
          - "&7a &fRing&7 can be equipped here."
          - ""
          - "%conditions%"

    - id: ring-2
      row: 3
      column: 1
      supports:
        - type:ring
      conditions: []
      empty-display: *ring-empty-display
      locked-display: *ring-locked-display

    - id: ring-3
      row: 4
      column: 1
      supports:
        - type:ring
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.ring-3
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.ring-3&c."
      empty-display: *ring-empty-display
      locked-display: *ring-locked-display

    - id: ring-4
      row: 5
      column: 1
      supports:
        - type:ring
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.ring-4
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.ring-4&c."
      empty-display: *ring-empty-display
      locked-display: *ring-locked-display

    - id: ring-5
      row: 6
      column: 1
      supports:
        - type:ring
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.ring-5
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.ring-5&c."
      empty-display: *ring-empty-display
      locked-display: *ring-locked-display

    # -------------------------------------------------------------- Amulet
    - id: amulet-1
      row: 2
      column: 3
      supports:
        - type:amulet
      conditions: []
      empty-display: &amulet-empty-display
        item: structure_void
        model: empty-slot
        name: "&e&lEmpty Amulet Slot"
        lore:
          - ""
          - "&7Place a compatible &fAmulet&7 here."
          - ""
      locked-display: &amulet-locked-display
        item: barrier
        model: locked-slot
        name: "&c&lLocked Amulet Slot"
        lore:
          - ""
          - "&7This slot must be unlocked before"
          - "&7an &fAmulet&7 can be equipped here."
          - ""
          - "%conditions%"

    - id: amulet-2
      row: 3
      column: 3
      supports:
        - type:amulet
      conditions: []
      empty-display: *amulet-empty-display
      locked-display: *amulet-locked-display

    - id: amulet-3
      row: 4
      column: 3
      supports:
        - type:amulet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.amulet-3
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.amulet-3&c."
      empty-display: *amulet-empty-display
      locked-display: *amulet-locked-display

    - id: amulet-4
      row: 5
      column: 3
      supports:
        - type:amulet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.amulet-4
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.amulet-4&c."
      empty-display: *amulet-empty-display
      locked-display: *amulet-locked-display

    - id: amulet-5
      row: 6
      column: 3
      supports:
        - type:amulet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.amulet-5
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.amulet-5&c."
      empty-display: *amulet-empty-display
      locked-display: *amulet-locked-display

    # ---------------------------------------------------------------- Cube
    - id: cube-1
      row: 2
      column: 5
      supports:
        - type:cube
      conditions: []
      empty-display: &cube-empty-display
        item: structure_void
        model: empty-slot
        name: "&e&lEmpty Cube Slot"
        lore:
          - ""
          - "&7Place a compatible &fCube&7 here."
          - ""
      locked-display: &cube-locked-display
        item: barrier
        model: locked-slot
        name: "&c&lLocked Cube Slot"
        lore:
          - ""
          - "&7This slot must be unlocked before"
          - "&7a &fCube&7 can be equipped here."
          - ""
          - "%conditions%"

    - id: cube-2
      row: 3
      column: 5
      supports:
        - type:cube
      conditions: []
      empty-display: *cube-empty-display
      locked-display: *cube-locked-display

    - id: cube-3
      row: 4
      column: 5
      supports:
        - type:cube
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.cube-3
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.cube-3&c."
      empty-display: *cube-empty-display
      locked-display: *cube-locked-display

    - id: cube-4
      row: 5
      column: 5
      supports:
        - type:cube
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.cube-4
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.cube-4&c."
      empty-display: *cube-empty-display
      locked-display: *cube-locked-display

    - id: cube-5
      row: 6
      column: 5
      supports:
        - type:cube
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.cube-5
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.cube-5&c."
      empty-display: *cube-empty-display
      locked-display: *cube-locked-display

    # ----------------------------------------------------------------- Belt
    - id: belt-1
      row: 2
      column: 7
      supports:
        - type:belt
      conditions: []
      empty-display: &belt-empty-display
        item: structure_void
        model: empty-slot
        name: "&e&lEmpty Belt Slot"
        lore:
          - ""
          - "&7Place a compatible &fBelt&7 here."
          - ""
      locked-display: &belt-locked-display
        item: barrier
        model: locked-slot
        name: "&c&lLocked Belt Slot"
        lore:
          - ""
          - "&7This slot must be unlocked before"
          - "&7a &fBelt&7 can be equipped here."
          - ""
          - "%conditions%"

    - id: belt-2
      row: 3
      column: 7
      supports:
        - type:belt
      conditions: []
      empty-display: *belt-empty-display
      locked-display: *belt-locked-display

    - id: belt-3
      row: 4
      column: 7
      supports:
        - type:belt
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.belt-3
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.belt-3&c."
      empty-display: *belt-empty-display
      locked-display: *belt-locked-display

    - id: belt-4
      row: 5
      column: 7
      supports:
        - type:belt
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.belt-4
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.belt-4&c."
      empty-display: *belt-empty-display
      locked-display: *belt-locked-display

    - id: belt-5
      row: 6
      column: 7
      supports:
        - type:belt
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.belt-5
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.belt-5&c."
      empty-display: *belt-empty-display
      locked-display: *belt-locked-display

    # -------------------------------------------------------------- Circlet
    - id: circlet-1
      row: 2
      column: 9
      supports:
        - type:circlet
      conditions: []
      empty-display: &circlet-empty-display
        item: structure_void
        model: empty-slot
        name: "&e&lEmpty Circlet Slot"
        lore:
          - ""
          - "&7Place a compatible &fCirclet&7 here."
          - ""
      locked-display: &circlet-locked-display
        item: barrier
        model: locked-slot
        name: "&c&lLocked Circlet Slot"
        lore:
          - ""
          - "&7This slot must be unlocked before"
          - "&7a &fCirclet&7 can be equipped here."
          - ""
          - "%conditions%"

    - id: circlet-2
      row: 3
      column: 9
      supports:
        - type:circlet
      conditions: []
      empty-display: *circlet-empty-display
      locked-display: *circlet-locked-display

    - id: circlet-3
      row: 4
      column: 9
      supports:
        - type:circlet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.circlet-3
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.circlet-3&c."
      empty-display: *circlet-empty-display
      locked-display: *circlet-locked-display

    - id: circlet-4
      row: 5
      column: 9
      supports:
        - type:circlet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.circlet-4
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.circlet-4&c."
      empty-display: *circlet-empty-display
      locked-display: *circlet-locked-display

    - id: circlet-5
      row: 6
      column: 9
      supports:
        - type:circlet
      conditions:
        - id: has_permission
          args:
            permission: oftrelics.slot.circlet-5
            not-met-lines:
              - "&cRequires permission &foftrelics.slot.circlet-5&c."
      empty-display: *circlet-empty-display
      locked-display: *circlet-locked-display

  # Ordinary eco ConfigSlots, useful for close/help buttons and commands.
  custom-slots: {}

# Experimental: a second relic menu drawn with display entities in front of
# the player, used with the crosshair as a cursor (in the style of "Ultimate
# UI"). It reuses the slots from relics-gui above. Players open it with
# /oftrelics menu spatial (or /relics spatial).
cursor-menu:
  enabled: true

  # screen: the player is switched to spectator mode, seated, and their view is
  #   moved to a fixed point, so the panel stays docked on screen and the
  #   crosshair, hands and HUD are hidden; mouse movement moves a cursor over
  #   the panel (with ping-sized lag). Left click presses a button, sneaking
  #   closes. The previous game mode is restored on close (or on the next join
  #   after a crash). Needs the packetevents plugin, otherwise world is used.
  # world: the panel is placed in the world in front of the player and the
  #   crosshair is the cursor (no lag, but the camera moves freely).
  mode: screen
  screen:
    # Horizontal position of the panel, in degrees from the centre of the view
    # (negative = left).
    offset: 0
    # Cursor speed multiplier.
    sensitivity: 1.0
    # Cursor square size in blocks and its #AARRGGBB colour.
    cursor-size: 0.035
    cursor-color: "#FFFFFFFF"
    # Seconds after taking damage during which the menu can't be opened (the
    # player is in spectator mode while it is open, so they can't be hurt).
    combat-cooldown: 5

  # Panel geometry in blocks. The panel is placed this far in front of the
  # player's eyes when the menu opens.
  distance: 1.8
  vertical-offset: 0.0
  cell-size: 0.22
  padding: 0.08
  icon-scale: 0.17
  # Icon size multiplier while the crosshair is over a slot.
  hover-scale: 1.3
  text-scale: 0.3
  # Tooltip wrap width in font pixels.
  tooltip-width: 160

  # #RRGGBB or #AARRGGBB.
  colors:
    background: "#C8140F1E"
    cell: "#78302838"
    locked: "#78401818"
    hover: "#C8D69B45"

  title: "&#d69b45&lRelics"
  hint: "&7Click: equip / remove &8| &7Sneak: close"

  # World mode: seat the player on an invisible anchor so they can't walk away
  # while the menu is open. Sneaking leaves the seat and closes the menu.
  # (Screen mode always holds the player in place.)
  freeze-player: false
  # World mode without freeze-player: the panel moves along with the player as
  # they walk (it keeps facing the same way).
  follow-player: true

  # (Optional) The menu's own grid instead of the relics-gui rows/columns.
  layout:
    # Close up rows and columns that hold no slot (e.g. the gaps between the
    # chest menu's columns 1, 3, 5, 7, 9).
    compact: false
    # Slot id -> "row, column". When this list is not empty, only the listed
    # slots are shown, at these positions. Example:
    #   ring-1: "1, 1"
    #   ring-2: "2, 1"
    #   amulet-1: "1, 2"
    slots: {}
  close-on-damage: true

  # Sound keys (e.g. ui.button.click). Leave empty to disable.
  hover-sound: "block.note_block.hat"
  click-sound: "ui.button.click"

# Experimental: shows the icons of equipped relics on screen. Icons are the
# relics' item.texture PNGs, added to the generated pack as glyphs of the
# <namespace>:hud font. Relics drawn with a custom model/definition fall back
# to no-icon-text. Players toggle it with /oftrelics hud.
hud:
  enabled: true
  default-enabled: true

  # bossbar: the title of a boss bar (colour: bar-color) at the top of the screen.
  # actionbar: above the hotbar (other plugins using the action bar will
  # fight over it).
  mode: bossbar
  # Colour of the HUD's boss bar: pink, blue, red, green, yellow, purple or
  # white. With hide-bar-texture the pack makes this colour's bar sprites
  # transparent so only the HUD is visible, which also hides the bar of any
  # other plugin's boss bar of the same colour - so pick one nothing else on
  # the server uses. Vanilla uses pink (dragon), purple (wither), red (raids);
  # white is the default of /bossbar and many plugins. Needs /oftrelics reloadpack.
  bar-color: yellow
  hide-bar-texture: true
  # Keep the HUD's boss bar above the others (dragon, wither, raids, other
  # plugins) by re-sending those to the client after ours. Needs packetevents.
  # When false, the HUD's bar is simply added below any bars already showing.
  bar-on-top: false

  # popup: nothing on screen until a relic gains xp; then its icon, a wide xp
  #   bar and its level slide down from the top edge, stay for a moment and
  #   slide back up (boss bar mode only).
  # static: every equipped relic's icon, small xp bar and level, always.
  style: popup
  popup:
    hold-seconds: 3
    # Played when a relic levels up while the popup shows it (on top of the
    # relic's own leveling.level-up-sound). Empty to disable.
    level-up-sound: "ui.toast.challenge_complete"
    level-up-volume: 0.5
    level-up-pitch: 1.2
    # Size of the popup's xp bar in pixels. Needs /oftrelics reloadpack.
    bar-width: 64
    bar-height: 4
    # #RRGGBB or #AARRGGBB; the highlight is the bar's top row.
    colors:
      fill: "#3FB950"
      fill-highlight: "#7EE787"
      max: "#E3A008"
      max-highlight: "#FFD866"
      background: "#C8141414"

  # The settings below are for the static style.
  update-ticks: 10

  # Icon size and vertical position in font pixels (ascent must not exceed
  # height; lower it to move icons down). Needs /oftrelics reloadpack.
  icon-height: 16
  icon-ascent: 7

  # Vertical position of HUD text in font pixels (vanilla text uses 7); the
  # default centres it on 16px icons. Needs /oftrelics reloadpack.
  text-ascent: 3

  # One entry per equipped relic. %icon%, %level% and %name% are replaced;
  # %bar% draws the relic's xp progress under the icon placed before it.
  entry: "%icon%%bar% &7Lv &f%level%"
  # Used instead of entry for relics without leveling.
  entry-no-leveling: "%icon%"
  no-icon-text: "&7%name%"
  # Pixels between entries.
  spacing: 8

  # Small xp bar under each icon (the %bar% placeholder), as wide as the icon.
  # Needs /oftrelics reloadpack.
  bar:
    enabled: true
    # Thickness in pixels.
    height: 2
    # #RRGGBB or #AARRGGBB; max is used once the relic reached its max level.
    colors:
      fill: "#55D86A"
      max: "#FFB43C"
      background: "#B4141414"

resource-pack:
  # Builds plugins/OFTRelics/pack.zip from relic configs and the pack/ folder.
  enabled: true
  # Namespace of the pack's own assets, models and fonts. Relic texture and
  # model paths without a "namespace:" resolve against it. The bundled
  # textures are copied to pack/assets/<namespace>/ when this changes; files
  # you added under the old namespace have to be moved by hand.
  namespace: oftrelics
  description: "OFTRelics Server Pack"

  # Pack formats the pack declares support for: pack-format is the oldest
  # (46 = Minecraft 1.21.4, the oldest client with the item model files this
  # pack uses), max-pack-format the newest (88 = Minecraft 26.2). Clients
  # outside this range are told the pack is incompatible.
  pack-format: 46
  max-pack-format: 88
  minify-json: true

  # The only deployment mode supported by OFTRelics: host the generated ZIP
  # directly from the Minecraft server.
  self-host:
    enabled: true
    bind: "0.0.0.0"
    # Not 8163: that is EcoItems' self-hosted pack port, and two hosts can't
    # share a port.
    port: 8173
    # The address reachable by players, including http(s) and the port, for
    # example: "http://203.0.113.4:8173". Required: while it is blank the pack
    # is built but not served, unless auto-detect-public-ip is on.
    public-url: ""
    # (Optional) With public-url blank, look up the server's public IPv4 on
    # reload through outside "what's my IP" services (api.ipify.org,
    # checkip.amazonaws.com, ipv4.icanhazip.com) and serve the pack at that IP
    # and the port above. Off by default: it doesn't work behind NAT, panels
    # or port forwarding, where the detected IP or port isn't what players
    # connect through.
    auto-detect-public-ip: false

  delivery:
    prompt: "&fThis server uses a resource pack for custom relics"
    required: false
    kick-on-decline: false
    send-on-join: true
    join-delay-ticks: 10
    send-on-reload: true

  # GUI backgrounds/icons implemented as bitmap font glyphs. Put each PNG at
  # pack/assets/oftrelics/textures/<texture>.png, then obtain its character
  # as a correctly-fonted Adventure component with
  # ResourcePackManager.glyphComponent(id) or decorateGuiTitle(...).
  gui-glyphs:
    relics_menu:
      texture: gui/relics_menu
      # Matches EcoItems-style 256px GUI background positioning.
      ascent: 37
      height: 256
      width: 256
      codepoint: "U+E000"
      # (Optional) Empirical horizontal nudge in pixels, positive shifts right,
      # negative shifts left. Tune this the same way as ascent if the
      # auto-centered background sits a few pixels off horizontally.
      offset-x: 1

  # Standalone item-model icons, referenced by id from a "model:" key on any
  # display config (e.g. relics-gui empty-display/locked-display). Put each
  # PNG at pack/assets/oftrelics/textures/<texture>.png.
  gui-icons:
    empty-slot:
      texture: item/plus_gray
      texture-parent: generated
    locked-slot:
      texture: item/lock_gray
      texture-parent: generated

Default lang.yml

messages:
  prefix: "&#d69b45&lOFTRelics&r &8» &r"
  no-permission: "&cYou don't have permission to do this!"
  not-player: "&cThis command must be run by a player."
  invalid-command: "&cUnknown subcommand! Use /oftrelics <menu|style|hud|reload|give|reloadpack|sendpack|setlevel|givexp>."
  style-current: "&f/relics opens the &a%style%&f menu for you. Change it with &a/oftrelics style <%types%>&f."
  style-set: "&f/relics now opens the &a%style%&f menu for you."
  style-reset: "&f/relics now opens the server default (&a%style%&f) for you."
  menu-unknown-type: "&cUnknown menu type! Use /relics <%types%>."

  reloaded: "&fReloaded in &a%time%ms&f; loaded &a%count%&f relics."
  invalid-player: "&cUnknown or offline player."
  invalid-relic: "&cUnknown relic."
  invalid-level: "&cInvalid level; must be a positive whole number."
  invalid-xp: "&cInvalid xp amount; must be a number."
  give-success: "&fGave &a%amount%x %relic%&f to &a%recipient%&f."

  relic-item-required: "&cOnly a configured relic can be placed in this slot."
  relic-slot-locked: "&cThis relic slot is locked."
  relic-slot-empty: "&cThis relic slot is already empty."
  relic-slot-occupied: "&cRemove the equipped relic first with shift-left-click."
  relic-slot-incompatible: "&c%relic% is not compatible with this slot."
  relic-max-active: "&cYou already have the maximum of &f%max%&c %relic% equipped."
  relic-no-compatible-slot: "&cThere is no unlocked empty slot compatible with %relic%."
  relic-equipped: "&fEquipped &a%relic%&f."
  relic-soulbound: "&cThis relic is bound to another player and cannot be equipped by you."
  relic-not-levelling: "&cThat relic doesn't have leveling configured."
  relic-not-equipped: "&c%recipient% doesn't have %relic% equipped."
  setlevel-success: "&fSet &a%recipient%&f's &a%relic%&f to level &a%level%&f."
  givexp-success: "&fGave &a%amount%&f xp to &a%recipient%&f's &a%relic%&f (now level &a%level%&f)."

  cursor-menu-disabled: "&cThe cursor menu is disabled on this server."
  cursor-menu-in-combat: "&cYou can't open the relic menu right after taking damage."
  cursor-menu-unsafe: "&cStand still on solid ground to open the relic menu."
  cursor-no-relic-for-slot: "&cYou have no relic in your inventory that fits this slot."
  cursor-close-tooltip: "&cClose"
  hud-enabled: "&fRelic HUD &aenabled&f."
  hud-disabled: "&fRelic HUD &cdisabled&f."
  hud-unavailable: "&cThe relic HUD is turned off on this server."

  pack-reloaded: "&fResource pack rebuilt and deployed in &a%time%ms&f."
  pack-sent: "&fResource pack sent to &a%recipient%&f."
  pack-unavailable: "&cThe resource pack is not published. Check self-host.public-url and the console."
  pack-disabled: "&cResource pack generation is turned off (resource-pack.enabled)."
  pack-not-self-hosted: "&cThe resource pack is built but not served: resource-pack.self-host.enabled is false."
  craft-no-permission: "&cYou don't have permission to take this item."
  pack-declined: "&cThe server resource pack is required."

# /oftrelics menu admin (or /relics admin): relic browser for admins (category picker, then the relics in it).
admin-gui:
  title: "&8Relics &7(admin)"
  category-title: "&8Relics: %category%"
  category-name: "&6%category%"
  category-count: "&7Relics: &f%count%"
  category-open: "&eClick to open"
  relic-id: "&8%id%"
  give-one: "&eClick &7to get 1"
  give-stack: "&eShift-click &7to get a stack"
  back: "&eBack to categories"
  previous-page: "&ePrevious page"
  next-page: "&eNext page"
  empty: "&cNo relics are loaded"
  # Display names per relic type; types not listed here are shown capitalized.
  categories:
    ring: "Rings"
    amulet: "Amulets"
    belt: "Belts"
    circlet: "Circlets"
    cube: "Cubes"

Messages support colour codes and hex colours. Placeholders such as %relic%, %recipient%, %amount%, %level%, %time%, %count%, %style% and %types% are filled in by the plugin where the default message uses them.


Where to go next

  • Understand what you're configuring: The Gameplay explains slots, types and unlocking.

  • The menus and the HUD in depth: Menus and HUD.

  • Commands to apply and test changes: Commands and Permissions.