Configuration

Main sections

SectionPurpose
networkStandalone, same-proxy or cross-proxy behavior and server identity.
storageSQLite, MySQL, MariaDB or MongoDB persistence.
redisRedis settings required by cross-proxy mode.
homesMaximum/default slots, names, icons, colour rules and disabled worlds.
guiAUTO/DIALOG/CHEST selection, sprite/glyph icons and dialog/chest layout.
teleportWarmup, cooldown, movement/damage cancellation and sounds.
textsMenu titles, button labels and tooltips.

config.yml

yaml
license-key: "AP-XXXX-XXXX-XXXX-XXXX"

# =====================================================================
#  Homes
#
#  Colours work everywhere: &c &l style codes, &#ff0000 hex,
#  or <red> <bold> <gradient:#ff0000:#0000ff> tags.
#
#  Chat messages live in messages.yml.
# =====================================================================

network:
  # single-server           - one server. Leave this if you have no proxy.
  # cross-server-same-proxy - several servers behind one proxy.
  # cross-proxy             - several proxies. Needs Redis switched on below.
  mode: single-server

  # This server's name. Must match the name in your velocity.toml.
  server-name: "lobby"

  # Only used for cross-proxy. Every server behind the same proxy shares this.
  proxy-name: "proxy-1"

  # How long a cross-server teleport stays valid after sending the player.
  handoff-timeout-seconds: 30

storage:
  # SQLITE | MYSQL | MARIADB | MONGODB
  # SQLITE needs no setup, but only works for a single server.
  type: SQLITE

  # SQLITE only. A file inside this plugin's folder.
  file: "homes.db"

  host: "127.0.0.1"
  port: 3306
  database: "homes"
  username: "root"
  password: ""
  table-prefix: "homes_"
  pool-size: 8

  # Extra database connection options. Leave alone unless told otherwise.
  properties:
    useSSL: "false"
    characterEncoding: "utf8"

  mongo:
    # Fill this in to use a full connection string instead of the settings above.
    uri: ""
    collection: "homes"

redis:
  # Required for cross-proxy. Optional otherwise.
  enabled: false
  host: "127.0.0.1"
  port: 6379
  username: ""
  password: ""
  database: 0
  ssl: false
  channel: "homes:network"

homes:
  # The most homes anyone can ever have. Also how many slots the menu shows,
  # counting the red locked ones.
  max: 20

  # How many homes a player gets without a homes.limit.<number> permission.
  default-limit: 3

  # Name given by /sethome when you don't type one. {slot} is the slot number.
  default-name: "&fHome {slot}"

  # Icon every new home starts with. Any item.
  default-icon: "minecraft:white_bed"

  # Allow colours in home names. Players also need homes.rename.colors.
  allow-colors: true
  max-name-length: 32

  # Close the gaps after a home is deleted, so homes are always 1, 2, 3...
  # Off by default, because it would move everyone's homes onto other buttons.
  reindex-slots-on-delete: false

  # Worlds where /sethome is not allowed. Not case sensitive.
  # Example:
  #   disabled-worlds:
  #     - "world_nether"
  #     - "minigames"
  disabled-worlds: []

gui:
  # AUTO   - modern menu for new clients, chest menu for old ones. Recommended.
  # DIALOG - always try the modern menu.
  # CHEST  - always use the chest menu.
  mode: AUTO

  # Leave these alone unless the wrong menu is showing up.
  dialog-min-protocol: 772
  use-viaversion: true

  icons:
    # AUTO  - show item icons on the buttons where possible. Recommended.
    # GLYPH - use your resource pack's characters from the list at the bottom.
    # NONE  - no icons, text only.
    style: AUTO
    sprite-min-protocol: 773

    # Leave as "auto". Only change if icons look wrong.
    atlas: "auto"
    block-atlas: "auto"

    # Some items share a texture with another item - a fence gate looks like
    # planks, a banner looks like wool - because that is how Minecraft draws
    # them. Set this to false to hide icons for those instead.
    approximate-icons: true

    # Force a certain icon for one item. Run /homes icontest <item> in game
    # if you need to work one out.
    overrides: {}

    # Only used when style is GLYPH. Your resource pack's characters.
    glyphs:
      minecraft:white_bed: ""
      minecraft:amethyst_shard: ""

  dialog:
    # Buttons per row, and how wide each one is.
    # The menu cannot scroll sideways, so too many wide buttons run off screen.
    columns: 4
    button-width: 90

    # How many home slots show before the "Show More" button.
    initial-slots: 3

    # How many extra slots each "Show More" click reveals.
    show-more-step: 9

    # Let players collapse the list again.
    allow-show-less: true

    # ESC closes the menu.
    can-close-with-escape: true

    icon-picker:
      # false - choose icons in the modern menu.
      # true  - choose icons in a chest instead.
      use-chest: false

      columns: 4
      button-width: 150

      # 0 shows every item in one scrolling list. Set a number to use pages.
      per-page: 0

      # Items nobody can pick as an icon. Empty by default so every obtainable item is shown.
      blacklist: []

  chest:
    # 6 is a double chest. The bottom row is used for the arrows.
    rows: 6

    # How many home slots show before the "Show More" button.
    initial-slots: 3

    # Background item. Set to "" for empty slots.
    filler: "minecraft:gray_stained_glass_pane"

    # The items used for each button.
    items:
      show-more: "minecraft:lime_dye"
      show-less: "minecraft:gray_dye"
      new-home: "minecraft:lime_stained_glass_pane"
      locked: "minecraft:red_stained_glass_pane"
      next-page: "minecraft:arrow"
      previous-page: "minecraft:arrow"
      back: "minecraft:barrier"
      teleport: "minecraft:ender_pearl"
      change-icon: "minecraft:item_frame"
      rename: "minecraft:name_tag"
      delete: "minecraft:red_dye"
      search: "minecraft:oak_sign"
      reset-icon: "minecraft:white_bed"

