Default messages.yml
Last updated Oct 28, 2026
Default messages.yml
Shipped defaults from SoapsFloor 1.2.4. After first run, this file lives under plugins/SoapsFloor/.
Updating the jar does not overwrite your live copy. Use this page to compare or reset.
See also: Config Reference · Configuration
# ################################################
# #
# SoapsFloor - Messages #
# #
# Created by AlternativeSoap #
# Website: www.SoapsUniverse.com #
# Support: https://discord.gg/mawAzwFq #
# #
# ################################################
#
# Format: MiniMessage (https://docs.advntr.dev/minimessage)
# Placeholders: {key} - auto-replaced at runtime
# ─── Plugin Prefix ───────────────────────────────────────────────
prefix: "<gradient:#1a1a1a:#3b3b3b>[</gradient><gradient:#f59e0b:#fbbf24>SoapsFloor</gradient><gradient:#3b3b3b:#1a1a1a>]</gradient> "
# ═════════════════════════════════════════════════════════════════
# WAND - Room creation & editing tool
# ═════════════════════════════════════════════════════════════════
wand:
# Position Selection ────────────────────────────────
pos1-set: "<gradient:#10b981:#34d399>Position 1</gradient> <#9ca3af>set at <gradient:#f59e0b:#fbbf24>{x}, {y}, {z}</gradient>"
pos2-set: "<gradient:#10b981:#34d399>Position 2</gradient> <#9ca3af>set at <gradient:#f59e0b:#fbbf24>{x}, {y}, {z}</gradient>"
pos2-hint: "<#9ca3af>Now right-click to set position 2"
pos-step-invalid: "<gradient:#ef4444:#dc2626>✘ You cannot set positions at this step!</gradient>"
pos1-required: "<gradient:#ef4444:#dc2626>✘ You must set position 1 first!</gradient>"
# Lobby spawn (optional wait marker) ───────────────
lobby-prompt: "<gradient:#10b981:#34d399>Optional: set a lobby wait spawn.</gradient>"
lobby-prompt-hint: "<#9ca3af>Right-click a block for join and waiting. Type <#fbbf24>skip</#fbbf24> to keep joins on entry. The run still starts at entry."
lobby-set: "<gradient:#10b981:#34d399>✓ Lobby spawn set!</gradient> <#9ca3af>({x}, {y}, {z})"
lobby-skipped: "<#9ca3af>Lobby skipped. Joins use the entry spawn."
# Schematics & Floors ──────────────────────────────
schematic-not-found: "<gradient:#ef4444:#dc2626>✘ Schematic '<#fbbf24>{schematic}</#fbbf24>' not found!</gradient> <#9ca3af>Check schematics folder"
# Session Management ───────────────────────────────
no-session: "<gradient:#ef4444:#dc2626>✘ No active wand session!</gradient> <#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf wand create <name></gradient>"
already-in-session: "<gradient:#ef4444:#dc2626>✘ Already in wand session!</gradient> <#9ca3af>Finish current session first"
room-exists: "<gradient:#ef4444:#dc2626>✘ Room '<#fbbf24>{room}</#fbbf24>' already exists!</gradient>"
room-load-failed: "<gradient:#ef4444:#dc2626>✘ Failed to load room '<#fbbf24>{room}</#fbbf24>'!</gradient>"
session-active: "<gradient:#ef4444:#dc2626>✘ You must finish or cancel your current wand session first!</gradient>"
delete-success: "<gradient:#10b981:#34d399>✓ Successfully deleted room: <#fbbf24>{room}</gradient>"
# Edit Info ─────────────────────────────────────────
edit-info-header: "<gradient:#10b981:#34d399>✓ Editing</gradient> <gradient:#f59e0b:#fbbf24>{room}</gradient> <#9ca3af>({floors} floors)"
edit-info-room: ""
edit-info-floors: ""
edit-info-hotbar: "<#9ca3af>Hotbar: <#f59e0b>Floor Editor</#f59e0b> <#9ca3af>(mobs/locks), <#ef4444>Falling Hazard / rising flood</#ef4444><#9ca3af>, <#38bdf8>Room Settings</#38bdf8> <#9ca3af>(direction, enclosure, lives)."
edit-info-list: "<#9ca3af>Shift+Right-click the wand to add floors from schematics or packs."
edit-info-done: "<#9ca3af>Type <#fbbf24>list</#fbbf24> to review floors, <#10b981>done</#10b981> to save, or <#ef4444>/sf wand cancel</#ef4444> to discard."
edit-info-cancel: ""
# Validation ────────────────────────────────────────
validation-no-starter: "<gradient:#ef4444:#dc2626>✘ You must set the starter room positions first!</gradient>"
validation-no-floors: "<gradient:#ef4444:#dc2626>✘ You must create at least one floor!</gradient>"
validation-not-in-mode: "<gradient:#ef4444:#dc2626>✘ You must be in wand editor mode to use this command!</gradient>"
validation-use-create: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf wand create <room></gradient> <#9ca3af>or <gradient:#f59e0b:#fbbf24>/sf wand edit <room></gradient> <#9ca3af>first"
# Status Output ─────────────────────────────────────
status-divider: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
status-header: "<gradient:#f59e0b:#fbbf24><bold>Wand Session Status</bold></gradient>"
status-room-id: "<#9ca3af>Room ID: <#fbbf24>{room}"
status-step: "<#9ca3af>Current Step: <#fbbf24>{step}"
status-floors: "<#9ca3af>Floors Created: <#fbbf24>{count}"
status-starter-configured: "<#9ca3af>Starter Room: <gradient:#10b981:#34d399>Configured</gradient>"
status-starter-not-configured: "<#9ca3af>Starter Room: <#ef4444>Not configured"
# List Output ───────────────────────────────────────
list-divider: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
list-header: "<gradient:#f59e0b:#fbbf24><bold>Floors in {room}</bold></gradient>"
list-no-floors: "<#9ca3af>No floors created yet."
list-floor-entry: "<#9ca3af>Floor <#fbbf24>{index}<#9ca3af>: <gradient:#10b981:#34d399>{mobs} mob type(s)</gradient>"
# Floor Configuration Output ────────────────────────
floors-divider: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━</gradient>"
floors-customize-hint: "<#9ca3af>In chat, type <#fbbf24><schematic> <n></#fbbf24> or <#d946ef>pack:<id> <n></#d946ef>."
floors-customize-hint-gui: "<#9ca3af>Use the browser to pick schematics or packs, or type <#fbbf24><schematic> <n></#fbbf24> / <#d946ef>pack:<id> <n></#d946ef> in chat."
floors-done-hint: "<#9ca3af>Type <#fbbf24>done</#fbbf24> when you are finished."
# Wand Settings Help ───────────────────────────────
settings-divider: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
settings-header: "<gradient:#f59e0b:#fbbf24><bold>Wand Editor Settings</bold></gradient>"
settings-cmd-feedback: "<#fbbf24>/sf wand settings toggle feedback"
settings-cmd-feedback-desc: " <#9ca3af>Toggle between chat and actionbar messages"
settings-cmd-actionbar: "<#fbbf24>/sf wand settings toggle actionbar"
settings-cmd-actionbar-desc: " <#9ca3af>Toggle actionbar hints on/off"
settings-cmd-preview: "<#fbbf24>/sf wand settings toggle preview"
settings-cmd-preview-desc: " <#9ca3af>Toggle floor preview ghost blocks"
# Setting Toggles ──────────────────────────────────
toggle-feedback-enabled: "<gradient:#10b981:#34d399>✔ Editor feedback mode:</gradient> <#fbbf24>Chat"
toggle-feedback-enabled-desc: "<#9ca3af>Item adjustments will now appear in chat"
toggle-feedback-disabled: "<gradient:#10b981:#34d399>✔ Editor feedback mode:</gradient> <#fbbf24>Actionbar"
toggle-feedback-disabled-desc: "<#9ca3af>Item adjustments will now appear in actionbar"
toggle-actionbar-enabled: "<gradient:#10b981:#34d399>✔ Actionbar hints:</gradient> <#fbbf24>Enabled"
toggle-actionbar-enabled-desc: "<#9ca3af>Hints will be shown in actionbar"
toggle-actionbar-disabled: "<#ef4444>✘ Actionbar hints: <#fbbf24>Disabled"
toggle-actionbar-disabled-desc: "<#9ca3af>Hints will no longer be shown"
toggle-preview-enabled: "<gradient:#10b981:#34d399>✔ Floor previews:</gradient> <#fbbf24>Enabled"
toggle-preview-enabled-desc: "<#9ca3af>Ghost blocks will be shown for floor layouts"
toggle-preview-disabled: "<#ef4444>✘ Floor previews: <#fbbf24>Disabled"
toggle-preview-disabled-desc: "<#9ca3af>Ghost blocks will no longer be shown"
toggle-unknown-setting: "<gradient:#ef4444:#dc2626>✘ Unknown setting: {setting}</gradient>"
# Wand Help ────────────────────────────────────────
help-divider: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
help-header: "<gradient:#f59e0b:#fbbf24><bold>SoapsFloor Wand Commands</bold></gradient>"
help-create: "<#fbbf24>/sf wand create <room_id> <#9ca3af>- Start room creation"
help-edit: "<#fbbf24>/sf wand edit <room_id> <#9ca3af>- Edit existing room"
help-remove: "<#fbbf24>/sf wand remove <room_id> <#9ca3af>- Delete a room"
help-status: "<#fbbf24>/sf wand status <#9ca3af>- View current session status"
help-list: "<#fbbf24>/sf wand list <#9ca3af>- List all created rooms"
help-floors: "<#fbbf24>/sf wand floors <#9ca3af>- Show floor configuration"
help-settings: "<#fbbf24>/sf wand settings <#9ca3af>- View editor settings"
help-finish: "<#fbbf24>/sf finish <#9ca3af>or <#fbbf24>/sf wand finish|leave <#9ca3af>- Complete and save room"
help-cancel: "<#fbbf24>/sf wand cancel <#9ca3af>- Cancel current session"
# ═════════════════════════════════════════════════════════════════
# GAMEPLAY - In-dungeon messages
# ═════════════════════════════════════════════════════════════════
gameplay:
# Protection ───────────────────────────────────────
block-break-denied: "<gradient:#ef4444:#dc2626>✘ You cannot break blocks during a dungeon run!</gradient>"
block-place-denied: "<gradient:#ef4444:#dc2626>✘ You cannot place blocks during a dungeon run!</gradient>"
item-blacklisted: "<gradient:#ef4444:#dc2626>✘ That item cannot be used inside a dungeon!</gradient>"
# Waiting & Lobby ──────────────────────────────────
waiting-started: "<gradient:#06b6d4:#3b82f6>⏱ Waiting for players...</gradient> <#9ca3af>({remaining}s remaining)"
waiting-player-joined: "<gradient:#10b981:#34d399>✓</gradient> <gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>joined! <#6b7280>({count}/{max} players)"
waiting-timer-tick: "<gradient:#f59e0b:#fbbf24>⏱ {remaining}s</gradient> <#9ca3af>until room locks..."
waiting-room-locked: "<gradient:#ef4444:#dc2626>🔒 Room locked!</gradient> <#9ca3af>Starting countdown..."
lobby-to-entry: "<#9ca3af>Moved to entry. Countdown starts now."
waiting-need-more-players: "<gradient:#f59e0b:#fbbf24>⏳ Waiting for players...</gradient> <#9ca3af>({current}/{min} required)"
party-scaling-active: "<gradient:#a855f7:#c084fc>⚔ Party scaling active</gradient> <#9ca3af>({players} players. Harder mobs and better loot.)"
waiting-room-full: "<gradient:#ef4444:#dc2626>✘ Room is full!</gradient> <#9ca3af>({max} players max)"
waiting-room-locked-join: "<gradient:#ef4444:#dc2626>✘ Room is locked!</gradient> <#9ca3af>The game is starting."
# Countdown ─────────────────────────────────────────
countdown-title: "<red><bold>{seconds}</bold></red>"
countdown-subtitle: "<#9ca3af>Floor drops in..."
countdown-actionbar: "<#fbbf24>Floor drops in <#ef4444>{seconds} <#fbbf24>seconds..."
countdown-subtitle-climb: "<#9ca3af>Next floor opens in..."
countdown-actionbar-climb: "<#fbbf24>Next floor opens in <#ef4444>{seconds} <#fbbf24>seconds..."
countdown-go-title: "<red><bold>GO!</bold></red>"
countdown-go-subtitle: "<#9ca3af>Good luck!"
# Floor Progression ─────────────────────────────────
floor-starting: "<gradient:#10b981:#34d399>✓ Floor {floor} started!</gradient> <#9ca3af>Clear all mobs to proceed"
floor-starting-climb-escape: "<gradient:#38bdf8:#0ea5e9>✓ Climb started!</gradient> <#9ca3af>Reach the top and escape the rising flood."
floor-starting-climb-clear: "<gradient:#38bdf8:#0ea5e9>✓ Climb started!</gradient> <#9ca3af>Clear each floor's mobs to advance. There is no rising flood."
floor-paste-failed: "<gradient:#ef4444:#dc2626>✘ Floor failed to paste.</gradient> <#9ca3af>The run was cancelled. Tell staff to check the schematic."
floor-cleared: "<gradient:#10b981:#34d399>✓ Floor {floor} cleared!</gradient> <#9ca3af>Dropping to next floor..."
floor-cleared-climb: "<gradient:#10b981:#34d399>✓ Floor {floor} cleared!</gradient> <#9ca3af>Opening the next floor..."
floor-next: "<gradient:#f59e0b:#fbbf24>⚡ Floor {floor}</gradient> <#6b7280>•</#6b7280> <gradient:#ef4444:#dc2626>{mobs} mobs</gradient> <#9ca3af>to clear!"
floor-next-climb-escape: "<gradient:#38bdf8:#0ea5e9>⚡ Segment {floor}</gradient> <#6b7280>•</#6b7280> <gradient:#ef4444:#dc2626>{mobs} mobs</gradient><#9ca3af>. Keep climbing!"
connector-opened: "<gradient:#38bdf8:#0ea5e9>⬆ Path opened!</gradient> <#9ca3af>Climb up. The party needs to reach the next floor."
connector-closed: "<gradient:#10b981:#34d399>✓ Party up.</gradient> <#9ca3af>Connector cleared."
connector-stay: "<#9ca3af>After clear is Stay. Use the stairs or ladders built into your schematics."
connector-stair-missing: "<gradient:#f59e0b:#fbbf24>⚠ No stair for this climb-height.</gradient> <#9ca3af>Falling back to a ladder."
connector-stair-fallback-ladder: "<gradient:#f59e0b:#fbbf24>⚠ Stair pack had no match.</gradient> <#9ca3af>Placed a full ladder instead."
connector-party-actionbar: "<#38bdf8>⬆ Upstairs <#fbbf24>{up}</#fbbf24><#6b7280>/</#6b7280><#fbbf24>{total}</#fbbf24>"
connector-timeout-warn: "<gradient:#f59e0b:#fbbf24>⏱ Move up!</gradient> <#9ca3af>Stragglers will be teleported soon."
connector-timeout: "<gradient:#f59e0b:#fbbf24>⏱ Time's up.</gradient> <#9ca3af>Teleported everyone to the next floor."
# Victory ───────────────────────────────────────────
victory-header: ""
victory-title: "<gradient:#f59e0b:#fbbf24>✦ Dungeon cleared:</gradient> <gradient:#f59e0b:#fbbf24>{room}</gradient>"
victory-room: ""
victory-completed: ""
victory-time: ""
victory-stats-header: ""
victory-summary: "<#9ca3af>Time <gradient:#f59e0b:#fbbf24>{time}</gradient>. <gradient:#f59e0b:#fbbf24>{floors}</gradient> floors. <gradient:#f59e0b:#fbbf24>{kills}</gradient> kills."
victory-mobs-defeated: ""
victory-total-mobs: ""
victory-your-kills: "<#9ca3af>Your kills: <gradient:#f59e0b:#fbbf24>{kills}</gradient>"
victory-contributions: ""
victory-player-kills: "<#d1d5db>{player}: <gradient:#f59e0b:#fbbf24>{kills}</gradient> <#6b7280>({percentage}%)"
victory-floors-cleared: ""
victory-footer: ""
# Failure / lives ───────────────────────────────────
dungeon-failed: "<gradient:#ef4444:#dc2626>✘ You fell into the void! Dungeon failed.</gradient>"
flood-overhead: "<gradient:#ef4444:#dc2626>✘ The flood closed over you!</gradient>"
run-ended: "<gradient:#ef4444:#dc2626>✘ Run over.</gradient> <#9ca3af>No fighters left."
lives-status: "<#9ca3af>Party lives <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{remaining}</gradient><#6b7280>/</#6b7280><#9ca3af>{total}"
lives-status-unlimited: "<#9ca3af>Party lives <#6b7280>·</#6b7280> <gradient:#10b981:#34d399>Unlimited</gradient>"
lives-start: "<#9ca3af>This run has <gradient:#f59e0b:#fbbf24>{remaining}</gradient> shared <#9ca3af>lives."
lives-start-unlimited: "<#9ca3af>This run has <gradient:#10b981:#34d399>unlimited</gradient> <#9ca3af>lives."
lives-spent: "<gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>went down. Lives left: <gradient:#f59e0b:#fbbf24>{remaining}</gradient><#6b7280>/</#6b7280><#9ca3af>{total}"
lives-spent-last: "<gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>went down. <gradient:#ef4444:#dc2626>Last life used.</gradient> <#9ca3af>Next death is out."
lives-spent-unlimited: "<gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>went down and respawned."
lives-last-title: "<gradient:#ef4444:#dc2626><bold>LAST LIFE</bold></gradient>"
lives-last-subtitle: "<#9ca3af>One shared life left"
lives-last-used-subtitle: "<#9ca3af>Next death is out"
lives-spectate-title: "<gradient:#ef4444:#dc2626><bold>OUT OF LIVES</bold></gradient>"
lives-spectate-subtitle: "<#9ca3af>Spectating until the run ends"
lives-wipe-title: "<gradient:#ef4444:#dc2626><bold>OUT OF LIVES</bold></gradient>"
lives-wipe-subtitle: "<#9ca3af>Run over"
lives-wipe-title-party: "<gradient:#ef4444:#dc2626><bold>PARTY WIPED</bold></gradient>"
lives-wipe-subtitle-party: "<#9ca3af>No fighters left"
lives-out: "<gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>is out. <gradient:#f59e0b:#fbbf24>{fighters}</gradient> <#9ca3af>still fighting."
lives-fighters: "<#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{fighters}</gradient><#6b7280>/</#6b7280><#9ca3af>{party} fighting"
out-of-lives-spectate: "<gradient:#ef4444:#dc2626>✘ No lives left!</gradient> <#9ca3af>You are spectating until the run ends."
party-wiped: "<gradient:#ef4444:#dc2626>✘ Party wiped!</gradient> <#9ca3af>No fighters left. Ending the run."
solo-wiped: "<gradient:#ef4444:#dc2626>✘ Out of lives!</gradient> <#9ca3af>Run over."
spectator-leash: "<#9ca3af>Stay near the current floor while spectating."
lives-not-in-session: "<gradient:#ef4444:#dc2626>✘ You are not in a dungeon run.</gradient>"
# Mob Counter ───────────────────────────────────────
mobs-remaining-actionbar: "<#fbbf24>⚔ <#9ca3af>Mobs Remaining: <#ef4444>{remaining}"
mobs-remaining-chat: "<#f59e0b>⚔ <#9ca3af>Mobs Remaining: <gradient:#ef4444:#dc2626>{remaining}</gradient>"
mobs-remaining-bossbar: "<#fbbf24>⚔ <#9ca3af>Mobs Remaining: <#ef4444>{remaining}"
mobs-cleared-actionbar: "<gradient:#10b981:#34d399>✓ Floor Cleared!</gradient>"
mobs-cleared-chat: "<gradient:#10b981:#34d399>✓</gradient> <#9ca3af>Floor Cleared!"
mobs-cleared-bossbar: "<gradient:#10b981:#34d399>✓ Floor Cleared!</gradient>"
# ═════════════════════════════════════════════════════════════════
# LOBBY - Ready check, skip vote, spectate, reconnect
# ═════════════════════════════════════════════════════════════════
lobby:
ready-hint: "<#9ca3af>Ready <#fbbf24>{ready}/{total}</#fbbf24>. Type <#fbbf24>/sf ready</#fbbf24> when you are set, or <#fbbf24>/sf skip</#fbbf24> to vote to end the wait."
ready-actionbar: "<#9ca3af>Ready <#fbbf24>{ready}/{total}</#fbbf24> <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{remaining}s</gradient>"
ready-actionbar-plain: "<#9ca3af>Ready <#fbbf24>{ready}/{total}</#fbbf24>"
ready-on: "<gradient:#10b981:#34d399>✓ {player} is ready</gradient> <#6b7280>({ready}/{total})"
ready-off: "<#9ca3af>{player} is no longer ready <#6b7280>({ready}/{total})"
all-ready: "<gradient:#10b981:#34d399>✓ Everyone is ready.</gradient> <#9ca3af>Ending the wait."
ready-disabled: "<#9ca3af>Ready check is disabled on this server."
skip-disabled: "<#9ca3af>Skip voting is disabled on this server."
skip-voted: "<#fbbf24>{player}</#fbbf24> <#9ca3af>voted to skip the wait <#6b7280>({votes}/{need})"
skip-already: "<#9ca3af>You already voted to skip."
skip-passed: "<gradient:#10b981:#34d399>✓ Skip vote passed.</gradient> <#9ca3af>Ending the wait."
not-in-lobby: "<#ef4444>✘ You are not in a dungeon lobby."
not-waiting: "<#9ca3af>You can only ready or skip while the waiting timer is running."
spectators-cannot-vote: "<#9ca3af>Spectators cannot ready or skip."
spectate-joined: "<gradient:#06b6d4:#3b82f6>✓ Spectating <#fbbf24>{room}</#fbbf24>.</gradient> <#9ca3af>Type /sf leave to exit."
spectate-broadcast: "<#9ca3af>{player} is spectating this run."
spectate-no-session: "<#ef4444>✘ That room has no active session to spectate."
spectate-unavailable: "<#ef4444>✘ You cannot spectate this room right now."
spectate-full: "<#ef4444>✘ Spectator slots are full.</#ef4444> <#9ca3af>({max} max)"
reconnect-hold: "<#9ca3af>{player} disconnected. Holding their slot for <#fbbf24>{seconds}s</#fbbf24>."
reconnect-success: "<gradient:#10b981:#34d399>✓ Reconnected to <#fbbf24>{room}</#fbbf24>.</gradient>"
reconnect-broadcast: "<gradient:#10b981:#34d399>✓ {player} reconnected.</gradient>"
# ═════════════════════════════════════════════════════════════════
# WEAKNESS - Challenge modifier voting system
# ═════════════════════════════════════════════════════════════════
weakness:
# Voting presentation ──────────────────────────────
vote-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
vote-title: " <gradient:#ef4444:#dc2626><bold>☠ CHOOSE YOUR WEAKNESS ☠</bold></gradient>"
vote-subtitle: "<#9ca3af>Harder challenges can grant extra reward table rolls."
vote-option: " <click:run_command:/sf vote {index}><hover:show_text:'<#9ca3af>Click to vote for {name}'><gradient:#f59e0b:#fbbf24>[{index}]</gradient> {name} <#6b7280>· <#9ca3af>{description} <#6b7280>(x{multiplier} rolls)</hover></click>"
vote-no-weakness: " <click:run_command:/sf vote {index}><hover:show_text:'<#9ca3af>Click to vote for No Weakness'><gradient:#10b981:#34d399>[{index}]</gradient> <gradient:#10b981:#34d399>✓ No Weakness</gradient> <#6b7280>· <#9ca3af>Normal roll count <#6b7280>(x1.0)</hover></click>"
vote-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
vote-timer: "<#9ca3af>⏱ Vote ends in <gradient:#f59e0b:#fbbf24>{remaining}s</gradient>"
vote-cast: "<gradient:#10b981:#34d399>✓</gradient> <#9ca3af>Voted for {name}!"
vote-changed: "<gradient:#f59e0b:#fbbf24>↻</gradient> <#9ca3af>Changed vote to {name}!"
vote-already: "<#9ca3af>You already voted for this option."
vote-spectators: "<#9ca3af>Spectators cannot vote on a weakness."
vote-invalid: "<gradient:#ef4444:#dc2626>✘ Invalid vote option!</gradient>"
vote-not-active: "<gradient:#ef4444:#dc2626>✘ No active vote in your room!</gradient>"
# Vote results ─────────────────────────────────────
result-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
result-title: " <gradient:#ef4444:#dc2626><bold>☠ WEAKNESS SELECTED ☠</bold></gradient>"
result-winner: " {name} <#6b7280>· <#9ca3af>{description}"
result-multiplier: " <#9ca3af>Reward roll multiplier: <gradient:#f59e0b:#fbbf24>x{multiplier}</gradient>"
result-votes: " <#6b7280>({votes} vote{plural})"
result-no-weakness: " <gradient:#10b981:#34d399><bold>✓ NO WEAKNESS</bold></gradient>"
result-no-weakness-desc: " <#9ca3af>Normal reward roll count. No challenge modifier."
result-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
# Active weakness display ──────────────────────────
applied: "<gradient:#ef4444:#dc2626>☠ Weakness active:</gradient> {name} <#6b7280>(x{multiplier} reward rolls)"
# ═════════════════════════════════════════════════════════════════
# ROOM - Join/leave/list commands
# ═════════════════════════════════════════════════════════════════
room:
left-session: "<gradient:#10b981:#34d399>✓ You have left the room session.</gradient>"
no-exit-point: "<#fbbf24>⚠ No exit point set for this room.</#fbbf24> <#9ca3af>Re-edit and mark exit with the wand."
not-in-session: "<gradient:#ef4444:#dc2626>✘ You are not in a room session!</gradient>"
room-in-use: "<gradient:#ef4444:#dc2626>✘ Cannot delete this room while a session is active.</gradient>"
deleted: "<gradient:#10b981:#34d399>✓ Room '<gradient:#f59e0b:#fbbf24>{room}</gradient>' has been deleted!</gradient>"
failed-to-load: "<gradient:#ef4444:#dc2626>✘ Failed to load room data!</gradient>"
waiting-for-players: "<#9ca3af>Waiting for more players..."
# Welcome Block ────────────────────────────────────
welcome-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
welcome-title: "<gradient:#f59e0b:#fbbf24><bold>Entering dungeon</bold></gradient>"
welcome-room: "<gradient:#f59e0b:#fbbf24><bold>{room}</bold></gradient>"
welcome-floors: "<#9ca3af>Floors: <#d1d5db>{floors}"
welcome-locked: "<#9ca3af>{free} free floors, {locked} locked. The host can buy access in the lobby."
welcome-mobs: "<#9ca3af>Estimated enemies: <gradient:#ef4444:#dc2626>~{mobs}</gradient>"
welcome-difficulty: "<#9ca3af>Difficulty: {difficulty}"
welcome-luck: "<gradient:#10b981:#34d399>Good luck.</gradient>"
welcome-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
# Difficulty Labels ─────────────────────────────────
difficulty-easy: "<gradient:#10b981:#34d399>Easy</gradient>"
difficulty-medium: "<gradient:#f59e0b:#fbbf24>Medium</gradient>"
difficulty-hard: "<gradient:#f59e0b:#d97706>Hard</gradient>"
difficulty-extreme: "<gradient:#ef4444:#dc2626>Extreme</gradient>"
difficulty-nightmare: "<gradient:#ef4444:#991b1b><bold>NIGHTMARE</bold></gradient>"
# List ──────────────────────────────────────────────
list-header: "<gradient:#f59e0b:#fbbf24>━━━ Available Rooms ━━━</gradient>"
list-entry: "<#f59e0b>• <gradient:#f59e0b:#fbbf24>{room}</gradient> <#6b7280>• <#9ca3af>{floors} floors <#6b7280>• {difficulty}"
list-empty: "<#9ca3af>No rooms available. <#6b7280>Create one with <gradient:#f59e0b:#fbbf24>/sf wand create <name></gradient>"
list-hint: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf list</gradient> <#9ca3af>to see all rooms"
list-footer: "<gradient:#f59e0b:#fbbf24>━━━━━━━━━━━━━━━━━━━━━</gradient>"
list-join-hint: "<#9ca3af>Click a room to join, or type <gradient:#f59e0b:#fbbf24>/sf join <room></gradient>"
# Info ──────────────────────────────────────────────
info-header: "<gradient:#06b6d4:#3b82f6>━━━ Room Info: {room} ━━━</gradient>"
info-floors: "<#9ca3af>Floors: <gradient:#f59e0b:#fbbf24>{floors}</gradient>"
info-difficulty: "<#9ca3af>Difficulty: {difficulty}"
info-max-players: "<#9ca3af>Max Players: <gradient:#f59e0b:#fbbf24>{max}</gradient>"
info-status: "<#9ca3af>Status: {status}"
info-footer: "<gradient:#06b6d4:#3b82f6>━━━━━━━━━━━━━━━━━━━━━━</gradient>"
# Help ──────────────────────────────────────────────
help-header: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
help-title: "<gradient:#f59e0b:#fbbf24><bold>Room Commands</bold></gradient>"
help-join: "<gradient:#f59e0b:#fbbf24>/sf join <room></gradient> <#6b7280>• <#9ca3af>Join a room"
help-spectate: "<gradient:#06b6d4:#3b82f6>/sf spectate <room></gradient> <#6b7280>• <#9ca3af>Watch without taking a fighter slot"
help-ready: "<gradient:#f59e0b:#fbbf24>/sf ready</gradient> <#6b7280>• <#9ca3af>Toggle ready in the waiting lobby"
help-skip: "<gradient:#f59e0b:#fbbf24>/sf skip</gradient> <#6b7280>• <#9ca3af>Vote to end the waiting timer early"
help-quickjoin: "<gradient:#10b981:#34d399>/sf quickjoin</gradient> <#6b7280>• <#9ca3af>Join any open room (or queue if full)"
help-list: "<gradient:#06b6d4:#3b82f6>/sf list</gradient> <#6b7280>• <#9ca3af>List all rooms"
help-start: "<gradient:#f59e0b:#fbbf24>/sf start</gradient> <#6b7280>• <#9ca3af>Host: start the lobby when auto-start is off"
help-leave: "<gradient:#06b6d4:#3b82f6>/sf leave</gradient> <#6b7280>• <#9ca3af>Leave room or leave the queue"
help-info: "<gradient:#06b6d4:#3b82f6>/sf info <room></gradient> <#6b7280>• <#9ca3af>View room details"
help-delete: "<gradient:#ef4444:#dc2626>/sf delete <room></gradient> <#6b7280>• <#9ca3af>Delete a room"
help-footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
# ═════════════════════════════════════════════════════════════════
# JOIN SIGNS
# ═════════════════════════════════════════════════════════════════
sign:
created: "<gradient:#10b981:#34d399>✓ Join sign created for '<gradient:#f59e0b:#fbbf24>{room}</gradient>'.</gradient>"
removed: "<gradient:#10b981:#34d399>✓ Join sign for '<gradient:#f59e0b:#fbbf24>{room}</gradient>' removed.</gradient>"
unknown-room: "<gradient:#ef4444:#dc2626>✘ Unknown room '<#fbbf24>{room}</#fbbf24>'.</gradient> <#9ca3af>Use /sf list."
no-permission: "<gradient:#ef4444:#dc2626>✘ No permission to create join signs.</gradient>"
break-denied: "<gradient:#ef4444:#dc2626>✘ You can't break this join sign.</gradient> <#9ca3af>Needs <gradient:#f59e0b:#fbbf24>soapsfloor.admin.sign.break</gradient>"
# ═════════════════════════════════════════════════════════════════
# QUICK JOIN / QUEUE
# ═════════════════════════════════════════════════════════════════
queue:
disabled: "<gradient:#ef4444:#dc2626>✘ Quick join is disabled.</gradient>"
no-rooms: "<gradient:#ef4444:#dc2626>✘ No rooms available to join right now.</gradient>"
joined: "<gradient:#10b981:#34d399>✓ Queued!</gradient> <#9ca3af>Position <gradient:#f59e0b:#fbbf24>{position}/{total}</gradient>"
already: "<#9ca3af>Already in queue. Position <gradient:#f59e0b:#fbbf24>{position}/{total}</gradient>"
left: "<gradient:#10b981:#34d399>✓ Left the queue.</gradient>"
leave-hint: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf leave</gradient> <#9ca3af>to leave the queue."
matched: "<gradient:#10b981:#34d399>✓ Spot found!</gradient> <#9ca3af>Joining <gradient:#f59e0b:#fbbf24>{room}</gradient>..."
position-update: "<#9ca3af>Queue position: <gradient:#f59e0b:#fbbf24>{position}/{total}</gradient>"
timeout: "<gradient:#ef4444:#dc2626>✘ Removed from queue</gradient> <#9ca3af>(timed out). Use /sf quickjoin again."
full-hint: "<#9ca3af>Use <gradient:#10b981:#34d399>/sf quickjoin</gradient> <#9ca3af>to queue for the next open spot."
# ═════════════════════════════════════════════════════════════════
# ERRORS - Shared error messages
# ═════════════════════════════════════════════════════════════════
error:
only-players: "<gradient:#ef4444:#dc2626>✘ This command can only be used by players!</gradient>"
console-only: "<gradient:#ef4444:#dc2626>✘ This command can only be used by players!</gradient> <#9ca3af>Use: /sf reload, /sf help"
console-help: "<gradient:#f59e0b:#fbbf24>SoapsFloor Commands:</gradient> <#9ca3af>/sf reload, /sf help, /sf version"
no-permission: "<gradient:#ef4444:#dc2626>✘ No permission!</gradient>"
invalid-usage: "<gradient:#ef4444:#dc2626>✘ Invalid usage!</gradient>\n<#9ca3af>Usage: <gradient:#f59e0b:#fbbf24>{usage}</gradient>"
room-not-found: "<gradient:#ef4444:#dc2626>✘ Room '<#fbbf24>{room}</#fbbf24>' not found!</gradient>"
room-not-found-hint: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf list</gradient> <#9ca3af>to see available rooms."
already-in-session: "<gradient:#ef4444:#dc2626>✘ You are already in a room session!</gradient>"
already-in-session-hint: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf leave</gradient> <#9ca3af>to leave your current session."
in-editor: "<gradient:#ef4444:#dc2626>✘ Finish the wand editor first.</gradient>"
in-editor-hint: "<#9ca3af>Type <#10b981>done</#10b981> / <#fbbf24>/sf wand finish</#fbbf24> to save, or <#ef4444>/sf wand cancel</#ef4444> to discard."
room-session-active: "<gradient:#ef4444:#dc2626>✘ Cannot edit '<#fbbf24>{room}</#fbbf24>' while a run is active.</gradient>"
room-being-edited: "<gradient:#ef4444:#dc2626>✘ '<#fbbf24>{room}</#fbbf24>' is open in the wand editor.</gradient> <#9ca3af>Try again after they finish."
session-ending: "<gradient:#ef4444:#dc2626>✘ This run is finishing or celebrating.</gradient> <#9ca3af>Wait for it to clear, then join again."
session-in-progress: "<gradient:#ef4444:#dc2626>✘ Session already started!</gradient> <#9ca3af>Join-in-progress is disabled"
editor-no-floors: "<gradient:#ef4444:#dc2626>✘ Add floors before configuring!</gradient>"
unknown-setting: "<gradient:#ef4444:#dc2626>✘ Unknown setting: <#fbbf24>{setting}</gradient>"
delete-usage: "<gradient:#ef4444:#dc2626>✘ Usage:</gradient> <gradient:#f59e0b:#fbbf24>/sf delete <room></gradient>"
command-blocked: "<gradient:#ef4444:#dc2626>You cannot use that command during a dungeon run.</gradient>"
# ═════════════════════════════════════════════════════════════════
# EDITOR MODE - Room editor UI & feedback
# ═════════════════════════════════════════════════════════════════
editor:
# Item Display Names ───────────────────────────────
item-wand: "<gradient:#f59e0b:#fbbf24>⚡ Room Setup Wand</gradient>"
item-starter-gap: "<gradient:#06b6d4:#0891b2>⬆ Starter Gap Adjuster</gradient>"
item-floor-gap: "<gradient:#06b6d4:#0891b2>⬇ Floor Gap Adjuster</gradient>"
item-floor-settings: "<gradient:#38bdf8:#818cf8>⚙ Floor Editor</gradient>"
item-room-settings: "<gradient:#fbbf24:#f59e0b>★ Room Settings</gradient>"
item-falling-hazard: "<#ef4444>Falling Hazard"
item-rising-flood: "<#38bdf8>Rising Flood"
hazard-enabled: "<gradient:#10b981:#34d399>✓ Falling hazard:</gradient> <#fbbf24>Enabled"
hazard-disabled: "<gradient:#10b981:#34d399>✓ Falling hazard:</gradient> <#9ca3af>Disabled"
flood-enabled: "<gradient:#10b981:#34d399>✓ Rising flood:</gradient> <#fbbf24>Enabled"
flood-disabled: "<gradient:#10b981:#34d399>✓ Rising flood:</gradient> <#9ca3af>Disabled"
particle-input-title: "<gradient:#ef4444:#fbbf24>Hazard particle</gradient>"
particle-input-current: "<#9ca3af>Current: <#fbbf24>{particle}"
particle-input-hint: "<#9ca3af>Type a Bukkit particle name (e.g. <#fbbf24>FLAME</#fbbf24>, <#fbbf24>SOUL_FIRE_FLAME</#fbbf24>)."
particle-input-cancel: "<#6b7280>Type '<gradient:#ef4444:#dc2626>cancel</gradient>' to abort"
particle-input-cancelled: "<#9ca3af>Particle input cancelled."
particle-input-invalid: "<gradient:#ef4444:#dc2626>✘ Unknown particle '</gradient><#fbbf24>{particle}</#fbbf24><gradient:#ef4444:#dc2626>'.</gradient>"
particle-input-set: "<gradient:#10b981:#34d399>✓ Particle set to <#fbbf24>{particle}</#fbbf24>.</gradient>"
ladder-support-input-title: "<gradient:#38bdf8:#0ea5e9>Ladder support block</gradient>"
ladder-support-input-current: "<#9ca3af>Current: <#fbbf24>{material}"
ladder-support-input-hint: "<#9ca3af>Type a solid block material (e.g. <#fbbf24>STONE</#fbbf24>, <#fbbf24>SPRUCE_PLANKS</#fbbf24>)."
ladder-support-input-cancel: "<#6b7280>Type '<gradient:#ef4444:#dc2626>cancel</gradient>' to abort"
ladder-support-input-cancelled: "<#9ca3af>Ladder support input cancelled."
ladder-support-input-invalid: "<gradient:#ef4444:#dc2626>✘ '</gradient><#fbbf24>{material}</#fbbf24><gradient:#ef4444:#dc2626>' is not a solid block.</gradient>"
ladder-support-input-set: "<gradient:#10b981:#34d399>✓ Ladder support set to <#fbbf24>{material}</#fbbf24>.</gradient>"
floor-settings-no-session: "<gradient:#ef4444:#dc2626>✘ Open Floor Editor while editing a room.</gradient>"
floor-settings-made-free: "<gradient:#10b981:#34d399>✓ Floor {floor} is free. No access cost.</gradient>"
floor-settings-applied: "<gradient:#10b981:#34d399>✓ Floor {floor} access cost set to <#fbbf24>{cost}</#fbbf24>.</gradient>"
floor-settings-need-free: "<gradient:#ef4444:#dc2626>✘ Add at least one free floor before any locked floors.</gradient>"
# Activation ────────────────────────────────────────
# Keep colors sparse: gold step numbers, gray body, one accent for the main action word.
activated-header: ""
activated-title: "<gradient:#d946ef:#ec4899>Editor</gradient> <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{room}</gradient>"
activated-room: "<#9ca3af>Build in order. Watch the action bar for the current step."
activated-steps-header: ""
activated-steps: ""
activated-steps-gui: ""
activated-step-1: "<#fbbf24>1)</#fbbf24> <#9ca3af>Starter. Left and right click the wand for corners. Shift+Click clears."
activated-step-2: "<#fbbf24>2)</#fbbf24> <#9ca3af>Spawns. Entry (run start), optional lobby (type skip), then exit."
activated-step-3: "<#fbbf24>3)</#fbbf24> <#9ca3af>Floors. Chat: <#fbbf24><schematic> <n|#-#></#fbbf24> or <#d946ef>pack:<id> <n></#d946ef>"
activated-step-3-gui: "<#fbbf24>3)</#fbbf24> <#9ca3af>Floors. Shift+Right-click the wand to open schematics and packs."
activated-step-4: "<#fbbf24>4)</#fbbf24> <#9ca3af>Hotbar. Floor Editor, Falling Hazard / flood, Room Settings."
activated-step-5: "<#fbbf24>5)</#fbbf24> <#9ca3af>Save with <#10b981>done</#10b981> or <#fbbf24>/sf wand finish</#fbbf24>. <#ef4444>cancel</#ef4444> discards."
activated-help: "<#9ca3af>Drop: floors fall after clear. Climb: Direction Up, optional flood and enclosure."
activated-footer: "<#6b7280>After save: <#fbbf24>/sf info {room}</#fbbf24>"
# Deactivation ─────────────────────────────────────
deactivated-header: ""
deactivated-title: "<gradient:#ec4899:#d946ef>Editor off</gradient>"
deactivated-saved: "<gradient:#10b981:#34d399>✓</gradient> <#9ca3af>Saved <gradient:#f59e0b:#fbbf24>{room}</gradient> · <#fbbf24>/sf join {room}</#fbbf24>"
deactivated-usage: ""
deactivated-cancelled: "<gradient:#ef4444:#991b1b>✘ Cancelled.</gradient> <#9ca3af>Nothing was saved."
deactivated-no-changes: ""
deactivated-footer: ""
# Actionbar Hints ──────────────────────────────────
hint-pos1: "<#fbbf24>[Editor] <#9ca3af>Left-click the wand to set Position 1. Shift+Click clears corners."
hint-pos2: "<#fbbf24>[Editor] <#9ca3af>Right-click the wand to set Position 2. Shift+Click clears corners."
hint-entry: "<#fbbf24>[Editor] <#9ca3af>Right-click the entry spawn (run start). Shift+Click clears starter corners."
hint-lobby: "<#fbbf24>[Editor] <#9ca3af>Right-click a lobby wait spawn, or type skip. Shift+Click clears the starter."
hint-exit: "<#fbbf24>[Editor] <#9ca3af>Right-click the exit spawn. Shift+Click clears starter corners."
hint-floors: "<#fbbf24>[Editor] <#9ca3af>Type <schematic> <n> or pack:<id> <n>"
hint-floors-gui: "<#fbbf24>[Editor] <#9ca3af>Shift + Right Click the wand to browse schematics and packs"
hint-floors-added: "<#fbbf24>[Editor] <#10b981>{count} floor(s) added. <#9ca3af>Shift + Right Click for more, or type done."
hint-default: "<#fbbf24>[Editor Mode]"
# Adjuster Feedback ─────────────────────────────────
starter-gap-adjusted: "<gradient:#06b6d4:#0891b2>Starter Gap:</gradient> <#9ca3af>{gap} blocks"
floor-gap-adjusted: "<gradient:#06b6d4:#0891b2>Floor Gap:</gradient> <#9ca3af>{gap} blocks"
min-mobs-adjusted: "<gradient:#ef4444:#dc2626>☠ Floor {floor} Min Mobs:</gradient> <#9ca3af>{min}"
max-mobs-adjusted: "<gradient:#ef4444:#dc2626>☠ Floor {floor} Max Mobs:</gradient> <#9ca3af>{max}"
# Settings Info Panel ──────────────────────────────
settings-header: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
settings-title: "<gradient:#d946ef:#ec4899><bold>Current Room Settings</bold></gradient>"
settings-structural: "<gradient:#f59e0b:#fbbf24>Structural Settings:</gradient>"
settings-starter-gap: " <#9ca3af>Starter → Floor 1 Gap: <gradient:#f59e0b:#fbbf24>{gap} blocks</gradient>"
settings-floor-gap: " <#9ca3af>Floor → Floor Gap: <gradient:#f59e0b:#fbbf24>{gap} blocks</gradient>"
settings-max-floors: " <#9ca3af>Max Floors: <gradient:#f59e0b:#fbbf24>{max}</gradient>"
settings-void-y: " <#9ca3af>Void Y-Level: <gradient:#f59e0b:#fbbf24>{y}</gradient>"
settings-gameplay: "<gradient:#f59e0b:#fbbf24>Gameplay Settings:</gradient>"
settings-countdown: " <#9ca3af>Countdown (start + floor drop): <gradient:#f59e0b:#fbbf24>{seconds} seconds</gradient>"
settings-auto-start: " <#9ca3af>Auto-start: <gradient:#f59e0b:#fbbf24>{status}</gradient>"
settings-pvp: " <#9ca3af>PvP: <gradient:#f59e0b:#fbbf24>{status}</gradient>"
settings-min-players: " <#9ca3af>Min Players: <gradient:#f59e0b:#fbbf24>{min}</gradient>"
settings-max-players: " <#9ca3af>Max Players: <gradient:#f59e0b:#fbbf24>{max}</gradient>"
settings-join-in-progress: " <#9ca3af>Join in Progress: <gradient:#f59e0b:#fbbf24>{status}</gradient>"
settings-keep-inventory: " <#9ca3af>Keep Inventory on Death: <gradient:#f59e0b:#fbbf24>{status}</gradient>"
settings-keep-experience: " <#9ca3af>Keep Experience on Death: <gradient:#f59e0b:#fbbf24>{status}</gradient>"
settings-lives: " <#9ca3af>Party Lives: <gradient:#f59e0b:#fbbf24>{lives}</gradient>"
settings-mobs: "<gradient:#f59e0b:#fbbf24>Mob Settings (Default):</gradient>"
settings-default-min-mobs: " <#9ca3af>Default Min Mobs: <gradient:#f59e0b:#fbbf24>{min}</gradient>"
settings-default-max-mobs: " <#9ca3af>Default Max Mobs: <gradient:#f59e0b:#fbbf24>{max}</gradient>"
settings-default-mob-type: " <#9ca3af>Default Mob Type: <gradient:#f59e0b:#fbbf24>{type}</gradient>"
settings-mob-counter-display: " <#9ca3af>Mob Counter Display: <gradient:#f59e0b:#fbbf24>{display}</gradient>"
settings-per-floor: "<gradient:#f59e0b:#fbbf24>Per-Floor Mob Settings:</gradient>"
settings-floor-entry: " <gradient:#f59e0b:#fbbf24>Floor {floor}:</gradient> <#9ca3af>{min}-{max} {type}</#9ca3af>{marker}"
settings-floor-entry-custom: " <gradient:#10b981:#34d399>✓</gradient>"
settings-floor-entry-default: " <#9ca3af>(default)</#9ca3af>"
settings-footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
# Mob Input ─────────────────────────────────────────
mob-input-vanilla-title: "<gradient:#10b981:#34d399>Vanilla Hostile Mobs (Click to select):</gradient>"
# Editor Feedback ──────────────────────────────────
feedback-preview-disabled: "<gradient:#f59e0b:#fbbf24>⚠ Enable previews to adjust gaps!</gradient>"
feedback-item-drop-denied: "<#ef4444>✘ You cannot drop editor items!"
feedback-add-floor-first: "<#ef4444>✘ Add a floor first!"
feedback-select-floor-first: "<gradient:#f59e0b:#fbbf24>⚠ Select a floor first!</gradient> <#9ca3af>Use the floor selector"
# Custom Commands Input ─────────────────────────────
command-input-header: "<gradient:#3b82f6:#60a5fa>━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
command-input-title: "<gradient:#3b82f6:#60a5fa><bold>Custom Commands - Floor {floor}</bold></gradient>"
command-input-desc: "<#9ca3af>Enter commands that execute when this floor starts"
command-input-format: "<#9ca3af>Type one per line, then '<gradient:#10b981:#34d399>done</gradient>' to finish"
command-input-placeholders: "<gradient:#f59e0b:#fbbf24>Available placeholders:</gradient>"
command-placeholder-player: " <#6b7280>• <gradient:#f59e0b:#fbbf24>{player}</gradient> <#9ca3af>- Player name"
command-placeholder-floor: " <#6b7280>• <gradient:#f59e0b:#fbbf24>{floor}</gradient> <#9ca3af>- Floor number"
command-placeholder-room: " <#6b7280>• <gradient:#f59e0b:#fbbf24>{room}</gradient> <#9ca3af>- Room ID"
command-input-footer: "<gradient:#3b82f6:#60a5fa>━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
# ═════════════════════════════════════════════════════════════════
# DEBUG - Debug mode status display
# ═════════════════════════════════════════════════════════════════
debug:
header: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
title: "<gradient:#f59e0b:#fbbf24><bold>Debug Mode Status</bold></gradient>"
enabled: "<#9ca3af>Enabled: {status}"
features-title: "<gradient:#f59e0b:#fbbf24>Active Features:</gradient>"
instant-start: "<#6b7280>• <#9ca3af>Instant Start: {status}"
instant-floor: "<#6b7280>• <#9ca3af>Instant Floor Drop: {status}"
instant-mob: "<#6b7280>• <#9ca3af>Instant Mob Spawn: {status}"
verbose-log: "<#6b7280>• <#9ca3af>Verbose Logging: {status}"
enable-hint: "<#6b7280>To enable: Set <gradient:#f59e0b:#fbbf24>debug-mode.enabled: true</gradient> <#6b7280>in config.yml"
reload-hint: "<#6b7280>Then use <gradient:#f59e0b:#fbbf24>/sf reload</gradient> <#6b7280>to apply changes"
footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
toggle-hint: "<gradient:#f59e0b:#fbbf24>⚠ Debug mode can only be toggled in config.yml</gradient>"
toggle-set: "<#9ca3af>Set <gradient:#f59e0b:#fbbf24>debug-mode.enabled</gradient> <#9ca3af>to true/false"
toggle-reload: "<#9ca3af>Then use <gradient:#f59e0b:#fbbf24>/sf reload</gradient> <#9ca3af>to apply changes"
status-yes: "<gradient:#10b981:#34d399>YES</gradient>"
status-no: "<gradient:#ef4444:#dc2626>NO</gradient>"
status-on: "<gradient:#10b981:#34d399>ON</gradient>"
status-off: "<gradient:#ef4444:#dc2626>OFF</gradient>"
# ═════════════════════════════════════════════════════════════════
# HELP - Main /sf help output
# ═════════════════════════════════════════════════════════════════
help:
header: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
title: "<gradient:#f59e0b:#fbbf24><bold>SoapsFloor Commands</bold></gradient>"
menu: "<gradient:#10b981:#34d399>/sf menu</gradient> <#6b7280>• <#9ca3af>Open main menu (GUI)"
stats: "<gradient:#3b82f6:#60a5fa>/sf stats</gradient> <#6b7280>• <#9ca3af>Open your statistics"
wand-create: "<gradient:#f59e0b:#fbbf24>/sf wand create <name></gradient> <#6b7280>• <#9ca3af>Create new room"
wand-edit: "<gradient:#f59e0b:#fbbf24>/sf wand edit <name></gradient> <#6b7280>• <#9ca3af>Edit existing room"
wand-finish: "<gradient:#f59e0b:#fbbf24>/sf wand finish</gradient> <#6b7280>• <#9ca3af>Save and exit editor"
finish: "<gradient:#f59e0b:#fbbf24>/sf finish</gradient> <#6b7280>• <#9ca3af>Save and exit editor (alias)"
wand-cancel: "<gradient:#f59e0b:#fbbf24>/sf wand cancel</gradient> <#6b7280>• <#9ca3af>Cancel without saving"
wand-status: "<gradient:#f59e0b:#fbbf24>/sf wand status</gradient> <#6b7280>• <#9ca3af>Check session status"
schematics: "<gradient:#f59e0b:#fbbf24>/sf schematics</gradient> <#6b7280>• <#9ca3af>Browse and paste schematics"
schematics-pack: "<gradient:#d946ef:#ec4899>/sf schematics pack</gradient> <#6b7280>• <#9ca3af>Create and edit weighted packs"
room-join: "<gradient:#06b6d4:#3b82f6>/sf join <room></gradient> <#6b7280>• <#9ca3af>Join a room"
room-spectate: "<gradient:#06b6d4:#3b82f6>/sf spectate <room></gradient> <#6b7280>• <#9ca3af>Watch without taking a fighter slot"
room-ready: "<gradient:#f59e0b:#fbbf24>/sf ready</gradient> <#6b7280>• <#9ca3af>Toggle ready in the waiting lobby"
room-skip: "<gradient:#f59e0b:#fbbf24>/sf skip</gradient> <#6b7280>• <#9ca3af>Vote to end the waiting timer early"
room-quickjoin: "<gradient:#10b981:#34d399>/sf quickjoin</gradient> <#6b7280>• <#9ca3af>Join any open room (or queue if full)"
room-start: "<gradient:#f59e0b:#fbbf24>/sf start</gradient> <#6b7280>• <#9ca3af>Host: start the lobby when auto-start is off"
room-list: "<gradient:#06b6d4:#3b82f6>/sf list</gradient> <#6b7280>• <#9ca3af>List all rooms"
room-info: "<gradient:#06b6d4:#3b82f6>/sf info <room></gradient> <#6b7280>• <#9ca3af>Room details"
room-leave: "<gradient:#06b6d4:#3b82f6>/sf leave</gradient> <#6b7280>• <#9ca3af>Leave room or leave the queue"
lives: "<gradient:#06b6d4:#3b82f6>/sf lives</gradient> <#6b7280>• <#9ca3af>Show shared party lives for your run"
version: "<gradient:#06b6d4:#3b82f6>/sf version</gradient> <#6b7280>• <#9ca3af>Show plugin version"
settings-feedback: "<gradient:#8b5cf6:#a78bfa>/sf settings feedback</gradient> <#6b7280>• <#9ca3af>Toggle feedback type"
debug: "<gradient:#ef4444:#dc2626>/sf debug</gradient> <#6b7280>• <#9ca3af>Debug mode info"
reload: "<gradient:#10b981:#34d399>/sf reload</gradient> <#6b7280>• <#9ca3af>Reload configuration"
setreward: "<gradient:#f59e0b:#fbbf24>/sf setreward <room> <table|none></gradient> <#6b7280>• <#9ca3af>Assign a reward table"
rewards: "<gradient:#f59e0b:#fbbf24>/sf rewards list|info|test <table></gradient> <#6b7280>• <#9ca3af>Inspect or dry-run reward tables"
footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
# ═════════════════════════════════════════════════════════════════
# REWARDS - Table payout and admin inspect
# ═════════════════════════════════════════════════════════════════
rewards:
# Empty this string to hide the post-clear roll summary.
roll-summary: "<#9ca3af>Table rolls: <#fbbf24>{rolls}</#fbbf24> <#6b7280>(x{multiplier}) · </#6b7280><#d1d5db>{grants}"
list-header: "<gradient:#f59e0b:#fbbf24><bold>Reward tables</bold></gradient>"
list-empty: "<#9ca3af>No tables found in rewards.yml."
list-entry: " <#fbbf24>{table}</#fbbf24> <#6b7280>·</#6b7280> <#9ca3af>{detail}"
info-missing: "<gradient:#ef4444:#dc2626>✘ Reward table '{table}' was not found.</gradient>"
info-header: "<gradient:#f59e0b:#fbbf24><bold>Table '{table}'</bold></gradient>"
info-rolls: " <#9ca3af>Rolls: <#fbbf24>{rolls}</#fbbf24> <#6b7280>{unique}"
info-append: " <#9ca3af>Append to global: <#fbbf24>{append}</#fbbf24>"
info-counts: " <#9ca3af>Always: <#fbbf24>{always}</#fbbf24> <#6b7280>·</#6b7280> <#9ca3af>Weighted: <#fbbf24>{weighted}</#fbbf24> <#6b7280>(total weight {weight})"
info-entry: " <#6b7280>#{index}</#6b7280> <#9ca3af>{detail}"
set-cleared: "<gradient:#10b981:#34d399>✓ Cleared the reward table for room '{room}'.</gradient>"
set-ok: "<gradient:#10b981:#34d399>✓ Room '{room}' now uses reward table '<#fbbf24>{table}</#fbbf24>'.</gradient>"
set-missing: "<gradient:#ef4444:#dc2626>✘ Reward table '{table}' was not found.</gradient>"
available: "<#9ca3af>Available tables: <#fbbf24>{tables}</#fbbf24>"
usage-set: "<gradient:#ef4444:#dc2626>✘ Usage: /sf setreward <room> <table|none></gradient>"
usage-rewards: "<gradient:#ef4444:#dc2626>✘ Usage: /sf rewards list|info <table>|test <table> [player] [times]</gradient>"
test-header: "<gradient:#f59e0b:#fbbf24><bold>Dry-run '{table}'</bold></gradient> <#9ca3af>as <#fbbf24>{player}</#fbbf24> ×{times} <#6b7280>(commands are not run)"
test-run: " <#6b7280>#{run}</#6b7280> <#9ca3af>weighted {weighted}:</#9ca3af> <#d1d5db>{grants}"
test-run-empty: " <#6b7280>#{run}</#6b7280> <#9ca3af>weighted {weighted}:</#9ca3af> <#6b7280>(nothing)"
test-footer: "<#6b7280>Assumes first clear, party size 1, 1 floor, and 0 kills. The subject player’s permissions still apply."
test-player-missing: "<gradient:#ef4444:#dc2626>✘ Player '{player}' is not online.</gradient>"
# ═════════════════════════════════════════════════════════════════
# VERSION - /sf version
# ═════════════════════════════════════════════════════════════════
version:
info: "<gradient:#f59e0b:#fbbf24>SoapsFloor</gradient> <#9ca3af>v<#fbbf24>{version}</#fbbf24>"
# ═════════════════════════════════════════════════════════════════
# SCHEMATIC PACKS - Weighted floor schematic pools
# ═════════════════════════════════════════════════════════════════
schematic-pack:
created: "<gradient:#d946ef:#ec4899>✓ Created pack '<#fbbf24>{pack}</#fbbf24>'.</gradient> <#9ca3af>Set a play style, add floor schematics, then save."
stair-created: "<#38bdf8>✓ Created stair pack '<#fbbf24>{pack}</#fbbf24>'.</#38bdf8> <#9ca3af>Add stairs, then save. Climb height is set from each schematic."
editing: "<gradient:#d946ef:#ec4899>✓ Editing pack '<#fbbf24>{pack}</#fbbf24>'.</gradient>"
saved: "<gradient:#10b981:#34d399>✓ Saved pack '<#fbbf24>{pack}</#fbbf24>'</gradient> <#9ca3af>with {count} schematics."
deleted: "<gradient:#10b981:#34d399>✓ Deleted pack '<#fbbf24>{pack}</#fbbf24>'.</gradient>"
delete-blocked: "<gradient:#ef4444:#dc2626>✘ Cannot delete pack '<#fbbf24>{pack}</#fbbf24>'.</gradient> <#9ca3af>It is used by: {rooms}"
cancelled: "<#9ca3af>Pack edit cancelled. Nothing was saved."
create-cancelled: "<#9ca3af>Pack create cancelled."
stair-create-cancelled: "<#9ca3af>Returned to your room pack. Stair pack changes were not saved."
stair-linked: "<#38bdf8>✓ Linked stair pack '<#fbbf24>{pack}</#fbbf24>' to this room pack."
prompt-id: "<#9ca3af>Type a pack id in chat, or <#fbbf24>cancel</#fbbf24> to stop."
prompt-stair-id: "<#9ca3af>Type a stair pack id in chat, or <#fbbf24>cancel</#fbbf24> to stop."
prompt-rename: "<#9ca3af>Rename '<#fbbf24>{pack}</#fbbf24>'. Type a new id in chat, or <#fbbf24>cancel</#fbbf24>."
renamed: "<#38bdf8>✓ Renamed pack '<#fbbf24>{old}</#fbbf24>' → '<#fbbf24>{pack}</#fbbf24>'."
rename-cancelled: "<#9ca3af>Pack rename cancelled."
too-few: "<#ef4444>✘ This pack needs at least {min} schematics. It currently has {count}."
applied-style: "<#9ca3af>{summary}"
added: "<gradient:#d946ef:#ec4899>✓ Added '<#fbbf24>{schematic}</#fbbf24>'</gradient> <#9ca3af>at weight {weight} ({percent}% chance). {count} in pack."
added-stair: "<#38bdf8>✓ Added '<#fbbf24>{schematic}</#fbbf24>'</#38bdf8> <#9ca3af>at weight {weight}, climb height {height} ({percent}% chance). {count} in pack."
footprint-too-large: "<gradient:#ef4444:#dc2626>✘ Pack '{pack}' is {packW}x{packL}</gradient> <#9ca3af>but the starter is {starterW}x{starterL} (width by length). Enlarge the starter or use a smaller pack."
weight-updated: "<gradient:#d946ef:#ec4899>✓ '{schematic}' weight set to {weight}</gradient> <#9ca3af>({percent}% chance)."
controls: "<#9ca3af>Pack <gradient:#d946ef:#ec4899>{pack}</gradient> <#6b7280>| <click:run_command:/sf schematics pack browser><hover:show_text:'<#fbbf24>Add schematics'><gradient:#06b6d4:#3b82f6>[add]</gradient></hover></click> <click:run_command:/sf schematics pack menu><hover:show_text:'<#fbbf24>Open weight menu'><gradient:#d946ef:#ec4899>[menu]</gradient></hover></click> <click:run_command:/sf schematics pack save><hover:show_text:'<#10b981>Save pack'><#10b981>[save]</#10b981></hover></click> <click:run_command:/sf schematics pack cancel><hover:show_text:'<#ef4444>Discard changes'><#ef4444>[cancel]</#ef4444></hover></click>"
size-mismatch: "<gradient:#ef4444:#dc2626>✘ Size mismatch.</gradient> <#9ca3af>Pack is <#fbbf24>{packW}x{packL}</#fbbf24>, but '<#fbbf24>{schematic}</#fbbf24>' is <#fbbf24>{schemW}x{schemL}</#fbbf24>. Floor packs need matching width and length."
stair-too-large: "<gradient:#ef4444:#dc2626>✘ Stair too large.</gradient> <#9ca3af>'<#fbbf24>{schematic}</#fbbf24>' is <#fbbf24>{schemW}x{schemL}</#fbbf24>, but this room pack fits stairs up to <#fbbf24>{roomW}x{roomL}</#fbbf24>. Use a smaller stair or a larger room."
no-edit-session: "<#ef4444>✘ You are not editing a pack.</#ef4444> <#9ca3af>Run /sf schematics pack create or /sf schematics pack edit with a pack id."
not-found-schematic: "<gradient:#ef4444:#dc2626>✘ Schematic not found:</gradient> <#fbbf24>{schematic}"
add-failed: "<gradient:#ef4444:#dc2626>✘ {error}</gradient>"
# ═════════════════════════════════════════════════════════════════
# RELOAD - Config reload feedback
# ═════════════════════════════════════════════════════════════════
reload:
success: "<gradient:#10b981:#34d399>✓ Configuration reloaded successfully!</gradient>"
failed: "<gradient:#ef4444:#dc2626>✘ Failed to reload configuration!</gradient> <#9ca3af>Check console for errors"
# ═════════════════════════════════════════════════════════════════
# SETTINGS - Player settings feedback
# ═════════════════════════════════════════════════════════════════
settings:
feedback-chat: "<gradient:#10b981:#34d399>✓ Feedback mode:</gradient> <gradient:#f59e0b:#fbbf24>Chat Messages</gradient>"
feedback-actionbar: "<gradient:#10b981:#34d399>✓ Feedback mode:</gradient> <gradient:#06b6d4:#3b82f6>Action Bar</gradient>"
help-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
help-title: "<gradient:#f59e0b:#fbbf24><bold>SoapsFloor Settings</bold></gradient>"
help-toggle-feedback: "<gradient:#f59e0b:#fbbf24>/sf settings toggle feedback</gradient>"
help-toggle-feedback-desc: " <#9ca3af>Toggle between chat and actionbar for item feedback"
help-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
# ═════════════════════════════════════════════════════════════════
# GUI - Menu system messages
# ═════════════════════════════════════════════════════════════════
gui:
disabled: "<gradient:#ef4444:#dc2626>✘ GUI system is currently disabled!</gradient> <#9ca3af>Use commands instead: /sf help"
# ═════════════════════════════════════════════════════════════════
# LOCKED FLOORS - Lobby access purchases
# ═════════════════════════════════════════════════════════════════
unlock:
host-assigned: "<gradient:#10b981:#34d399>✓ You are the host</gradient> <#9ca3af>for this run."
host-transferred: "<gradient:#f59e0b:#fbbf24>★ You are now the host.</gradient> <#9ca3af>You can buy access to locked floors."
host-transferred-broadcast: "<#9ca3af>{player} is now the host."
host-start-hint: "<#9ca3af>As host, run <gradient:#f59e0b:#fbbf24>/sf start</gradient> <#9ca3af>when your party is ready."
host-started: "<gradient:#10b981:#34d399>✓ Lobby started.</gradient>"
lobby-host-hint: "<#9ca3af>This room has locked floors. Buy deeper access in the menu before the lobby locks. Unbought floors are skipped."
lobby-guest-hint: "<#9ca3af>This room has locked floors. The host can buy deeper access while you wait. Unbought floors are skipped."
lobby-closed: "<gradient:#ef4444:#dc2626>✘ The lobby menu is not open right now.</gradient>"
not-host: "<gradient:#ef4444:#dc2626>✘ Only the host can buy floor access.</gradient>"
already-started: "<gradient:#ef4444:#dc2626>✘ This run has already started, or the lobby is locked.</gradient>"
none-left: "<#9ca3af>There are no more locked floors to open."
economy-unavailable: "<gradient:#ef4444:#dc2626>✘ That currency is unavailable.</gradient> <#9ca3af>Check SoapsAdmin, Vault, or SoapsQuest, or change the currency in Floor Settings."
cannot-afford: "<gradient:#ef4444:#dc2626>✘ You cannot afford this floor.</gradient> <#9ca3af>Cost: {cost}"
unlocked: "<gradient:#10b981:#34d399>✓ {host} opened Floor {floor}</gradient> <#9ca3af>for {cost}."
no-playable-floors: "<gradient:#ef4444:#dc2626>✘ No floors are available for this run.</gradient> <#9ca3af>Buy locked floor access in the lobby next time."
# ═════════════════════════════════════════════════════════════════
# HAZARD - Falling hazard warnings
# ═════════════════════════════════════════════════════════════════
hazard:
started: "<gradient:#ef4444:#dc2626>⚠ Falling hazard activated!</gradient> <#9ca3af>Stay below the descending particles!"
warning: "<gradient:#ef4444:#dc2626>⚠ The hazard is approaching!</gradient>"
# ═════════════════════════════════════════════════════════════════
# CLIMB - Upward tower + rising flood
# ═════════════════════════════════════════════════════════════════
climb:
segment-revealed: "<gradient:#38bdf8:#0ea5e9>✓ Floor <#fbbf24>{floor}</#fbbf24> is now open above you!</gradient>"
flood-started: "<gradient:#ef4444:#dc2626>⚠ The flood is rising!</gradient> <#9ca3af>Climb higher. Do not let it pass your head!"
# ═════════════════════════════════════════════════════════════════
# SCHEMATIC PREVIEW - Standalone schematic browser & paste
# ═════════════════════════════════════════════════════════════════
schematic-preview:
started: "<gradient:#d946ef:#ec4899>✓ Previewing schematic '<#fbbf24>{schematic}</#fbbf24>'</gradient> <#9ca3af>(Size: {width}x{height}x{length})"
simplified: "<#f59e0b>⚠ Large schematic. Preview shows {shown}/{total} blocks (paste is still full).</#f59e0b>"
too-large: "<gradient:#ef4444:#dc2626>✘ Schematic has {total} blocks but preview is disabled (max {max}).</gradient> <#9ca3af>Raise <white>editor-mode.schematic-preview-max-blocks</white> or paste with WorldEdit."
actionbar: "<gradient:#d946ef:#ec4899>📐 {schematic}</gradient> <#9ca3af>| Dist <white>{distance}</white> | Rot <white>{rotation}°</white>{ylock} | @{x},{y},{z} {loading}{overlap} | Scroll Wheel = distance · type <white>done</white> / <white>cancel</white>"
actionbar-loading: "<#fbbf24>Loading {percent}%</#fbbf24> "
actionbar-overlap: "<#ef4444>⚠ Overlap {percent}%</#ef4444> "
actionbar-undo: "<#9ca3af>Paste done - type <#fbbf24>undo</#fbbf24> to revert"
controls: "<#9ca3af>Controls: <click:run_command:/sf schematics rotate 90><hover:show_text:'<#d946ef>Rotate 90°'><gradient:#d946ef:#ec4899>[90°]</gradient></hover></click> <click:run_command:/sf schematics rotate 180><hover:show_text:'<#d946ef>Rotate 180°'><gradient:#d946ef:#ec4899>[180°]</gradient></hover></click> <click:run_command:/sf schematics rotate 270><hover:show_text:'<#d946ef>Rotate 270°'><gradient:#d946ef:#ec4899>[270°]</gradient></hover></click> <#6b7280>| <click:run_command:/sf schematics done><hover:show_text:'<#fbbf24>Paste schematic'><#fbbf24>[done]</#fbbf24></hover></click> <click:run_command:/sf schematics cancel><hover:show_text:'<#ef4444>Cancel preview'><#ef4444>[cancel]</#ef4444></hover></click> <click:suggest_command:'/sf schematics dist '><hover:show_text:'<#fbbf24>Set distance'><#fbbf24>[dist]</#fbbf24></hover></click> <click:run_command:/sf schematics ylock><hover:show_text:'<#fbbf24>Toggle Y lock'><#fbbf24>[ylock]</#fbbf24></hover></click>"
distance-set: "<gradient:#d946ef:#ec4899>✓ Distance set to {distance}</gradient>"
distance-clamped: "<#f59e0b>⚠ Distance clamped to {distance} (min {min}, max {max})</#f59e0b>"
ylock-on: "<gradient:#d946ef:#ec4899>✓ Y locked</gradient> <#9ca3af>at Y={y} - look still moves X/Z. Type <#fbbf24>ylock</#fbbf24> again to unlock."
ylock-off: "<#9ca3af>Y lock off - placement follows look direction fully again."
pasted: "<gradient:#10b981:#34d399>✓ Schematic '<#fbbf24>{schematic}</#fbbf24>' pasted at {x}, {y}, {z}!</gradient>"
cancelled: "<gradient:#ef4444:#dc2626>✘ Schematic preview cancelled.</gradient>"
undo-hint: "<#9ca3af>Type '<#fbbf24>undo</#fbbf24>' in chat to revert the paste."
undone: "<gradient:#10b981:#34d399>✓ Undo complete!</gradient> <#9ca3af>Restored {blocks} blocks."
no-undo: "<gradient:#ef4444:#dc2626>✘ Nothing to undo!</gradient>"
Still stuck? Ask about this page