Default messages.yml
Last updated Oct 28, 2026
Default messages.yml
Shipped defaults from SoapsAdmin 1.7.7. After first run, this file lives in plugins/SoapsAdmin/.
Updating the jar does not overwrite your live copy. Use this page to compare or reset.
See also: Config Reference · Configuration
# Player-facing strings (MiniMessage). Placeholders: {key}
# Legacy & / § codes still work. Keys below match MessageUtil paths.
# --- general ---
general:
prefix: "<gradient:#FF6B6B:#FFE66D>[SoapsAdmin]</gradient> "
no-permission: "<red>No permission.</red>"
player-not-found: "<red>Player <yellow>{player}</yellow> not found. They may need to have joined the server before.</red>"
player-not-online: "<red>Player <yellow>{player}</yellow> is not online.</red>"
players-only: "<red>This command can only be used by players.</red>"
unknown-subcommand: "<red>Unknown subcommand. Use /sa help</red>"
config-reloaded: "<green>Configuration reloaded.</green>"
file-reloaded: "<green>{file} reloaded.</green>"
reload-summary-header: "<green>Reload complete:</green>"
reload-summary-item: " <dark_gray>•</dark_gray> <gray>{item}</gray>"
confirm-queue-hint: "<gray>Type <yellow>confirm</yellow> in chat or run <yellow>/sa confirm</yellow> to proceed.</gray>"
no-pending-confirm: "<red>No pending confirmation.</red>"
invalid-number: "<red>Invalid number: <yellow>{value}</yellow></red>"
invalid-world: "<red>Unknown world: <yellow>{world}</yellow></red>"
invalid-duration: "<red>Invalid duration. Examples: 10m, 3h, 7d, 1w2d3h</red>"
divider: "<gray><st> </st></gray>"
action-cancelled: "<gray>Action cancelled.</gray>"
cannot-target-self: "<red>You cannot target yourself.</red>"
prompt: "<yellow>{prompt}</yellow>"
error: "<red>That action failed. Check the console or try again.</red>"
input-timeout: "<red>Input timed out. Try again.</red>"
cancel-prompt: "<dark_gray>Type <yellow>cancel</yellow> to stop.</dark_gray>"
module-disabled: "<red>This feature is disabled.</red>"
platform:
paper-only-itemeditor: "<red>The item editor requires Paper. Use a Paper server for data-component editing.</red>"
paper-only-fakeplayer: "<red>Fake player / mannequin tools require Paper.</red>"
# ==================== MODERATION ====================
moderation:
immune: "<red>{player} is immune to moderation actions.</red>"
kick:
broadcast: "<yellow>{player}</yellow> was kicked by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Kicked <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
screen: "<red><bold>You have been kicked.</bold></red>\n<gray>Reason: <white>{reason}</white></gray>"
ban:
broadcast: "<yellow>{player}</yellow> was banned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Banned <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
already-banned: "<red>{player} is already banned (Case: {case_id})</red>"
screen: "<red><bold>You have been banned.</bold></red>\n<gray>Reason: <white>{reason}</white></gray>\n<gray>Expires: <white>{expires}</white></gray>"
tempban:
broadcast: "<yellow>{player}</yellow> was temp-banned for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Temp-banned <yellow>{player}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
already-banned: "<red>{player} is already banned (Case: {case_id})</red>"
banip:
broadcast: "<yellow>{player}</yellow> was IP-banned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>IP-banned <yellow>{player}</yellow> (<yellow>{ip}</yellow>). Case: <yellow>{case_id}</yellow></green>"
no-ip: "<red>Could not resolve IP address for <yellow>{player}</yellow>. The player must be online or have a known IP.</red>"
invalid-ip: "<red>Invalid IP address.</red>"
already-banned-ip: "<red>IP <yellow>{ip}</yellow> is already banned (Case: {case_id})</red>"
tempipban:
broadcast: "<yellow>{ip}</yellow> was temp IP-banned for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Temp IP-banned <yellow>{ip}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
unbanip:
broadcast: "<yellow>{ip}</yellow> was unbanned by <yellow>{staff}</yellow>"
success: "<green>Unbanned IP <yellow>{ip}</yellow>.</green>"
not-banned: "<red>IP <yellow>{ip}</yellow> is not banned.</red>"
failed: "<red>Could not unban IP <yellow>{ip}</yellow>.</red>"
unban:
broadcast: "<yellow>{player}</yellow> was unbanned by <yellow>{staff}</yellow>"
success: "<green>Unbanned <yellow>{player}</yellow>.</green>"
not-banned: "<red>{player} is not banned.</red>"
mute:
broadcast: "<yellow>{player}</yellow> was muted by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Muted <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
already-muted: "<red>{player} is already muted (Case: {case_id})</red>"
target-notify: "<red>You have been muted. Reason: <white>{reason}</white></red>"
tempmute:
broadcast: "<yellow>{player}</yellow> was temp-muted for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
success: "<green>Temp-muted <yellow>{player}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
already-muted: "<red>{player} is already muted (Case: {case_id})</red>"
target-notify: "<red>You have been muted for <white>{duration}</white>. Reason: <white>{reason}</white></red>"
title: "<red><bold>Muted</bold></red>"
subtitle: "<gray>Expires in <white>{expires}</white></gray>"
actionbar: "<red><bold>Muted</bold></red> <gray>({remaining} remaining)</gray>"
unmute:
broadcast: "<yellow>{player}</yellow> was unmuted by <yellow>{staff}</yellow>"
success: "<green>Unmuted <yellow>{player}</yellow>.</green>"
not-muted: "<red>{player} is not muted.</red>"
target-notify: "<green>You have been unmuted.</green>"
warn:
broadcast: "<yellow>{player}</yellow> was warned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}] (#{total})</dark_gray>"
success: "<green>Warned <yellow>{player}</yellow> (Total: <yellow>{total}</yellow>). Case: <yellow>{case_id}</yellow></green>"
target-notify: "<red>You have been warned. Reason: <white>{reason}</white></red>"
target-count: "<gray>You now have <yellow>{total}</yellow> warning(s).</gray>"
no-warnings: "<gray>{player} has no active warnings.</gray>"
list-header: "<yellow>{player}</yellow><gray>'s Warnings ({count}):</gray>"
list-entry: "<hover:show_text:'<yellow>Case {case_id}</yellow><newline><white>{reason}</white><newline><gray>By {staff}, {time_ago}</gray>'> <dark_gray>[{case_id}]</dark_gray> <gray>{reason} <dark_gray>- by {staff} ({time_ago})</dark_gray></hover>"
no-warnings-to-clear: "<gray>{player} has no active warnings to clear.</gray>"
cleared: "<green>Cleared <yellow>{count}</yellow> warning(s) for <yellow>{player}</yellow>.</green>"
cleared-case: "<green>Cleared warning <yellow>{case_id}</yellow> for <yellow>{player}</yellow>.</green>"
case-not-found: "<red>No active warning found for case <yellow>{case_id}</yellow>.</red>"
case-wrong-player: "<red>Case <yellow>{case_id}</yellow> does not belong to <yellow>{player}</yellow>.</red>"
note:
success: "<green>Note added to case <yellow>{case_id}</yellow> for <yellow>{player}</yellow>.</green>"
no-history: "<gray>No prior punishments. Adding a note for <yellow>{player}</yellow>.</gray>"
no-notes: "<gray>{player} has no notes.</gray>"
list-header: "<yellow>{player}</yellow><gray>'s Notes ({count}):</gray>"
list-entry: "<hover:show_text:'<yellow>Note #{id} · Case {case_id}</yellow><newline><white>{text}</white><newline><gray>By {staff}, {time_ago}</gray>'> <dark_gray>#{id}</dark_gray> <dark_gray>[{case_id}]</dark_gray> <gray>{text} <dark_gray>- by {staff} ({time_ago})</dark_gray></hover>"
deleted: "<green>Deleted note <yellow>#{id}</yellow> for <yellow>{player}</yellow>.</green>"
edited: "<green>Updated note <yellow>#{id}</yellow> for <yellow>{player}</yellow>.</green>"
not-found: "<red>Note <yellow>#{id}</yellow> not found.</red>"
invalid-id: "<red>Invalid note id.</red>"
rollback:
success: "<green>Rolled back <yellow>{type}</yellow> for <yellow>{player}</yellow> (Case: <yellow>{case_id}</yellow>).</green>"
broadcast: "<yellow>{staff}</yellow> rolled back <yellow>{case_id}</yellow> ({type} on {player})"
not-found: "<red>No punishment found with case ID: <yellow>{case_id}</yellow></red>"
already-inactive: "<red>Punishment <yellow>{case_id}</yellow> is already inactive.</red>"
failed: "<red>Failed to rollback punishment <yellow>{case_id}</yellow>.</red>"
escalation:
kick: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-kicked at <yellow>{total}</yellow> warnings."
kick-offline: "<gold><bold>Escalation:</bold></gold> <yellow>{player}</yellow> reached <yellow>{total}</yellow> warnings (kick skipped; player offline)."
tempmute: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-tempmuted (<yellow>{duration}</yellow>) at <yellow>{total}</yellow> warnings."
tempban: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-tempbanned (<yellow>{duration}</yellow>) at <yellow>{total}</yellow> warnings."
ban: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-banned at <yellow>{total}</yellow> warnings."
mute: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-muted at <yellow>{total}</yellow> warnings."
join-alert: "<gray>[Alert] <yellow>{player}</yellow> joined with: {details}</gray>"
join-alert-mute: "<red>active mute</red> "
join-alert-warns: "<gold>{count} warning(s)</gold>"
chat-muted: "<red>You are muted.</red> <gray>Reason: <white>{reason}</white></gray>{remaining}"
chat-muted-remaining: " <gray>({remaining} remaining)</gray>"
muted-command-blocked: "<red>You are muted and cannot use this command.</red>"
invalid-duration: "<red>Invalid duration. Examples: 10m, 3h, 7d, 1w2d3h</red>"
check-header: "<yellow>Moderation status for <white>{player}</white></yellow>"
check-ban: " <red>Ban</red> <dark_gray>[{case_id}]</dark_gray> by <yellow>{staff}</yellow>: <white>{reason}</white> <gray>(expires: {expires})</gray>"
check-ban-none: " <green>No active ban.</green>"
check-mute: " <gold>Mute</gold> <dark_gray>[{case_id}]</dark_gray> by <yellow>{staff}</yellow>: <white>{reason}</white> <gray>(expires: {expires})</gray>"
check-mute-none: " <green>No active mute.</green>"
check-jail: " <red>Jailed</red> in <yellow>{room}</yellow>: <white>{reason}</white> <gray>({remaining} · by {staff})</gray>"
check-jail-none: " <green>Not jailed.</green>"
check-frozen: " <red>Frozen</red>"
check-frozen-none: " <green>Not frozen.</green>"
expiry-permanent: "Permanent"
expiry-expired: "Expired"
banlist-header: "<yellow>Active bans</yellow> <gray>({count}) · page {page}/{total_pages}</gray>"
mutelist-header: "<yellow>Active mutes</yellow> <gray>({count}) · page {page}/{total_pages}</gray>"
banlist-empty: "<gray>No active bans.</gray>"
mutelist-empty: "<gray>No active mutes.</gray>"
punishment-list-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <dark_gray>[{case_id}]</dark_gray> <gray>{type}</gray> by {staff}: {reason} <dark_gray>({expires})</dark_gray>"
freezelist-header: "<yellow>Frozen players</yellow> <gray>({count})</gray>"
freezelist-empty: "<green>No frozen players.</green>"
freezelist-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <gray>(violations: {violations})</gray>"
freezeinfo: "<yellow>{player}</yellow> is frozen <gray>(violations: {violations})</gray>"
history-header: "<yellow>Punishment history for {player}</yellow> <gray>({count})</gray>"
history-empty: "<gray>No punishment history.</gray>"
history-entry: " <dark_gray>[{case_id}]</dark_gray> <gray>{type}</gray> <dark_gray>({active})</dark_gray> by {staff}: {reason} <dark_gray>({time_ago})</dark_gray>"
case-not-found: "<red>No punishment found for case <yellow>{case_id}</yellow>.</red>"
case-header: "<yellow>Case <white>{case_id}</white></yellow>"
case-line: " <gray>Player:</gray> <yellow>{player}</yellow> · <gray>Type:</gray> {type} · <gray>Active:</gray> {active}<newline> <gray>Staff:</gray> {staff} · <gray>When:</gray> {time_ago}<newline> <gray>Reason:</gray> <white>{reason}</white><newline> <gray>Expires:</gray> {expires}"
lastloc: "<yellow>{player}</yellow> last logout: <white>{world}</white> <gray>{x}, {y}, {z}</gray>"
lastloc-unknown: "<red>No last logout location stored for <yellow>{player}</yellow>.</red>"
lastloc-world-unloaded: "<yellow>{player}</yellow> last world <white>{world}</white> is not loaded."
freeze:
already-frozen: "<red>{player} is already frozen.</red>"
frozen-target: "<red><bold>You have been frozen.</bold></red> <gray>Do not log out.</gray>"
frozen-staff: "<green>Froze <yellow>{player}</yellow>.</green>"
broadcast: "<yellow>{player}</yellow> was <red>frozen</red> by <yellow>{staff}</yellow>"
title: "<red><bold>Frozen</bold></red>"
subtitle: "<gray>Do not log out</gray>"
not-frozen: "<red>{player} is not frozen.</red>"
unfrozen-target: "<green>You have been unfrozen.</green>"
unfrozen-staff: "<green>Unfroze <yellow>{player}</yellow>. Violations: <yellow>{violations}</yellow></green>"
unfreeze-broadcast: "<yellow>{player}</yellow> was <green>unfrozen</green> by <yellow>{staff}</yellow> <gray>(violations: {violations})</gray>"
unfreeze-title: "<green><bold>Unfrozen</bold></green>"
unfreeze-subtitle: "<gray>You can move again</gray>"
disconnect-alert: "<red><bold>Alert:</bold></red> <yellow>{player}</yellow> <red>disconnected while frozen</red> <gray>(violations: {violations})</gray>"
actionbar: "<red><bold>You are frozen. Do not log out.</bold></red>"
cannot-chat: "<red>You cannot chat while frozen.</red>"
cannot-teleport: "<red>You cannot teleport while frozen.</red>"
cannot-command: "<red>You cannot use commands while frozen.</red>"
cannot-freeze-self: "<red>You cannot freeze yourself.</red>"
# ==================== JAIL ====================
jail:
room-exists: "<red>A jail room named <yellow>{room}</yellow> already exists. Use <yellow>/sa jail edit {room}</yellow> to modify it.</red>"
room-not-found: "<red>No jail room named <yellow>{room}</yellow>. Use <yellow>/sa jail create {room}</yellow> to create it.</red>"
no-room-available: "<red>No jail room available. Create one first with <yellow>/sa jail create <name></yellow>.</red>"
already-jailed: "<red>{player} is already jailed. Unjail them first.</red>"
immune: "<red>{player} cannot be jailed (immune).</red>"
invalid-duration: "<red>Invalid duration. Use e.g. 10m, 1h, 7d, or 'permanent'.</red>"
creation-started: "<green>Jail creation started for room <yellow>{room}</yellow>.</green>"
tool-inventory-full: "<red>Your inventory is full. Free a slot for the jail setup tool and try again.</red>"
creation-step1: "<gray>Step 1: <yellow>Right-click</yellow> to set the <bold>entry point</bold> (where jailed players teleport to).</gray>"
creation-undo: "<gray>Use <yellow>Left-click</yellow> at any time to undo the last selection.</gray>"
editing-started: "<green>Editing jail room <yellow>{room}</yellow>.</green>"
editing-step1: "<gray>Step 1: <yellow>Right-click</yellow> to set the new <bold>entry point</bold>.</gray>"
entry-set: "<green>Entry point set at <yellow>{location}</yellow>.</green>"
entry-step2: "<gray>Step 2: <yellow>Right-click</yellow> to set the <bold>exit point</bold> (where players teleport on unjail).</gray>"
exit-set: "<green>Exit point set at <yellow>{location}</yellow>.</green>"
exit-cleared: "<yellow>Exit point cleared. Right-click to re-set it.</yellow>"
entry-cleared: "<yellow>Entry point cleared. Right-click to re-set it.</yellow>"
nothing-to-undo: "<red>Nothing to undo.</red>"
creation-cancelled: "<red>Jail creation/editing cancelled.</red>"
first-room-default: "<gray>This is the first jail room. It is set as <yellow>default</yellow>.</gray>"
room-finalized: "<green>Jail room <yellow>{room}</yellow> {action}.</green>"
room-finalized-broadcast: "<yellow>{staff}</yellow> {action} jail room <yellow>{room}</yellow>"
room-deleted: "<green>Jail room <yellow>{room}</yellow> deleted.</green>"
room-delete-has-players: "<red>Cannot delete: players are currently jailed in this room. Unjail them first.</red>"
default-set: "<green>Default jail room set to <yellow>{room}</yellow>.</green>"
default-not-found: "<red>No jail room named <yellow>{room}</yellow>.</red>"
list-header: " <yellow><bold>Jail Rooms</bold></yellow>"
list-empty: " <gray>No jail rooms created yet.</gray>"
list-entry: " <dark_gray>-</dark_gray> <yellow>{room}</yellow>{default} <gray>Entry: {entry} | Exit: {exit}</gray>"
list-default-tag: " <green>[Default]</green>"
jailed-target: "<red><bold>You have been jailed.</bold></red>"
jailed-duration: "<gray>Duration: <yellow>{duration}</yellow></gray>"
jailed-permanent: "<gray>Duration: <red>Permanent</red></gray>"
jailed-title: "<red><bold>Jailed</bold></red>"
jailed-subtitle: "<gray>by {staff}</gray>"
jailed-staff: "<green>Jailed <yellow>{player}</yellow> in room <yellow>{room}</yellow> for <yellow>{duration}</yellow>.</green>"
jailed-broadcast: "<yellow>{player}</yellow> was <red>jailed</red> by <yellow>{staff}</yellow> <gray>({duration}, room: {room})</gray>"
not-jailed: "<red>{player} is not jailed.</red>"
list-jailed-empty: "<green>No players are currently jailed.</green>"
list-jailed-header: "<yellow>Jailed players</yellow> <gray>({count})</gray>"
list-jailed-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> in <white>{room}</white> <gray>({remaining})</gray>: {reason} <dark_gray>by {staff}</dark_gray>"
info-header: "<yellow>Jail info for <white>{player}</white></yellow>"
info-room: "<gray>Room:</gray> <yellow>{room}</yellow>"
info-remaining: "<gray>Remaining:</gray> <white>{remaining}</white>"
info-reason: "<gray>Reason:</gray> <white>{reason}</white>"
info-staff: "<gray>Jailed by:</gray> <yellow>{staff}</yellow>"
unjailed-target: "<green>You have been released from jail.</green>"
unjailed-title: "<green><bold>Released</bold></green>"
unjailed-subtitle: "<gray>You are free</gray>"
unjailed-staff: "<green>Unjailed <yellow>{player}</yellow>.</green>"
unjailed-broadcast: "<yellow>{player}</yellow> was <green>unjailed</green> by <yellow>{staff}</yellow>"
still-jailed: "<red>You are still jailed.</red>"
still-jailed-remaining: "<gray>Remaining: <yellow>{remaining}</yellow></gray>"
expired: "<green>Your jail time has expired. You are free.</green>"
expired-title: "<green><bold>Released</bold></green>"
expired-subtitle: "<gray>Jail time expired</gray>"
expired-broadcast: "<yellow>{player}</yellow>'s jail sentence has <green>expired</green>"
actionbar: "<red><bold>Jailed</bold></red> <gray>({remaining})</gray>"
cannot-chat: "<red>You cannot chat while jailed.</red>"
cannot-teleport: "<red>You cannot teleport while jailed.</red>"
cannot-command: "<red>You cannot use commands while jailed.</red>"
tool-name: "<gold><bold>Jail Setup Tool</bold></gold>"
tool-lore-rightclick: "<gray>Right-click: set point</gray>"
tool-lore-leftclick: "<gray>Left-click: undo last point</gray>"
editing-current-entry: "<gray>Current entry: <yellow>{location}</yellow></gray>"
editing-current-exit: "<gray>Current exit: <yellow>{location}</yellow></gray>"
delete-confirm: "<yellow>Shift+Right-click again to confirm deletion of jail room <red>{room}</red>.</yellow>"
create-prompt: "<gradient:#FF5555:#AA0000><bold>Jail Room</bold></gradient> <dark_gray>›</dark_gray> <gray>Enter a room name (letters, numbers, underscores):</gray>"
invalid-name: "<red>Invalid jail name. Use letters, numbers, underscores, or hyphens only.</red>"
teleported-entry: "<green>Teleported to entry of jail room <yellow>{room}</yellow>.</green>"
remaining-permanent: "Permanent"
remaining-expired: "Expired"
remaining-unknown: "Unknown"
jail-duration-prompt: "<gradient:#FF5555:#AA0000><bold>Jail Duration</bold></gradient> <dark_gray>›</dark_gray> <gray>Enter duration (e.g. 10m, 1h, 7d) or <yellow>permanent</yellow>:</gray>"
unjail-confirm: "<yellow>Click Jail again to confirm unjail of <white>{player}</white>.</yellow>"
usage-header: "<red>Usage:</red>"
usage-create: " <yellow>/sa jail create <name></yellow> <dark_gray>- Create a jail room</dark_gray>"
usage-edit: " <yellow>/sa jail edit <name></yellow> <dark_gray>- Edit a jail room</dark_gray>"
usage-delete: " <yellow>/sa jail delete <name></yellow> <dark_gray>- Delete a jail room</dark_gray>"
usage-setdefault: " <yellow>/sa jail setdefault <name></yellow> <dark_gray>- Set default room</dark_gray>"
usage-list: " <yellow>/sa jail list</yellow> <dark_gray>- List all rooms</dark_gray>"
usage-gui: " <yellow>/sa jail</yellow> <dark_gray>- Open jail manager GUI</dark_gray>"
usage-jail: " <yellow>/sa jail <player> <duration> [room]</yellow> <dark_gray>- Jail a player</dark_gray>"
# ==================== VANISH ====================
vanish:
already-vanished: "<red>You are already vanished.</red>"
vanished: "<green>You are now <bold>vanished</bold>.</green> <gray>(weight: {weight})</gray>"
broadcast: "<yellow>{player}</yellow> is now <green>vanished</green> <gray>(weight: {weight})</gray>"
not-vanished: "<red>You are not vanished.</red>"
unvanished: "<red>You are no longer <bold>vanished</bold>.</red>"
unvanish-broadcast: "<yellow>{player}</yellow> is no longer vanished"
others-vanished: "<green>Vanished <yellow>{player}</yellow>.</green>"
others-unvanished: "<green>Unvanished <yellow>{player}</yellow>.</green>"
actionbar: "<dark_aqua><bold>Vanished</bold></dark_aqua> <gray>Hidden from players</gray>"
# ==================== STAFF MODE ====================
staffmode:
already-enabled: "<red>You are already in staff mode.</red>"
enabled: "<green>Staff mode <bold>enabled</bold>.</green>"
title-enabled: "<gold><bold>Staff mode</bold></gold>"
subtitle-enabled: "<gray>Tools equipped. Inventory saved.</gray>"
actionbar: "<gold><bold>Staff mode</bold></gold> <dark_gray>·</dark_gray> {vanish}{spectate}"
actionbar-vanish-on: "<aqua>Vanish ON</aqua>"
actionbar-vanish-off: "<gray>Visible</gray>"
broadcast-enabled: "<yellow>{player}</yellow> entered <green>staff mode</green>"
not-enabled: "<red>You are not in staff mode.</red>"
disabled: "<red>Staff mode <bold>disabled</bold>.</red>"
broadcast-disabled: "<yellow>{player}</yellow> left <red>staff mode</red>"
tool-inspector-name: "<yellow>Player Inspector</yellow>"
tool-inspector-lore1: "<gray>Right-click a player to view snapshot</gray>"
tool-inspector-lore2: "<dark_gray>Slot 1</dark_gray>"
tool-history-name: "<yellow>Punishment History</yellow>"
tool-history-lore1: "<gray>Right-click a player to view history</gray>"
tool-history-lore2: "<dark_gray>Slot 2</dark_gray>"
tool-freeze-name: "<aqua>Freeze Tool</aqua>"
tool-freeze-lore1: "<gray>Right-click a player to freeze/unfreeze</gray>"
tool-freeze-lore2: "<dark_gray>Slot 3</dark_gray>"
tool-health-name: "<green>Server Health</green>"
tool-health-lore1: "<gray>Right-click to view server diagnostics</gray>"
tool-health-lore2: "<dark_gray>Slot 9</dark_gray>"
tool-spectate-name: "<light_purple>Spectate Tool</light_purple>"
tool-spectate-lore1: "<gray>Right-click a player to spectate</gray>"
tool-spectate-lore2: "<dark_gray>Slot 4</dark_gray>"
tool-jail-name: "<gold>Jail Tool</gold>"
tool-jail-lore1: "<gray>Right-click a player to jail/unjail</gray>"
tool-jail-lore2: "<dark_gray>Slot 5</dark_gray>"
tool-vanish-toggle-name: "<light_purple>Vanish Toggle</light_purple>"
tool-vanish-toggle-lore1: "<gray>Right-click to toggle vanish</gray>"
tool-vanish-toggle-lore2: "<dark_gray>Slot 6</dark_gray>"
tool-teleport-name: "<aqua>Teleport Tool</aqua>"
tool-teleport-lore1: "<gray>Right-click a player to teleport</gray>"
tool-teleport-lore2: "<dark_gray>Slot 7</dark_gray>"
tool-dashboard-name: "<gold>Admin Dashboard</gold>"
tool-dashboard-lore1: "<gray>Right-click to open the admin dashboard</gray>"
tool-dashboard-lore2: "<dark_gray>Slot 8</dark_gray>"
# Fallback ids kept for older staff.yml tool names
tool-compass-name: "<yellow>Player Inspector</yellow>"
tool-compass-lore1: "<gray>Right-click a player to view snapshot</gray>"
tool-compass-lore2: "<dark_gray>Slot 1</dark_gray>"
tool-inspect-name: "<yellow>Player Inspector</yellow>"
tool-inspect-lore1: "<gray>Right-click a player to view snapshot</gray>"
tool-inspect-lore2: "<dark_gray>Slot 1</dark_gray>"
# ==================== SPECTATE ====================
spectate:
cannot-self: "<red>You cannot spectate yourself.</red>"
already-spectating: "<red>You are already spectating. Use <yellow>/sa unspectate</yellow> first.</red>"
started: "<green>Now spectating <yellow>{player}</yellow>. Use <yellow>/sa unspectate</yellow> or change gamemode to exit.</green>"
restored-after-disconnect: "<yellow>Restored your location and gamemode after spectating.</yellow>"
broadcast-started: "<yellow>{staff}</yellow> is now spectating <yellow>{player}</yellow>"
not-spectating: "<red>You are not spectating anyone.</red>"
ended: "<red>Spectator mode ended.</red> <gray>Teleported back to your original location.</gray>"
broadcast-ended: "<yellow>{staff}</yellow> stopped spectating <yellow>{player}</yellow>"
target-quit: "<yellow>{player}</yellow> went offline. Spectator mode ended."
# ==================== CHAT ====================
chat:
links-blocked: "<red>Links are not allowed in chat.</red>"
filter-blocked: "<red>Message blocked. Filtered word: <yellow>{word}</yellow>.</red>"
slowmode: "<red>Slowmode active. Wait <yellow>{remaining}s</yellow> before chatting.</red>"
slowmode-actionbar: "<red>Slowmode. Wait <yellow>{remaining}s</yellow></red>"
slowmode-not-active: "<red>Slowmode is not active.</red>"
slowmode-invalid: "<red>Slowmode delay must be between 1 and 300 seconds.</red>"
slowmode-enabled: "<gray>Slowmode <green>enabled</green> (<yellow>{seconds}s</yellow> delay) by <yellow>{staff}</yellow>.</gray>"
slowmode-disabled: "<gray>Slowmode has been <red>disabled</red> by <yellow>{staff}</yellow>.</gray>"
chat-cleared: "<gray>Chat has been cleared by <yellow>{staff}</yellow>.</gray>"
chat-cleared-force: "<gray>Chat has been <red>force-cleared</red> by <yellow>{staff}</yellow>.</gray>"
chat-cleared-player: "<gray>Cleared chat for <yellow>{player}</yellow>.</gray>"
chat-cleared-target: "<gray>Your chat has been cleared by <yellow>{staff}</yellow>.</gray>"
staffchat-enabled: "<green>Staff chat mode <bold>enabled</bold>.</green> <gray>All your messages go to staff only.</gray>"
staffchat-disabled: "<red>Staff chat mode <bold>disabled</bold>.</red> <gray>Your messages go to public chat.</gray>"
# ==================== REPORT ====================
report:
cooldown: "<red>You must wait <yellow>{remaining}s</yellow> before reporting again.</red>"
failed: "<red>Could not submit report. Try again.</red>"
success: "<green>Report #<yellow>{id}</yellow> submitted against <yellow>{player}</yellow>.</green>"
broadcast: "<red><bold>[REPORT]</bold></red> <yellow>{reporter}</yellow> reported <yellow>{player}</yellow><gray> - {reason}</gray> <click:run_command:/sa reports><dark_gray>[View Reports]</dark_gray></click>"
cannot-self: "<red>You cannot report yourself.</red>"
enter-reason: "<yellow>Enter a reason for reporting <white>{player}</white>:</yellow>"
invalid-id: "<red>Invalid report ID.</red>"
header: " <red><bold>Open Reports</bold></red> <gray>({count})</gray>"
no-reports: " <green>No open reports.</green>"
entry: " <dark_gray>#{id}</dark_gray> <yellow>{player}</yellow> <gray>by {reporter} ({time_ago})</gray>"
entry-actions: " <white>{reason}</white> <click:run_command:/sa resolvereport {id}><green>[Resolve]</green></click> <click:run_command:/sa snapshot {player}><gray>[Snapshot]</gray></click>"
target-header: " <red><bold>Reports for {player}</bold></red> <gray>({count})</gray>"
target-no-reports: " <gray>No reports found.</gray>"
target-entry: " <dark_gray>#{id}</dark_gray> <gray>by {reporter} ({time_ago}) - {status}</gray>"
target-entry-reason: " <white>{reason}</white>"
status-open: "<red>Open</red>"
status-resolved: "<green>Resolved</green> <gray>by {resolved_by}</gray>"
resolve-not-found: "<red>Report #{id} not found or already resolved.</red>"
resolve-success: "<green>Report #<yellow>{id}</yellow> on <yellow>{player}</yellow> has been resolved.</green>"
resolve-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) resolved by <yellow>{staff}</yellow></gray>"
resolve-confirm: "<yellow>Shift+Right-click / click Resolve again to confirm resolve of report <red>#{id}</red>.</yellow>"
reopen-not-found: "<red>Report #{id} not found or is not resolved.</red>"
reopen-success: "<green>Report #<yellow>{id}</yellow> has been reopened.</green>"
reopen-broadcast: "<gray>Report #{id} reopened by <yellow>{staff}</yellow>.</gray>"
note-not-found: "<red>Report #{id} not found.</red>"
note-added: "<green>Staff note added to report #<yellow>{id}</yellow>.</green>"
teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
gui-empty: "<green>No open reports.</green>"
unassigned: "Unassigned"
entry-assigned: " <gray>Assigned to <yellow>{staff}</yellow></gray>"
claim-not-found: "<red>Open report #{id} not found.</red>"
claim-already-yours: "<yellow>Report #{id} is already assigned to you.</yellow>"
claim-failed: "<red>Could not claim report #{id}.</red>"
claim-success: "<green>Claimed report #<yellow>{id}</yellow> on <yellow>{player}</yellow>.</green>"
claim-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) claimed by <yellow>{staff}</yellow></gray>"
claim-reassigned: "<yellow>Reassigned report #{id} on <white>{player}</white> from <white>{staff}</white> to you.</yellow>"
claim-reassign-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) reassigned from <white>{previous}</white> to <yellow>{staff}</yellow></gray>"
# ==================== INSPECTION ====================
inspection:
invsee: "<green>Viewing <yellow>{player}</yellow>'s inventory{mode}</green>"
endersee: "<green>Viewing <yellow>{player}</yellow>'s ender chest{mode}</green>"
mode-editable: " <gray>(editable)</gray>"
mode-readonly: " <gray>(read-only)</gray>"
# ==================== INVENTORY LOCK ====================
inventory-lock:
already-locked: "<red>{player}'s inventory is already locked.</red>"
locked-target: "<red><bold>Your inventory has been locked.</bold></red> <gray>You cannot move or drop items.</gray>"
locked-staff: "<green>Locked <yellow>{player}</yellow>'s inventory.</green>"
broadcast-locked: "<yellow>{player}</yellow>'s inventory was <red>locked</red> by <yellow>{staff}</yellow>"
not-locked: "<red>{player}'s inventory is not locked.</red>"
unlocked-target: "<green>Your inventory has been unlocked.</green>"
unlocked-staff: "<green>Unlocked <yellow>{player}</yellow>'s inventory.</green>"
broadcast-unlocked: "<yellow>{player}</yellow>'s inventory was <green>unlocked</green> by <yellow>{staff}</yellow>"
actionbar: "<red><bold>🔒 INVENTORY LOCKED</bold></red>"
cannot-lock-self: "<red>You cannot lock your own inventory.</red>"
# ==================== SNAPSHOT ====================
snapshot:
header: " <yellow><bold>Player Snapshot:</bold> {player}</yellow>"
first-join: " <gray>First Join:</gray> <white>{value}</white>"
last-join: " <gray>Last Join:</gray> <white>{value}</white>"
playtime: " <gray>Total Playtime:</gray> <white>{value}</white>"
ip-count: " <gray>IP Count:</gray> <white>{value}</white>"
no-data: " <gray>No data available (player never joined).</gray>"
status-online: " <gray>Status:</gray> <green>Online</green>"
status-offline: " <gray>Status:</gray> <red>Offline</red>"
punishments-header: " <yellow><bold>Punishments:</bold></yellow>"
banned: " <red>Banned:</red> <white>{reason}</white> <gray>(expires: {expires}) [{case_id}]</gray>"
ban-none: " <gray>Ban:</gray> <green>None</green>"
muted: " <red>Muted:</red> <white>{reason}</white> <gray>(expires: {expires}) [{case_id}]</gray>"
mute-none: " <gray>Mute:</gray> <green>None</green>"
warnings: " <gray>Warnings:</gray> <yellow>{count}</yellow>"
frozen: " <gray>Frozen:</gray> "
frozen-yes: "<red>Yes</red>"
frozen-no: "<green>No</green>"
activity-header: " <yellow><bold>Recent Activity:</bold></yellow>"
activity-entry: " <dark_gray>[{time_ago}]</dark_gray> <gray>{action} by {staff}</gray>"
# ==================== PLAYER INFO ====================
playerinfo:
header: " <yellow><bold>{player}'s Info</bold></yellow>"
health: " <gray>Health:</gray> <red>{health}</red> <dark_gray>/</dark_gray> <red>{max}</red>"
hunger: " <gray>Hunger:</gray> <gold>{hunger}</gold> <dark_gray>/</dark_gray> <gold>20</gold>"
xp: " <gray>XP:</gray> <green>Level {level}</green> <dark_gray>({percent}%)</dark_gray>"
ping: " <gray>Ping:</gray> <aqua>{ping}ms</aqua>"
playtime: " <gray>Playtime:</gray> <white>{time}</white>"
balance: " <gray>Balance:</gray> <green>{balance}</green>"
gamemode: " <gray>Gamemode:</gray> <white>{gamemode}</white>"
cannot-self: "<red>You cannot view your own player info. Target another player.</red>"
offline-tag: " <gray>Status:</gray> <yellow>Offline</yellow>"
offline-gui-unavailable: "<gray>GUI unavailable for offline <yellow>{player}</yellow>. Showing chat summary.</gray>"
last-seen: " <gray>Last seen:</gray> <white>{time}</white>"
offline-homes-hint: " <gray>Homes:</gray> <white>/sa homes {player}</white>"
invsee:
cannot-self: "<red>You cannot open your own inventory with invsee.</red>"
offline-snapshot: "<yellow>{player}</yellow> is offline. Showing latest snapshot <gray>({reason})</gray>."
offline-unavailable: "<yellow>{player}</yellow> is offline and no inventory snapshot is available."
offline-hint: "<gray>Use <yellow>/sa invsnapshot list {player}</yellow> to browse saved snapshots.</gray>"
endersee:
cannot-self: "<red>You cannot open your own ender chest with endersee.</red>"
# ==================== DIAGNOSTICS ====================
diagnostics:
header: " <yellow><bold>Server Health</bold></yellow>"
tps: " <gray>TPS (1m/5m/15m):</gray> {tps1} <dark_gray>/</dark_gray> {tps5} <dark_gray>/</dark_gray> {tps15}"
mspt: " <gray>MSPT:</gray> <{color}>{value}ms</{color}>"
players: " <gray>Players:</gray> <white>{online}/{max}</white>"
entities: " <gray>Entities:</gray> <white>{count}</white>"
chunks: " <gray>Loaded Chunks:</gray> <white>{count}</white>"
memory: " <gray>Memory:</gray> <{color}>{used}MB / {total}MB ({percent}%)</{color}>"
# ==================== TELEPORT ====================
teleport:
tphere-success: "<green>Teleported <yellow>{player}</yellow> to your location.</green>"
tphere-target: "<yellow>You have been teleported to <white>{staff}</white>.</yellow>"
tpto-success: "<green>Teleported to <yellow>{player}</yellow>.</green>"
cannot-self: "<red>You cannot teleport yourself to yourself.</red>"
cannot-self-to: "<red>You cannot teleport to yourself.</red>"
tppos-success: "<green>Teleported to <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow> in <yellow>{world}</yellow>.</green>"
tppos-invalid-coords: "<red>Invalid coordinates. Enter valid numbers.</red>"
biome-searching: "<yellow>Searching for <white>{biome}</white> biome...</yellow>"
biome-success: "<green>Teleported to <yellow>{biome}</yellow> biome at <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>.</green>"
biome-not-found: "<red>Could not find a <yellow>{biome}</yellow> biome within search range.</red>"
biome-invalid: "<red>Unknown biome: <yellow>{biome}</yellow>. Use tab completion for valid biomes.</red>"
# ==================== ALTS ====================
alts:
header: " <yellow><bold>Alt Detection:</bold> {player}</yellow>"
no-alts: " <green>No alt accounts detected.</green>"
found: " <gray>Found <yellow>{count}</yellow> possible alt(s):</gray>"
entry: " <dark_gray>-</dark_gray> <yellow>{name}</yellow> {status}{ban_status} <dark_gray>(Last: {last_seen})</dark_gray> <click:run_command:/sa snapshot {name}><hover:show_text:'<gray>View snapshot</gray>'><dark_gray>[Snapshot]</dark_gray></hover></click>"
status-online: "<green>Online</green>"
status-offline: "<red>Offline</red>"
status-banned: " <red>[Banned]</red>"
# ==================== QUICK PUNISH ====================
quick-punish:
unknown-template: "<red>Unknown template: <yellow>{template}</yellow>. Use /sa qp to see available templates.</red>"
invalid-template-duration: "<red>Invalid template duration: {duration}</red>"
unknown-template-type: "<red>Unknown template type: {type}</red>"
list-header: " <gray>Available templates:</gray>"
list-entry: " <dark_gray>-</dark_gray> <yellow>{name}</yellow> <gray>[{type}]</gray>{duration} <dark_gray>{reason}</dark_gray>"
# ==================== AUDIT ====================
audit:
player-header: " <yellow><bold>Player Audit: {name}</bold></yellow>"
staff-header: " <yellow><bold>Staff Audit: {name}</bold></yellow>"
type-header: " <yellow><bold>Audit by Type: {type}</bold></yellow>"
no-entries: " <gray>No audit entries found.</gray>"
entry: " <dark_gray>{time_ago}</dark_gray> <gray>{case_info}{action} by <white>{staff}</white>{target}</gray>"
unknown-action-type: "<red>Unknown action type: {type}</red>"
entry-detail: "<gray>{action} by {staff} ({time}): {meta}</gray>"
gui-hint: " <gray>GUI: <yellow>{cmd}</yellow></gray>"
next-page-hint: " <gray>More entries may exist. Append page <yellow>{page}</yellow> to view next page.</gray>"
prompt-player: "<yellow>Enter a <bold>player name</bold> to view their audit log (or <white>cancel</white>):</yellow>"
prompt-type: "<yellow>Enter an <bold>action type</bold> (or <white>cancel</white>):</yellow>"
# ==================== HELP ====================
help:
header: " <gradient:#FF6B6B:#FFE66D><bold>SoapsAdmin</bold></gradient> <gray>v{version}</gray>"
page-info: " <gray>Page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> commands</gray>"
page-info-search: " <gray>Search <yellow>{query}</yellow> · page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> match(es)</gray>"
entry: " <click:suggest_command:'{suggest}'><hover:show_text:'<dark_gray>Click to suggest</dark_gray>'><yellow>{usage}</yellow></hover></click> <dark_gray>- {description}</dark_gray>"
footer: " <gray>Search: <yellow>/sa help give</yellow> · silent: add <yellow>-s</yellow> at the end</gray>"
empty: " <gray>No commands available for you.</gray>"
no-match: " <gray>No commands matching <yellow>{query}</yellow>.</gray>"
custom-header: " <gold>Custom commands</gold>"
custom-default: "Custom command"
nav-back: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>« Back</yellow></hover></click>"
nav-back-disabled: "<dark_gray>« Back</dark_gray>"
nav-next: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>Next »</yellow></hover></click>"
nav-next-disabled: "<dark_gray>Next »</dark_gray>"
nav-page: "<gray>[</gray><white>{page}</white><gray>/</gray><white>{total}</white><gray>]</gray>"
kick: "Kick a player"
ban: "Permanently ban a player"
tempban: "Temporarily ban a player"
unban: "Unban a player"
mute: "Mute a player"
tempmute: "Temporarily mute a player"
unmute: "Unmute a player"
warn: "Warn a player"
warns: "View player warnings"
clearwarns: "Clear player warnings"
note: "Add a note on a player"
notes: "View notes for a player"
freeze: "Freeze a player"
check: "Show active ban/mute/jail/freeze status"
banlist: "List active bans"
mutelist: "List active mutes"
jaillist: "List jailed players"
freezelist: "List frozen players"
freezeinfo: "Show freeze info for a player"
punishhistory: "Open punishment history for a player"
case: "Look up a punishment case"
lastloc: "Show a player's last logout coordinates"
report-claim: "Claim an open report"
jail-info: "Show jail details for a player"
home-manage: "Rename, set default, or move homes"
warp-info: "Show warp coordinates and permission"
tpa-pending: "Show pending TPA requests"
kit-preview: "Preview a kit without claiming"
sell-categories: "List sell categories"
whois: "Alias for playerinfo"
r: "Alias for reply"
ignore-manage: "List or clear ignored players"
unfreeze: "Unfreeze a player"
invsee: "View player inventory"
endersee: "View ender chest"
staffmode: "Toggle staff mode"
health: "View server health"
snapshot: "View player snapshot"
audit: "View audit log"
alts: "Detect alt accounts"
report: "Report a player"
reports: "View open reports"
resolve-report: "Resolve a report"
vanish: "Toggle vanish mode"
qp: "Quick punish from template"
rollback: "Rollback a punishment"
spectate: "Spectate a player"
unspectate: "Stop spectating"
sc: "Toggle staff chat / send message"
nickname: "Set or clear your nickname"
friend: "Manage friends and friend teleport"
recipe: "Browse or manage custom recipes"
rtp: "Random teleport to a world"
attribute: "View or edit player living attributes (not item attributes)"
iteminfo: "Inspect the item in your hand"
stafflist: "List online staff"
staffrollcall: "Staff roll call with ping, AFK, vanish, staff mode"
vanishlist: "List vanished players"
moneylog: "View economy transaction log"
tax: "Tax all online players"
skull: "Give yourself a player head"
seen: "Check when a player was last online"
furnace: "Open a virtual furnace"
clearchat: "Clear global chat"
slowmode: "Toggle chat slowmode"
tphere: "Teleport player to you"
tpto: "Teleport to a player"
tppos: "Teleport to coordinates"
biome: "Teleport to a biome"
jail: "Jail a player"
jail-manage: "Manage jail rooms"
unjail: "Unjail a player"
lockinv: "Toggle inventory lock"
admin: "Open admin hub pages (tickets, announcements, MOTD, worlds, and related panels)"
dashboard: "Open player dashboard (kits, warps, homes, and related tools)"
reload: "Reload config or a module (/sa reload [all|config|messages|gui|<module>])"
doubledoors: "Toggle or view your DoubleDoors helper state"
deathcoords: "Show your last death coordinates"
deathsettings: "List or toggle death/respawn settings"
seekitem: "Scan nearby containers for an item"
playtime: "View playtime or leaderboard"
weather: "Change world weather"
weather-lock: "Lock current weather"
weather-unlock: "Unlock weather"
time: "Change world time"
time-lock: "Lock current time"
time-unlock: "Unlock time"
god: "Toggle god mode"
kill: "Kill a player"
killall: "Remove entities by type, group, or Mythic mob"
spawnmob: "Spawn vanilla or Mythic mobs at your location"
fakeop: "Send fake op message"
burn: "Set a player on fire"
extinguish: "Put out fire on a player"
nightvision: "Toggle night vision for yourself or a player"
more: "Refill held item stack to max"
effect: "Apply a potion effect (registry id, e.g. speed)"
feed: "Feed a player"
heal: "Heal a player"
damage: "Damage a player with optional type"
hunger: "Set player hunger value"
gamemode: "Change player gamemode"
lightning: "Strike lightning"
walkspeed: "Set walk speed"
flyspeed: "Set fly speed"
fly: "Toggle flight"
kickall: "Kick all players"
tpall: "Teleport all (or listed) players to you"
experience: "Give, remove, or reset experience"
maintenance: "Toggle maintenance mode"
clearinv: "Clear player inventory"
clearground: "Clear ground items"
clearlag: "Auto clearlag system"
repair: "Repair items"
enchant: "Enchant held items via command"
unenchant: "Remove an enchantment from held item"
enchants: "List all Minecraft enchantments"
itemeditor: "Item editor"
afk: "Toggle AFK mode"
afkzone: "Manage AFK zones"
fakeplayer: "Manage mannequin entities"
invsnapshot: "Inventory snapshot system"
pluginmonitor: "Plugin performance monitor"
uptime: "Show server uptime"
ping: "Check player ping"
hat: "Wear held item as a hat"
cleareffects: "Clear potion effects"
top: "Teleport to highest block"
jump: "Teleport to the block you are looking at"
tpoffline: "Teleport to a player's last logout location"
near: "List nearby players"
smite: "Strike player with lightning"
rocket: "Vertical troll launch with firework (not look-direction)"
pumpkinhead: "Put pumpkin on player head"
sudo: "Force player to run command/chat"
stack: "Stack similar items"
world: "Teleport to a world or manage worlds (if permitted)"
worldmanager: "Manage worlds (create, load, unload, list, teleport)"
back: "Return to previous location"
ipwhitelist: "Manage trusted IPs for alt detection"
sort: "Sort inventory alphabetically"
pm-conflicts: "Detect plugin conflicts"
setspawn: "Set the server spawn point"
spawn: "Teleport to spawn"
setworldspawn: "Set this world's spawn point"
worldspawn: "Teleport to this world's spawn"
setfirstspawn: "Set the first-join spawn"
delspawn: "Delete the server spawn"
broadcast: "Send a broadcast message"
commandspy: "Toggle command spy"
socialspy: "Toggle social spy"
home: "Teleport to a home"
sethome: "Set a home location"
delhome: "Delete a home"
homes: "List your homes"
warp: "Teleport to a warp"
setwarp: "Create a warp point"
delwarp: "Delete a warp"
warps: "List available warps"
tpa: "Request teleport to player"
tpahere: "Request player teleport to you"
tpaccept: "Accept a teleport request"
tpdeny: "Deny a teleport request"
tpacancel: "Cancel your outgoing teleport request"
tptoggle: "Toggle teleport requests"
tpauto: "Toggle auto-accept for teleport requests"
itemblacklist: "Manage banned items"
ticket: "Create and manage support tickets"
announce: "Manage scheduled announcements"
motd: "Manage server MOTD and icon"
staffdash: "View staff activity dashboard"
staffstats: "View staff leaderboard"
customcommand: "Manage custom commands"
interactive: "Bind custom commands to blocks"
rules: "View the server rules"
signedit: "Toggle sign edit mode (right-click to edit)"
bookedit: "Open book editing interface"
bookcopy: "Copy a written book"
bookunsign: "Unsign a written book (make editable)"
kit: "Claim a kit"
kits: "View available kits"
kit-manage: "Create, edit, set, or delete kits"
kit-reset: "Reset kit cooldown/usage for a player"
realname: "Resolve a nickname to the player's real name"
mail: "Send and read private mail"
spawner: "Edit the spawner you are looking at"
saveinventory: "Save your inventory as a kit"
anvil: "Open a virtual anvil"
workbench: "Open a virtual crafting table"
launch: "Reposition a player along their look direction (not rocket)"
playerinfo: "View detailed player stats"
balance: "Check your or another player's balance"
baltop: "View balance leaderboard"
modules: "Manage toggleable feature modules"
shop: "Open the shop hub GUI"
buy: "Buy items from the server shop"
sell: "Sell items or open the sell GUI"
sellall: "Sell all sellable items in your inventory"
price: "Look up buy/sell prices (held item if no arg)"
worth: "Show total worth of held item (or inventory)"
value: "Line breakdown of inventory (or hand) worth"
trash: "Open the trash disposal GUI"
itemfilter: "Manage personal item pickup blacklist"
autopickup: "Toggle magnet pickup of nearby drops"
autosell: "Auto-sell listed items on pickup"
paytoggle: "Toggle incoming /pay payments"
msgtoggle: "Toggle incoming private messages"
tradetoggle: "Toggle incoming trade requests"
trade: "Request, accept, or deny player trades"
vault: "Open your player vaults"
vaultadmin: "Manage other players' vaults"
cheque: "Withdraw or deposit economy cheques"
chatroom: "Create, join, and manage chat rooms"
mutechat: "Globally mute or unmute the server chat"
unloadchunks: "Unload idle chunks to free memory"
tprandom: "Teleport to a random player (cycles through all before repeating)"
waypoint: "Personal waypoints with optional display markers"
waypoints: "Personal waypoints with optional display markers"
gamerules: "Open gamerule editor or list/toggle/set rules"
xraycheck: "View mining statistics for anti-xray review"
laghotspots: "Scan for lag hotspot chunks"
chunkactivity: "Show most active chunks"
mobdensity: "Show areas with high mob density"
redstonecheck: "Scan for heavy redstone activity"
payall: "Pay all online players a set amount"
daily: "Claim your daily economy reward"
bottom: "Teleport to the bottom of your current column"
version: "Show plugin version info"
info: "View plugin info and status"
debug: "Show debug and diagnostic info"
settings: "Open settings dashboard"
guiconfig: "List, reload, or regenerate gui.yml"
give: "Give an item (supports enchants, name, lore, effects)"
take: "Take an item from a player"
economy-give: "Give currency to a player"
economy-take: "Take currency from a player"
economy-set: "Set player balance"
economy-reset: "Reset player balance"
economy-resetall: "Reset all player balances for an economy"
economy-manage: "Manage custom economies"
pay: "Pay another player"
banip: "Ban a player's IP address"
backup: "Create plugin data or world backups"
msg: "Send a private message"
reply: "Reply to last private message"
lastmsg: "Show who /sa r would reply to"
ignore: "Ignore a player's messages"
sit: "Sit down"
spin: "Start spinning"
# ==================== PLUGIN MONITOR ====================
pluginmonitor:
header: " <gradient:#00CED1:#00FA9A><bold>Plugin Monitor</bold></gradient>"
list-header: " <gray>Plugins, page <white>{page}</white> of <white>{total_pages}</white> (<white>{total_plugins}</white> total)</gray>"
list-entry: " <{color}>{name}</{color}> <dark_gray>v{version}</dark_gray> <gray>| <{color}>{label} ({score})</{color}> | L: {listeners} | T: {tasks}</gray>{status}"
top-header: " <gold><bold>Top {count} Plugins by Impact</bold></gold>"
top-entry: " <gold>#{rank}</gold> <{color}>{name}</{color}> <gray>| Impact: <{color}>{score}</{color}> ({label}) | L: {listeners} | T: {tasks}</gray>"
not-found: "<red>Plugin '{name}' not found.</red>"
scan-complete: "<green>Scan complete. Profiled <yellow>{count}</yellow> plugin(s).</green>"
detail-header: " <gold><bold>{name}</bold></gold> <gray>v{version}</gray>"
detail-status: " <gray>Status: <{color}>{status}</{color}></gray>"
detail-authors: " <gray>Authors: <white>{authors}</white></gray>"
detail-website: " <gray>Website: <white>{website}</white></gray>"
detail-description: " <gray>Description: <white>{description}</white></gray>"
detail-api: " <gray>API Version: <white>{api}</white></gray>"
detail-impact: " <gray>Impact Score: <{color}><bold>{score}/100</bold></{color}> ({label})</gray>"
detail-listeners: " <gray>Event Listeners: <white>{count}</white></gray>"
detail-heavy-warning: " <red>⚠ Heavy: {event}</red>"
detail-listener-entry: " <dark_gray>• {event}</dark_gray>"
# Conflict detection
conflicts-header: " <gradient:#FF6347:#FF8C00><bold>Plugin Conflict Detector</bold></gradient>"
conflicts-commands-header: " <gold><bold>Duplicate Commands:</bold></gold>"
conflicts-command-entry: " <yellow>{command}</yellow> <gray>→ registered by:</gray> <white>{plugins}</white>"
conflicts-events-header: " <gold><bold>Overlapping Event Listeners (3+ plugins):</bold></gold>"
conflicts-event-entry: " <yellow>{event}</yellow> <gray>({count} plugins):</gray> <white>{plugins}</white>"
conflicts-none: " <green>No notable conflicts detected.</green>"
detail-commands: " <gray>Commands: <white>{commands}</white></gray>"
detail-tasks: " <gray>Tasks. Sync: <white>{sync}</white> | Async: <white>{async}</white> | Total Active: <white>{total}</white></gray>"
detail-depends: " <gray>Dependencies: <white>{depends}</white></gray>"
detail-softdepends: " <gray>Soft Dependencies: <white>{softdepends}</white></gray>"
# ==================== FAKE PLAYER / MANNEQUIN ====================
fakeplayer:
spawned: "<green>Spawned mannequin <yellow>{name}</yellow> at <gray>{x}, {y}, {z}</gray>.</green>"
removed: "<green>Removed mannequin <yellow>{name}</yellow>.</green>"
removed-all: "<green>Removed <yellow>{count}</yellow> mannequin(s).</green>"
removeall-confirm: "<yellow>Remove <red>all</red> managed mannequins on the server? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
none-nearby: "<red>No mannequins found within 10 blocks.</red>"
none-active: "<yellow>No managed mannequins found.</yellow>"
list-header: "<gold>Managed mannequins ({count}):</gold>"
list-entry: "<gray> - <white>{name}</white> <dark_gray>[{world}]</dark_gray> <yellow>{x}, {y}, {z}</yellow> <dark_gray>(by {owner})</dark_gray></gray>"
# GUI / property messages
skin-set: "<green>Skin set to <yellow>{name}</yellow>.</green>"
name-set: "<green>Name set to <yellow>{name}</yellow>.</green>"
description-set: "<green>Subtitle set to <yellow>{value}</yellow>.</green>"
description-cleared: "<green>Subtitle cleared.</green>"
description-hidden: "<green>Subtitle (NPC line) hidden.</green>"
description-shown: "<green>Subtitle shown again.</green>"
description-default: "<green>Subtitle reset to default <yellow>NPC</yellow>.</green>"
pose-set: "<green>Pose set to <yellow>{value}</yellow>.</green>"
rotated: "<green>Rotated to <yellow>{value}°</yellow>.</green>"
mainhand-set: "<green>Main hand set to <yellow>{value}</yellow>.</green>"
equipment-set: "<green>Equipped <yellow>{slot}</yellow> from your hand.</green>"
equipment-cleared: "<green>Cleared <yellow>{slot}</yellow> slot.</green>"
equipment-cleared-all: "<green>Cleared all mannequin equipment.</green>"
preset-applied: "<green>Applied preset <yellow>{name}</yellow>.</green>"
equip-no-item: "<red>You are not holding any item.</red>"
property-toggled: "<green>{property} is now {state}.</green>"
toggle-on: "<green>ON</green>"
toggle-off: "<red>OFF</red>"
prompt-skin: "Enter the player name for the skin"
prompt-name: "Enter the new display name (supports MiniMessage)"
prompt-description: "Enter subtitle text under the name (default is NPC). Type hide, or npc/default to reset"
prompt-equip: "Type <yellow>hand</yellow> to equip from hand, <yellow>clear</yellow> to remove ({slot}), or hold an item and left-click the slot in the GUI"
# Chat-based editor (when GUI is disabled)
chat-editor-header: "<gold><bold>Mannequin Editor</bold></gold> <gray>(<white>{name}</white>)</gray>"
chat-editor-pose: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer pose'><hover:show_text:'<gray>Cycle to the next pose</gray>'><yellow>Cycle Pose</yellow></hover></click>"
chat-editor-rotate: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer rotate'><hover:show_text:'<gray>Rotate 45°</gray>'><yellow>Rotate</yellow></hover></click>"
chat-editor-glow: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer glow'><hover:show_text:'<gray>Toggle glow effect</gray>'><yellow>Toggle Glow</yellow></hover></click>"
chat-editor-name-visible: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer namevisible'><hover:show_text:'<gray>Toggle name visibility</gray>'><yellow>Toggle Name</yellow></hover></click>"
chat-editor-remove: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer remove'><hover:show_text:'<red>Remove this mannequin</red>'><red>Delete</red></hover></click>"
chat-editor-hint: " <gray>Use <yellow>/sa fakeplayer edit</yellow> to reopen the editor.</gray>"
look-at-me: "<green>Mannequin is now looking at you.</green>"
moved-here: "<green>Mannequin moved to your location.</green>"
yaw-snapped: "<green>Yaw snapped to <yellow>{value}°</yellow>.</green>"
yaw-copied: "<green>Copied your yaw onto the mannequin.</green>"
snapped-block: "<green>Mannequin snapped to block center.</green>"
cloned: "<green>Cloned mannequin <yellow>{name}</yellow>. Editing the copy.</green>"
clone-failed: "<red>Could not clone that mannequin.</red>"
delete-shift: "<yellow>Shift-click Delete to permanently remove this mannequin.</yellow>"
equipment-copied: "<green>Copied your armor and hands onto the mannequin.</green>"
nudged-y: "<green>Mannequin height set to <yellow>{value}</yellow>.</green>"
nudged-xz: "<green>Mannequin moved to <yellow>{x}</yellow>, <yellow>{z}</yellow>.</green>"
adjust-started: "<green>Placement adjust mode.</green> <gray>Stay within 12 blocks of the mannequin.</gray>"
adjust-ended: "<gray>Left placement adjust mode.</gray>"
adjust-out-of-range: "<yellow>Adjust mode ended.</yellow> <gray>You moved too far away or changed worlds.</gray>"
adjust-hint: "<gray>Aim in the air · Left/Right click rotate · Sneak+click raise/lower · Scroll strafe · F nudge · Drop (Q) done</gray>"
adjust-actionbar: "<gold>Adjust</gold> <gray>|</gray> <white>Air click</white> <gray>rotate</gray> <dark_gray>·</dark_gray> <white>Sneak+Click</white> <gray>Y</gray> <dark_gray>·</dark_gray> <white>Scroll</white> <gray>strafe</gray> <dark_gray>·</dark_gray> <white>Q</white> <gray>done</gray>"
adjuster-name: "<gold><bold>Mannequin Adjuster</bold></gold>"
adjuster-lore-1: "<gray>Click in the air (or a block): rotate ±15°</gray>"
adjuster-lore-2: "<gray>Sneak + click: move up / down</gray>"
adjuster-lore-3: "<gray>Scroll: strafe · F: nudge forward (sneak = back)</gray>"
adjuster-lore-4: "<yellow>Drop (Q) to finish and reopen editor</yellow>"
# ==================== ITEM EDITOR ====================
editor:
gui-title: "<gradient:#FF6B6B:#FFE66D><bold>Item Editor</bold></gradient>"
lore-gui-title: "<gradient:#55FF55:#AAFFAA><bold>Lore Editor</bold></gradient>"
enchant-gui-title: "<gradient:#55FFFF:#55AAFF><bold>Enchantments</bold></gradient>"
enchant-picker-title: "<gradient:#55FFFF:#55AAFF><bold>Add Enchantment</bold></gradient>"
attrib-gui-title: "<gradient:#FFE66D:#FF6B6B><bold>Item Attributes</bold></gradient>"
attrib-select-title: "<gradient:#FFE66D:#FF6B6B><bold>Select Item Attribute</bold></gradient>"
flags-gui-title: "<gradient:#FFE66D:#FFAA00><bold>Item Flags</bold></gradient>"
template-gui-title: "<gradient:#FFE66D:#FF6B6B><bold>Templates</bold></gradient>"
no-item-held: "<red>Hold an item in your main hand and click the hopper to start editing.</red>"
no-session: "<red>No active editing session. Open the editor first with <yellow>/sa itemeditor</yellow>.</red>"
draft-restored: "<green>Restored your previous editing session.</green>"
draft-failed: "<red>Could not restore draft.</red>"
draft-saved-close: "<gold>Editor closed. Progress saved as a draft. Reopen <yellow>/sa itemeditor</yellow> to continue.</gold>"
session-started: "<green>Editing session started. Use the GUI or commands to edit the item.</green>"
session-finished: "<green>Item updated.</green>"
session-cancelled: "<yellow>Editing cancelled. Your original item was returned.</yellow>"
cancel-confirm: "<yellow>Click <red>Cancel</red> again to discard your edits.</yellow>"
reset-confirm: "<yellow>Click <red>Reset</red> again to discard all changes.</yellow>"
mode-changed: "<gray>Editor mode changed to <yellow>{mode}</yellow>.</gray>"
undo-success: "<yellow>Undone: <gray>{change}</gray></yellow>"
undo-empty: "<red>Nothing to undo.</red>"
reset-success: "<yellow>Item reset to original state.</yellow>"
name-set: "<green>Display name updated.</green>"
lore-added: "<green>Lore line added.</green>"
lore-set: "<green>Lore line updated.</green>"
lore-removed: "<green>Lore line removed.</green>"
lore-cleared: "<green>All lore cleared.</green>"
lore-clear-confirm: "<yellow>Click <red>Clear All Lore</red> again to confirm.</yellow>"
enchant-added: "<green>Added <yellow>{enchant}</yellow> level <yellow>{level}</yellow>.</green>"
enchant-applied: "<green>Enchantment applied.</green>"
enchant-removed: "<green>Enchantment removed.</green>"
enchants-cleared: "<green>All enchantments cleared.</green>"
enchant-clear-confirm: "<yellow>Click <red>Clear All</red> again to remove every enchantment.</yellow>"
enchant-at-max: "<red><yellow>{enchant}</yellow> is already at max level <white>{level}</white>. Switch to <yellow>EXPERT</yellow> mode for unsafe levels.</red>"
invalid-enchantment: "<red>Invalid enchantment name.</red>"
flag-added: "<green>Item flag added.</green>"
flag-removed: "<green>Item flag removed.</green>"
invalid-flag: "<red>Invalid item flag. Valid examples: HIDE_ENCHANTS, HIDE_ATTRIBUTES, HIDE_UNBREAKABLE.</red>"
now-unbreakable: "<green>Item is now unbreakable.</green>"
now-breakable: "<yellow>Item is now breakable.</yellow>"
modeldata-set: "<green>Custom model data set.</green>"
invalid-number: "<red>Invalid number.</red>"
invalid-color: "<red>Invalid color. Use format: R,G,B (each 0-255)</red>"
invalid-potion: "<red>Invalid potion type. Examples: SPEED, STRENGTH, HEALING</red>"
invalid-attribute: "<red>Invalid attribute name. Examples: generic_max_health, generic_attack_damage</red>"
invalid-operation: "<red>Invalid operation. Use: add, mult_base, mult_total</red>"
attribute-added: "<green>Attribute modifier added.</green>"
attribute-selected: "<green>Selected: <gold>{attribute}</gold></green>"
requires-advanced: "<red>This feature requires ADVANCED editor mode.</red>"
use-gui-for-attributes: "<yellow>Attribute editing is only available through the GUI. Use <green>/sa itemeditor</green> to open it.</yellow>"
cmd-fallback-help: "<gray>Use <yellow>/sa itemeditor name|lore|enchant|flag|template</yellow> for command-based editing.</gray>"
template-saved: "<green>Template <yellow>{name}</yellow> saved.</green>"
template-loaded: "<green>Template <yellow>{name}</yellow> loaded into working copy.</green>"
template-deleted: "<green>Template <yellow>{name}</yellow> deleted.</green>"
template-renamed: "<green>Template renamed <yellow>{old}</yellow> → <yellow>{name}</yellow>.</green>"
template-cloned: "<green>Template <yellow>{old}</yellow> cloned as <yellow>{name}</yellow>.</green>"
template-rename-failed: "<red>Could not rename template (missing or name <yellow>{name}</yellow> already exists).</red>"
template-clone-failed: "<red>Could not clone template (missing or name <yellow>{name}</yellow> already exists).</red>"
template-info: "<gray>Template <yellow>{name}</yellow> · creator <white>{creator}</white> · global <white>{global}</white> · locked <white>{locked}</white></gray>"
template-delete-confirm: "<yellow>Shift-click <white>{name}</white> again to confirm deletion.</yellow>"
template-not-found: "<red>Template not found.</red>"
template-invalid-name: "<red>Invalid template name.</red>"
template-not-owner: "<red>You don't own that template.</red>"
template-locked: "<red>That template is locked.</red>"
no-templates: "<gray>No templates available.</gray>"
template-list-header: " <yellow><bold>Templates</bold></yellow>"
template-list-entry: "<click:run_command:'/sa itemeditor template load {name}'><hover:show_text:'<green>Click to load template'> <dark_gray>-</dark_gray> <yellow>{name}</yellow></hover></click>"
draft-available: "<gold>You have an unsaved item editor draft! Use <yellow>/sa itemeditor</yellow> to recover it.</gold>"
# ==================== AFK ====================
afk:
enabled-self: "<gray>You are now <yellow>AFK</yellow>.</gray>"
disabled-self: "<gray>You are no longer <yellow>AFK</yellow>.</gray>"
enabled: "<gray>Marked <yellow>{player}</yellow> as <yellow>AFK</yellow>.</gray>"
disabled: "<gray>Unmarked <yellow>{player}</yellow> from <yellow>AFK</yellow>.</gray>"
enabled-target: "<gray>You have been marked as <yellow>AFK</yellow>.</gray>"
disabled-target: "<gray>You are no longer marked as <yellow>AFK</yellow>.</gray>"
broadcast-enabled: "<gray><yellow>{player}</yellow> is now AFK.</gray>"
broadcast-disabled: "<gray><yellow>{player}</yellow> is no longer AFK.</gray>"
actionbar: "<yellow><bold>AFK</bold></yellow>"
zone-exists: "<red>An AFK zone named <yellow>{zone}</yellow> already exists.</red>"
zone-not-found: "<red>No AFK zone named <yellow>{zone}</yellow>.</red>"
zone-created: "<green>AFK zone <yellow>{zone}</yellow> created at your location.</green>"
zone-deleted: "<green>AFK zone <yellow>{zone}</yellow> deleted.</green>"
zone-set-active: "<green>AFK zone <yellow>{zone}</yellow> is now active.</green>"
zone-already-active: "<red>AFK zone <yellow>{zone}</yellow> is already active.</red>"
zone-deactivated: "<green>AFK zone <yellow>{zone}</yellow> deactivated.</green>"
zone-not-active: "<red>AFK zone <yellow>{zone}</yellow> is not currently active.</red>"
drop-cancelled: "<red>You cannot drop items while AFK. Your AFK status has been removed.</red>"
zone-list-header: " <yellow><bold>AFK Zones</bold></yellow>"
zone-list-empty: " <gray>No AFK zones created yet.</gray>"
zone-list-entry: " <dark_gray>-</dark_gray> <yellow>{zone}</yellow>{active} <gray>({location})</gray>"
zone-active-tag: "<green>[Active]</green>"
# ==================== UTILITY ====================
utility:
god-enabled-self: "<green>God mode enabled.</green>"
god-disabled-self: "<red>God mode disabled.</red>"
god-enabled: "<green>God mode enabled for <yellow>{player}</yellow>.</green>"
god-disabled: "<red>God mode disabled for <yellow>{player}</yellow>.</red>"
god-enabled-target: "<green>God mode enabled for you.</green>"
god-disabled-target: "<red>God mode disabled for you.</red>"
weather-set: "<green>Weather set to <yellow>{type}</yellow> in <yellow>{world}</yellow>.</green>"
weather-invalid: "<red>Invalid weather type. Use: clear, rain, thunder</red>"
time-set: "<green>Time set to <yellow>{value}</yellow> in <yellow>{world}</yellow>.</green>"
time-invalid: "<red>Invalid time. Use: day, noon, sunset, night, midnight, sunrise, or a tick value (0-24000)</red>"
time-locked: "<green>Time <bold>locked</bold> in <yellow>{world}</yellow> for <yellow>{duration}</yellow>.</green>"
time-unlocked: "<green>Time <bold>unlocked</bold> in <yellow>{world}</yellow>.</green>"
time-not-locked: "<red>Time is not locked in <yellow>{world}</yellow>.</red>"
time-lock-expired: "<gray>Time lock expired in <yellow>{world}</yellow>.</gray>"
weather-locked: "<green>Weather <bold>locked</bold> to <yellow>{type}</yellow> in <yellow>{world}</yellow> for <yellow>{duration}</yellow>.</green>"
weather-unlocked: "<green>Weather <bold>unlocked</bold> in <yellow>{world}</yellow>.</green>"
weather-not-locked: "<red>Weather is not locked in <yellow>{world}</yellow>.</red>"
weather-lock-expired: "<gray>Weather lock expired in <yellow>{world}</yellow>.</gray>"
healed-self: "<green>You have been healed.</green>"
healed: "<green>Healed <yellow>{player}</yellow>.</green>"
healed-target: "<green>You have been healed by <yellow>{staff}</yellow>.</green>"
fed-self: "<green>You have been fed.</green>"
fed: "<green>Fed <yellow>{player}</yellow>.</green>"
fed-target: "<green>You have been fed by <yellow>{staff}</yellow>.</green>"
nightvision-toggled: "<dark_aqua>Night vision <yellow>{state}</yellow>.</dark_aqua>"
nightvision-toggled-other: "<dark_aqua>Night vision <yellow>{state}</yellow> for <yellow>{player}</yellow>.</dark_aqua>"
killed: "<green>Killed <yellow>{player}</yellow>.</green>"
fakeop-sent: "<green>Sent fake op message to <yellow>{player}</yellow>.</green>"
fakeop-notification: "<gray>[Server: Made {player} a server operator]</gray>"
burned: "<green>Set <yellow>{player}</yellow> on fire for <yellow>{seconds}s</yellow>.</green>"
burn-invalid-duration: "<red>Invalid burn duration. Must be a positive number.</red>"
extinguish-self: "<green>Fire extinguished.</green>"
extinguish: "<green>Extinguished <yellow>{player}</yellow>.</green>"
extinguish-target: "<green>Your fire was put out by <yellow>{staff}</yellow>.</green>"
more-self: "<green>Main hand refilled to <yellow>{amount}</yellow>.</green>"
more: "<green>Refilled <yellow>{player}</yellow>'s main hand to <yellow>{amount}</yellow>.</green>"
more-target: "<green>Your main hand was refilled to <yellow>{amount}</yellow> by <yellow>{staff}</yellow>.</green>"
more-no-item-self: "<red>Hold an item in your main hand.</red>"
more-no-item: "<red><yellow>{player}</yellow> is not holding an item in their main hand.</red>"
effect-unknown: "<red>Unknown effect: <yellow>{value}</yellow>. Use tab completion for ids (e.g. speed, slowness).</red>"
effect-applied: "<green>Applied <yellow>{effect}</yellow> to <yellow>{player}</yellow> for <yellow>{duration}</yellow> (amp <yellow>{amp}</yellow>).</green>"
effect-applied-target: "<green>You received effect <yellow>{effect}</yellow> from <yellow>{staff}</yellow>.</green>"
lightning: "<green>Struck <yellow>{player}</yellow> with lightning.</green>"
gamemode-set-self: "<green>Gamemode set to <yellow>{mode}</yellow>.</green>"
gamemode-set: "<green>Set <yellow>{player}</yellow>'s gamemode to <yellow>{mode}</yellow>.</green>"
gamemode-set-target: "<green>Your gamemode was set to <yellow>{mode}</yellow> by <yellow>{staff}</yellow>.</green>"
gamemode-invalid: "<red>Invalid gamemode. Use: survival, creative, adventure, spectator (or s, c, a, sp, 0, 1, 2, 3)</red>"
walkspeed-set-self: "<green>Walk speed set to <yellow>{speed}</yellow>.</green>"
walkspeed-set: "<green>Set <yellow>{player}</yellow>'s walk speed to <yellow>{speed}</yellow>.</green>"
walkspeed-set-target: "<green>Your walk speed was set to <yellow>{speed}</yellow>.</green>"
flyspeed-set-self: "<green>Fly speed set to <yellow>{speed}</yellow>.</green>"
flyspeed-set: "<green>Set <yellow>{player}</yellow>'s fly speed to <yellow>{speed}</yellow>.</green>"
flyspeed-set-target: "<green>Your fly speed was set to <yellow>{speed}</yellow>.</green>"
speed-invalid: "<red>Invalid speed. Must be between -1 and 1.</red>"
fly-enabled-self: "<green>Flight enabled.</green>"
fly-disabled-self: "<red>Flight disabled.</red>"
fly-enabled: "<green>Flight enabled for <yellow>{player}</yellow>.</green>"
fly-disabled: "<red>Flight disabled for <yellow>{player}</yellow>.</red>"
fly-enabled-target: "<green>Flight enabled for you.</green>"
fly-disabled-target: "<red>Flight disabled for you.</red>"
kickall-success: "<green>Kicked <yellow>{count}</yellow> player(s).</green>"
kickall-screen: "<red><bold>Server Kick</bold></red>\n<gray>{reason}</gray>"
kickall-default-reason: "Server restart"
tpall-success: "<green>Teleported <yellow>{count}</yellow> player(s) to your location.</green>"
tpall-world: "<green>Teleported <yellow>{count}</yellow> player(s) from <yellow>{world}</yellow> to your location.</green>"
tpall-players: "<green>Teleported <yellow>{count}</yellow> player(s) to you: <white>{players}</white>.</green>"
tpall-none: "<red>No online players to teleport.</red>"
exp-gave-self: "<green>Gave yourself <yellow>{amount}</yellow> {type}.</green>"
exp-removed-self: "<red>Removed <yellow>{amount}</yellow> {type} from yourself.</red>"
exp-gave: "<green>Gave <yellow>{amount}</yellow> {type} to <yellow>{player}</yellow>.</green>"
exp-gave-target: "<green>You received <yellow>{amount}</yellow> {type} from <yellow>{staff}</yellow>.</green>"
exp-removed: "<red>Removed <yellow>{amount}</yellow> {type} from <yellow>{player}</yellow>.</red>"
exp-removed-target: "<red><yellow>{staff}</yellow> removed <yellow>{amount}</yellow> {type} from you.</red>"
exp-reset-self: "<green>Your experience has been reset.</green>"
exp-reset: "<green>Reset experience for <yellow>{player}</yellow>.</green>"
exp-reset-target: "<yellow>Your experience was reset by <white>{staff}</white>.</yellow>"
exp-show-self: "<gray>Experience: <white>Level {level}</white> <dark_gray>({percent}%)</dark_gray> · total <white>{total}</white></gray>"
exp-show: "<gray><yellow>{player}</yellow> experience: <white>Level {level}</white> <dark_gray>({percent}%)</dark_gray> · total <white>{total}</white></gray>"
maintenance-enabled: "<red><bold>Maintenance mode</bold></red> <gray>enabled by <yellow>{staff}</yellow>.</gray>"
maintenance-disabled: "<green><bold>Maintenance mode</bold></green> <gray>disabled by <yellow>{staff}</yellow>.</gray>"
maintenance-kick-screen: "<red><bold>Server is in maintenance mode.</bold></red>\n<gray>Try again later.</gray>"
clearinv-self: "<green>Your inventory has been cleared.</green>"
clearinv: "<green>Cleared <yellow>{player}</yellow>'s inventory.</green>"
clearinv-target: "<red>Your inventory was cleared by <yellow>{staff}</yellow>.</red>"
clearinv-confirm: "<yellow>Are you sure you want to clear <red>{player}</red>'s inventory? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
kickall-confirm: "<yellow>Kick <red>all</red> online players? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
tpall-confirm: "<yellow>Teleport <red>all</red> players to you? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
tpall-confirm-world: "<yellow>Teleport all players in <red>{world}</red> to you? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
clearground-confirm: "<yellow>Clear ground items in radius <red>{radius}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
clearlag-force-confirm: "<yellow>Force a clearlag sweep now? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
clearlag-preview-result: "<gray>Clearlag preview: <yellow>{count}</yellow> item(s) would be removed. <dark_gray>({preserved} preserved)</dark_gray></gray>"
give-self: "<green>Gave yourself <yellow>{amount}x {material}</yellow>.</green>"
give: "<green>Gave <yellow>{player}</yellow> <yellow>{amount}x {material}</yellow>.</green>"
give-target: "<green>You received <yellow>{amount}x {material}</yellow> from <yellow>{staff}</yellow>.</green>"
take-self: "<green>Removed <yellow>{amount}x {material}</yellow> from your inventory.</green>"
take: "<green>Took <yellow>{amount}x {material}</yellow> from <yellow>{player}</yellow>.</green>"
take-target: "<red><yellow>{staff}</yellow> removed <yellow>{amount}x {material}</yellow> from your inventory.</red>"
take-not-enough: "<red><yellow>{player}</yellow> does not have any <yellow>{material}</yellow>.</red>"
clearground: "<green>Cleared <yellow>{count}</yellow> ground item(s). <gray>({preserved} preserved)</gray></green>"
clearground-invalid-radius: "<red>Invalid radius. Must be a positive number.</red>"
killall-success: "<green>Removed <yellow>{count}</yellow> <yellow>{type}</yellow> entities.</green>"
killall-invalid-type: "<red>Unknown entity type or group: <yellow>{type}</yellow>. Use 'all', 'hostile', 'passive', 'vehicle', 'projectile', 'utility', 'item', or a specific entity type.</red>"
repair-self: "<green>Your held item has been repaired.</green>"
repair: "<green>Repaired <yellow>{player}</yellow>'s held item.</green>"
repair-target: "<green>Your held item was repaired by <yellow>{staff}</yellow>.</green>"
repair-no-item: "<red>You are not holding an item.</red>"
repair-no-item-target: "<red><yellow>{player}</yellow> is not holding an item.</red>"
repair-not-damageable: "<red>Your held item cannot be repaired (no damage or not damageable).</red>"
repair-not-damageable-target: "<red><yellow>{player}</yellow>'s held item cannot be repaired.</red>"
repair-all-self: "<green>Repaired <yellow>{count}</yellow> item(s) in your inventory.</green>"
repair-all: "<green>Repaired <yellow>{count}</yellow> item(s) in <yellow>{player}</yellow>'s inventory.</green>"
repair-all-target: "<green><yellow>{count}</yellow> item(s) in your inventory were repaired by <yellow>{staff}</yellow>.</green>"
repair-all-nothing: "<red>No damaged items to repair in your inventory.</red>"
repair-all-nothing-target: "<red>No damaged items to repair in <yellow>{player}</yellow>'s inventory.</red>"
enchant-no-item: "<red>You are not holding an item.</red>"
enchant-applied: "<green>Applied <yellow>{enchant}</yellow> level <yellow>{level}</yellow> to your held item.</green>"
enchant-removed: "<green>Removed <yellow>{enchant}</yellow> from your held item.</green>"
enchant-cleared: "<green>Removed <yellow>{count}</yellow> enchantment(s) from your held item.</green>"
enchant-none-on-item: "<red>Your held item has no enchantments.</red>"
enchant-incompatible: "<red><yellow>{enchant}</yellow> cannot be applied to <yellow>{item}</yellow>.</red>"
enchant-not-present: "<red>Your held item does not have <yellow>{enchant}</yellow>.</red>"
enchant-conflict: "<red><yellow>{enchant}</yellow> conflicts with <yellow>{other}</yellow> already on the item.</red>"
enchant-invalid-level: "<red>Enchantment level must be at least 1.</red>"
enchant-level-too-high: "<red>Level exceeds vanilla max (<yellow>{max}</yellow>). Use level <yellow>op</yellow> or permission <yellow>soapsadmin.enchant.op</yellow>.</red>"
enchant-overlimit-cap: "<red>Over-limit level cannot exceed <yellow>{max}</yellow>.</red>"
enchant-suggestions: "<red>Unknown enchantment. Did you mean: <yellow>{suggestions}</yellow>?</red>"
enchant-invalid-page: "<red>Invalid page. Use <yellow>1</yellow> to <yellow>{max}</yellow>.</red>"
enchant-invalid-page-number: "<red>Page must be a number. Usage: <yellow>/sa enchants [page]</yellow></red>"
enchant-bulk-max: "<green>Applied <yellow>{count}</yellow> compatible enchantment(s) at vanilla max level.</green>"
enchant-bulk-op: "<green>Applied <yellow>{count}</yellow> compatible enchantment(s) at over-limit level (255).</green>"
enchant-bulk-skipped: "<gray>Skipped <yellow>{count}</yellow> conflicting enchantment(s) (max mode respects exclusives).</gray>"
enchant-bulk-summary: "<gray>Result: <white>{enchants}</white></gray>"
enchants-all-header: "<yellow><bold>All enchantments</bold></yellow> <dark_gray>(page {page}/{pages}, {total} total)</dark_gray>"
enchants-page-hint: "<dark_gray>Next page: <yellow>{command}</yellow></dark_gray>"
enchants-item-header: "<yellow><bold>Compatible enchantments for <white>{item}</white></bold></yellow> <dark_gray>({count})</dark_gray>"
enchants-item-current: "<gray>Current: <white>{enchants}</white></gray>"
enchants-item-entry: "<dark_gray> •</dark_gray> <white>{enchant}</white> <dark_gray>({id})</dark_gray> max <yellow>{max}</yellow> · now {current}"
enchants-item-footer: "<dark_gray>Use <yellow>/sa enchant [enchant] [level|max|op]</yellow> · bulk: <yellow>/sa enchant max</yellow> or <yellow>op</yellow></dark_gray>"
enchants-item-empty: "<red>No enchantments can be applied to <yellow>{item}</yellow>.</red>"
clearlag-warning: "<yellow><bold>⚠</bold> Ground items will be cleared in <red>{seconds}s</red>.</yellow>"
clearlag-bossbar: "<yellow>Clearlag in {seconds}s</yellow>"
clearlag-cleared: "<gray>Cleared <yellow>{count}</yellow> ground item(s). <dark_gray>({preserved} preserved)</dark_gray></gray>"
clearlag-enabled: "<green>Clearlag <bold>running</bold>. Interval: <yellow>{interval}s</yellow>.</green>"
clearlag-disabled: "<red>Clearlag <bold>stopped</bold>.</red>"
clearlag-not-enabled: "<red>Clearlag is not enabled in the config.</red>"
clearlag-status: "<gray>Clearlag runtime: {status} <dark_gray>| config: {config_enabled} <dark_gray>| next <yellow>{remaining}s</yellow> · interval <white>{interval}s</white> · mode <white>{mode}</white></dark_gray></gray>"
ptime-set: "<green>Set client time for <yellow>{player}</yellow> to <yellow>{value}</yellow> <gray>(relative: {relative})</gray></green>"
ptime-reset: "<green>Reset client time for <yellow>{player}</yellow>.</green>"
pweather-set: "<green>Set client weather for <yellow>{player}</yellow> to <yellow>{type}</yellow>.</green>"
pweather-reset: "<green>Reset client weather for <yellow>{player}</yellow>.</green>"
clearlag-force: "<green>Forced a clearlag sweep. Removed <yellow>{count}</yellow> item(s).</green>"
# Tier 1 - New Utility Commands
uptime: "<green>Server uptime: <yellow>{time}</yellow></green>"
ping-self: "<green>Your ping: <{color}>{ping}ms</{color}></green>"
ping: "<green><yellow>{player}</yellow>'s ping: <{color}>{ping}ms</{color}></green>"
hat-success: "<green>You are now wearing your held item as a hat.</green>"
hat-no-item: "<red>You must be holding an item to wear as a hat.</red>"
cleareffects-self: "<green>Cleared <yellow>{count}</yellow> potion effect(s) from yourself.</green>"
cleareffects-self-none: "<gray>You have no potion effects to clear.</gray>"
cleareffects: "<green>Cleared <yellow>{count}</yellow> potion effect(s) from <yellow>{player}</yellow>.</green>"
cleareffects-none: "<gray><yellow>{player}</yellow> has no potion effects to clear.</gray>"
cleareffects-target: "<green>Your potion effects were cleared by <yellow>{staff}</yellow>.</green>"
cleareffects-target-none: "<gray><yellow>{staff}</yellow> tried to clear your potion effects, but you had none.</gray>"
top: "<green>Teleported to the highest block at Y=<yellow>{y}</yellow>.</green>"
jump: "<green>Jumped to <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>.</green>"
jump-unsafe: "<red>That location looks unsafe to jump to.</red>"
tpoffline: "<green>Teleported to <yellow>{player}</yellow>'s last logout (<white>{world}</white> @ {x}, {y}, {z}).</green>"
tpoffline-online: "<yellow>{player}</yellow> <red>is online. Use /sa tpto instead.</red>"
tpoffline-unknown: "<red>No last logout location stored for <yellow>{player}</yellow>.</red>"
tpoffline-world-missing: "<red>Last logout world <yellow>{world}</yellow> for <white>{player}</white> is not loaded.</red>"
tpoffline-unsafe: "<red>Last logout location for <yellow>{player}</yellow> looks unsafe.</red>"
bottom: "<green>Teleported to Y <yellow>{y}</yellow>.</green>"
bottom-unsafe: "<red>Cannot teleport further down safely.</red>"
near-header: "<green>Found <yellow>{count}</yellow> player(s) within <yellow>{radius}</yellow> blocks:</green>"
near-none: "<yellow>No players found within <white>{radius}</white> blocks.</yellow>"
near-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <gray>({distance} blocks)</gray>{vanished}"
near-vanished-tag: " <dark_aqua>[vanished]</dark_aqua>"
near-invalid-radius: "<red>Invalid radius. Must be between 1 and 1000.</red>"
near-invalid-count: "<red>Invalid count for --count.</red>"
smite: "<green>Smote <yellow>{player}</yellow> with lightning.</green>"
smite-target: "<red>You were smitten by <yellow>{staff}</yellow>.</red>"
damage-self: "<yellow>You damaged yourself by <white>{amount}</white> (<white>{type}</white>).</yellow>"
damage: "<green>Damaged <yellow>{player}</yellow> by <white>{amount}</white> (<white>{type}</white>).</green>"
damage-target: "<red><yellow>{staff}</yellow> damaged you by <white>{amount}</white> (<white>{type}</white>).</red>"
hunger-self: "<green>Your hunger was set to <yellow>{amount}</yellow>.</green>"
hunger: "<green>Set <yellow>{player}</yellow>'s hunger to <yellow>{amount}</yellow>.</green>"
hunger-target: "<yellow>{staff}</yellow> set your hunger to <yellow>{amount}</yellow>."
rocket: "<green>Rocketted <yellow>{player}</yellow> upward with a firework.</green>"
rocket-target: "<red>You were rocketted into the air.</red>"
pumpkinhead: "<green>Put a pumpkin on <yellow>{player}</yellow>'s head.</green>"
pumpkinhead-target: "<red>A pumpkin has been placed on your head.</red>"
sudo-success: "<green>Forced <yellow>{player}</yellow> to execute: <white>{input}</white></green>"
sudo-exempt: "<red><yellow>{player}</yellow> is exempt from sudo.</red>"
stack-success: "<green>Stacked similar items in your inventory.</green>"
# Tier 2 - World Teleport
world-list-header: "<yellow>Available worlds:</yellow>"
world-list-entry: "<click:run_command:'/sa world {world}'><hover:show_text:'<green>Click to teleport'> <gray>- <white>{world}</white> <dark_gray>({environment}, {players} players)</dark_gray></gray></hover></click>"
world-teleport-self: "<green>Teleported to world <yellow>{world}</yellow>.</green>"
world-teleport: "<green>Teleported <yellow>{player}</yellow> to world <yellow>{world}</yellow>.</green>"
world-teleport-target: "<green>You were teleported to world <yellow>{world}</yellow> by <yellow>{staff}</yellow>.</green>"
world-not-found: "<red>World <yellow>{world}</yellow> not found.</red>"
# Tier 2 - Back Command
back-success: "<green>Teleported to your previous location.</green>"
back-none: "<red>No previous location saved.</red>"
back-world-unloaded: "<red>Your previous location's world is no longer loaded.</red>"
# Tier 2 - IP Whitelist
ipwhitelist-added: "<green>Added <yellow>{ip}</yellow> to the trusted IP whitelist.</green>"
ipwhitelist-removed: "<green>Removed <yellow>{ip}</yellow> from the trusted IP whitelist.</green>"
ipwhitelist-not-found: "<red>IP <yellow>{ip}</yellow> is not in the trusted list.</red>"
ipwhitelist-empty: "<yellow>No trusted IPs configured.</yellow>"
ipwhitelist-header: "<green>Trusted IPs (<yellow>{count}</yellow>):</green>"
ipwhitelist-entry: " <gray>• <white>{ip}</white></gray>"
# Tier 2 - Inventory Sort
sort-success: "<green>Inventory sorted and stacks merged.</green>"
sort-other: "<green>Sorted <yellow>{player}</yellow>'s inventory.</green>"
sort-target: "<green>Your inventory was sorted by <yellow>{staff}</yellow>.</green>"
invalid-amount: "<red>Invalid amount. Must be a positive number (1-6400).</red>"
invalid-material: "<red>Unknown item: <yellow>{material}</yellow>.</red>"
# Item info
iteminfo-header: "<gray><st> </st></gray> <gold><bold>Item Info</bold></gold> <gray><st> </st></gray>"
iteminfo-air: "<gray>You are not holding any item <dark_gray>(air)</dark_gray>.</gray>"
# Identity
iteminfo-id: "<dark_aqua>ID: <white>{id}</white></dark_aqua>"
iteminfo-material: "<gray>Material: <white>{material}</white></gray>"
iteminfo-amount: "<gray>Amount: <white>{amount}</white></gray>"
iteminfo-slot: "<gray>Held Slot: <white>{slot}</white></gray>"
iteminfo-max-stack: "<gray>Max Stack: <white>{max}</white></gray>"
iteminfo-translation-key: "<gray>Translation Key: <dark_gray>{key}</dark_gray></gray>"
iteminfo-rarity: "<gray>Rarity: <white>{rarity}</white></gray>"
# Display
iteminfo-display-name: "<gray>Display Name: <reset>{name}</reset></gray>"
iteminfo-lore-header: "<gray>Lore:</gray>"
iteminfo-lore-line: "<dark_gray> {i}. {line}</dark_gray>"
# Enchantments
iteminfo-enchants-header: "<aqua>Enchantments:</aqua>"
iteminfo-enchant: "<dark_gray> •</dark_gray> <aqua>{enchant}</aqua> <white>{level}</white>"
iteminfo-stored-enchants-header: "<aqua>Stored Enchantments:</aqua>"
# Durability
iteminfo-durability: "<gray>Durability: <white>{current}</white><dark_gray>/</dark_gray><white>{max}</white> <dark_gray>({pct}%)</dark_gray></gray>"
iteminfo-unbreakable: "<gray>Unbreakable: <green>yes</green></gray>"
# Flags & model
iteminfo-flags: "<gray>Item Flags: <white>{flags}</white></gray>"
iteminfo-custom-model: "<gray>Custom Model Data: <white>{cmd}</white></gray>"
# Attributes
iteminfo-attributes-header: "<yellow>Attribute Modifiers:</yellow>"
iteminfo-attribute: "<dark_gray> •</dark_gray> <yellow>{attr}</yellow> <dark_gray>{op}</dark_gray> <white>{amount}</white> <dark_gray>[{slot}]</dark_gray>"
# Type-specific
iteminfo-book-title: "<gray>Book Title: <white>{title}</white></gray>"
iteminfo-book-author: "<gray>Book Author: <white>{author}</white></gray>"
iteminfo-book-pages: "<gray>Book Pages: <white>{pages}</white></gray>"
iteminfo-skull-owner: "<gray>Skull Owner: <white>{owner}</white></gray>"
iteminfo-potion-type: "<gray>Potion Type: <white>{type}</white></gray>"
iteminfo-custom-effects-header: "<gray>Custom Potion Effects:</gray>"
iteminfo-potion-effect: "<dark_gray> •</dark_gray> <gray>{effect}</gray> <white>amp={amp} dur={dur}s</white>"
iteminfo-leather-color: "<gray>Leather Color: <white>#{hex}</white> <dark_gray>(R:{r} G:{g} B:{b})</dark_gray></gray>"
iteminfo-firework-power: "<gray>Firework Power: <white>{power}</white></gray>"
iteminfo-firework-effect: "<dark_gray> •</dark_gray> <gray>{type}</gray> <dark_gray>trail={trail} twinkle={twinkle}</dark_gray>"
iteminfo-map-id: "<gray>Map ID: <white>{id}</white></gray>"
iteminfo-compass-lodestone: "<gray>Lodestone: <white>{world} ({x},{y},{z})</white> <dark_gray>tracked={tracked}</dark_gray></gray>"
iteminfo-bundle-items: "<gray>Bundle Contents: <white>{count} item(s)</white></gray>"
# PDC / NBT
iteminfo-pdc-header: "<light_purple>Persistent Data <dark_gray>({count} keys):</dark_gray></light_purple>"
iteminfo-pdc-entry: "<dark_gray> •</dark_gray> <light_purple>{key}</light_purple><dark_gray>=</dark_gray><white>{value}</white>"
# Legacy kept for backward compat
iteminfo-type: "<gray>Item Type: <white>{type}</white></gray>"
# ==================== WORLD STATE ====================
world-state:
safe-spawn: "<gray>World <yellow>{world}</yellow> was unavailable. You were moved to a safe spot in this world.</gray>"
# ==================== WORLD MANAGER ====================
world-manager:
already-loaded: "<red>World <yellow>{world}</yellow> is already loaded.</red>"
folder-exists: "<red>A world folder named <yellow>{world}</yellow> already exists. Use <yellow>/sa world load {world}</yellow> to load it.</red>"
not-found: "<red>No world folder found for <yellow>{world}</yellow>.</red>"
invalid-layout: "<red>World folder <yellow>{world}</yellow> exists but does not match recognized world layout markers.</red>"
not-loaded: "<red>World <yellow>{world}</yellow> is not currently loaded.</red>"
creating: "<yellow>Creating world <white>{world}</white>… Queued behind other world ops.</yellow>"
created: "<green>World <yellow>{world}</yellow> created. <dark_gray>(type: {type}, env: {env})</dark_gray></green>"
create-failed: "<red>Failed to create world <yellow>{world}</yellow>. Check the console for details.</red>"
loading: "<yellow>Loading world <white>{world}</white>…</yellow>"
loaded: "<green>World <yellow>{world}</yellow> loaded.</green>"
load-failed: "<red>Failed to load world <yellow>{world}</yellow>. Check the console for details.</red>"
unloading: "<yellow>Unloading world <white>{world}</white>…</yellow>"
unloaded: "<green>World <yellow>{world}</yellow> unloaded <dark_gray>({saved})</dark_gray>.</green>"
unload-failed: "<red>Could not unload <yellow>{world}</yellow>. Is it the default world?</red>"
deleting: "<yellow>Deleting world <white>{world}</white>…</yellow>"
queued: "<gray>World op queued for <white>{world}</white> <dark_gray>(#{position})</dark_gray>. Waiting for previous work to finish.</gray>"
kicked-from-world: "<yellow>You were teleported away because world <white>{world}</white> is unloading.</yellow>"
usage: "<red>Usage: /sa world [help|create|load|unload|list|fixgenerator|gui|tp] [name] [type] [env] [seed] [biome|--biome biome|single:biome]</red>"
usage-fixgen: "<red>Usage: /sa world fixgenerator <world></red>"
fixgen-started: "<yellow>Re-attaching generator for <white>{world}</white> (unload → reload)…</yellow>"
fixgen-ok: "<green>Generator restored for <yellow>{world}</yellow> <dark_gray>({generator})</dark_gray>.</green>"
fixgen-failed: "<red>Could not reattach generator for <yellow>{world}</yellow>. Check console / make sure it is not the default world.</red>"
fixgen-default-world: "<red>Cannot reattach generator on the main/default world <yellow>{world}</yellow>.</red>"
fixgen-terrain-note: "<gray>Already-generated land chunks stay on disk. To clear them: unload the world, delete its <white>region/</white> folder (keep spawn if you want), then <white>/sa world load</white>.</gray>"
list-header: "<yellow>Known worlds <dark_gray>(★ = loaded)</dark_gray>:</yellow>"
list-entry-loaded: " <green>★ <white>{world}</white> <dark_gray>({env}, {players} players)</dark_gray></green>"
list-entry-unloaded: " <dark_gray>◦ {world} (unloaded)</dark_gray>"
invalid-env: "<red>Invalid environment. Use: normal, nether, end</red>"
invalid-type: "<red>Invalid type. Use: default, flat, amplified, void</red>"
invalid-biome: "<red>Invalid biome <yellow>{biome}</yellow>. Use tab-completion for valid biome keys.</red>"
deleted: "<green>World <yellow>{world}</yellow> has been permanently deleted.</green>"
delete-failed: "<red>Could not delete world <yellow>{world}</yellow>. Is it the default world or still in use?</red>"
delete-confirm: "<yellow>Shift+Right-click <white>{world}</white> again to confirm deletion.</yellow>"
invalid-name: "<red>Invalid world name. Use letters, numbers, underscores, or hyphens only.</red>"
wizard-started: "<yellow>Creating world <white>{world}</white>… You will be returned to the world list when ready.</yellow>"
# ==================== TELEPORTATION ====================
teleportation:
warmup: "<yellow>Teleporting in <white>{seconds}</white> seconds. Stay still.</yellow>"
warmup-actionbar: "<yellow>Teleporting in <white>{seconds}s</white>...</yellow>"
teleported-actionbar: "<green>Teleported.</green>"
warmup-cancelled-move: "<red>Teleport cancelled. You moved.</red>"
warmup-cancelled-damage: "<red>Teleport cancelled. You took damage.</red>"
cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before teleporting again.</red>"
claims-denied: "<red>You cannot teleport into that claim or protected region.</red>"
claims-denied-set: "<red>You cannot set a home or warp here. You need build access (or be friends with the claim owner).</red>"
claims-denied-rtp: "<red>Could not find a safe unclaimed location. Try again.</red>"
invalid-destination: "<red>Teleport cancelled. Destination is no longer available.</red>"
# ==================== SPAWN ====================
spawn:
set: "<green>Spawn set at <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
first-spawn-set: "<green>First-join spawn set at <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
deleted: "<green>Spawn point deleted.</green>"
not-set: "<red>No spawn point has been set.</red>"
teleported: "<green>Teleported to spawn.</green>"
teleported-other: "<green>Teleported <yellow>{player}</yellow> to spawn.</green>"
teleported-by: "<green>You were teleported to spawn by <yellow>{staff}</yellow>.</green>"
world-spawn-set: "<green>World spawn set for <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
world-spawn-teleported: "<green>Teleported to world spawn in <yellow>{world}</yellow>.</green>"
world-spawn-failed: "<red>Could not use world spawn. Try again.</red>"
# ==================== BROADCAST ====================
broadcast:
sent: "<green>Broadcast template <yellow>{name}</yellow> sent.</green>"
raw-sent: "<green>Raw broadcast sent.</green>"
template-not-found: "<red>Broadcast template <yellow>{name}</yellow> not found.</red>"
no-templates: "<yellow>No broadcast templates configured.</yellow>"
list-header: "<green>Broadcast Templates (<yellow>{count}</yellow>):</green>"
list-entry: " <gray>• <yellow>{name}</yellow> <dark_gray>({mode})</dark_gray></gray>"
edit-prompt: "<yellow>Enter new message for template <gold>{name}</gold> (current: {current}):</yellow>"
edit-saved: "<green>Template <yellow>{name}</yellow> message updated in config.yml.</green>"
edit-cancelled: "<gray>Template edit cancelled.</gray>"
# ==================== PRIVATE MESSAGES ====================
pm:
sent: "<gray>[<yellow>me</yellow> → <yellow>{player}</yellow>]</gray> <white>{message}</white>"
received: "<gray>[<yellow>{player}</yellow> → <yellow>me</yellow>]</gray> <white>{message}</white>"
cannot-self: "<red>You cannot message yourself.</red>"
ignored-by-target: "<red>This player is not accepting your messages.</red>"
no-reply-target: "<red>You have nobody to reply to.</red>"
reply-offline: "<red>That player is no longer online.</red>"
ignored: "<green>You are now ignoring <yellow>{player}</yellow>.</green>"
unignored: "<green>You are no longer ignoring <yellow>{player}</yellow>.</green>"
cannot-ignore-staff: "<red>You cannot ignore staff members.</red>"
ignore-list-empty: "<gray>Your ignore list is empty.</gray>"
ignore-list-header: "<yellow>Ignored players</yellow> <gray>({count})</gray>"
ignore-list-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow>"
ignore-cleared: "<green>Cleared your ignore list.</green>"
lastmsg:
none: "<gray>You have nobody to reply to yet.</gray>"
partner: "<gray>/sa r would reply to <yellow>{player}</yellow>.</gray>"
partner-offline: "<gray>/sa r would reply to <yellow>{player}</yellow> <red>(offline)</red>.</gray>"
# ==================== PLAYER ACTIONS ====================
actions:
sit-start: "<green>You are now sitting. Move to stand up.</green>"
spin-start: "<green>You are now spinning.</green>"
cancelled: "<gray>Action cancelled.</gray>"
# ==================== COMMAND SPY ====================
commandspy:
enabled: "<green>Command Spy <bold>enabled</bold>. Monitoring all players.</green>"
enabled-player: "<green>Command Spy <bold>enabled</bold>. Monitoring <yellow>{player}</yellow>.</green>"
disabled: "<red>Command Spy <bold>disabled</bold>.</red>"
format: "<dark_gray>[<aqua>CS</aqua>] <white>{player}</white>: <gray>{command}</gray></dark_gray>"
# ==================== SOCIAL SPY ====================
socialspy:
enabled: "<green>Social Spy <bold>enabled</bold>. Monitoring private messages.</green>"
disabled: "<red>Social Spy <bold>disabled</bold>.</red>"
format: "<dark_gray>[<light_purple>SS</light_purple>] <white>{sender}</white> → <white>{target}</white>: <gray>{message}</gray></dark_gray>"
# ==================== GUI ====================
gui:
disabled: "<red>GUI is disabled in the config. Use commands instead.</red>"
disabled-hint: "<gray>Available: /sa help</gray>"
unknown-menu: "<red>Menu '<white>{menu}</white>' does not exist.</red>"
requires-context: "<red>This menu requires additional context and cannot be opened from here.</red>"
item-opened: "<gray>Opened menu <yellow>{menu}</yellow>.</gray>"
disabled-actions: "<red>GUI is disabled. Use commands for player actions.</red>"
disabled-snapshot: "<red>GUI is disabled. Use <yellow>/sa snapshot <player></yellow> directly.</red>"
player-not-online: "<red>Player is no longer online.</red>"
player-offline: "<red>Player is no longer online.</red>"
shift-confirm-destructive: "<yellow>Shift-click to confirm this destructive action.</yellow>"
player-not-found: "<red>Player <yellow>{player}</yellow> not found. They may need to have joined the server before.</red>"
action-title: "<gold>Actions: <yellow>{player}</yellow></gold>"
dashboard-title: "<gold><bold>SoapsAdmin Dashboard</bold></gold>"
player-dashboard-title: "<gradient:#00CED1:#00FA9A><bold>Player Dashboard</bold></gradient>"
dashboard-player-lookup-prompt: "<yellow>Enter the <bold>player name</bold> to look up:</yellow>"
dashboard-broadcast-prompt: "<yellow>Type your <bold>broadcast message</bold> to send to all players:</yellow>"
dashboard-player-not-found: "<red>Player <yellow>{player}</yellow> not found.</red>"
online: "<green>Online</green>"
offline: "<red>Offline</red>"
frozen: "<aqua>[Frozen]</aqua>"
jailed: "<red>[Jailed]</red>"
staff: "<gold>[Staff]</gold>"
afk: "<yellow>[AFK]</yellow>"
chat-input-kick: "<yellow>Enter the <bold>kick reason</bold> for <white>{player}</white>:</yellow>"
chat-input-ban: "<yellow>Enter the <bold>ban reason</bold> for <white>{player}</white>:</yellow>"
chat-input-mute: "<yellow>Enter the <bold>mute reason</bold> for <white>{player}</white>:</yellow>"
chat-input-warn: "<yellow>Enter the <bold>warn reason</bold> for <white>{player}</white>:</yellow>"
chat-input-tempban: "<yellow>Enter <bold>duration reason</bold> for tempban on <white>{player}</white>:</yellow>\n<gray>Example: <white>7d Hacking</white></gray>"
chat-input-tempmute: "<yellow>Enter <bold>duration reason</bold> for tempmute on <white>{player}</white>:</yellow>\n<gray>Example: <white>1h Spam</white></gray>"
chat-input-qp: "<yellow>Enter the <bold>template name</bold> for quick punish on <white>{player}</white>:</yellow>\n<gray>Available: {templates}</gray>"
chat-input-lookup: "<yellow>Enter the <bold>player name</bold> to look up:</yellow>"
chat-input-pay: "<yellow>Enter the <bold>amount</bold> to pay <white>{player}</white>:</yellow>\n<gray>Optionally specify economy: <white>100 coins</white></gray>"
duration-reason-usage: "<red>Usage: <duration> <reason> (example: {example})</red>"
invalid-duration: "<red>Invalid duration. Use e.g. 10m, 1h, 7d</red>"
guiconfig:
usage: "<gray>Usage: <white>/sa guiconfig list|reload|regenerate</white></gray>"
list-header: "<gold>Built-in GUI panels:</gold>"
list-entry: " <gray>- <white>{menu}</white> <dark_gray>[{flags}]</dark_gray></gray>"
regenerate-ok: "<green>Regenerated <white>gui.yml</white> from jar defaults (<white>{path}</white>).</green>"
regenerate-backup-hint: "<gray>A previous copy was saved as <white>gui.yml.bak</white> when one existed. You can also delete <white>gui.yml</white> and reload to recreate it.</gray>"
regenerate-failed: "<red>Failed to regenerate gui.yml. Check the console.</red>"
reloaded: "<green>gui.yml reloaded.</green>"
# ==================== USAGE ====================
usage:
kick: "<red>Usage: /sa kick <player> [reason]</red>"
ban: "<red>Usage: /sa ban <player> [reason]</red>"
tempban: "<red>Usage: /sa tempban <player> <duration> [reason]</red>"
unban: "<red>Usage: /sa unban <player></red>"
mute: "<red>Usage: /sa mute <player> [reason]</red>"
tempmute: "<red>Usage: /sa tempmute <player> <duration> [reason]</red>"
unmute: "<red>Usage: /sa unmute <player></red>"
warn: "<red>Usage: /sa warn <player> [reason]</red>"
warns: "<red>Usage: /sa warns <player></red>"
clearwarns: "<red>Usage: /sa clearwarns <player> [case_id]</red>"
note: "<red>Usage: /sa note <player> <text> | delete <player> <id> | edit <player> <id> <text></red>"
note-delete: "<red>Usage: /sa note delete <player> <id></red>"
note-edit: "<red>Usage: /sa note edit <player> <id> <text></red>"
notes: "<red>Usage: /sa notes <player></red>"
freeze: "<red>Usage: /sa freeze <player></red>"
unfreeze: "<red>Usage: /sa unfreeze <player></red>"
check: "<red>Usage: /sa check <player></red>"
banlist: "<red>Usage: /sa banlist [page]</red>"
mutelist: "<red>Usage: /sa mutelist [page]</red>"
punishhistory: "<red>Usage: /sa punishhistory <player></red>"
case: "<red>Usage: /sa case <case_id></red>"
lastloc: "<red>Usage: /sa lastloc <player></red>"
freezeinfo: "<red>Usage: /sa freezeinfo <player></red>"
report-claim: "<red>Usage: /sa reportclaim <id> or /sa reports claim <id></red>"
jail-info: "<red>Usage: /sa jail info <player></red>"
home-rename: "<red>Usage: /sa home rename <old> <new></red>"
home-setdefault: "<red>Usage: /sa home setdefault <name></red>"
home-move: "<red>Usage: /sa home move <name></red>"
home-invite: "<red>Usage: /sa home invite <name> <player></red>"
home-uninvite: "<red>Usage: /sa home uninvite <name> <player></red>"
home: "<red>Usage: /sa home [name|rename|setdefault|move|invite|uninvite] ...</red>"
report-reopen: "<red>Usage: /sa reports reopen <id></red>"
report-note: "<red>Usage: /sa reports note <id> <text></red>"
reload-module: "<red>Usage: /sa reload module <module></red>"
warp-info: "<red>Usage: /sa warp info <name></red>"
kit-preview: "<red>Usage: /sa kit preview <name></red>"
invsee: "<red>Usage: /sa invsee [-view] <player></red>"
endersee: "<red>Usage: /sa endersee <player></red>"
playerinfo: "<red>Usage: /sa playerinfo <player></red>"
snapshot: "<red>Usage: /sa snapshot <player></red>"
audit: "<red>Usage: /sa audit | /sa audit <player> | /sa audit staff <staff> | /sa audit type <action> | /sa audit gui ...</red>"
audit-gui: "<red>Usage: /sa audit gui <staff|player|type> <name> [page]</red>"
audit-staff: "<red>Usage: /sa audit staff <staffname></red>"
audit-type: "<red>Usage: /sa audit type <action></red>"
audit-types-list: "<gray>Types: {types}</gray>"
alts: "<red>Usage: /sa alts <player></red>"
report: "<red>Usage: /sa report <player> <reason></red>"
resolve-report: "<red>Usage: /sa resolvereport <id></red>"
qp: "<red>Usage: /sa qp <player> <template></red>"
rollback: "<red>Usage: /sa rollback <case_id></red>"
spectate: "<red>Usage: /sa spectate <player></red>"
slowmode: "<red>Usage: /sa slowmode <seconds|off></red>"
tphere: "<red>Usage: /sa tphere <player></red>"
tpto: "<red>Usage: /sa tpto <player></red>"
tppos: "<red>Usage: /sa tppos <x> <y> <z> [world]</red>"
biome: "<red>Usage: /sa biome <biome></red>"
jail-create: "<red>Usage: /sa jail create <name></red>"
jail-edit: "<red>Usage: /sa jail edit <name></red>"
jail-delete: "<red>Usage: /sa jail delete <name></red>"
jail-setdefault: "<red>Usage: /sa jail setdefault <name></red>"
jail-player: "<red>Usage: /sa jail <player> <duration|permanent> [room]</red>"
unjail: "<red>Usage: /sa unjail <player></red>"
lockinv: "<red>Usage: /sa lockinv <player></red>"
weather: "<red>Usage: /sa weather <clear|sun|rain|thunder|storm|lock|unlock></red>"
time: "<red>Usage: /sa time <day|noon|sunset|night|midnight|sunrise|ticks|lock|unlock></red>"
god: "<red>Usage: /sa god [player]</red>"
kill: "<red>Usage: /sa kill <player></red>"
spawnmob: "<red>Usage: /sa spawnmob <mob|mythic:Id> <count> <spread></red> <gray>(aliases: summon, smob, sm)</gray>"
fakeop: "<red>Usage: /sa fakeop <player></red>"
burn: "<red>Usage: /sa burn <player> [seconds]</red>"
extinguish: "<red>Usage: /sa extinguish [player]</red>"
more: "<red>Usage: /sa more [player]</red>"
effect: "<red>Usage: /sa effect <player> <effect> [seconds|inf] [amplifier]</red>"
feed: "<red>Usage: /sa feed [player]</red>"
heal: "<red>Usage: /sa heal [player]</red>"
nightvision: "<red>Usage: /sa nightvision [player]</red>"
damage: "<red>Usage: /sa damage <player> <amount> [damage_type]</red>"
hunger: "<red>Usage: /sa hunger <player> <amount></red>"
gamemode: "<red>Usage: /sa gamemode <mode> [player]</red>"
lightning: "<red>Usage: /sa lightning <player></red>"
walkspeed: "<red>Usage: /sa walkspeed <speed> [player]</red>"
flyspeed: "<red>Usage: /sa flyspeed <speed> [player]</red>"
fly: "<red>Usage: /sa fly [player]</red>"
kickall: "<red>Usage: /sa kickall [reason]</red>"
killall: "<red>Usage: /sa killall <type|group|mythic[:Id]> [radius] [-force] [-s]</red>"
tpall: "<red>Usage: /sa tpall [world|player…]</red>"
clearinv: "<red>Usage: /sa clearinv [player] [-confirm]</red>"
banip: "<red>Usage: /sa banip <player|ip> [reason]</red>"
tempipban: "<red>Usage: /sa tempipban <player|ip> <duration> <reason></red>"
unbanip: "<red>Usage: /sa unbanip <ip></red>"
ptime: "<red>Usage: /sa ptime [-r] <day|noon|night|...> [player] | reset [player]</red>"
pweather: "<red>Usage: /sa pweather <clear|sun|rain|storm|thunder> [player] | reset [player]</red>"
setwarp: "<red>Usage: /sa setwarp <name> [category] [description]</red>"
backup: "<red>Usage: /sa backup <data|worlds|list|prune></red>"
backup-prune: "<red>Usage: /sa backup prune <filename></red>"
give: "<red>Usage: /sa give [player] <material> <amount></red>"
take: "<red>Usage: /sa take [player] <material> <amount></red>"
experience: "<red>Usage: /sa experience [player] [show|reset|<amount> <points|levels>]</red>"
tpoffline: "<red>Usage: /sa tpoffline <player></red>"
realname: "<red>Usage: /sa realname <nickname></red>"
clearground: "<red>Usage: /sa clearground [radius]</red>"
invsnapshot: "<red>Usage: /sa invs <list|restore|view|give|take|delete> <player> [args]</red>"
clearlag: "<red>Usage: /sa clearlag <on|off|status|force|preview></red>"
repair: "<red>Usage: /sa repair [all] [player]</red>"
enchant: "<red>Usage: /sa enchant [enchantment] [level|max|op] | max | op</red>"
unenchant: "<red>Usage: /sa unenchant <enchantment|all></red>"
afk: "<red>Usage: /sa afk [player]</red>"
afkzone: "<red>Usage: /sa afkzone <create|delete|setactive|list> [name]</red>"
afkzone-create: "<red>Usage: /sa afkzone create <name></red>"
afkzone-delete: "<red>Usage: /sa afkzone delete <name></red>"
afkzone-setactive: "<red>Usage: /sa afkzone setactive <name></red>"
afkzone-setdeactivate: "<red>Usage: /sa afkzone setdeactivate <name></red>"
itemeditor: "<red>Usage: /sa itemeditor [name|lore|enchant|flag|unbreakable|modeldata|template|undo|reset|finish|cancel]</red>"
itemeditor-name: "<red>Usage: /sa itemeditor name <text></red>"
itemeditor-lore: "<red>Usage: /sa itemeditor lore <add|set|remove|clear> ...</red>"
itemeditor-lore-add: "<red>Usage: /sa itemeditor lore add <text></red>"
itemeditor-lore-set: "<red>Usage: /sa itemeditor lore set <line#> <text></red>"
itemeditor-lore-remove: "<red>Usage: /sa itemeditor lore remove <line#></red>"
itemeditor-enchant: "<red>Usage: /sa itemeditor enchant <add|remove|clear> [name] [level]</red>"
itemeditor-enchant-add: "<red>Usage: /sa itemeditor enchant add <name> <level></red>"
itemeditor-enchant-remove: "<red>Usage: /sa itemeditor enchant remove <name></red>"
itemeditor-flag: "<red>Usage: /sa itemeditor flag <flag_name></red>"
itemeditor-modeldata: "<red>Usage: /sa itemeditor modeldata <value></red>"
itemeditor-template: "<red>Usage: /sa itemeditor template <save|load|delete|list|rename|clone|info> [name] [newname]</red>"
itemeditor-template-save: "<red>Usage: /sa itemeditor template save <name></red>"
itemeditor-template-load: "<red>Usage: /sa itemeditor template load <name></red>"
itemeditor-template-delete: "<red>Usage: /sa itemeditor template delete <name></red>"
itemeditor-template-rename: "<red>Usage: /sa itemeditor template rename <old> <new></red>"
itemeditor-template-clone: "<red>Usage: /sa itemeditor template clone <source> <new></red>"
itemeditor-template-info: "<red>Usage: /sa itemeditor template info <name></red>"
pluginmonitor: "<red>Usage: /sa pm <list|inspect|scan|top|conflicts> [args]</red>"
pluginmonitor-inspect: "<red>Usage: /sa pm inspect <plugin_name></red>"
fakeplayer: "<red>Usage: /sa fakeplayer <name|edit|remove|removeall|list|pose|rotate|glow|namevisible> [-confirm]</red>"
smite: "<red>Usage: /sa smite <player></red>"
rocket: "<red>Usage: /sa rocket <player></red>"
pumpkinhead: "<red>Usage: /sa pumpkinhead <player></red>"
sudo: "<red>Usage: /sa sudo <player> <message|/command></red>"
ping: "<red>Usage: /sa ping [player]</red>"
cleareffects: "<red>Usage: /sa cleareffects [player]</red>"
near: "<red>Usage: /sa near [radius]</red>"
world: "<red>Usage: /sa world <world> [player]</red>"
ipwhitelist: "<red>Usage: /sa ipwhitelist <add|remove|list> [ip]</red>"
ipwhitelist-add: "<red>Usage: /sa ipwhitelist add <ip></red>"
ipwhitelist-remove: "<red>Usage: /sa ipwhitelist remove <ip></red>"
sort: "<red>Usage: /sa sort [player]</red>"
broadcast: "<red>Usage: /sa broadcast <template|list|raw> [args]</red>"
broadcast-raw: "<red>Usage: /sa broadcast raw [--mode] <message></red>"
sethome: "<red>Usage: /sa sethome [name]</red>"
delhome: "<red>Usage: /sa delhome <name></red>"
warp: "<red>Usage: /sa warp <name></red>"
delwarp: "<red>Usage: /sa delwarp <name></red>"
tpa: "<red>Usage: /sa tpa <player></red>"
tpahere: "<red>Usage: /sa tpahere <player></red>"
itemblacklist: "<red>Usage: /sa itemblacklist <add|remove|list> [material]</red>"
itemblacklist-add: "<red>Usage: /sa itemblacklist add <material></red>"
itemblacklist-remove: "<red>Usage: /sa itemblacklist remove <material></red>"
ticket: "<red>Usage: /sa ticket <create|list|view|respond|close|assign|reopen|delete></red>"
ticket-create: "<red>Usage: /sa ticket create <message></red>"
ticket-view: "<red>Usage: /sa ticket view <id></red>"
ticket-respond: "<red>Usage: /sa ticket respond <id> <message></red>"
ticket-close: "<red>Usage: /sa ticket close <id></red>"
ticket-assign: "<red>Usage: /sa ticket assign <id> <player></red>"
ticket-reopen: "<red>Usage: /sa ticket reopen <id></red>"
ticket-priority: "<red>Usage: /sa ticket priority <id> <low|medium|high|urgent></red>"
ticket-delete: "<red>Usage: /sa ticket delete <id></red>"
announce: "<red>Usage: /sa announce <create|delete|list|toggle|interval|mode|test></red>"
announce-create: "<red>Usage: /sa announce create <id> <message></red>"
announce-delete: "<red>Usage: /sa announce delete <id></red>"
announce-toggle: "<red>Usage: /sa announce toggle <id></red>"
announce-interval: "<red>Usage: /sa announce interval <id> <seconds></red>"
announce-mode: "<red>Usage: /sa announce mode <id> <chat|title|actionbar|bossbar|title+chat|bossbar+chat></red>"
announce-test: "<red>Usage: /sa announce test <id></red>"
motd: "<red>Usage: /sa motd <set|preview|icon|maintenance|maxplayers|minplayers></red>"
motd-set: "<red>Usage: /sa motd set <line1|line2></red>"
motd-icon: "<red>Usage: /sa motd icon <path></red>"
motd-maintenance: "<red>Usage: /sa motd maintenance <line1|line2></red>"
motd-maxplayers: "<red>Usage: /sa motd maxplayers <number|+offset></red>"
motd-minplayers: "<red>Usage: /sa motd minplayers <number|-1></red>"
staffdash: "<red>Usage: /sa staffdash [player]</red>"
staffstats: "<red>Usage: /sa staffstats [today|week|month]</red>"
customcommand: "<red>Usage: /sa customcommand <list|create|delete|toggle|info|settings|gui|test|bind|unbind|binds></red>"
interactive: "<red>Usage: /sa interactive <bind|unbind|binds|listbinds></red>"
interactive-bind: "<red>Usage: /sa interactive bind <commandName></red>"
customcommand-test: "<red>Usage: /sa customcommand test <name> [args...]</red>"
customcommand-create: "<red>Usage: /sa customcommand create <name> <commands (;-separated)></red>"
customcommand-delete: "<red>Usage: /sa customcommand delete <name></red>"
customcommand-toggle: "<red>Usage: /sa customcommand toggle <name></red>"
customcommand-info: "<red>Usage: /sa customcommand info <name></red>"
kit: "<red>Usage: /sa kit <name|create|delete|edit|set|reset|list></red>"
kit-create: "<red>Usage: /sa kit create <name></red>"
kit-delete: "<red>Usage: /sa kit delete <name></red>"
kit-edit: "<red>Usage: /sa kit edit <name></red>"
kit-settings: "<red>Usage: /sa kit settings <name></red>"
kit-set: "<red>Usage: /sa kit set <name> <setting> <value></red>"
kit-reset: "<red>Usage: /sa kit reset <kit|all> [player]</red>"
msg: "<red>Usage: /sa msg <player> <message></red>"
reply: "<red>Usage: /sa reply <message></red>"
ignore: "<red>Usage: /sa ignore <player></red>"
saveinventory: "<red>Usage: /sa saveinventory <kit></red>"
friend: "<yellow>Usage: /sa friend <add|accept|deny|remove|list|tp|pvp> [player]</yellow>"
friend-add: "<yellow>Usage: /sa friend add <player></yellow>"
friend-remove: "<yellow>Usage: /sa friend remove <player></yellow>"
friend-tp: "<yellow>Usage: /sa friend tp <player></yellow>"
seen: "<red>Usage: /sa seen <player></red>"
pay: "<red>Usage: /sa pay <player> <amount> [economy]</red>"
economy: "<red>Usage: /sa economy <give|take|set|reset|resetall|delete|create|manage> <args></red>"
economy-resetall: "<red>Usage: /sa economy resetall [economy] [-confirm]</red>"
economy-give: "<red>Usage: /sa economy give <player> <amount> [economy]</red>"
economy-take: "<red>Usage: /sa economy take <player> <amount> [economy]</red>"
economy-set: "<red>Usage: /sa economy set <player> <amount> [economy]</red>"
economy-reset: "<red>Usage: /sa economy reset <player> [economy]</red>"
economy-delete: "<red>Usage: /sa economy delete <id></red>"
customcommand-settings: "<red>Usage: /sa customcommand settings <name></red> <gray>(opens the settings GUI)</gray>"
mail: "<red>Usage: /sa mail [send|read|clear|list]</red>"
mail-send: "<red>Usage: /sa mail send <player> <message></red>"
mail-read: "<red>Usage: /sa mail read [id]</red>"
mail-clear: "<red>Usage: /sa mail clear <id|all></red>"
spawner: "<red>Usage: /sa spawner [info|gui|list]</red>"
mutechat: "<red>Usage: /sa mutechat [on|off|toggle] [duration]</red>"
unloadchunks: "<red>Usage: /sa unloadchunks [-f|-force] [-confirm]</red>"
tprandom: "<red>Usage: /sa tprandom | /sa tp random</red>"
# ==================== INVENTORY SNAPSHOT ====================
inventory-snapshot:
created: "<green>Snapshot saved for <yellow>{player}</yellow> <gray>({reason})</gray></green>"
restored: "<green>Inventory restored for <yellow>{player}</yellow> <gray>(snapshot {index}, {time_ago}, {reason})</gray></green>"
restored-target: "<green>Your inventory has been restored by <yellow>{staff}</yellow>.</green>"
deleted: "<green>Snapshot {index} deleted for <yellow>{player}</yellow>.</green>"
give-success: "<green>Gave item from snapshot {index} slot {slot} to <yellow>{player}</yellow>.</green>"
give-received: "<green>You received an item from an admin.</green>"
no-snapshots: "<red>No snapshots found for <yellow>{player}</yellow>.</red>"
invalid-index: "<red>Invalid snapshot index. Use <yellow>/sa invs list {player}</yellow></red>"
manual-taken: "<green>Manual snapshot taken for <yellow>{player}</yellow>.</green>"
empty: "<red><yellow>{player}</yellow> has an empty inventory. Snapshot not saved.</red>"
list-header: "<yellow>Snapshots for <white>{player}</white>:</yellow>"
list-entry: "<gray> {index}. <white>{time_ago}</white> \u2014 <yellow>{reason}</yellow> ({world}, {item_count} items)</gray>"
list-empty: "<gray>No snapshots saved.</gray>"
overflow-dropped: "<yellow>{count} overflow item(s) dropped on the ground.</yellow>"
overflow-cancelled: "<red>Restore cancelled \u2014 target inventory not empty enough.</red>"
target-offline: "<red>Target player must be online for restore.</red>"
restore-queued: "<yellow>Queued snapshot {index} restore for <white>{player}</white>. Applies on next join.</yellow>"
restore-queued-applied: "<green>Applied queued inventory restore for <yellow>{player}</yellow> <gray>(snapshot {index})</gray>.</green>"
broadcast-restored: "<gray>{staff} restored inventory for {player} (snapshot {index}, {reason})</gray>"
# ==================== HOMES ====================
home:
set: "<green>Home <yellow>{name}</yellow> set at your current location.</green>"
teleported: "<green>Teleported to home <yellow>{name}</yellow>.</green>"
deleted: "<green>Home <yellow>{name}</yellow> deleted.</green>"
not-found: "<red>Home <yellow>{name}</yellow> not found.</red>"
no-homes: "<red>You have no homes set.</red>"
no-homes-other: "<red><yellow>{player}</yellow> has no homes set.</red>"
max-reached: "<red>You have reached your maximum number of homes ({max}).</red>"
unsafe: "<red>Cannot set home here. The location is not safe.</red>"
name-too-long: "<red>Home name is too long (max {max} characters).</red>"
invalid-name: "<red>Home names can only contain letters, numbers, underscores, and hyphens.</red>"
list-header: "<yellow>Homes ({count}/{max}):</yellow>"
list-header-other: "<yellow>Homes for <white>{player}</white> ({count}):</yellow>"
list-entry: "<click:run_command:'/sa home {name}'><hover:show_text:'<green>Click to teleport'> <gray>- <white>{name}</white>{default} <dark_gray>({world}, {x}, {y}, {z})</dark_gray></gray></hover></click>"
default-tag: " <gold>(default)</gold>"
renamed: "<green>Renamed home <yellow>{old}</yellow> → <yellow>{new}</yellow>.</green>"
rename-exists: "<red>Home <yellow>{name}</yellow> already exists.</red>"
setdefault: "<green>Default home set to <yellow>{name}</yellow>.</green>"
moved: "<green>Moved home <yellow>{name}</yellow> to your current location.</green>"
delete-confirm: "<yellow>Delete home <red>{name}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
share-invited: "<green>Invited <yellow>{player}</yellow> to home <yellow>{name}</yellow>.</green>"
share-received: "<green><yellow>{owner}</yellow> shared home <yellow>{name}</yellow> with you. Use <white>/sa home {owner}:{name}</white>.</green>"
share-renamed: "<yellow>{owner}</yellow> renamed shared home <white>{old}</white> → <white>{new}</white>."
share-uninvited: "<green>Removed <yellow>{player}</yellow> from home <yellow>{name}</yellow>.</green>"
share-already: "<gray><yellow>{player}</yellow> already has access to <yellow>{name}</yellow>.</gray>"
share-not-shared: "<red><yellow>{player}</yellow> is not invited to <yellow>{name}</yellow>.</red>"
share-not-invited: "<red>You are not invited to that home.</red>"
shared-none: "<gray>No homes have been shared with you.</gray>"
shared-header: "<yellow>Homes shared with you:</yellow>"
shared-entry: " <gray>- <white>{owner}</white>:<white>{name}</white> <click:run_command:'/sa home {command}'><green>[Go]</green></click></gray>"
teleported-shared: "<green>Teleported to <yellow>{owner}</yellow>'s home <yellow>{name}</yellow>.</green>"
# ==================== WARPS ====================
warp:
set: "<green>Warp <yellow>{name}</yellow> set at your current location.</green>"
teleported: "<green>Teleported to warp <yellow>{name}</yellow>.</green>"
deleted: "<green>Warp <yellow>{name}</yellow> deleted.</green>"
not-found: "<red>Warp <yellow>{name}</yellow> not found.</red>"
no-warps: "<red>No warps are set.</red>"
no-permission: "<red>You don't have permission to use warp <yellow>{name}</yellow>.</red>"
unsafe: "<red>Cannot set warp here. The location is not safe.</red>"
invalid-name: "<red>Warp names can only contain letters, numbers, underscores, and hyphens.</red>"
name-too-long: "<red>Warp name is too long (max <yellow>{max}</yellow> characters).</red>"
list-header: "<yellow>Available warps:</yellow>"
list-entry: "<click:run_command:'/sa warp {name}'><hover:show_text:'<green>Click to teleport<newline>{description}'> <gray>- <white>{name}</white> <dark_gray>({world}, {x}, {y}, {z}) · {category}</dark_gray></gray></hover></click>"
category-header: "<yellow>{category}</yellow>"
category-entry: " <dark_gray>-</dark_gray> <white>{name}</white> <gray>{description}</gray>"
info-category: "<gray>Category:</gray> <white>{category}</white>"
info-description: "<gray>Description:</gray> <white>{description}</white>"
info-header: "<yellow>Warp <white>{name}</white></yellow>"
info-location: "<gray>Location:</gray> <white>{world}</white> <gray>({x}, {y}, {z})</gray>"
info-permission: "<gray>Permission:</gray> <white>{permission}</white>"
# ==================== TPA ====================
tpa:
sent: "<green>TPA request sent to <yellow>{player}</yellow>.</green>"
sent-here: "<green>TPA-here request sent to <yellow>{player}</yellow>.</green>"
received: "<yellow>{player}</yellow> <green>wants to teleport to you.</green>"
received-here: "<yellow>{player}</yellow> <green>wants you to teleport to them.</green>"
accepted: "<green>You accepted <yellow>{player}</yellow>'s teleport request.</green>"
accepted-requester: "<green><yellow>{player}</yellow> accepted your teleport request.</green>"
accepted-here: "<green>You were teleported to <yellow>{player}</yellow>.</green>"
accepted-here-requester: "<green><yellow>{player}</yellow> was teleported to you.</green>"
denied: "<red>You denied <yellow>{player}</yellow>'s teleport request.</red>"
denied-requester: "<red><yellow>{player}</yellow> denied your teleport request.</red>"
no-pending: "<red>You have no pending teleport requests.</red>"
requester-offline: "<red>The requester is no longer online.</red>"
expired: "<yellow>Your TPA request to <white>{player}</white> has expired.</yellow>"
expired-target: "<yellow>TPA request from <white>{player}</white> has expired.</yellow>"
blocked: "<red><yellow>{player}</yellow> has teleport requests disabled.</red>"
cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before sending another TPA request.</red>"
already-pending: "<red><yellow>{player}</yellow> already has a pending request.</red>"
request-replaced: "<yellow>Your TPA request to <white>{player}</white> was replaced by a newer request.</yellow>"
cannot-self: "<red>You cannot send a TPA request to yourself.</red>"
toggle-on: "<green>Teleport requests <yellow>enabled</yellow>.</green>"
toggle-off: "<red>Teleport requests <yellow>disabled</yellow>.</red>"
unsafe-location: "<red>Teleport cancelled. The destination looks unsafe.</red>"
unsafe-location-requester: "<red>Teleport cancelled. The destination looks unsafe.</red>"
claims-denied: "<red>Teleport cancelled. You cannot enter that claim or protected region.</red>"
claims-denied-requester: "<red>Teleport cancelled. The destination is inside a protected claim.</red>"
no-outgoing: "<red>You have no outgoing teleport request to cancel.</red>"
cancelled: "<green>Cancelled your teleport request to <yellow>{player}</yellow>.</green>"
cancelled-multiple: "<green>Cancelled <yellow>{count}</yellow> outgoing teleport request(s).</green>"
pending-none: "<gray>You have no pending teleport requests.</gray>"
pending-header: "<yellow>Pending TPA requests</yellow>"
pending-incoming: " <green>Incoming:</green> <yellow>{player}</yellow> · {type} · <gray>{seconds}s ago</gray>"
pending-outgoing: " <gold>Outgoing:</gold> <yellow>{player}</yellow> · {type} · <gray>{seconds}s ago</gray>"
pending-type-tpa: "TPA"
pending-type-tpahere: "TPA Here"
cancelled-target: "<yellow>{player}</yellow> <red>cancelled their teleport request.</red>"
auto-on: "<green>Auto-accept teleport requests is now <yellow>enabled</yellow>.</green>"
auto-off: "<yellow>Auto-accept teleport requests is now <red>disabled</red>.</yellow>"
auto-accepted: "<green>Auto-accepted teleport request from <yellow>{player}</yellow>.</green>"
auto-accepted-requester: "<green><yellow>{player}</yellow> auto-accepted your teleport request.</green>"
pending-bossbar-requester: "TPA pending. Waiting for {player} ({seconds}s)"
pending-bossbar-target: "TPA request from {player} ({seconds}s)"
# ==================== ITEM BLACKLIST ====================
item-blacklist:
added: "<green>Added <yellow>{material}</yellow> to the item blacklist.</green>"
removed: "<green>Removed <yellow>{material}</yellow> from the item blacklist.</green>"
already-listed: "<red><yellow>{material}</yellow> is already on the blacklist.</red>"
not-listed: "<red><yellow>{material}</yellow> is not on the blacklist.</red>"
invalid-material: "<red>Unknown material: <yellow>{material}</yellow>. Use a valid Bukkit Material name.</red>"
empty: "<yellow>The item blacklist is empty.</yellow>"
list-header: "<yellow>Blacklisted items ({count}):</yellow>"
list-entry: " <gray>- <white>{material}</white></gray>"
staff-alert: "<red>[Blacklist] <yellow>{player}</yellow> had <white>{material}</white> detected ({context})</red>"
confiscated: "<red>A prohibited item (<yellow>{material}</yellow>) was confiscated from you.</red>"
# ==================== TICKETS ====================
ticket:
disabled: "<red>The ticket system is currently disabled.</red>"
created: "<green>Ticket <yellow>{id}</yellow> created. Staff have been notified.</green>"
staff-alert: "<gold>[Ticket] <yellow>{player}</yellow> opened ticket <white>{id}</white>: <gray>{message}</gray></gold>"
not-found: "<red>Ticket <yellow>{id}</yellow> not found.</red>"
already-closed: "<red>Ticket <yellow>{id}</yellow> is already closed.</red>"
not-yours: "<red>You do not have access to this ticket.</red>"
cooldown: "<red>Wait <yellow>{seconds}</yellow> seconds before creating another ticket.</red>"
max-open: "<red>You already have <yellow>{max}</yellow> open tickets. Close one first.</red>"
responded: "<green>Response added to ticket <yellow>{id}</yellow>.</green>"
notify-response: "<gold>[Ticket] Staff <yellow>{staff}</yellow> responded to ticket <white>{id}</white>: <gray>{message}</gray></gold>"
staff-notify-response: "<gold>[Ticket] <yellow>{player}</yellow> responded to ticket <white>{id}</white>: <gray>{message}</gray></gold>"
mail-response: "Staff {staff} responded to ticket {id}: {message}"
closed: "<green>Ticket <yellow>{id}</yellow> has been closed.</green>"
notify-closed: "<yellow>Ticket <white>{id}</white> was closed by <white>{staff}</white>.</yellow>"
mail-closed: "Ticket {id} was closed by {staff}."
not-closed: "<red>Ticket <yellow>{id}</yellow> is not closed.</red>"
reopened: "<green>Ticket <yellow>{id}</yellow> has been reopened.</green>"
assigned: "<green>Ticket <yellow>{id}</yellow> assigned to <yellow>{staff}</yellow>.</green>"
assigned-to-you: "<gold>[Ticket] You have been assigned ticket <white>{id}</white> from <yellow>{player}</yellow>.</gold>"
priority-set: "<green>Ticket <yellow>{id}</yellow> priority set to {priority}.</green>"
invalid-priority: "<red>Invalid priority. Use: low, medium, high, urgent</red>"
deleted: "<green>Ticket <yellow>{id}</yellow> has been permanently deleted.</green>"
delete-confirm: "<yellow>Shift-click the delete button to permanently remove ticket <white>{id}</white>.</yellow>"
view-header: " <gold><bold>Ticket {id}</bold></gold> <gray>| {status} | {priority} | By: {player} | Assigned: {assigned} | {time_ago}</gray>"
view-message: " <gray>[{time_ago}]</gray> <yellow>{sender}</yellow><gray>: {message}</gray>"
list-header: " <gold><bold>Tickets</bold></gold> <gray>({count} results, filter: {filter})</gray>"
list-entry: "<click:run_command:'/sa ticket view {id}'><hover:show_text:'<green>Click to view ticket'> <yellow>{id}</yellow> <gray>by</gray> <white>{player}</white> <gray>| {status} | {priority} | {time_ago} | {message}</gray></hover></click>"
list-empty: " <gray>No tickets found.</gray>"
# ==================== ANNOUNCEMENTS ====================
announce:
created: "<green>Announcement <yellow>{id}</yellow> created (interval: 300s, mode: chat).</green>"
deleted: "<green>Announcement <yellow>{id}</yellow> deleted.</green>"
not-found: "<red>Announcement <yellow>{id}</yellow> not found.</red>"
already-exists: "<red>Announcement <yellow>{id}</yellow> already exists.</red>"
enabled: "<green>Announcement <yellow>{id}</yellow> enabled.</green>"
disabled: "<red>Announcement <yellow>{id}</yellow> disabled.</red>"
interval-set: "<green>Interval for <yellow>{id}</yellow> set to <yellow>{seconds}</yellow> seconds.</green>"
interval-minimum: "<red>Interval must be at least <yellow>{min}</yellow> seconds.</red>"
mode-set: "<green>Mode for <yellow>{id}</yellow> set to <yellow>{mode}</yellow>.</green>"
mode-invalid: "<red>Invalid mode. Use: chat, title, actionbar, bossbar, title+chat, bossbar+chat.</red>"
tested: "<green>Announcement <yellow>{id}</yellow> sent once to all players.</green>"
none: "<yellow>No announcements configured.</yellow>"
list-header: " <gold><bold>Announcements</bold></gold> <gray>({count} total)</gray>"
list-entry: "<click:run_command:'/sa announce toggle {id}'><hover:show_text:'<green>Click to toggle on/off'> <yellow>{id}</yellow> <gray>| {status} | Every {interval}s | Mode: {mode}</gray></hover></click>"
preview-self: "<gray>Preview of <yellow>{id}</yellow> (only you):</gray>"
# ==================== MOTD ====================
motd:
set: "<green>Server MOTD updated.</green>"
maintenance-set: "<green>Maintenance MOTD updated and enabled.</green>"
maintenance-enabled: "<green>Maintenance MOTD <yellow>enabled</yellow>.</green>"
maintenance-disabled: "<yellow>Maintenance MOTD <red>disabled</red>.</yellow>"
icon-not-found: "<red>Icon file not found: <yellow>{path}</yellow></red>"
icon-invalid-size: "<red>Icon must be exactly 64x64 pixels.</red>"
icon-set: "<green>Server icon set to <yellow>{path}</yellow>.</green>"
icon-failed: "<red>Failed to load server icon. Ensure it is a valid PNG file.</red>"
maxplayers-set: "<green>Max players override set to <yellow>{value}</yellow>.</green>"
maxplayers-invalid: "<red>Invalid number. Use a positive number, +offset (e.g. +1), or -1 for default.</red>"
minplayers-set: "<green>Minimum displayed players set to <yellow>{value}</yellow>.</green>"
minplayers-disabled: "<green>Minimum displayed players override <yellow>disabled</yellow>.</green>"
minplayers-invalid: "<red>Invalid number. Use a positive number, or -1 (or 0) to disable.</red>"
reloaded: "<green>MOTD settings reloaded.</green>"
preview-header: "<yellow>MOTD Preview:</yellow>"
# ==================== STAFF DASHBOARD ====================
staffdash:
console-specify-player: "<red>Console must specify a player name.</red>"
header: " <gradient:#00CED1:#00FA9A><bold>Staff Dashboard</bold></gradient> \u2014 <white>{player}</white>"
period: " <yellow>{period}:</yellow>"
stats: " <gray><white>{punishments}</white> punishments, <white>{reports}</white> reports resolved, <white>{tickets}</white> tickets handled (<white>{total}</white> total)</gray>"
breakdown-header: " <yellow>Top Actions (All Time):</yellow>"
breakdown-entry: " <gray>{action}: <white>{count}</white></gray>"
# ==================== STAFF LEADERBOARD ====================
staffstats:
header: " <gradient:#FFD700:#FFA500><bold>Staff Leaderboard</bold></gradient> \u2014 <white>{period}</white>"
empty: "<gray>No staff activity found for this period.</gray>"
entry: " <yellow>{rank}.</yellow> <white>{player}</white> \u2014 <green>{actions}</green> actions"
# ==================== CUSTOM COMMANDS ====================
customcommand:
disabled: "<red>This command has been disabled.</red>"
cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before using this command again.</red>"
limit-reached: "<red>You have reached the maximum usage limit (<yellow>{limit}</yellow>) for this command.</red>"
world-denied: "<red>You cannot use that command in this world.</red>"
chain-depth: "<red>That custom command chain is too deep. Check for loops.</red>"
usage: "<red>Usage:</red> <yellow>{usage}</yellow>"
warmup-start: "<yellow>Warming up... Stand still for <white>{seconds}</white> seconds.</yellow>"
warmup-cancelled: "<red>Warmup cancelled. You moved.</red>"
warmup-already: "<red>You already have a warmup in progress.</red>"
list-header: " <gradient:#00CED1:#00FA9A><bold>Custom Commands</bold></gradient> <gray>({count})</gray>"
list-empty: "<gray>No custom commands configured.</gray>"
list-entry: " <gray>•</gray> <white>{name}</white> {status} <gray>| {description}</gray>"
status-enabled: "<green>[ON]</green>"
status-disabled: "<red>[OFF]</red>"
created: "<green>Custom command <yellow>{name}</yellow> created.</green>"
deleted: "<green>Custom command <yellow>{name}</yellow> deleted.</green>"
toggled: "<green>Custom command <yellow>{name}</yellow> is now {status}.</green>"
already-exists: "<red>A custom command named <yellow>{name}</yellow> already exists.</red>"
not-found: "<red>Custom command <yellow>{name}</yellow> not found.</red>"
invalid-permission: "<red>Invalid permission node. Use letters, numbers, dots, dashes, and underscores only.</red>"
reloaded: "<green>Custom commands reloaded.</green>"
not-creating: "<red>You are not currently creating a custom command. Use <yellow>/sa customcommand create</yellow>.</red>"
no-commands-yet: "<red>No custom commands have been created yet.</red>"
no-commands-provided: "<red>No valid commands provided. Use semicolons to separate commands.</red>"
info-header: " <gradient:#00CED1:#00FA9A><bold>Custom Command:</bold></gradient> <white>{name}</white>"
info-status: " <gray>Status:</gray> {status}"
info-description: " <gray>Description:</gray> <white>{description}</white>"
info-permission: " <gray>Permission:</gray> <white>{permission}</white>"
info-commands: " <gray>Commands ({count}):</gray>"
info-command-entry: " <gray>•</gray> <white>{command}</white>"
info-cooldown: " <gray>Cooldown:</gray> <white>{seconds}s</white>"
info-delay: " <gray>Delay:</gray> <white>{seconds}s</white>"
info-warmup: " <gray>Warmup:</gray> <white>{seconds}s</white>"
info-limit: " <gray>Limit:</gray> <white>{limit} uses</white>"
info-autouse: " <gray>Auto-use:</gray> <white>{trigger}</white>"
info-aliases: " <gray>Aliases:</gray> <white>{aliases}</white>"
test-header: " <gold>Dry-run: <yellow>{name}</yellow></gold> <gray>(not executed)</gray>"
test-empty: " <gray>No resolved actions.</gray>"
test-line: " <gray>→</gray> <white>{command}</white>"
create-pick-type: "<yellow>Pick a custom command type in the GUI.</yellow>"
create-name-prompt: "<yellow>Enter a name for the new custom command:</yellow>"
create-invalid-name: "<red>Invalid name. Must be a single word with no spaces.</red>"
create-started: "<green>Creating <white>{type}</white> command: <yellow>{name}</yellow></green>"
create-commands-hint: "<gray>Use the <white>Command Builder</white> GUI to add steps. Chat still works if you prefer.</gray>"
create-commands-prompt: "<gray>Type commands one at a time in chat. Example: <white>sa heal {player}</white></gray>"
create-commands-console: "<gray>Prefix with <white>console:</white> to run as console.</gray>"
create-commands-finish: "<yellow>Click <white>Finish</white> in the builder, or type <white>/sa customcommand finish</white>.</yellow>"
create-prompt-player: "<yellow>Type a player command (no leading /). Example: <white>sa heal {player}</white></yellow>"
create-prompt-console: "<yellow>Type a console command (no leading /). Example: <white>sa kick {player}</white></yellow>"
create-command-added: "<green>+</green> <gray>Step <white>#{count}</white> added</gray>"
create-command-added-line: "<dark_gray> ›</dark_gray> <white>{command}</white>"
create-command-removed: "<yellow>−</yellow> <gray>Step <white>#{index}</white> removed</gray>"
create-need-commands: "<red>Add at least one command step before finishing.</red>"
create-finished: "<green>Custom command <yellow>{name}</yellow> created.</green>"
create-ready: "<gray>Registered. Use <yellow>/sa {name}</yellow> (no reload needed).</gray>"
subcommand-enabled: "<green>Subcommand <yellow>{name}</yellow> enabled.</green>"
subcommand-disabled: "<red>Subcommand <yellow>{name}</yellow> disabled.</red>"
override-updated: "<green>Override updated for <yellow>{name}</yellow>.</green>"
# ==================== Interactive Commands ====================
interactive:
bound: "<green>Bound <yellow>{name}</yellow> to block at <white>{coords}</white>.</green>"
unbound: "<green>Removed bind at <white>{coords}</white>.</green>"
no-bind: "<red>No interactive command is bound to that block.</red>"
command-missing: "<red>Bound command <yellow>{name}</yellow> is missing or disabled.</red>"
no-target: "<red>Look at a block within 5 blocks to bind to it.</red>"
list-header: " <gradient:#00CED1:#00FA9A><bold>Interactive Binds</bold></gradient> <gray>({count})</gray>"
list-empty: "<gray>No interactive command binds configured.</gray>"
list-entry: "<click:run_command:'/sa tppos {x} {y} {z} {world}'><hover:show_text:'<gray>Click to teleport'> <gray>•</gray> <white>{coords}</white> <gray>→</gray> <yellow>{name}</yellow></hover></click>"
# ==================== Rules ====================
rules:
disabled: "<red>The rules display is currently disabled.</red>"
header: "<gradient:#FFD700:#FFA500><bold>Server Rules</bold></gradient>"
footer: "<gray>Follow these rules while playing.</gray>"
entry: " <gold>{number}.</gold> <white>{rule}</white>"
# ==================== Sign & Book Editor ====================
signbook:
sign-edit-on: "<green>Sign edit mode enabled.</green> <gray>Right-click a sign to edit. You can also sneak + right-click anytime with permission.</gray>"
sign-edit-off: "<yellow>Sign edit mode disabled.</yellow>"
sign-editing: "<green>Editing <yellow>{side}</yellow> of sign...</green>"
not-a-sign: "<red>That is not a sign.</red>"
book-not-found: "<red>You must hold a writable or written book.</red>"
book-given: "<green>You received a writable book.</green>"
book-already-editable: "<green>That book is already editable.</green> <gray>Right-click to edit it.</gray>"
book-copied: "<green>Book copied to your inventory.</green>"
book-unsigned: "<green>Book unsigned. It is now editable.</green>"
book-not-written: "<red>That book is not a written book.</red>"
# ==================== Kit ====================
kit:
claimed: "<green>You received the <yellow>{name}</yellow> kit.</green>"
not-found: "<red>Kit <yellow>{name}</yellow> not found.</red>"
cooldown: "<red>This kit is on cooldown for <yellow>{seconds}s</yellow>.</red>"
limit-reached: "<red>You have reached the usage limit ({limit}) for this kit.</red>"
wrong-world: "<red>This kit is not available in this world.</red>"
wrong-time: "<red>This kit requires {required} time.</red>"
wrong-weather: "<red>This kit requires {required} weather.</red>"
not-enough-exp: "<red>You need at least <yellow>{required}</yellow> levels.</red>"
not-enough-exp-points: "<red>You need at least <yellow>{required}</yellow> experience points.</red>"
not-enough-money: "<red>You need at least <yellow>${required}</yellow>.</red>"
not-enough-items: "<red>You need <yellow>{amount}x {material}</yellow>.</red>"
warmup-start: "<yellow>Kit warmup started. Stay still for {seconds}s.</yellow>"
warmup-actionbar: "<yellow>Kit in <white>{seconds}s</white>. Stay still.</yellow>"
warmup-already: "<red>You already have a kit warmup in progress.</red>"
warmup-cancelled: "<red>Kit warmup cancelled. You moved.</red>"
inventory-full: "<red>Your inventory is too full to receive the <yellow>{name}</yellow> kit.</red>"
created: "<green>Kit <yellow>{name}</yellow> created.</green>"
deleted: "<green>Kit <yellow>{name}</yellow> deleted.</green>"
already-exists: "<red>A kit named <yellow>{name}</yellow> already exists.</red>"
saved: "<green>Kit <yellow>{name}</yellow> items saved.</green>"
inventory-saved: "<green>Your inventory has been saved as kit <yellow>{name}</yellow>.</green>"
unknown-setting: "<red>Unknown setting. Valid settings: cooldown, permission, one-time, world, time, weather, cost, cost-xp, cost-items.</red>"
invalid-time: "<red>Invalid time. Use: day, night, any</red>"
invalid-weather: "<red>Invalid weather. Use: clear, rain, thunder, any</red>"
preview-title: "<gold>Kit Preview</gold> <dark_gray>•</dark_gray> <white>{kit}</white>"
reset-usage: "<green>Reset kit usage for <yellow>{kit}</yellow> on <white>{player}</white>.</green>"
reset-usage-notify: "<yellow>Your cooldown/usage for kit <white>{kit}</white> was reset by staff.</yellow>"
delete-confirm: "<yellow>Delete kit <red>{name}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
# ==================== BACKUP ====================
backup:
starting-data: "<yellow>Starting data backup... This may take a moment.</yellow>"
starting-worlds: "<yellow>Starting world backup... This may take a while depending on world sizes.</yellow>"
data-success: "<green>Data backup complete. File: <yellow>{file}</yellow> (<yellow>{size}</yellow>)</green>"
worlds-success: "<green>World backup complete. <yellow>{count}</yellow> world(s) backed up. File: <yellow>{file}</yellow> (<yellow>{size}</yellow>)</green>"
failed: "<red>Backup failed: {error}</red>"
no-data: "<red>No data folder found to backup.</red>"
list-empty: "<yellow>No backup files found in plugins/SoapsAdmin/backups/</yellow>"
list-header: "<gold>Backups</gold> <gray>({count})</gray>"
list-entry: " <gray>• <yellow>{file}</yellow> <dark_gray>({size}, {age} ago)</dark_gray></gray>"
prune-success: "<green>Deleted backup <yellow>{file}</yellow>.</green>"
prune-failed: "<red>Could not delete backup <yellow>{file}</yellow>.</red>"
# ==================== Launch ====================
launch:
launched: "<green>Launched <yellow>{player}</yellow> with power <yellow>{power}</yellow>.</green>"
launched-target: "<yellow>{staff}</yellow> <green>launched you.</green>"
invalid-power: "<red>Invalid power. Must be a number between 0.1 and 10.</red>"
invalid-angle: "<red>Invalid y-velocity. Must be a number between 0 and 5.</red>"
# ==================== Economy ====================
economy:
balance-self: "<green>Your balance: <yellow>{balance}</yellow></green>"
balance-other: "<green><yellow>{player}</yellow>'s balance: <yellow>{balance}</yellow></green>"
balance-self-economy: "<green>Your <yellow>{economy}</yellow> balance: <yellow>{balance}</yellow></green>"
balance-other-economy: "<green><yellow>{player}</yellow>'s <yellow>{economy}</yellow> balance: <yellow>{balance}</yellow></green>"
give-success: "<green>Gave <yellow>{amount}</yellow> to <yellow>{player}</yellow>. New balance: <yellow>{balance}</yellow></green>"
take-success: "<green>Took <yellow>{amount}</yellow> from <yellow>{player}</yellow>. New balance: <yellow>{balance}</yellow></green>"
set-success: "<green>Set <yellow>{player}</yellow>'s balance to <yellow>{balance}</yellow>.</green>"
reset-success: "<green>Reset <yellow>{player}</yellow>'s <yellow>{economy}</yellow> balance.</green>"
reset-all-success: "<green>Reset all <yellow>{economy}</yellow> balances for all players.</green>"
reset-all-confirm: "<yellow>Reset <red>all</red> player balances for <white>{economy}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
insufficient: "<red>Insufficient funds. Required: <yellow>{amount}</yellow>, Balance: <yellow>{balance}</yellow></red>"
not-found: "<red>Economy <yellow>{economy}</yellow> not found.</red>"
disabled: "<red>Economy system is disabled.</red>"
already-exists: "<red>An economy with ID <yellow>{economy}</yellow> already exists.</red>"
created: "<green>Economy <yellow>{economy}</yellow> created.</green>"
deleted: "<green>Economy <yellow>{economy}</yellow> has been deleted.</green>"
updated: "<green>Economy <yellow>{economy}</yellow> has been updated.</green>"
list-header: "<gold><bold>Economies:</bold></gold>"
list-entry: "<gray> - <yellow>{economy}</yellow> <dark_gray>({id})</dark_gray></gray>"
create-prompt-id: "<yellow>Enter an ID for the economy <gray>(a-z, numbers, no spaces - type 'cancel' to cancel)</gray>:</yellow>"
create-prompt-name: "<yellow>Enter the display name:</yellow>"
create-prompt-symbol: "<yellow>Enter the currency symbol <gray>(e.g. $, ¤, ⛃)</gray>:</yellow>"
create-prompt-format: "<yellow>Enter the number format <gray>(e.g. #,##0.00)</gray>:</yellow>"
create-prompt-starting: "<yellow>Enter the starting balance:</yellow>"
create-prompt-min: "<yellow>Enter the minimum balance <gray>(use 0 for none)</gray>:</yellow>"
create-prompt-max: "<yellow>Enter the maximum balance <gray>(use 0 for unlimited)</gray>:</yellow>"
create-prompt-icon: "<yellow>Enter the GUI icon material name:</yellow>"
create-prompt-description: "<yellow>Enter a description for this economy:</yellow>"
create-prompt-color: "<yellow>Enter the MiniMessage color tag <gray>(e.g. <green>, <#FF5500>)</gray>:</yellow>"
create-cancel-hint: "<gray>Type <yellow>cancel</yellow> to go back.</gray>"
edit-prompt-name: "<yellow>Enter the new display name:</yellow>"
edit-prompt-symbol: "<yellow>Enter the new symbol:</yellow>"
edit-prompt-format: "<yellow>Enter the new number format:</yellow>"
edit-prompt-starting: "<yellow>Enter the new starting balance:</yellow>"
edit-prompt-min: "<yellow>Enter the new minimum balance:</yellow>"
edit-prompt-max: "<yellow>Enter the new maximum balance:</yellow>"
edit-prompt-icon: "<yellow>Enter the new GUI icon material:</yellow>"
edit-prompt-description: "<yellow>Enter the new description:</yellow>"
edit-prompt-color: "<yellow>Enter the new color tag:</yellow>"
prompt-permission: "<yellow>Enter permission node, or <white>none</white> for everyone:</yellow>"
prompt-cheque-material: "<yellow>Enter cheque item material (e.g. PAPER, MAP):</yellow>"
prompt-cheque-name: "<yellow>Enter cheque display name (MiniMessage · {currency} {amount}):</yellow>"
prompt-cheque-min: "<yellow>Enter minimum cheque withdraw amount:</yellow>"
prompt-cheque-max: "<yellow>Enter maximum cheque withdraw amount:</yellow>"
prompt-drop-material: "<yellow>Enter mob-drop item material (e.g. GOLD_NUGGET):</yellow>"
prompt-drop-value: "<yellow>Enter currency value per dropped item:</yellow>"
prompt-drop-name: "<yellow>Enter drop item display name (MiniMessage), or <white>none</white> for auto:</yellow>"
prompt-drop-chance: "<yellow>Enter default mob drop chance (0.0 to 1.0, or 0 to 100%):</yellow>"
prompt-drop-min-items: "<yellow>Enter minimum items dropped on a successful roll:</yellow>"
prompt-drop-max-items: "<yellow>Enter maximum items dropped on a successful roll:</yellow>"
invalid-amount: "<red>Invalid amount. Enter a valid number.</red>"
economy-pay-success: "<green>You paid <yellow>{amount}</yellow> to <yellow>{player}</yellow>.</green>"
economy-pay-received: "<green>You received <yellow>{amount}</yellow> from <yellow>{player}</yellow>.</green>"
pay-received-actionbar: "<green>+{amount}</green> <gray>from {player}</gray>"
cannot-pay-self: "<red>You cannot pay yourself.</red>"
target-max-balance: "<red>That player's balance is already at the maximum.</red>"
pay-confirm: "<yellow>Pay <red>{amount}</red> to <white>{player}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
cheque:
disabled-for-economy: "<red>Cheques are not enabled for <yellow>{economy}</yellow>.</red>"
below-minimum: "<red>Minimum cheque amount is <yellow>{min}</yellow>.</red>"
above-maximum: "<red>Maximum cheque amount is <yellow>{max}</yellow>.</red>"
withdraw-success: "<green>Cheque issued for <yellow>{amount}</yellow> <gold>{currency}</gold>. Right-click to deposit.</green>"
deposit-success: "<green>Deposited <yellow>{amount}</yellow> <gold>{currency}</gold> from cheque.</green>"
deposit-failed: "<red>Could not deposit that cheque (balance full or currency unavailable).</red>"
inventory-full: "<red>Your inventory is full. Free a slot before withdrawing a cheque.</red>"
not-cheque: "<red>You are not holding a valid cheque.</red>"
usage-withdraw: "<yellow>Usage: /sa cheque withdraw <economy> <amount></yellow>"
help-header: "<gold><bold>Cheque Commands</bold></gold>"
help-withdraw: " <gray>/sa cheque withdraw <economy> <amount></gray> <dark_gray>| Withdraw to a cheque item</dark_gray>"
help-deposit: " <gray>/sa cheque deposit</gray> <dark_gray>| Deposit held cheque to balance</dark_gray>"
# ==================== MODULES ====================
modules:
header: "<gold><bold>Module Manager</bold></gold> <gray>({enabled}/{total} enabled)</gray>"
toggled: "<gray>Module <yellow>{module}</yellow> has been {state}<gray>."
enabled-state: "<green>enabled"
disabled-state: "<red>disabled"
unknown-module: "<red>Unknown module: <yellow>{module}</yellow>. Use <yellow>/sa modules list</yellow> to see available modules.</red>"
reloaded: "<green>modules.yml reloaded.</green>"
usage-toggle: "<yellow>Usage: /sa modules toggle <module></yellow>"
usage-enable: "<yellow>Usage: /sa modules enable <module></yellow>"
usage-disable: "<yellow>Usage: /sa modules disable <module></yellow>"
disable-confirm: "<yellow>Disable module <red>{module}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
usage-main: "<yellow>Usage: /sa modules <list|toggle|enable|disable|gui></yellow>"
search-prompt: "<yellow>Type a search</yellow> <gray>(module name, category, or command like</gray> <white>ban</white><gray>)</gray><yellow>. Type</yellow> <white>clear</white> <yellow>to reset.</yellow>"
search-applied: "<green>Module search set to</green> <yellow>{query}</yellow><green>.</green>"
search-cleared: "<gray>Module search cleared.</gray>"
search-needs-chat: "<red>Chat search needs the Chat module enabled (ChatInput). Use the category and status filters instead.</red>"
# ==================== FRIENDS ====================
friends:
request-sent: "<green>Friend request sent to <yellow>{player}</yellow>.</green>"
request-received: "<yellow>{player}</yellow> <green>wants to be your friend.</green>"
request-expired: "<gray>Your friend request to <yellow>{player}</yellow> has expired.</gray>"
request-expired-target: "<gray>Friend request from <yellow>{player}</yellow> has expired.</gray>"
request-replaced: "<yellow>Your friend request to <white>{player}</white> was replaced by a newer request.</yellow>"
already-friends: "<yellow>You are already friends with <yellow>{player}</yellow>.</yellow>"
already-pending: "<yellow>You already have a pending request to <yellow>{player}</yellow>.</yellow>"
cannot-self: "<red>You cannot add yourself as a friend.</red>"
no-pending: "<yellow>You have no pending friend requests.</yellow>"
accepted: "<green>You are now friends with <yellow>{player}</yellow>.</green>"
accepted-requester: "<green><yellow>{player}</yellow> accepted your friend request.</green>"
denied: "<red>You denied the friend request from <yellow>{player}</yellow>.</red>"
denied-requester: "<red><yellow>{player}</yellow> denied your friend request.</red>"
removed: "<yellow>You removed <yellow>{player}</yellow> from your friends list.</yellow>"
removed-by: "<yellow><yellow>{player}</yellow> removed you from their friends list.</yellow>"
not-friends: "<red>You are not friends with <yellow>{player}</yellow>.</red>"
no-friends: "<gray>You don't have any friends yet. Use <yellow>/sa friend add <player></yellow> to send a request.</gray>"
list-header: "<gold><bold>Friends</bold></gold> <gray>({count} total)</gray>"
list-entry: "<gray> - </gray>{status} <yellow>{player}</yellow>"
teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
teleported-target: "<green><yellow>{player}</yellow> teleported to you.</green>"
pvp-blocked: "<yellow>You can't attack your friend <yellow>{player}</yellow>.</yellow>"
pvp-toggled: "<green>Friend PvP is now {state}<green>.</green>"
# ==================== NICKNAME ====================
nickname:
none: "<gray>You don't have a nickname set.</gray>"
current: "<gray>Your nickname: </gray>{nickname}"
set: "<green>Nickname set to: </green>{nickname}"
reset: "<green>Your nickname has been reset.</green>"
set-other: "<green>Set <yellow>{player}</yellow>'s nickname to: </green>{nickname}"
reset-other: "<green>Reset <yellow>{player}</yellow>'s nickname.</green>"
set-by-staff: "<yellow>A staff member set your nickname to: </yellow>{nickname}"
reset-by-staff: "<yellow>A staff member reset your nickname.</yellow>"
too-short: "<red>Nickname must be at least {min} characters long.</red>"
too-long: "<red>Nickname must be at most {max} characters long.</red>"
no-colors: "<red>You don't have permission to use colors in nicknames.</red>"
no-events: "<red>Nicknames cannot include click, hover, or other interactive tags.</red>"
realname: "<gray>Nickname </gray><white>{nickname}</white><gray> belongs to </gray><yellow>{player}</yellow>"
realname-not-found: "<red>No player found with nickname <yellow>{nickname}</yellow>.</red>"
realname-ambiguous: "<yellow>Multiple players use nickname <white>{nickname}</white>: <gray>{players}</gray></yellow>"
realname-no-nick: "<gray><yellow>{player}</yellow> has no nickname set.</gray>"
preview-line: "<gray>Nickname preview:</gray>"
# ==================== SEEN ====================
seen:
online: "<green><yellow>{player}</yellow> is currently online.</green>"
header: "<gold><bold>Player Info:</bold></gold> <yellow>{player}</yellow>"
last-seen: "<gray> Last Seen: </gray><white>{time}</white>"
first-join: "<gray> First Join: </gray><white>{time}</white>"
playtime: "<gray> Playtime: </gray><white>{time}</white>"
last-location: "<gray> Last Logout: </gray><white>{world}</white> <gray>({x}, {y}, {z})</gray>"
last-world-unloaded: "<gray> Last world <white>{world}</white> (not loaded)</gray>"
flags: "<gray> Status: </gray>{flags}"
flags-none: "<gray> Status: </gray><green>clean</green>"
flag-banned: "<red>banned</red>"
flag-muted: "<gold>muted</gold>"
flag-jailed: "<red>jailed</red>"
flag-frozen: "<red>frozen</red>"
suggest-check: "<click:suggest_command:'/sa check {player}'><gray> → /sa check {player}</gray></click>"
suggest-history: "<click:suggest_command:'/sa punishhistory {player}'><gray> → /sa punishhistory {player}</gray></click>"
# ==================== PLAYTIME ====================
playtime:
show: "<yellow>{player}</yellow><gray>'s playtime: </gray><white>{time}</white>"
top-empty: "<gray>No playtime data is available yet.</gray>"
top-header: "<gold><bold>Playtime Top</bold></gold> <gray>(showing up to {count})</gray>"
top-line: "<gray>{rank}.</gray> <yellow>{player}</yellow> <dark_gray>-</dark_gray> <white>{time}</white>"
doubledoors:
usage: "<yellow>Usage: /sa doubledoors <toggle|status></yellow>"
toggled-on: "<green>DoubleDoors helpers are now enabled for you.</green>"
toggled-off: "<yellow>DoubleDoors helpers are now disabled for you.</yellow>"
status-enabled: "<green>DoubleDoors helpers are currently enabled for you.</green>"
status-disabled: "<yellow>DoubleDoors helpers are currently disabled for you.</yellow>"
deathcoords:
usage: "<yellow>Usage: /sa deathcoords [last]</yellow>"
no-last-death: "<gray>No saved death location (or it expired).</gray>"
death-reminder: "<gray>You died at </gray><white>{x} {y} {z}</white><gray> in </gray><yellow>{world}</yellow><gray> ({dimension}).</gray>"
death-reminder-action: "<gray>Death: </gray><white>{x} {y} {z}</white><gray> - </gray><yellow>{world}</yellow>"
death-reminder-team: "<gray>{player} died at </gray><white>{x} {y} {z}</white><gray> ({world}).</gray>"
seekitem:
scan-started: "<gray>Scanning for </gray><white>{material}</white><gray> r=</gray><white>{radius}</white><gray> [</gray><dark_aqua>{flags}</dark_aqua><gray>]...</gray>"
header: "<green>Found {count} {material} match(es):</green>"
none-found: "<gray>No </gray><white>{material}</white><gray> found nearby.</gray>"
tp-hover: "<gray>Click to teleport</gray>"
label-ground: "Ground Drop"
label-item-frame: "Item Frame"
label-glow-frame: "Glow Item Frame"
label-armor-stand: "Armor Stand"
already-running: "<gray>A scan is already running. Use </gray><yellow>/sa seekitem cancel</yellow><gray> to stop it.</gray>"
cancelled: "<gray>Scan cancelled.</gray>"
no-scan-running: "<gray>No scan is currently running.</gray>"
hand-empty: "<red>Hold an item in your main hand first.</red>"
progress: "<dark_gray>[SeekItem] </dark_gray><gray>Scanning… </gray><white>{percent}%</white><gray> | </gray><white>{found}</white><gray> found so far.</gray>"
usage: "<yellow>Usage: /sa seekitem <material|hand|cancel> [radius] [-players] [-ground] [-frames] [-enchanted] [-named] [-amount:<n>]</yellow>"
bad-material: "<red>Unknown material: {mat}</red>"
bad-amount: "<red>Invalid amount. Use -amount:<number>.</red>"
bad-radius: "<red>Radius must be a number.</red>"
bad-radius-range: "<red>Radius must be between {min} and {max}.</red>"
cooldown: "<gray>Wait </gray><white>{seconds}</white><gray>s before scanning again.</gray>"
disabled: "<gray>SeekItem is disabled.</gray>"
world-disabled: "<gray>SeekItem is disabled in this world.</gray>"
# ==================== RECIPE ====================
recipe:
list-header: "<gold><bold>Custom Recipes</bold></gold> <gray>({count} total)</gray>"
list-entry: " <gray>•</gray> <yellow>{id}</yellow> <dark_gray>[{type}]</dark_gray> <gray>| {name}</gray>"
no-recipes: "<gray>No custom recipes configured.</gray>"
not-found: "<red>Recipe <yellow>{id}</yellow> not found.</red>"
exists: "<red>Recipe <yellow>{id}</yellow> already exists.</red>"
deleted: "<green>Deleted recipe <yellow>{id}</yellow>.</green>"
saved: "<green>Saved recipe <yellow>{id}</yellow>.</green>"
reloaded: "<green>Recipes reloaded.</green>"
search-prompt: "<yellow>Enter recipe search filter</yellow> <gray>(id, result, or ingredient; type clear to reset)</gray>"
create-usage: "<yellow>Usage: /sa recipe create <id> <type></yellow>"
edit-usage: "<yellow>Usage: /sa recipe edit <id></yellow>"
delete-usage: "<yellow>Usage: /sa recipe delete <id></yellow>"
view-usage: "<yellow>Usage: /sa recipe view <id></yellow>"
invalid-id: "<red>Invalid recipe ID. Use letters, numbers, dots, underscores, or dashes.</red>"
invalid-type: "<red>Invalid recipe type: <yellow>{type}</yellow>.</red>"
created-draft: "<green>Created recipe draft <yellow>{id}</yellow> as <yellow>{type}</yellow>. Open GUI to finish.</green>"
edit-opened: "<green>Opened recipe editor for <yellow>{id}</yellow>.</green>"
no-permission: "<red>You don't have permission to craft <yellow>{recipe}</yellow>.</red>"
cannot-afford: "<red>You can't afford to craft <yellow>{recipe}</yellow>.</red>"
no-shift-craft: "<yellow>Craft one at a time. <white>{recipe}</white> has a crafting cost.</yellow>"
cost-deducted: "<gray>Crafting cost: <yellow>{amount}</yellow> deducted for <yellow>{recipe}</yellow>.</gray>"
wizard:
session-missing: "<red>No active recipe wizard session found.</red>"
invalid: "<red>Recipe is incomplete or invalid. Check result/ingredients resolve (Crucible needs MythicMobs).</red>"
invalid-number: "<red>Invalid number.</red>"
invalid-item-ref: "<red>Item reference cannot be empty.</red>"
unresolved-item: "<yellow>Could not resolve <white>{ref}</white>. Check the id / that MythicMobs (Crucible) is loaded.</yellow>"
item-set: "<green>Result set to <white>{ref}</white>.</green>"
prompt-result-material: "<yellow>Enter result material (DIAMOND_SWORD) or Crucible id (crucible:MyItem):</yellow>"
prompt-result-amount: "<yellow>Enter result amount (1-64):</yellow>"
prompt-result-name: "<yellow>Enter display name (MiniMessage/&), or 'none':</yellow>"
prompt-result-lore: "<yellow>Enter lore lines separated with |, or 'none':</yellow>"
prompt-result-enchants: "<yellow>Enter enchants as key:level,key:level or 'none':</yellow>"
prompt-shape: "<yellow>Enter 3 shape rows using | (example: ABC| D | ):</yellow>"
prompt-ingredients-map: "<yellow>Enter map as A=STONE,B=crucible:MyItem:</yellow>"
prompt-ingredients-list: "<yellow>Enter ingredients list (STONE,crucible:MyItem):</yellow>"
prompt-input: "<yellow>Enter input material or crucible:ItemId:</yellow>"
prompt-cook-time: "<yellow>Enter cooking time in ticks:</yellow>"
prompt-experience: "<yellow>Enter experience amount:</yellow>"
prompt-template: "<yellow>Enter smithing template material or crucible:ItemId:</yellow>"
prompt-base: "<yellow>Enter smithing base material or crucible:ItemId:</yellow>"
prompt-addition: "<yellow>Enter smithing addition material or crucible:ItemId:</yellow>"
prompt-permission: "<yellow>Enter permission node, or 'none':</yellow>"
prompt-cost-economy: "<yellow>Enter economy ID, or 'none':</yellow>"
prompt-cost-amount: "<yellow>Enter crafting cost amount:</yellow>"
prompt-category: "<yellow>Enter recipe category:</yellow>"
prompt-gui-icon: "<yellow>Enter GUI icon material, or 'none':</yellow>"
hand-empty: "<red>Hold an item in your main hand first.</red>"
hand-crucible: "<green>Captured Crucible/Mythic item <yellow>crucible:{id}</yellow>.</green>"
hand-vanilla: "<green>Captured vanilla material <yellow>{material}</yellow>.</green>"
hand-ingredient: "<green>Captured ingredient <white>{ref}</white>.</green>"
# ==================== RTP ====================
rtp:
searching: "<gray>Searching for a safe location...</gray>"
search-actionbar: "<gray>Searching for safe location... <yellow>{progress}%</yellow></gray>"
already-searching: "<yellow>RTP is already searching. Wait for it to finish.</yellow>"
teleporting: "<green>Teleporting to <yellow>{world}</yellow>...</green>"
teleported: "<green>Teleported to <yellow>{world}</yellow> at <yellow>{x}</yellow>, <yellow>{z}</yellow>.</green>"
warmup: "<gray>Teleporting in <yellow>{seconds}s</yellow>. Stay still.</gray>"
no-safe-location: "<red>Could not find a safe location. Try again.</red>"
world-disabled: "<red>RTP is disabled in <yellow>{world}</yellow>.</red>"
void-world-disabled: "<red>RTP is not available in void world <yellow>{world}</yellow>.</red>"
cooldown: "<red>You must wait <yellow>{seconds}s</yellow> before using RTP again.</red>"
# ==================== DEATH SETTINGS ====================
death-settings:
header: "<gold><bold>Death Settings</bold></gold>"
status-line: " <gray>•</gray> <yellow>{flag}</yellow><gray>:</gray> {state}"
status-on: "<green>ON</green>"
status-off: "<red>OFF</red>"
toggled: "<green>Death setting <yellow>{flag}</yellow> set to {state}.</green>"
usage: "<yellow>Usage: /sa deathsettings [flag] [true|false]</yellow>"
unknown-flag: "<red>Unknown flag <yellow>{flag}</yellow>. Flags: insta-respawn, bed-respawn, spawn-respawn, rtp-respawn.</red>"
reloaded: "<green>Death settings reloaded.</green>"
# ==================== WAYPOINTS ====================
waypoint:
created: "<green>Waypoint <yellow>{name}</yellow> created.</green>"
updated: "<green>Waypoint <yellow>{name}</yellow> moved to your location.</green>"
deleted: "<green>Waypoint <yellow>{name}</yellow> deleted.</green>"
renamed: "<green>Renamed waypoint <yellow>{old}</yellow> to <yellow>{new}</yellow>.</green>"
not-found: "<red>Waypoint <yellow>{name}</yellow> not found.</red>"
max-reached: "<red>You have reached your maximum of <yellow>{max}</yellow> waypoints.</red>"
already-exists: "<red>A waypoint named <yellow>{name}</yellow> already exists.</red>"
invalid-name: "<red>Invalid waypoint name. Use only letters, numbers, underscores, spaces, and hyphens.</red>"
name-too-long: "<red>Waypoint name too long (max <yellow>{max}</yellow> characters).</red>"
create-prompt: "Enter a name for this waypoint"
rename-prompt: "Enter a new name for <yellow>{name}</yellow>"
unsafe: "<red>That location is not safe for a waypoint.</red>"
teleporting: "<green>Teleporting to waypoint <yellow>{name}</yellow>...</green>"
teleported: "<green>Arrived at waypoint <yellow>{name}</yellow>.</green>"
arrived: "<green>You reached waypoint <yellow>{name}</yellow>.</green>"
cross-world: "<red>Cannot teleport to waypoints in other worlds.</red>"
world-not-found: "<red>Waypoint world <yellow>{world}</yellow> is not loaded.</red>"
tracking-started: "<green>Now tracking <yellow>{name}</yellow>.</green> <gray>Follow the bar at the top of your screen.</gray>"
tracking-other-world: "<yellow>{name}</yellow> <gray>is in another world.</gray>"
tracking-too-far: "<yellow>{name}</yellow> <gray>is more than {max}m away.</gray>"
tracking-bar: "<yellow>{name}</yellow> <gray>| {distance}m {direction}</gray>"
tracking-stopped: "<green>Stopped tracking waypoint.</green>"
not-tracking: "<gray>You are not tracking any waypoint.</gray>"
icon-set: "<green>Waypoint icon set to <yellow>{icon}</yellow>.</green>"
icon-invalid: "<red>Invalid material: <yellow>{icon}</yellow>.</red>"
display-on: "<green>Display marker enabled for <yellow>{name}</yellow>.</green>"
display-off: "<gray>Display marker disabled for <yellow>{name}</yellow>.</gray>"
display-material-set: "<green>Display block for <yellow>{name}</yellow> set to <aqua>{material}</aqua>.</green>"
display-material-invalid: "<red>Hold a block in your main hand, or pass a block material name.</red>"
display-material-denied: "<red>Material <yellow>{material}</yellow> is not allowed for waypoint displays.</red>"
display-color-set: "<green>Beam color for <yellow>{name}</yellow> set to <aqua>{color}</aqua>.</green>"
display-color-invalid: "<red>Unknown color <yellow>{color}</yellow>.</red>"
label-style-updated: "<green>Updated label style for <yellow>{name}</yellow>.</green>"
list-header: "<gold><bold>Your Waypoints</bold></gold> <gray>({count}/{max})</gray>"
list-entry: " <gray>•</gray> <yellow>{name}</yellow> <dark_gray>[{world}]</dark_gray> <gray>| {distance} blocks</gray>"
no-waypoints: "<gray>You have no waypoints. Use <yellow>/sa waypoint</yellow> and Create waypoint, or <yellow>/sa waypoint set <name></yellow>.</gray>"
usage: "<yellow>Usage: /sa waypoint <set|delete|rename|list|teleport|track|stop|display|color|material|gui></yellow>"
reloaded: "<green>Waypoints config reloaded.</green>"
# ==================== ATTRIBUTES ====================
attribute:
set: "<green>Set <yellow>{attribute}</yellow> to <yellow>{value}</yellow> for <yellow>{player}</yellow>.</green>"
reset-all: "<green>Reset all attributes to defaults for <yellow>{player}</yellow>.</green>"
not-supported: "<red>This attribute is not supported for that entity.</red>"
list-header: "<gold><bold>Attributes for {player}</bold></gold>"
list-entry: " <gray>•</gray> <yellow>{name}</yellow><gray>: {value}{default}</gray>"
usage: "<yellow>Usage: /sa attribute <player> [attribute] [set|reset] [value]</yellow>"
# ==================== SHOP ====================
shop:
economy-unavailable: "<red>Economy is not available.</red>"
not-for-sale: "<red>This item is not for sale.</red>"
cannot-sell: "<red>This item cannot be sold.</red>"
not-vanilla-item: "<red>Only plain vanilla items can be sold. Custom or modified items are not accepted.</red>"
not-enough-currency: "<red>Not enough funds! Need <gold>{price}</gold>."
not-enough-items: "<red>You don't have enough of this item.</red>"
inventory-full: "<red>Your inventory is full.</red>"
buy-success: "<green>Purchased <white>{item} x{amount}</white> for <gold>{price}</gold>."
sell-success: "<green>Sold <white>{item} x{amount}</white> for <gold>{price}</gold>."
sell-total: "<green>Sold <white>{amount}</white> items for <gold>{price}</gold>."
sell-partial: "<green>Sold <white>{amount}</white> items for <gold>{price}</gold> <gray>(partial sale; balance at cap)</gray>"
nothing-to-sell: "<gray>No sellable items found.</gray>"
categories-header: "<yellow>Sell categories:</yellow>"
categories-entry: " <dark_gray>-</dark_gray> <yellow>{id}</yellow> <gray>({name})</gray>"
max-balance: "<red>Your balance is at the maximum. Nothing was sold.</red>"
nothing-in-hand: "<gray>You are not holding anything.</gray>"
invalid-item: "<red>Unknown item.</red>"
invalid-amount: "<red>Invalid amount.</red>"
invalid-category: "<red>Unknown sell category.</red>"
usage-buy: "<yellow>Usage: /sa buy <item> [amount]</yellow>"
usage-price: "<yellow>Usage: /sa price [item]</yellow> <gray>(held item if omitted)</gray>"
usage-worth: "<yellow>Usage: /sa worth [hand|inventory]</yellow> <gray>(hand by default)</gray>"
usage-value: "<yellow>Usage: /sa value [inventory|hand]</yellow> <gray>(inventory line breakdown by default)</gray>"
usage: "<yellow>Usage: /sa shop [gui|buy|sell|sellall|price|worth|value|reload]</yellow>"
price: "<white>{item}</white> | Buy: <green>{buy}</green> | Sell: <red>{sell}</red>"
worth-total: "<gold>Total worth: {total}</gold>"
worth-line: " <gray>•</gray> <white>{item}</white> x{amount} = <gold>{total}</gold>"
value-header: "<gold><bold>Inventory Worth: {total}</bold></gold>"
reloaded: "<green>Shop and prices reloaded.</green>"
search-prompt: "<yellow>Enter shop search filter</yellow> <gray>(item name contains; type clear to reset)</gray>"
sell-preview-confirm: "<gray>Selling <white>{amount}</white> items for ~<gold>{price}</gold> ({currency})...</gray>"
# ==================== DAILY ====================
daily:
claimed: "<green>Daily reward claimed! <gold>{money}</gold>"
cooldown: "<red>Daily reward available in <yellow>{time}</yellow>.</red>"
inventory-full: "<red>Your inventory is full. Free space before claiming your daily reward.</red>"
dupehand:
empty: "<red>You are not holding an item.</red>"
success: "<green>Duplicated held item.</green>"
skull:
usage: "<yellow>Usage: /sa skull <player></yellow>"
given: "<green>Given head of <yellow>{player}</yellow>.</green>"
payall:
usage: "<yellow>Usage: /sa payall <amount> [economy] [-confirm]</yellow>"
confirm: "<yellow>Pay <red>{amount}</red> to <white>{count}</white> online players? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
success: "<green>Paid <gold>{amount}</gold> to <yellow>{count}</yellow> players.</green>"
moneylog:
header: "<gold><bold>Money Log</bold></gold> <gray>(page {page})</gray>"
line: "<gray>{line}</gray>"
tax:
usage: "<yellow>Usage: /sa tax <percent></yellow>"
invalid: "<red>Invalid tax percent.</red>"
applied: "<green>Applied <yellow>{percent}%</yellow> tax. Collected <gold>{total}</gold>."
emojitoggle:
on: "<green>Chat emojis enabled.</green>"
off: "<red>Chat emojis disabled.</red>"
stafflist:
header: "<gold><bold>Staff Online</bold></gold>"
entry: " <gray>•</gray> <yellow>{player}</yellow>"
staffrollcall:
header: "<gold><bold>Staff Roll Call</bold></gold>"
entry: " <yellow>{player}</yellow> <dark_gray>| {world} | {ping}ms | AFK: {afk} | Vanish: {vanish} | Staff: {staffmode}</dark_gray>"
none: "<gray>No staff online.</gray>"
afk-yes: "<red>yes</red>"
afk-no: "<green>no</green>"
vanish-yes: "<red>yes</red>"
vanish-no: "<green>no</green>"
staff-yes: "<aqua>yes</aqua>"
staff-no: "<gray>no</gray>"
vanishlist:
header: "<gold><bold>Vanished Players</bold></gold>"
entry: " <gray>•</gray> <yellow>{player}</yellow> <dark_gray>(weight {weight})</dark_gray>"
gamerules:
header: "<gradient:#5EEAD4:#38BDF8><bold>Gamerules</bold></gradient> <dark_gray>|</dark_gray> <aqua>{world}</aqua>"
no-worlds: "<red>No worlds are loaded.</red>"
line: " <dark_gray>┃</dark_gray> <aqua>{rule}</aqua> <dark_gray>→</dark_gray> {value}"
invalid: "<red>Unknown gamerule.</red>"
not-boolean: "<red><yellow>{rule}</yellow> is not a boolean gamerule.</red>"
not-integer: "<red><yellow>{rule}</yellow> is not an integer gamerule.</red>"
unsupported-type: "<red><yellow>{rule}</yellow> cannot be edited from the GUI.</red>"
toggled: "<green>Set <yellow>{rule}</yellow> to <white>{value}</white>.</green>"
set: "<green>Set <yellow>{rule}</yellow> to <white>{value}</white>.</green>"
usage: "<yellow>Usage: /sa gamerules [gui|list|toggle <rule>|set <rule> <value>]</yellow>"
usage-toggle: "<yellow>Usage: /sa gamerules toggle <rule></yellow>"
usage-set: "<yellow>Usage: /sa gamerules set <rule> <value></yellow>"
world-selected: "<gray>Editing gamerules for world <yellow>{world}</yellow>.</gray>"
performance:
scanning: "<gray>Scanning...</gray>"
laghotspots-header: "<gold><bold>Lag Hotspots</bold></gold>"
chunkactivity-header: "<gold><bold>Active Chunks</bold></gold>"
mobdensity-header: "<gold><bold>Mob Density</bold></gold>"
redstone-header: "<gold><bold>Redstone Hotspots</bold></gold>"
chunk-line: " <gray>•</gray> <yellow>{world}</yellow> <white>{x}, {z}</white> <gray>score {score}</gray>"
xraycheck:
usage: "<yellow>Usage: /sa xraycheck <player></yellow>"
header: "<gold><bold>Mining Statistics: {player}</bold></gold>"
no-data: "<gray>No mining data recorded for <white>{player}</white> yet.</gray>"
stone: "<gray>Stone mined: <white>{count}</white></gray>"
diamonds: "<gray>Diamond ore: <white>{count}</white> <dark_gray>({ratio})</dark_gray></gray>"
debris: "<gray>Ancient debris: <white>{count}</white> <dark_gray>({ratio})</dark_gray></gray>"
diamond-ratio: "<gray>Diamond ratio: <white>{ratio}</white></gray>"
debris-ratio: "<gray>Ancient debris ratio: <white>{ratio}</white></gray>"
suspicious: "<gray>Suspicious paths: <white>{paths}</white> (score <white>{score}</white>)</gray>"
top-ore: " <gray>•</gray> <yellow>{item}</yellow> <white>×{count}</white>"
recent-header: "<gray>Recent ore finds:</gray>"
ore: " <dark_gray>›</dark_gray> <white>{location}</white>"
# ==================== ITEM FILTER ====================
itemfilter:
usage: "<yellow>Usage: /sa itemfilter <add|remove|list|clear> [material|hand]</yellow>"
added: "<green>Added <yellow>{item}</yellow> to your pickup filter.</green>"
removed: "<green>Removed <yellow>{item}</yellow> from your pickup filter.</green>"
already: "<red><yellow>{item}</yellow> is already filtered.</red>"
not-listed: "<red><yellow>{item}</yellow> is not on your filter list.</red>"
empty: "<gray>Your item filter is empty.</gray>"
header: "<gold><bold>Item Filter</bold></gold> <gray>({count})</gray>"
line: " <gray>•</gray> <white>{item}</white>"
cleared: "<green>Item filter cleared.</green>"
limit: "<red>Filter limit reached (<yellow>{max}</yellow> entries).</red>"
need-hand: "<red>Hold an item, or specify a material name.</red>"
# ==================== AUTOPICKUP (magnet /sa autopickup) ====================
autopickup:
on: "<green>Magnet autopickup enabled.</green>"
off: "<red>Magnet autopickup disabled.</red>"
# ==================== AUTOSELL ====================
autosell:
usage: "<yellow>Usage: /sa autosell [gui|add|remove|list|clear] [material|hand]</yellow>"
gui-title: "<green>Autosell</green>"
gui-empty: "<gray>No materials on your autosell list.</gray>"
gui-add-hand: "<green>Add hand item</green>"
gui-add-hand-lore: "<gray>Click to add the item in your hand.</gray>"
gui-clear: "<red>Clear list</red>"
gui-clear-lore: "<gray>Remove all autosell entries.</gray>"
gui-entry-lore: "<gray>Click to remove from autosell.</gray>"
gui-info: "<aqua>Autosell</aqua>"
gui-info-lore: "<gray>Listed items sell automatically on pickup.</gray>"
added: "<green>Added <yellow>{item}</yellow> to autosell.</green>"
removed: "<green>Removed <yellow>{item}</yellow> from autosell.</green>"
already: "<red><yellow>{item}</yellow> is already on autosell.</red>"
not-listed: "<red><yellow>{item}</yellow> is not on your autosell list.</red>"
empty: "<gray>Your autosell list is empty.</gray>"
header: "<gold><bold>Autosell List</bold></gold> <gray>({count})</gray>"
line: " <gray>•</gray> <white>{item}</white>"
cleared: "<green>Autosell list cleared.</green>"
limit: "<red>Autosell limit reached (<yellow>{max}</yellow> entries).</red>"
# ==================== PRIVACY ====================
privacy:
pay-on: "<green>You are now accepting payments.</green>"
pay-off: "<red>You are no longer accepting payments.</red>"
pay-disabled: "<red>That player is not accepting payments.</red>"
msg-on: "<green>You are now accepting private messages.</green>"
msg-off: "<red>You are no longer accepting private messages.</red>"
msg-disabled: "<red>That player is not accepting private messages.</red>"
trade-on: "<green>You are now accepting trade requests.</green>"
trade-off: "<red>You are no longer accepting trade requests.</red>"
trade-disabled: "<red>That player is not accepting trade requests.</red>"
# ==================== TRADE ====================
trade:
usage: "<yellow>Usage: /sa trade <player> | accept | deny | cancel</yellow>"
cannot-self: "<red>You cannot trade with yourself.</red>"
already-in-trade: "<red>You are already in a trade.</red>"
target-busy: "<red>That player is busy.</red>"
too-far: "<red>You are too far away to trade.</red>"
request-sent: "<green>Trade request sent to <yellow>{player}</yellow>.</green>"
request-received: "<yellow>{player}</yellow> wants to trade with you."
no-pending: "<red>You have no pending trade requests.</red>"
accepted: "<green>Trade started with <yellow>{player}</yellow>.</green>"
denied: "<red><yellow>{player}</yellow> declined your trade request.</red>"
you-denied: "<gray>Trade request declined.</gray>"
cancelled: "<red>Trade cancelled.</red>"
cancelled-damage: "<red>Trade cancelled because you took damage.</red>"
expired: "<red>Trade request expired.</red>"
player-offline: "<red>The other player went offline.</red>"
inventory-full: "<red>Trade blocked. <yellow>{player}</yellow> does not have enough inventory space.</red>"
complete: "<green>Trade completed with <yellow>{player}</yellow>.</green>"
countdown-actionbar: "<aqua>Trade completing in <white>{seconds}</white>s…</aqua>"
money-disabled: "<red>Soft money trading is disabled.</red>"
money-prompt: "<yellow>Enter the money amount to offer (or cancel):</yellow>"
money-invalid: "<red>Invalid money amount.</red>"
money-insufficient: "<red>You do not have that much money.</red>"
money-insufficient-other: "<red><yellow>{player}</yellow> does not have enough money for their offer.</red>"
money-no-access: "<red><yellow>{player}</yellow> cannot use that currency.</red>"
money-receiver-full: "<red><yellow>{player}</yellow> cannot receive that much money (near max balance).</red>"
xp-disabled: "<red>XP trading is disabled.</red>"
xp-prompt: "<yellow>Enter XP levels to offer (or cancel):</yellow>"
xp-invalid: "<red>Invalid XP level amount.</red>"
xp-insufficient: "<red>You do not have that many XP levels.</red>"
xp-insufficient-other: "<red><yellow>{player}</yellow> does not have enough XP levels for their offer.</red>"
transfer-failed: "<red>Trade failed while transferring money or XP. Nothing was completed.</red>"
overflow-dropped: "<yellow>Some trade items did not fit and were dropped at your feet.</yellow>"
# ==================== PLAYER VAULTS ====================
vault:
usage: "<yellow>Usage: /sa vault [open|gui|list|autopickup] [args]</yellow>"
invalid-number: "<red>Invalid vault number. You can use vaults 1-<yellow>{max}</yellow>.</red>"
list-header: "<gold><bold>Your Vaults</bold></gold> <gray>(max <white>{count}</white>, autopickup <white>{mode}</white> → #{apvault})</gray>"
list-line: " <gray>•</gray> Vault <yellow>#{vault}</yellow> <dark_gray>|</dark_gray> <white>{used}</white>/<white>{capacity}</white> {bar}"
list-gui-hint: "<gray>Open the picker with <white>/sa vault</white> or <white>/sa vault gui</white>.</gray>"
autopickup-usage: "<yellow>Usage: /sa vault autopickup [off|direct|overflow] | vault <n></yellow>"
autopickup-vault-usage: "<yellow>Usage: /sa vault autopickup vault <number></yellow>"
autopickup-set: "<green>Vault autopickup mode set to <yellow>{mode}</yellow>.</green>"
autopickup-vault-set: "<green>Vault autopickup target set to vault <yellow>#{vault}</yellow>.</green>"
autopickup-mode-denied: "<red>You do not have permission for vault autopickup mode <yellow>{mode}</yellow>.</red>"
blacklist-returned: "<yellow>Some blacklisted items were returned to you.</yellow>"
blacklist-denied: "<red><yellow>{item}</yellow> cannot be stored in vaults.</red>"
admin-usage: "<yellow>Usage: /sa vaultadmin <open|clear|info> <player> [vault|page]</yellow>"
admin-info-header: "<gold><bold>Vaults: <white>{player}</white></bold></gold>"
admin-info-line: "<gray>Max <white>{max}</white> · Rows <white>{rows}</white> · Autopickup <white>{mode}</white> → #{apvault}</gray>"
admin-info-page: " <gray>Page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> vaults</gray>"
admin-info-bad-page: "<red>Invalid page number.</red>"
admin-info-nav-back: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>« Back</yellow></hover></click>"
admin-info-nav-back-disabled: "<dark_gray>« Back</dark_gray>"
admin-info-nav-next: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>Next »</yellow></hover></click>"
admin-info-nav-next-disabled: "<dark_gray>Next »</dark_gray>"
admin-info-nav-page: "<gray>[</gray><white>{page}</white><gray>/</gray><white>{total}</white><gray>]</gray>"
admin-cleared: "<green>Cleared vault <yellow>#{vault}</yellow> for <white>{player}</white>.</green>"
admin-clear-confirm: "<yellow>Clear vault <red>#{vault}</red> for <white>{player}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
admin-open-busy: "<red>That vault is currently open. Close it first.</red>"
already-open: "<red>That vault is already open by someone else. Try again in a moment.</red>"
# ==================== PROFILE ====================
profile:
msg-hint: "<gray>Message <yellow>{player}</yellow> with <white>/msg {player} <message></white></gray>"
pay-hint: "<gray>Pay <yellow>{player}</yellow> with <white>/pay {player} <amount></white></gray>"
spawnmob:
unknown-type: "<red>Unknown mob type: <yellow>{value}</yellow></red>"
unknown-mythic: "<red>Unknown Mythic mob: <yellow>{value}</yellow></red>"
not-living: "<red>That type cannot be spawned as a living mob: <yellow>{value}</yellow></red>"
bad-count: "<red>Count must be between 1 and <yellow>{max}</yellow>.</red>"
bad-spread: "<red>Spread must be between 0 and <yellow>{max}</yellow>.</red>"
denied-type: "<red>Spawning <yellow>{mob}</yellow> is blocked by configuration.</red>"
done: "<green>Spawned <yellow>{spawned}</yellow>× <white>{mob}</white>. Skipped: <gray>{skipped}</gray></green>"
# ==================== MAIL ====================
mail:
sent: "<green>Mail sent to <yellow>{player}</yellow> <gray>(#{id})</gray>.</green>"
received-notify: "<aqua>You have new mail from <yellow>{from}</yellow>! <gray>({count} unread)</gray> Use <white>/sa mail</white>.</aqua>"
join-unread: "<aqua>You have <yellow>{count}</yellow> unread mail message(s). Use <white>/sa mail</white>.</aqua>"
join-unread-actionbar: "<aqua>{count} unread mail. Open /sa mail</aqua>"
inbox-empty: "<gray>Your inbox is empty.</gray>"
list-header: "<yellow>Inbox</yellow> <gray>({count} messages, {unread} unread)</gray>"
list-entry: "<gray>#{id}</gray> <white>{from}</white> <dark_gray>[{status}]</dark_gray> <gray>{preview}</gray>"
read-header: "<yellow>Mail #{id}</yellow> <gray>from <white>{from}</white> · {time}</gray>"
read-body: "<white>{body}</white>"
not-found: "<red>Mail <yellow>#{id}</yellow> was not found.</red>"
cleared: "<green>Deleted mail <yellow>#{id}</yellow>.</green>"
cleared-all: "<green>Cleared <yellow>{count}</yellow> mail message(s).</green>"
marked-read: "<green>Marked mail <yellow>#{id}</yellow> as read.</green>"
empty-body: "<red>Mail body cannot be empty.</red>"
body-too-long: "<red>Mail body is too long (max <yellow>{max}</yellow> characters).</red>"
cannot-self: "<red>You cannot send mail to yourself.</red>"
inbox-full: "<red><yellow>{player}</yellow>'s inbox is full (50 messages).</red>"
clear-all-confirm: "<yellow>Shift-click Clear All to confirm deleting every message.</yellow>"
clear-all-chat-confirm: "<yellow>Delete <red>all</red> mail messages? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
# ==================== INTEGRATIONS ====================
integrations:
mythic-required: "<red>MythicMobs (or MythicCrucible) is required for this action but is not available.</red>"
# ==================== SPAWNER ====================
spawner:
look-at-spawner: "<red>Look at a spawner block within 100 blocks.</red>"
not-spawner: "<red>That block is not a spawner.</red>"
info: "<green>Spawner</green> <gray>{type}</gray> <dark_gray>@</dark_gray> <white>{x}, {y}, {z}</white> <gray>· tick {delay} · radius {radius} · spread {spread} · trigger {trigger} · kills {kills}/{max}</gray>"
type-set: "<green>Spawner type set to <yellow>{type}</yellow>.</green>"
type-set-mythic: "<green>Spawner set to MythicMobs <light_purple>{type}</light_purple>.</green>"
mythic-unavailable: "<red>MythicMobs is not installed or failed to load.</red>"
mythic-cleared: "<yellow>Cleared MythicMobs override. Using vanilla type.</yellow>"
mythic-spawn-failed: "<red>Failed to spawn Mythic mob <yellow>{type}</yellow> from spawner.</red>"
enabled: "<green>Spawner enabled.</green>"
disabled: "<yellow>Spawner disabled. It will not spawn.</yellow>"
prompt-search: "<yellow>Enter a name filter</yellow> <gray>(or 'clear' / 'none'); type cancel to stop</gray>"
tick-set: "<green>Spawn tick set to <yellow>{value}</yellow> ticks.</green>"
tick-failed: "<red>Could not set spawn tick to <yellow>{value}</yellow>.</red>"
radius-set: "<green>Spawn radius set to <yellow>{value}</yellow> blocks.</green>"
spread-set: "<green>Spawn spread set to <yellow>{value}</yellow> mobs.</green>"
trigger-set: "<green>Trigger radius set to <yellow>{value}</yellow>.</green>"
particle-set: "<green>Spawn particle set to <yellow>{value}</yellow>.</green>"
sound-set: "<green>Spawn sound set to <yellow>{value}</yellow>.</green>"
budget-set: "<green>Kill budget set to <yellow>{value}</yellow>.</green>"
budget-reset: "<green>Spawner kill counter reset to 0.</green>"
budget-disabled: "<yellow>Spawner kill budget is disabled in economy config.</yellow>"
delay-set: "<green>Spawner delay set to <yellow>{delay}</yellow> ticks.</green>"
prompt-tick: "<yellow>Enter spawn tick delay</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
prompt-radius: "<yellow>Enter spawn radius</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
prompt-spread: "<yellow>Enter spawn spread (mob count)</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
prompt-trigger: "<yellow>Enter trigger radius</yellow> <gray>({min}-{max}, 0=always, current {current}); type cancel to stop</gray>"
prompt-budget: "<yellow>Enter kill budget</yellow> <gray>(-1=global, 0=unlimited, or 1-{max}; current {current}); type cancel to stop</gray>"
invalid-number: "<red>Enter a whole number between <yellow>{min}</yellow> and <yellow>{max}</yellow>.</red>"
settings-copied: "<green>Spawner settings copied to clipboard.</green>"
settings-pasted: "<green>Pasted spawner settings from clipboard.</green>"
clipboard-empty: "<red>No spawner settings in your clipboard.</red>"
list-empty: "<yellow>No managed spawners with custom settings.</yellow>"
list-header: "<gold>Managed Spawners</gold> <gray>({count})</gray>"
list-entry: " <gray>• <yellow>{world}</yellow> @ <white>{x}, {y}, {z}</white></gray>"
list-teleport: "<green>Teleported to spawner at <yellow>{world}</yellow> <white>{x}, {y}, {z}</white>.</green>"
list-world-unloaded: "<red>That spawner's world is not loaded.</red>"
# ==================== GLOBAL CHAT MUTE ====================
mutechat:
enabled: "<gray>Global chat has been <red>muted</red> by <yellow>{staff}</yellow>.</gray>"
enabled-timed: "<gray>Global chat has been <red>muted</red> by <yellow>{staff}</yellow> for <white>{duration}</white>.</gray>"
disabled: "<gray>Global chat has been <green>unmuted</green> by <yellow>{staff}</yellow>.</gray>"
not-muted: "<red>Global chat is not currently muted.</red>"
already-muted: "<red>Global chat is already muted.</red>"
chat-blocked: "<red>Chat is globally muted by <yellow>{staff}</yellow>. You cannot chat right now.</red>"
# ==================== UNLOAD CHUNKS ====================
unloadchunks:
done: "<green>Unloaded <yellow>{count}</yellow> chunk(s) <gray>({mode} mode)</gray>.</green>"
mode-force: "force"
mode-safe: "safe"
force-confirm: "<yellow>Force-unload all chunks? Run <white>/sa unloadchunks -f -confirm</white> to proceed.</yellow>"
# ==================== RANDOM TP ====================
tprandom:
teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
received: "<gray><yellow>{player}</yellow> teleported to you.</gray>"
no-players: "<red>No other players are online to teleport to.</red>"
# ==================== CHAT ROOMS ====================
chatroom:
gui-create-prompt: "<yellow>Type a room name in chat</yellow> <gray>(optional: name -private). Type cancel to abort.</gray>"
gui-invite-prompt: "<yellow>Type the player name to invite</yellow> <gray>(or cancel).</gray>"
created: "<green>Room <yellow>{name}</yellow> created. <gray>({visibility})</gray></green>"
already-exists: "<red>A room named <yellow>{name}</yellow> already exists.</red>"
name-too-long: "<red>Room name must be 32 characters or fewer.</red>"
invalid-name: "<red>Room name may only contain letters, numbers, underscores, and hyphens.</red>"
not-found: "<red>Room <yellow>{name}</yellow> not found.</red>"
already-member: "<yellow>You are already in room <white>{name}</white>.</yellow>"
locked: "<red>Room <yellow>{name}</yellow> is locked.</red>"
private: "<red>Room <yellow>{name}</yellow> is private. You need an invite.</red>"
joined: "<green>Joined room <yellow>{name}</yellow>.</green>"
joined-mode-hint: "<dark_gray>Your messages now go to the room. Use <yellow>/sa cr toggle</yellow> to switch back to public chat.</dark_gray>"
player-joined: "<gray>[Room] <yellow>{player}</yellow> joined.</gray>"
player-left: "<gray>[Room] <yellow>{player}</yellow> left.</gray>"
player-kicked: "<gray>[Room] <yellow>{player}</yellow> was kicked.</gray>"
left: "<gray>You left room <yellow>{name}</yellow>.</gray>"
not-in-room: "<red>You are not in a room.</red>"
not-owner: "<red>Only the room owner can do that.</red>"
cannot-kick-owner: "<red>You cannot kick the room owner.</red>"
target-not-member: "<red><yellow>{player}</yellow> is not in your room.</red>"
ownership-transferred: "<yellow>You are now the owner of room <white>{name}</white>.</yellow>"
room-deleted: "<gray>[Room] Room <yellow>{name}</yellow> has been deleted.</gray>"
deleted: "<green>Room <yellow>{name}</yellow> deleted.</green>"
list-empty: "<gray>No rooms are currently available.</gray>"
list-header: "<aqua>Chat Rooms</aqua>"
list-entry: " <gray>- <yellow>{name}</yellow> <dark_gray>({count} members, owner: {owner}) {visibility}{locked}</dark_gray></gray>"
invited: "<green>Invited <yellow>{player}</yellow> to room <yellow>{name}</yellow>.</green>"
invite-received: "<yellow>{player}</yellow> <green>has invited you to join room <yellow>{name}</yellow>. Use <gray>/sa cr join {name}</gray> to accept.</green>"
you-were-kicked: "<red>You were kicked from room <yellow>{name}</yellow> by <yellow>{by}</yellow>.</red>"
info-header: "<aqua>Room: {name}</aqua>"
info-owner: " <gray>Owner: <yellow>{owner}</yellow></gray>"
info-visibility: " <gray>Type: <yellow>{visibility}</yellow>{locked}</gray>"
info-members: " <gray>Members: <yellow>{count}</yellow></gray>"
info-members-list: " <gray>Players: <white>{members}</white></gray>"
info-mode: " <gray>Chat mode: <yellow>{mode}</yellow></gray>"
mode-on: "<green>room</green>"
mode-off: "<gray>public</gray>"
mode-toggled: "<gray>Chat mode set to <yellow>{mode}</yellow> for room <yellow>{name}</yellow>.</gray>"
visibility-public: "<green>public</green>"
visibility-private: "<red>private</red>"
tag-locked: " <red>[locked]</red>"
chat-format: "<dark_gray>[<gold>Room: {room}</gold>]</dark_gray> <yellow>{player}</yellow><gray>:</gray> {message}"
locked-set: "<gray>[Room] Room <yellow>{name}</yellow> is now <red>locked</red>.</gray>"
unlocked-set: "<gray>[Room] Room <yellow>{name}</yellow> is now <green>unlocked</green>.</gray>"
usage-create: "<yellow>Usage: /sa cr create <name> [-private]</yellow>"
usage-join: "<yellow>Usage: /sa cr join <name></yellow>"
usage-invite: "<yellow>Usage: /sa cr invite <player></yellow>"
usage-kick: "<yellow>Usage: /sa cr kick <player></yellow>"
usage-delete: "<yellow>Usage: /sa cr delete [name]</yellow>"
usage-lock: "<yellow>Usage: /sa cr lock|unlock</yellow>"
Still stuck? Ask about this page