teleport:
  # Seconds to wait before teleporting. 0 teleports instantly.
  warmup-seconds: 3

  # Seconds before a player can teleport again. 0 turns this off.
  cooldown-seconds: 0

  cancel-on-move: true
  cancel-on-damage: true

  # How far a player can move before the teleport cancels, in blocks.
  move-threshold: 0.3

  # Staff can skip the wait with homes.bypass.warmup / homes.bypass.cooldown.
  sounds:
    # Plays once every second while counting down.
    countdown:
      enabled: true
      key: "minecraft:block.note_block.hat"
      volume: 1.0
      pitch: 1.0
      # Makes each beep a little higher. 0 keeps them all the same.
      pitch-step: 0.15
    arrive:
      enabled: true
      key: "minecraft:entity.enderman.teleport"
      volume: 1.0
      pitch: 1.0
    cancelled:
      enabled: true
      key: "minecraft:entity.villager.no"
      volume: 1.0
      pitch: 1.0
    click:
      enabled: true
      key: "minecraft:ui.button.click"
      volume: 0.5
      pitch: 1.0

# Menu titles and button labels.
texts:
  homes-title: "Homes"
  picker-title: "Choose Icon"
  new-home: "<gray>New Home"
  locked: "<red>Locked"
  show-more: "Show More"
  show-less: "Show Less"
  back: "Back"
  close: "Close"
  teleport: "Teleport"
  change-icon: "Change Icon"
  rename: "Rename"
  delete: "<red>Delete"
  search: "Search"
  search-label: "Search"
  reset-icon: "Default"
  next-page: "Next Page"
  previous-page: "Previous Page"
  rename-title: "Rename Home"
  rename-label: "New name"
  confirm-delete-title: "Delete {name}?"
  confirm-delete-yes: "<red>Delete"
  confirm-delete-no: "Cancel"

  # Text shown when hovering a button. Set any to "" to hide it.
  # You can use: {name} {slot} {world} {server} {x} {y} {z}
  tooltips:
    locked: "<gray>Unlock more home slots to use this."
    new-home: "<gray>Click to save your current position."
    home: "<gray>Slot <white>{slot}"
    home-chest: "<gray>Slot <white>{slot}"
    show-more: "<gray>Reveal <white>{amount}</white> more slots."
    picker-entry: "<gray>{icon}"

# Extra console output for troubleshooting.
debug: false

messages.yml

Each message can independently use chat and action-bar output. Set a channel to an empty list to silence it.

yaml
# =====================================================================
#  Homes - chat messages
#
#  Every message has two independent channels:
#
#    chat:      "..."   sent in chat
#    actionbar: "..."   sent above the hotbar
#
#  Fill in one, the other, or both. To silence a channel set it to []
#  (or leave it as an empty string) - the other channel still fires.
#  Setting BOTH to [] disables the message completely.
#
#  A prefix is defined below but is NOT used by default. Add {prefix} to
#  the front of any message you want it on.
#
#  Home names carry the player's own colours and formatting, so every
#  placeholder that expands to a name is followed by <reset> and the colour
#  re-applied. Without that, a home named "&lBase" would turn the rest of
#  the line bold. Keep the <reset> if you edit these.
# =====================================================================

prefix: "<dark_gray>[<gray>Homes<dark_gray>] <reset>"

