Configuration
On this page(6)
SnHub ships with the following YAML files. New keys are auto-merged on boot; your edits and comments are preserved.
config.yml
# ============================================================
# SnHub - configuration
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved. Do NOT add a config-version key (retired).
# Set update-configs: false to freeze this file (SnLib only warns about
# missing keys instead of inserting them).
# Sections marked "# sn:extensible" are yours: entries you delete there
# stay deleted.
# ============================================================
# Active language code; loads lang/messages_<code>.yml (falls back to en).
lang: en
# Master switch of the SnLib auto-updater for this plugin's managed files.
update-configs: true
# Runtime debug output (also toggleable live via /snhub debug).
debug:
# Master toggle of the debug output.
enabled: false
# Verbosity threshold: OFF, INFO, DEBUG or TRACE.
level: DEBUG
# Category filter; an empty list lets every category through.
categories: []
# ------------------------------------------------------------
# Main command.
# ------------------------------------------------------------
command:
# Aliases of /snhub. Re-read on /snhub reload.
aliases: [shub]
# ------------------------------------------------------------
# Database. type=sqlite needs nothing else; type=mysql reads host/port/etc.
# ------------------------------------------------------------
database:
# sqlite or mysql
type: sqlite
# MySQL connection (ignored when type is sqlite).
host: localhost
port: 3306
database: snhub
username: root
password: ""
# ============================================================
# BAND 1 - Hub model: worlds, spawn, join state.
# ============================================================
# Worlds that count as the hub. Every hub feature (protections, hotbar, spawn, PvP, ...) only
# acts in these worlds. An empty list means every world is a hub world. The join state below
# is applied when spawn.teleport-on-join is true or the player joins in one of these worlds.
# Example: worlds: [hub, hub_nether]
worlds: []
# Where players are sent: the fixed spawn set with /snhub setspawn.
spawn:
# Teleport every player to the spawn on each join, not to their last location.
teleport-on-join: true
# Send respawning players to the spawn.
teleport-on-respawn: true
# Players below this Y in a hub world are returned to the spawn without taking damage.
# Keep it below the hub floor: while the spawn sits at or below it, this check is ignored
# (one warning is logged) and only void damage returns players.
void-y: -10
# State applied to a player on each join, when spawn.teleport-on-join is true or the player
# joins in a hub world. A player joining outside the hub worlds with teleport-on-join false
# is left untouched.
join:
# Clear the whole inventory, armor and off hand included.
clear-inventory: true
# Game mode set on join: SURVIVAL, CREATIVE, ADVENTURE or SPECTATOR.
gamemode: ADVENTURE
# Restore full health.
heal: true
# Restore full food and saturation.
feed: true
# Remove every potion effect.
clear-effects: true
# Reset experience points and level to zero.
reset-exp: true
# true keeps flight allowed, false takes it away. Ignored in creative and spectator.
fly: false
# ============================================================
# BAND 2 - Features: hotbar, menus, game items, PvP, extras.
# ============================================================
# Hub items every player receives and where they sit.
hotbar:
# Items given to a player, one entry per item: entry-id -> item, slot, permission.
# item: id of an item in items.yml (defaults to the entry id)
# slot: hotbar slot 0-8, 0 being the leftmost
# permission: node a player needs to receive the entry; empty means everyone
# The entry id "visibility" is the one the hide-players toggle swaps between its two items.
# sn:extensible
layout:
selector:
item: selector
slot: 0
permission: ""
visibility:
item: visibility-shown
slot: 1
permission: ""
ender-butt:
item: ender-butt
slot: 2
permission: ""
pvp-sword:
item: pvp-sword
slot: 4
permission: ""
bow-teleport:
item: bow-teleport
slot: 6
permission: ""
hubs:
item: hubs
slot: 7
permission: ""
rules:
item: rules
slot: 8
permission: ""
# Inventory slot, 0-35 and outside the hotbar layout, of the locked arrow given with the bow-teleport item.
bow-arrow-slot: 35
# Empty the whole inventory before the hub items are given.
clear-on-apply: true
# Ticks to wait after a join before the items are given, at least 1; lets the join state settle first.
give-delay-ticks: 2
# Ticks between two checks that give the items back after something cleared the inventory, at least 10.
# 0 turns the check off.
restore-interval-ticks: 40
# Live player counts of proxy servers, read through the BungeeCord PlayerCount channel.
# The proxy must forward the channel (BungeeCord by default; Velocity needs
# bungee-plugin-message-channel = true).
servers:
# Seconds between two count refreshes (minimum 1).
interval-seconds: 3
# Proxy server names to track, spelled as in the proxy config. Case is ignored when reading.
list:
- survival
- skyblock
- gens
- pvp
- minigames
# Ender Butt: a right click throws an ender pearl, the player rides it and is set down where it
# lands. The item is never consumed. Off in build mode and, with pvp.disable-game-items, in PvP mode.
ender-butt:
# Turns the Ender Butt on or off.
enabled: true
# Seconds before the same player can throw again.
cooldown-seconds: 3
# Launch speed of the pearl along the look direction, 0.1 to 5.0.
velocity: 1.5
# Seconds a pearl may stay in flight before it is removed and its rider sent to the spawn, 1 to 120.
max-flight-seconds: 10
# Sound at the throw and at the landing: SOUND_ID [volume] [pitch]. Empty or none is silent.
sound: "ENTITY_ENDERMAN_TELEPORT 1.0 1.0"
# Particle at the throw and at the landing: TYPE [count] [offX offY offZ] [extra]. Empty shows none.
particle: "PORTAL 40 0.3 0.6 0.3 0.2"
# Bow Teleport: shooting the bow teleports the shooter to where the arrow lands, keeping yaw and
# pitch. No arrow is consumed and the arrow never hurts anyone. Off in build mode and, with
# pvp.disable-game-items, in PvP mode.
bow-teleport:
# Turns the Bow Teleport on or off.
enabled: true
# Seconds before the same player can shoot again.
cooldown-seconds: 3
# Minimum draw of the bow, 0.0 to 1.0; a weaker shot is cancelled and costs no cooldown.
min-force: 0.3
# Sound at the landing: SOUND_ID [volume] [pitch]. Empty or none is silent.
sound: "ENTITY_ENDERMAN_TELEPORT 1.0 1.2"
# Particle at the landing: TYPE [count] [offX offY offZ] [extra]. Empty shows none.
particle: "PORTAL 30 0.3 0.6 0.3 0.2"
# Opt-in sword PvP. Holding the pvp-sword hotbar item starts a countdown; at 0 the player gets
# the PvP armor and weapon from items.yml and can fight other players in PvP mode only.
pvp:
# Master switch of PvP mode.
enabled: true
# Seconds the pvp-sword must stay selected before PvP mode starts (0 = instant).
enable-countdown-seconds: 5
# Seconds another slot must stay selected before PvP mode ends (0 = instant).
disable-countdown-seconds: 3
# Combat feel inside PvP mode.
# legacy: 1.8 style, no attack cooldown (spam click) and no sweep attack.
# modern: vanilla 1.9+ attack cooldown and sweep attack.
combat-style: legacy
# Disables the Ender Butt and the Bow Teleport while the player is in PvP mode.
disable-game-items: true
# Tells the killer and the victim who killed whom.
kill-message: true
# Sound played on every countdown second ("SOUND_ID [volume] [pitch]", "none" to mute).
countdown-sound: "BLOCK_NOTE_BLOCK_HAT 1 1"
# Sound played when PvP mode starts ("none" to mute).
enabled-sound: "ENTITY_ENDER_DRAGON_GROWL 0.6 1.4"
# Hide-players toggle: the "visibility" hotbar item hides every other player's body for its holder.
# Hidden players stay listed in the holder's TAB list on Paper 1.20.5+; on 1.20.0-1.20.4 they also
# leave the TAB list (one WARN on enable). Two players that are both in PvP mode always see each
# other. Needs the snhub.visibility permission.
visibility:
# Master switch of the hide-players toggle.
enabled: true
# Seconds a player waits between two toggles.
cooldown-seconds: 3
# Sound played to the player on each toggle: SOUND_ID [volume] [pitch]. none turns it off.
toggle-sound: "UI_BUTTON_CLICK 0.6 1.2"
# Seconds between two refreshes of the hidden players' latency, game mode and name in the TAB list
# of players who hide others. 0 turns the refresh off.
tab-refresh-seconds: 10
# Double jump: press jump again in mid-air to be launched where you look. Needs the snhub.doublejump
# permission, NORMAL mode, survival or adventure, and a hub world. Players another plugin lets fly are left alone.
double-jump:
# Master switch of the double jump.
enabled: true
# Horizontal launch strength along the look direction, 0.1 to 5.0.
power: 1.2
# Upward launch strength, 0.0 to 5.0.
vertical: 0.9
# Seconds before the same player can double jump again.
cooldown-seconds: 1
# Ticks between two checks for a player who is in the air after a double jump (at least 1).
# The check only runs while somebody is in the air.
landing-check-ticks: 3
# Sound played around the player on each double jump: SOUND_ID [volume] [pitch]. none turns it off.
sound: "ENTITY_BAT_TAKEOFF 0.8 1.2"
# Particles spawned at the player: TYPE [count] [offsetX offsetY offsetZ] [speed]. none turns them off.
particle: "CLOUD 12 0.3 0.1 0.3 0.02"
# Launch pads: stepping on the pressure plate below launches the player where they look.
# Needs the snhub.launchpad permission and a hub world.
launch-pads:
# Master switch of the launch pads.
enabled: true
# Pressure plate material that launches.
plate: LIGHT_WEIGHTED_PRESSURE_PLATE
# Material the plate must stand on to launch. Empty means any block.
block-below: ""
# Horizontal launch strength along the look direction, 0.1 to 5.0.
power: 2.0
# Upward launch strength, 0.0 to 5.0.
vertical: 1.0
# Sound played around the player on each launch: SOUND_ID [volume] [pitch]. none turns it off.
sound: "ENTITY_FIREWORK_ROCKET_LAUNCH 0.8 1.0"
# Particles spawned at the player: TYPE [count] [offsetX offsetY offsetZ] [speed]. none turns them off.
particle: "CRIT 20 0.3 0.1 0.3 0.1"
# Build mode: /snhub build [player] toggles a bypass for admins. The hub protections for blocks,
# inventory, drops and pickups do not apply to them, and their hub items are removed until build
# mode ends.
build-mode:
# Game mode set while building: SURVIVAL, CREATIVE, ADVENTURE or SPECTATOR. The game mode the
# player had before comes back when build mode ends.
gamemode: CREATIVE
# ============================================================
# BAND 3 - Limits: hub protections.
# ============================================================
# Hub protections. Each rule is a switch and only acts in the hub worlds. Admins in build mode
# bypass the block, inventory, drop and pickup rules.
protection:
# Keep the weather clear: rain and thunder cannot start and the weather cycle is switched off.
lock-weather: true
# Freeze the time of day at the time below and switch the daylight cycle off.
lock-time: true
# Locked time of day in ticks: 0 sunrise, 6000 noon, 12000 sunset, 18000 midnight.
time: 6000
# Block every mob spawn except custom, command and plugin spawns, so NPC plugins keep working.
block-mob-spawning: true
# Food level never goes down.
no-hunger: true
# Players take no damage, void and fall included. The only exception is an attack between two
# players that are both in PvP mode.
no-damage: true
# No breaking blocks, filling buckets, or hitting item frames, paintings and armor stands.
no-block-break: true
# No placing blocks, emptying buckets, or placing item frames, paintings, armor stands, boats and minecarts.
no-block-place: true
# No using containers, doors, trapdoors, buttons, levers, beds, flower pots, item frames and armor stands.
no-block-interact: true
# No trampling farmland.
no-crop-trample: true
# Fire does not spread and blocks do not burn away.
no-fire-spread: true
# Leaves do not decay.
no-leaf-decay: true
# Ice and snow neither melt nor form.
no-melt-form: true
# Explosions destroy no blocks.
no-explosion-damage: true
# Portals cannot be created.
no-portal-create: true
# Players cannot drop items.
no-item-drop: true
# Players cannot pick items up.
no-item-pickup: true
# Players cannot move items in their own inventory (clicks, drags and hand swaps). Menus are not affected.
lock-inventory: true
# Hide the join message.
hide-join-message: true
# Hide the quit message.
hide-quit-message: true
# Hide the death message of every death in a hub world.
hide-death-message: true
# Hide the advancement announcement in chat.
no-advancement-announce: true
# ============================================================
# BAND 4 - Integrations: multi-hub network.
# ============================================================
# Multi-hub network over a shared MySQL database: hub registry, LuckPerms group sync and
# shared configuration. Needs database.type: mysql with every hub on the same database.
network:
# Master switch of the network module; read at startup (a change needs a restart).
# With false or with sqlite every local feature still works.
enabled: false
# This hub's id; must equal its server name in the proxy config. auto = detected from the
# proxy on the first player join. Read at startup (a change needs a restart).
server-id: auto
# Seconds between two heartbeats of this hub in the hub registry (1-300).
heartbeat-seconds: 5
# Seconds without a heartbeat after which a hub drops off the hubs menu (at least twice
# heartbeat-seconds, at most 3600).
stale-seconds: 20
# Seconds between two polls of the LuckPerms group sync and the shared configuration (1-300).
poll-interval-seconds: 3
# LuckPerms group sync: membership changes of the listed groups (add, remove, expiry) on any
# hub reach every other hub. Needs LuckPerms on every hub. Only context-free group memberships
# sync; permission nodes, meta, prefixes and group definitions do not.
luckperms:
# Switch of the LuckPerms group sync (it also needs the network module active).
enabled: true
# Groups to sync, lowercase. 'default' never syncs, even when listed.
groups:
- vip
- mvp
# Reconcile a joining player's synced groups from the network database (catches changes made
# while the player was offline on this hub).
apply-on-join: true
# Shared configuration: /snhub network push publishes this hub's items.yml, guis/, lang/,
# config.yml (without its database and network sections) and spawn as a new revision; the
# other hubs back up the files they replace, write them and reload. The database and network
# sections of each hub are never overwritten.
shared-config:
# Switch of push, pull and auto-pull (they also need the network module active).
enabled: true
# Apply a revision pushed by another hub automatically (checked every poll-interval-seconds).
auto-pull: true
# Backup folders kept under plugins/SnHub/backups/ (one per pull that replaced files, 1-100).
backups-kept: 3items.yml
# ============================================================
# SnHub - items
# Managed by SnLib: new keys merge in on boot, your values are kept.
# Every top-level key is an item id. Built-in ids are read by SnHub;
# a custom id is shown once hotbar.layout in config.yml places it.
# sn:extensible-root
# ============================================================
# Hub items (selector, hubs, visibility-*, pvp-sword, ender-butt, bow-teleport,
# bow-teleport-arrow, rules) are placed in the hotbar by hotbar.layout in config.yml.
# droppable: false + moveable: false + keep-on-death: true keep an item in the player's inventory.
# Field reference: the SnLib item spec (appearance, properties, interact action lists).
# ============================================================
# Opens the modality selector menu (guis/selector.yml).
selector:
display-name: "₢f2&lServer Selector &7(Right Click)"
material: COMPASS
lore:
- "&7Right click to choose a game mode."
droppable: false
moveable: false
keep-on-death: true
# Ticks between two uses.
cooldown: 10
right-click-actions:
- "[open] selector"
# Opens the live hub list (guis/hubs.yml).
hubs:
display-name: "₢f2&lHub Selector &7(Right Click)"
material: NETHER_STAR
lore:
- "&7Right click to switch to another hub."
droppable: false
moveable: false
keep-on-death: true
cooldown: 10
right-click-actions:
- "[open] hubs"
# Hide-players toggle while other players are shown. The click is handled in code.
visibility-shown:
display-name: "&aPlayers: &fShown"
material: LIME_DYE
lore:
- "&7Right click to hide other players."
droppable: false
moveable: false
keep-on-death: true
# Hide-players toggle while other players are hidden. The click is handled in code.
visibility-hidden:
display-name: "&7Players: &fHidden"
material: GRAY_DYE
lore:
- "&7Right click to show other players."
droppable: false
moveable: false
keep-on-death: true
# Hold it to start the PvP countdown. Its slot is set by hotbar.layout.
pvp-sword:
display-name: "&cHold to PvP"
material: IRON_SWORD
lore:
- "&7Hold this item to enter PvP mode."
- "&7Select another slot to cancel."
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: true
# Sword used while in PvP mode.
pvp-weapon:
display-name: "&cPvP Sword"
material: DIAMOND_SWORD
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: false
# PvP armor, equipped when PvP mode starts and removed when it ends.
pvp-helmet:
display-name: "&cPvP Helmet"
material: IRON_HELMET
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: false
no-manual-equip: true
pvp-chestplate:
display-name: "&cPvP Chestplate"
material: IRON_CHESTPLATE
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: false
no-manual-equip: true
pvp-leggings:
display-name: "&cPvP Leggings"
material: IRON_LEGGINGS
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: false
no-manual-equip: true
pvp-boots:
display-name: "&cPvP Boots"
material: IRON_BOOTS
flags:
- HIDE_ATTRIBUTES
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: false
no-manual-equip: true
# Right click to throw a pearl and ride it. The throw is handled in code; the item is never consumed.
ender-butt:
display-name: "₢f2&lEnder Butt &7(Right Click)"
material: ENDER_PEARL
lore:
- "&7Throw it and ride the pearl."
droppable: false
moveable: false
keep-on-death: true
# Shoot to teleport where the arrow lands. The shot is handled in code.
bow-teleport:
display-name: "₢f2&lTeleport Bow"
material: BOW
lore:
- "&7Shoot an arrow to teleport to where it lands."
enchantments: [infinity, 1]
flags:
- HIDE_ENCHANTS
- HIDE_UNBREAKABLE
unbreakable: true
droppable: false
moveable: false
keep-on-death: true
# Arrow the Teleport Bow shoots. It sits in hotbar.bow-arrow-slot.
bow-teleport-arrow:
display-name: "₢f2Teleport Arrow"
material: ARROW
droppable: false
moveable: false
keep-on-death: true
# Example of an owner-defined item: copy this block, change the id, and add it to hotbar.layout.
rules:
display-name: "₢f2&lServer Rules &7(Right Click)"
material: BOOK
lore:
- "&7Right click to read the rules."
droppable: false
moveable: false
keep-on-death: true
cooldown: 20
right-click-actions:
- "[message] ₢f2&lServer Rules"
- "[message] &71. Respect every player and the staff."
- "[message] &72. No cheating, no exploits."
- "[message] &73. No spam and no advertising."
- "[sound] ENTITY_EXPERIENCE_ORB_PICKUP 1 1"guis/selector.yml
# ============================================================
# SnHub - modality selector menu (opened by the selector hotbar item and by /snhub open selector)
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# Menu title.
title: "₢f2&lSelect a Server"
# Ticks between automatic refreshes of the open menu, so the player counts stay live
# (the counts themselves update every servers.interval-seconds in config.yml). 0 disables.
update-interval: 60
# Row 3 holds the buttons (b), centered. Add a button by adding a template below and one more
# b to that row (keep the row symmetric: an even number of cells splits around the center).
# The close button sits bottom-center.
layout:
- "fffffffff"
- "fffffffff"
- "ffbbbbbff"
- "fffffffff"
- "ffffxffff"
# The b cells in reading order. The templates below fill them in the order they are written.
# Keep this declaration: it is restored on the next boot if removed.
regions:
buttons: b
items:
# Border and spacer cells.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Closes the menu.
close:
material: BARRIER
display-name: "&cClose"
key: x
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[close]"
# One button per modality, written in the order they appear in the b cells. Each button runs
# [connect] <server>, where <server> is the server name in the proxy config.
# Live player counts: write {count_<server>} in the name or lore, with <server> spelled as in
# servers.list of config.yml (for example {count_survival}), or {count_total} for the whole proxy.
# A count that is not known yet shows the "unknown" status word of the lang file. A format hint
# is allowed, for example {count_survival:grouped}. A server missing from servers.list is not
# counted and its token is left as written.
# sn:extensible
templates:
survival:
material: GRASS_BLOCK
display-name: "₢f2&lSurvival"
lore:
- "&7Build, mine and survive."
- ""
- "&7Players: &f{count_survival}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[connect] survival"
skyblock:
material: OAK_SAPLING
display-name: "₢f2&lSkyBlock"
lore:
- "&7Grow an island in the sky."
- ""
- "&7Players: &f{count_skyblock}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[connect] skyblock"
gens:
material: IRON_BLOCK
display-name: "₢f2&lGens"
lore:
- "&7Place generators and get rich."
- ""
- "&7Players: &f{count_gens}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[connect] gens"
pvp:
material: DIAMOND_SWORD
display-name: "₢f2&lPvP"
flags:
- HIDE_ATTRIBUTES
lore:
- "&7Fight for glory."
- ""
- "&7Players: &f{count_pvp}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[connect] pvp"
minigames:
material: FIREWORK_ROCKET
display-name: "₢f2&lMinigames"
lore:
- "&7Quick games with friends."
- ""
- "&7Players: &f{count_minigames}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[connect] minigames"guis/hubs.yml
# ============================================================
# SnHub - hubs menu (opened by the hubs hotbar item and by /snhub open hubs)
# Managed by SnLib: new keys are auto-merged on boot; your values and
# comments are preserved.
# ============================================================
# Menu title.
title: "₢f2&lHubs"
# Ticks between automatic refreshes of the open menu, so the player counts and states of the
# listed hubs stay live. The list itself is read when the menu opens. 0 disables.
update-interval: 60
# Paged hub list: the hub entries and the previous-page and next-page items. Keep it true:
# with false the menu shows no hubs at all.
pagination: true
# Layout character whose cells hold the hub entries.
paged-key: p
# Hub entries fill the p rectangle. Previous page and next page sit in the bottom corners and the
# close button bottom-center.
layout:
- "fffffffff"
- "fpppppppf"
- "fpppppppf"
- "fpppppppf"
- "fpppppppf"
- "<fffxfff>"
items:
# Border cells.
filler:
material: GRAY_STAINED_GLASS_PANE
display-name: " "
key: f
# Closes the menu.
close:
material: BARRIER
display-name: "&cClose"
key: x
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[close]"
# Goes one page back; replaced by the disabled variant on the first page.
previous-page:
material: ARROW
display-name: "₢f2Previous Page"
key: "<"
click-actions:
- "[previous-page]"
- "[sound] UI_BUTTON_CLICK"
nav-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No previous page"
lore:
- "&8You are on the first page"
# Goes one page forward; replaced by the disabled variant on the last page.
next-page:
material: ARROW
display-name: "₢f2Next Page"
key: ">"
click-actions:
- "[next-page]"
- "[sound] UI_BUTTON_CLICK"
nav-disabled:
material: GRAY_STAINED_GLASS_PANE
display-name: "&7No next page"
lore:
- "&8You are on the last page"
templates:
# One entry per live hub. Placeholders: {id} and {name} (the hub's server id), {online},
# {max} and {status} (the current, full, online or offline word of the lang file). The click
# sends the player to that hub through the hub-connect action: it answers with
# messages.hubs.already-here on the current hub and messages.hubs.full on a full hub.
hub:
material: NETHER_STAR
display-name: "₢f2&l{name}"
lore:
- "&7Players: &f{online}&8/&f{max}"
- "&7Status: {status}"
- ""
- "&8Click to join"
click-actions:
- "[sound] UI_BUTTON_CLICK"
- "[hub-connect] {id}"
# Shown alone when the network module is off. {status} is the network-off word of the lang file.
network-off:
slots: [22]
material: BARRIER
display-name: "&cHub network"
lore:
- "&7Status: {status}"
- ""
- "&8The hub list is not available."
# Shown alone when the network is on but no hub has reported in yet.
no-hubs:
slots: [22]
material: CLOCK
display-name: "₢f2&lNo hubs yet"
lore:
- "&7No live hub was found."
- "&7Open the menu again in a few seconds."lang/messages_en.yml
# ============================================================
# SnHub - language file (English)
# Managed by SnLib: new keys merge in on boot, your values are kept.
# Restyle any line freely; your edits survive updates.
# ============================================================
# Prefix prepended to every single-line message sent via sn.lang().send(...)
prefix: "₢f2&lSnHub &8| &7"
# snlib.* is SnLib's shared command contract (14 keys; the two help.group-*
# keys exist since SnLib 1.36.0). Every Sn plugin ships
# this block UNCHANGED: SnLib bundles NEUTRAL defaults for any key you omit and
# merges them in on boot, so an incomplete block leaks unbranded lines. Shipping
# the FULL block is what keeps the whole fleet visually identical. Placeholders
# {plugin} {usage} {description} {page} {total} {min} {max} {value} {command}
# {group} {path} are filled by SnLib. NEVER put {prefix} here (it is auto-prepended).
snlib:
no-permission: "&cYou do not have permission to use this command."
usage: "&cUsage: &e{usage}"
invalid-number: "&cInvalid number: &e{value}"
invalid-value: "&cInvalid value: &e{value}"
out-of-range: "&cValue must be between &e{min} &cand &e{max}&c: &e{value}"
number-too-small: "&cValue must be at least &e{min}&c: &e{value}"
player-not-found: "&cPlayer not found: &e{value}"
unknown-subcommand: "&cUnknown subcommand: &e{value}"
reload-done: "&aConfiguration reloaded."
help:
header: "&8&m----------&r ₢f2&l{plugin} &8&m----------"
# Branded no-separator form. SnLib's neutral default is "&e{usage} &7{description}".
entry: "₢f2{usage} &7{description}"
footer: "&7Page &f{page}&7/&f{total} &8- ₢f2/{command} help <page>"
# Own help of a groupHelp() command group (/<cmd> admin <module> help).
group-header: "&8&m----------&r ₢f2&l{group} &8&m----------"
group-footer: "&7Page &f{page}&7/&f{total} &8- ₢f2{path} help <page>"
# Short state words. Each is substituted into a {status}, {state}, {pvp} or {value} slot of
# the messages below, of the menus under guis/ and of the PlaceholderAPI output, so a restyle
# here applies everywhere at once.
status:
enabled: "&aEnabled"
disabled: "&cDisabled"
online: "&aOnline"
offline: "&7Offline"
# Player visibility state of the hide-players toggle.
shown: "&aShown"
hidden: "&7Hidden"
# PvP mode state.
pvp-on: "&cPvP on"
pvp-off: "&7PvP off"
# A hub with no free slots.
full: "&cFull"
# The hub the player is standing in.
current: "&eCurrent"
# Shown where a value is not set. Uncolored so it inherits the color of the line it lands in.
none: "None"
# Shown instead of a name that does not resolve. Color codes are stripped on read: the
# value also feeds tab completion and name matching, and neither renders them.
unknown: "Unknown"
# Shown by the hubs menu in place of the hub list when the network module is off.
network-off: "&cNetwork disabled"
# State of the multi-hub network in /snhub network status.
active: "&aActive"
inactive: "&cInactive"
# Your own plugin messages. Do NOT write {prefix} in any value: SnLib
# auto-prepends the prefix above to every single-line message sent via
# sn.lang().send(...). A literal {prefix} renders verbatim, and SnLib
# logs a one-time WARN when the active lang file contains one.
messages:
visibility:
# Sent when the player hides every other player.
hidden: "&7Players are now &fhidden&7. Click again to show them."
# Sent when the player shows every other player again.
shown: "&aPlayers are now &fshown&a."
# Sent when the toggle is used too fast. Placeholder: {seconds}.
cooldown: "&cWait &f{seconds}s &cbefore toggling the players again."
# Sent when the player holds the toggle item but lacks the permission.
no-permission: "&cYou cannot hide players."
items:
# Sent when a game item (Ender Butt, Bow Teleport) is used before its cooldown ends. Placeholder: {seconds}.
cooldown: "&cWait &f{seconds}s &cbefore using that again."
hubs:
# Sent when a player clicks the hub they are already in. Placeholder: {hub}.
already-here: "&eYou are already in &f{hub}&e."
# Sent when a player clicks a hub with no free slot. Placeholder: {hub}.
full: "&c{hub} is full."
# Sent when a player clicks a hub that stopped reporting since the menu was opened. Placeholder: {hub}.
offline: "&c{hub} is not reachable right now."
# Sent when a player is handed to the proxy to join a hub. Placeholder: {hub}.
connecting: "&7Connecting to &f{hub}&7..."
# Sent when the proxy request for a hub could not be sent. Placeholder: {hub}.
connect-failed: "&cCould not connect to &f{hub}&c. Try again."
network:
# Sent when /snhub network import starts reading this hub's LuckPerms memberships.
import-started: "&7Importing this hub's LuckPerms memberships of the synced groups..."
# Sent when the import finished. Placeholder: {count} (memberships written or updated).
import-done: "&aImport finished: &f{count}&a membership(s) written to the network."
# Sent when the import failed (sync not running, server id unknown yet, or a LuckPerms/database error).
import-failed: "&cThe import failed. Check the console for details."
# Sent when /snhub network import runs while another import is still running.
import-busy: "&cAnother LuckPerms import is running. Try again when it finishes."
# Sent when a LuckPerms sync action needs LuckPerms but it is not installed or the sync is off.
luckperms-missing: "&cThe LuckPerms group sync is not running (LuckPerms missing or network.luckperms disabled)."
# Sent when a network command runs while the network module is off (disabled, sqlite or database down).
network-off: "&cThe network module is off (network.enabled is false, the database is sqlite or it is unreachable)."
# Sent when push/pull runs while network.shared-config.enabled is false.
shared-config-off: "&cThe shared configuration is disabled (network.shared-config.enabled: false)."
# Sent when push/pull runs while another push or pull is still running.
config-busy: "&cAnother shared configuration push or pull is running. Try again in a moment."
# Sent when /snhub network push published a revision. Placeholder: {revision}.
push-done: "&aShared configuration pushed as revision &f{revision}&a. Hubs with auto-pull apply it shortly."
# Sent when the push failed (server id unknown yet, unreadable file or database error).
push-failed: "&cThe push failed. Check the console for details."
# Sent when /snhub network pull applied a revision. Placeholders: {revision} {origin}.
pull-done: "&aApplied shared configuration revision &f{revision}&a from &f{origin}&a."
# Sent when there is nothing newer to apply. Placeholder: {revision} (latest revision, 0 = none).
pull-none: "&7This hub is up to date (latest revision &f{revision}&7)."
# Sent when the pull failed; the previous files are kept.
pull-failed: "&cThe pull failed and the previous files were kept. Check the console for details."
# Sent when push or import needs this hub's server id and it is not known yet.
server-id-unknown: "&cThis hub's server id is not known yet. Set network.server-id, or wait for a player to join so it is detected from the proxy."
# Report of /snhub network status. Placeholders: {state} {server} {sync} {live}.
status-report:
- "&8&m----------&r ₢f2&lSnHub network &8&m----------"
- "&7Network: {state}"
- "&7Server id: &f{server}"
- "&7LuckPerms sync: {sync}"
- "&7Live hubs: &f{live}"
# Status line shown under the report while network.enabled is false.
status-reason-disabled: "[noprefix]&7Reason: &fnetwork.enabled is false."
# Status line shown under the report while the database is sqlite.
status-reason-sqlite: "[noprefix]&7Reason: &fdatabase.type is sqlite; the network needs a shared mysql database."
# Status line shown under the report while the network tables are being prepared.
status-reason-starting: "[noprefix]&7Reason: &fthe network is still starting."
# Status line shown under the report when the network database could not be prepared.
status-reason-down: "[noprefix]&7Reason: &fthe network database did not answer. Run /snhub reload once it is back."
# One row per live hub in /snhub network status. Placeholders: {hub} {online} {max} {state}.
status-hub: "[noprefix] &8- &f{hub} &7{online}/{max} {state}"
# Last line of /snhub network status. Placeholders: {revision} {origin} {age}.
status-revision: "[noprefix]&7Last applied revision: &f#{revision} &7from &f{origin} &7({age} ago)"
# Last line of /snhub network status when no revision was applied yet. Placeholder: {none}.
status-revision-none: "[noprefix]&7Last applied revision: &f{none}"
build:
# Sent when build mode turns on.
enabled: "&aBuild mode enabled. &7Protections are off for you and your hub items are removed."
# Sent when build mode turns off.
disabled: "&7Build mode disabled. Your hub items are back."
# Sent to the admin who turned build mode on for another player. Placeholder: {player}.
enabled-other: "&aBuild mode enabled for &f{player}&a."
# Sent to the admin who turned build mode off for another player. Placeholder: {player}.
disabled-other: "&7Build mode disabled for &f{player}&7."
# Sent when the console runs build without naming a player. Placeholder: {label}.
player-required: "&cName a player: &f/{label} build <player>"
open:
# Sent when the menu id does not exist. Placeholder: {menu}.
not-found: "&cThere is no menu named &f{menu}&c."
# Sent to the admin who opened a menu for another player. Placeholders: {menu} {player}.
opened-other: "&7Opened &f{menu}&7 for &f{player}&7."
# Sent when the console runs open without naming a player. Placeholder: {label}.
player-required: "&cName a player: &f/{label} open <menu> <player>"
pvp:
# Title shown every second while PvP mode is starting. Format: title;subtitle;fadeIn;stay;fadeOut (ticks).
# Placeholder: {seconds}. Empty = no title.
countdown: "&c&l{seconds};&7Entering PvP mode...;0;25;5"
# Action bar shown every second while PvP mode is starting. Placeholder: {seconds}. Empty = none.
countdown-actionbar: "&7PvP mode in &c{seconds}s &8- &7select another slot to cancel"
# Sent when the player selects another slot before PvP mode starts.
cancelled: "&7PvP mode cancelled."
# Sent when PvP mode starts.
enabled: "&cPvP mode enabled. &7Fight other players holding a sword!"
# Sent instead of entering PvP mode when the armor the player wears would not fit into the inventory once
# the PvP armor replaces it. Nothing is changed; the player frees some slots and selects the sword again.
inventory-full: "&cYour inventory has no room for the armor you are wearing. &7Free some slots to enter PvP mode."
# Title shown every second while PvP mode is ending. Format as countdown. Placeholder: {seconds}. Empty = no title.
disable-countdown: "&a&l{seconds};&7Leaving PvP mode...;0;25;5"
# Action bar shown every second while PvP mode is ending. Placeholder: {seconds}. Empty = none.
disable-countdown-actionbar: "&7Leaving PvP in &a{seconds}s &8- &7select the sword to stay"
# Sent when the player selects the sword again before PvP mode ends.
disable-cancelled: "&cYou stay in PvP mode."
# Sent when PvP mode ends through the countdown or a fall into the void.
disabled: "&aPvP mode disabled."
# Sent to the killer. Placeholder: {player} (the victim).
killed: "&aYou killed &f{player}&a."
# Sent to the victim. Placeholder: {player} (the killer).
killed-by: "&cYou were killed by &f{player}&c."
spawn:
# Sent to the admin who sets the spawn. Placeholders: {world} {x} {y} {z}.
set: "&aSpawn set at &f{world} {x}, {y}, {z}&a."
# Sent after /spawn.
teleported: "&aTeleported to spawn."
# Sent to an admin sent to the world spawn because no spawn was ever set.
not-set: "&eNo spawn is set yet. Stand on it and run &f/snhub setspawn&e."
# Sent to an admin sent to the world spawn because the saved spawn world is not loaded. Placeholder: {world}.
world-missing: "&eThe spawn world &f{world}&e is not loaded. Load it or run &f/snhub setspawn&e again."
# Sent when the console runs a spawn command that needs a player.
player-only: "&cOnly players can use this command."Files written by the plugin
data.yml holds the spawn and the shared configuration revision this hub last applied. SnHub writes it, so you do not edit it by hand. Run /snhub setspawn to change the spawn.
Set update-configs: false to freeze the managed files. SnLib then only warns about missing keys instead of inserting them. Sections marked # sn:extensible are yours: entries you delete there stay deleted.