messages:

  # --- generic -------------------------------------------------------
  no-permission:
    chat: "<red>You don't have permission to do that."
    actionbar: []

  player-only:
    chat: "<red>Only players can use this command."
    actionbar: []

  # {usage}
  usage:
    chat: "<gray>Usage: <white>{usage}"
    actionbar: []

  reload-success:
    chat: "<gray>Configuration reloaded."
    actionbar: []

  storage-error:
    chat: "<red>Something went wrong reading your homes. Try again in a moment."
    actionbar: []

  loading:
    chat: []
    actionbar: "<gray>Loading your homes..."

  # --- creating / editing --------------------------------------------
  # {name} {slot}
  home-set:
    chat: "<gray>Saved <white>{name}<reset><gray> in slot <white>{slot}<reset><gray>."
    actionbar: "<gray>Home saved"

  # {limit}
  home-limit-reached:
    chat: "<red>You've used all <white>{limit}<reset><red> of your home slots."
    actionbar: []

  # {name}
  home-deleted:
    chat: "<gray>Deleted <white>{name}<reset><gray>."
    actionbar: []

  # {old} {new}
  home-renamed:
    chat: "<gray>Renamed <white>{old}<reset><gray> to <white>{new}<reset><gray>."
    actionbar: []

  # {name}
  home-not-found:
    chat: "<red>You don't have a home called <white>{name}<reset><red>."
    actionbar: []

  # --- staff (/home-admin) -------------------------------------------
  # {player}
  admin-unknown-player:
    chat: "<red>No player called <white>{player}<reset><red> has been seen here."
    actionbar: []

  # {player} {name}
  admin-home-not-found:
    chat: "<red><white>{player}<reset><red> has no home called <white>{name}<reset><red>."
    actionbar: []

  # {player} {name}
  admin-home-teleport:
    chat: "<gray>Going to <white>{player}<reset><gray>'s home <white>{name}<reset><gray>."
    actionbar: []

  # {player} {name}
  admin-home-deleted:
    chat: "<gray>Deleted <white>{player}<reset><gray>'s home <white>{name}<reset><gray>."
    actionbar: []

  # {name}
  home-name-taken:
    chat: "<red>You already have a home called <white>{name}<reset><red>."
    actionbar: []

  # {max}
  rename-too-long:
    chat: "<red>That name is too long (max <white>{max}<reset><red> characters)."
    actionbar: []

  rename-no-colors:
    chat: "<red>You aren't allowed to use colour codes in home names."
    actionbar: []

  rename-prompt:
    chat: "<gray>Type the new name in chat, or <white>cancel<reset><gray> to abort."
    actionbar: "<gray>Type the new name in chat"

  rename-cancelled:
    chat: "<gray>Cancelled."
    actionbar: []

  # Chest GUI only - the dialog GUI has a real text field.
  search-prompt:
    chat: "<gray>Type what you're looking for in chat, or <white>cancel<reset><gray> to abort."
    actionbar: "<gray>Type your search in chat"

  # {icon} - the item's translated name, e.g. "Acacia Door"
  icon-changed:
    chat: "<gray>Icon changed to <white>{icon}<reset><gray>."
    actionbar: []

  # {icon}
  icon-invalid:
    chat: "<red><white>{icon}<reset><red> isn't a valid item."
    actionbar: []

  # {world}
  world-blacklisted:
    chat: "<red>You can't set a home in <white>{world}<reset><red>."
    actionbar: []

  # --- teleporting ----------------------------------------------------
  # {name} {seconds}
  teleport-warmup:
    chat: "<gray>Teleporting to <white>{name}<reset><gray> in <white>{seconds}<reset><gray>..."
    actionbar: "<gray>Teleporting in <white>{seconds}<reset><gray>..."

  # {name}
  teleport-success:
    chat: "<gray>Welcome to <white>{name}<reset><gray>."
    actionbar: "<gray>Teleported"

  teleport-cancelled-move:
    chat: "<red>Teleport cancelled - you moved."
    actionbar: "<red>Teleport cancelled"

  teleport-cancelled-damage:
    chat: "<red>Teleport cancelled - you took damage."
    actionbar: "<red>Teleport cancelled"

  teleport-already-queued:
    chat: "<red>You already have a teleport in progress."
    actionbar: []

  # {seconds}
  teleport-cooldown:
    chat: "<red>Wait <white>{seconds}s<reset><red> before teleporting again."
    actionbar: "<red>{seconds}s cooldown"

  # {server}
  teleport-cross-server:
    chat: "<gray>Sending you to <white>{server}<reset><gray>..."
    actionbar: "<gray>Connecting..."

  teleport-target-offline:
    chat: "<red>The server that home lives on is offline right now."
    actionbar: []

  teleport-world-missing:
    chat: "<red>That home's world no longer exists."
    actionbar: []

  # --- gui ------------------------------------------------------------
  dialog-unsupported:
    chat: "<gray>Your client is too old for the new menu - showing the classic one."
    actionbar: []

  # {page} {pages}
  page-changed:
    chat: []
    actionbar: "<gray>Page <white>{page}<reset><gray>/<white>{pages}"

  no-more-pages:
    chat: []
    actionbar: "<red>No more pages"