Default Config Files

Last updated Sep 18, 2026

Default Config Files

Shipped defaults from SoapsFloor 1.0.7. After first run, copies live in plugins/SoapsFloor/.

Falling hazard is per-room (see Falling Hazard), not in config.yml.

config.yml

# ################################################
#                                                #
#        SoapsFloor - Configuration               #
#                                                #
#   Created by AlternativeSoap                   #
#   Website: www.SoapsUniverse.com               #
#   Support: https://discord.gg/mawAzwFq         #
#                                                #
# ################################################
#
# Dungeon floor-drop plugin for Paper 26.2
# Messages: messages.yml  |  GUI layouts: gui.yml

# ──────────────────────────────────────────────────────────────
#  General
# ──────────────────────────────────────────────────────────────

# Inventory-based menus (all features still work via commands / chat when disabled)
gui:
  enabled: true


# ──────────────────────────────────────────────────────────────
#  Room Defaults
# ──────────────────────────────────────────────────────────────
# Applied when creating new rooms. Each room can override these.

default-room-settings:
  max-floors-per-room: 50
  void-y-level: -64               # Y-level that counts as void (instant fail)

  # Floor spacing (blocks)
  starter-to-floor-gap: 5         # Gap between starter room and first floor
  floor-to-floor-gap: 3           # Gap between consecutive floors

  # Countdown (starter run-start AND delay before a cleared floor drops)
  countdown-seconds: 3
  countdown-sound: BLOCK_NOTE_BLOCK_PLING
  countdown-sound-volume: 1.0
  countdown-sound-pitch: 1.0      # Pitch increases per tick automatically
  countdown-final-sound: ENTITY_ENDER_DRAGON_GROWL
  countdown-final-volume: 1.0
  countdown-final-pitch: 1.2

  auto-start-enabled: true        # Auto-start when a player enters the starter room
  pvp-enabled: false              # Default for new rooms (toggle per room in Room Settings)
  keep-inventory-on-death: false  # Keep items on death inside this room
  keep-experience-on-death: false # Keep XP/levels on death inside this room

  # Waiting timer (before countdown begins)
  waiting-timer-enabled: true
  waiting-timer-seconds: 30       # Time to wait for more players before locking

  # Player limits
  min-players: 1                  # Minimum to auto-start (0 = disabled, solo-friendly)
  max-players: 4                  # Max per session (0 = unlimited)
  allow-join-in-progress: false   # Allow joining an active session


# ──────────────────────────────────────────────────────────────
#  Quick Join & Queue
# ──────────────────────────────────────────────────────────────
# /sf quickjoin (and GUI Quick Join) picks a joinable room.
# Prefer open waiting lobbies, then empty rooms, then in-progress (if allowed).
# When every room is full/locked, players enter a FIFO queue until a slot opens.

quick-join:
  enabled: true
  queue-enabled: true
  queue-timeout-seconds: 300      # 0 = no timeout


# ──────────────────────────────────────────────────────────────
#  Join Signs
# ──────────────────────────────────────────────────────────────
# Place a sign matching the pattern below to create a clickable join sign.
# Default layout:
#   line 1: (empty)
#   line 2: [SF]
#   line 3: <room name>
#   line 4: (empty)
# Use {room} for the room-id line. Other lines must match exactly (case-insensitive).
# Blank pattern lines must be left empty on the sign.

join-signs:
  enabled: true
  lines:
    - ""
    - "[SF]"
    - "{room}"
    - ""
  # Applied after a valid join sign is created (MiniMessage). Use {room}.
  formatted-lines:
    - ""
    - "<gradient:#f59e0b:#fbbf24><bold>[SF]</bold></gradient>"
    - "<#fbbf24>{room}"
    - "<#6b7280>Click to join"


# ──────────────────────────────────────────────────────────────
#  Party Scaling (multiplayer difficulty)
# ──────────────────────────────────────────────────────────────
# More players = harder dungeon. Locked when the waiting timer ends.
# Per-room on/off: Room Settings (wand hotbar) or room YAML party-scaling.enabled

party-scaling:
  enabled: true
  base-players: 1                 # Scaling starts above this count
  lock-at-room-lock: true         # Snapshot player count when room locks
  max-extra-players: 0            # Cap extras used for scaling (0 = no cap)

  mobs:
    extra-min-per-player: 0
    extra-max-per-player: 1         # +1 max mob per extra player
    count-multiplier-per-player: 0.15

  health:
    multiplier-per-player: 0.20     # 4 players @ base 1 = +60% HP
    apply-to-vanilla: true
    apply-to-mythic: true           # Same HP multiplier on MythicMobs
    mythic-level-per-player: 1

  rewards:
    roll-multiplier-per-player: 0.10  # Stacks with weakness multiplier


# ──────────────────────────────────────────────────────────────
#  Mob Spawning
# ──────────────────────────────────────────────────────────────

mob-spawning:
  default-min-mobs: 3
  default-max-mobs: 8
  default-mob-type: vanilla:husk     # Format: vanilla:<type> or mythicmobs:<id>
  default-spread-radius: 3            # Min blocks between spawns
  spawn-delay-ticks: 0                # Ticks between each mob spawn (0 = all at once)
                                      # Example: 10 = 0.5s delay between each mob

  # How to show remaining mob count: "actionbar", "chat", or "bossbar"
  mob-counter-display: actionbar


# ──────────────────────────────────────────────────────────────
#  Block Protection
# ──────────────────────────────────────────────────────────────
# Built-in block protection for dungeon rooms.
# Prevents players from breaking, placing, or interacting with blocks.
# Admins with soapsfloor.bypass.protection are exempt.

block-protection:
  enabled: true
  prevent-block-break: true
  prevent-block-place: true
  prevent-explosions: true          # Block TNT/creeper/etc. damage inside rooms
  prevent-bucket-use: true          # Block bucket placement inside rooms


# ──────────────────────────────────────────────────────────────
#  Anti-Cheese
# ──────────────────────────────────────────────────────────────
# Prevents players from circumventing room progression.
# Admins with soapsfloor.admin are exempt from all restrictions.

anti-cheese:
  disable-elytra: true
  block-ender-pearls: true
  block-chorus-fruit: true          # Block Chorus Fruit random teleportation
  block-flying: true
  fall-damage-multiplier: 0.0       # 0.0 = no fall damage, 1.0 = normal
  remove-invisibility-on-join: true  # Strip invisibility effect when entering a room

  # Force survival mode when entering a room
  # When enabled, remembers the player's gamemode before joining and
  # restores it after the game ends (victory, leave, death-kick, quit).
  force-survival: true

  # What happens when a player dies
  # "kick" = removed from room | "spectate" = spectator mode | "respawn" = respawn on current floor
  death-behavior: respawn

  # Blacklisted items: materials that cannot be used inside dungeon rooms.
  # Players will be unable to interact with these items while in a session.
  # Use Bukkit Material names: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html
  blacklisted-items:
    - ENDER_EYE
    # - TNT
    # - FIRE_CHARGE


# ──────────────────────────────────────────────────────────────
#  Effects
# ──────────────────────────────────────────────────────────────

# Victory
victory:
  teleport-to-exit: true           # Teleport winners to the room exit
  teleport-delay: 3                # Seconds before teleport (0 = instant)

  # Title display (shown on screen)
  title-enabled: true
  title: "<gradient:#f59e0b:#fbbf24><bold>DUNGEON CLEARED</bold></gradient>"
  subtitle: "<#9ca3af>{room} <#6b7280>·</#6b7280> <gradient:#10b981:#34d399>{time}</gradient>"
  title-fade-in: 10               # Ticks (10 = 0.5 seconds)
  title-stay: 70                   # Ticks (70 = 3.5 seconds)
  title-fade-out: 20               # Ticks (20 = 1.0 seconds)

  # Victory sound
  sound: entity.player.levelup      # Accepts Minecraft namespaced keys or Bukkit enum names
  sound-volume: 1.0
  sound-pitch: 1.0

  # Particle effect
  victory-particle: FIREWORK       # FIREWORK, TOTEM_OF_UNDYING, EXPLOSION, DRAGON_BREATH
  victory-particle-count: 100

  # Reward commands (run from console for each active player, unless noted)
  # Placeholders: {player}, {players}, {room}, {time}, {kills}, {total_kills}, {floors}
  # Special prefixes:
  #   broadcast:<text>  server-wide broadcast (once per clear). Use & legacy colors.
  #   message:<text>    private message to that player. Use & legacy colors.
  reward-commands:
    - "broadcast:&8[&6SoapsFloor&8] &e{players} &7cleared &6{room} &7in &a&l{time}&7 · &6{floors} &7floors · &c{total_kills} &7kills"
    - "message:&7Your kills this run: &a{kills}"
    # - "xp add {player} 50 points"
    # - "eco give {player} 100"
    # - "crate givekey {player} dungeon_key 1"
    # - "give {player} diamond 1"

# Floor drop
floor-drop:
  particle-effect: EXPLOSION     # EXPLOSION, CLOUD, LARGE_SMOKE, CAMPFIRE_COSY_SMOKE
  particle-count: 50
  sound-effect: entity.generic.explode    # Accepts Minecraft namespaced keys or Bukkit enum names
  sound-volume: 1.0
  sound-pitch: 0.8


# ──────────────────────────────────────────────────────────────
#  Editor Mode
# ──────────────────────────────────────────────────────────────
# Wand-based room editor for admins.

editor-mode:
  # Structure previews
  enable-previews: true
  enable-glow-outline: true
  preview-view-range: 1.0        # Chunk render distance (1.0 = normal)

  # Particle borders around previews
  show-particle-borders: false
  particle-type: END_ROD
  particle-interval: 10          # Ticks between updates

  # Standalone schematic browser preview (/sf wand schematics)
  schematic-preview-max-blocks: 5000     # Cap ghost blocks sent to client (prevents crashes)
  schematic-preview-blocks-per-tick: 30  # Spawn rate while preview loads
  schematic-preview-glow: false          # Scoreboard glow on thousands of displays crashes clients

  # Wand selection preview
  wand-selection:
    show-particles: true           # Show particle outline when selecting pos1/pos2
    max-selection-volume: 100000   # Max total blocks in selection (W×H×L)
    max-selection-dimension: 200   # Max blocks per axis (width, height, or length)

  # Player state
  restore-location: true         # Restore location on editor exit
  restore-gamemode: true         # Restore gamemode on editor exit

  # Protection
  prevent-block-break: true
  prevent-block-place: true

  # Action bar hints
  show-actionbar-hints: true
  actionbar-interval: 60         # Ticks (60 = 3 seconds)


# ──────────────────────────────────────────────────────────────
#  Admin Visualization
# ──────────────────────────────────────────────────────────────
# Particle markers shown to admins for room elements.

visualization:
  enabled: true
  show-bounds: true              # Floor bounds wireframe
  show-spawns: true              # Entry/exit spawn points


# ──────────────────────────────────────────────────────────────
#  Schematic Settings
# ──────────────────────────────────────────────────────────────

schematic-settings:
  floor-removal-inset: 1         # Blocks from edge kept on floor drop; also keeps mob spawns off walls
  spawn-height-offset: 1.0       # Blocks above the solid surface under the mob's feet


# ──────────────────────────────────────────────────────────────
#  Debug Mode
# ──────────────────────────────────────────────────────────────
# Fast testing features for development. Not for production use.

debug-mode:
  enabled: false
  instant-start: true            # Skip countdown
  instant-floor-drop: true       # No delay between floors
  instant-mob-spawn: true        # No spawn delay
  verbose-logging: false          # Extra console output

messages.yml

# ################################################
#                                                #
#     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:

  # Wand Item ─────────────────────────────────────────
  received: "<gradient:#10b981:#34d399>✓ You received the Room Setup Wand!</gradient>"

  # 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 left-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>"
  set-entry-point: "<gradient:#10b981:#34d399>✓ Entry point set!</gradient> <#9ca3af>Now right-click to set the <gradient:#ef4444:#dc2626>exit point</gradient>"
  set-exit-point: "<gradient:#10b981:#34d399>✓ Exit point set!</gradient> <#9ca3af>Starter room defined. Add floors via chat."
  set-exit-point-gui: "<gradient:#10b981:#34d399>✓ Exit point set!</gradient> <#9ca3af>Starter room defined. Use the schematic browser to add floors."

  # Schematics & Floors ──────────────────────────────
  schematic-not-found: "<gradient:#ef4444:#dc2626>✘ Schematic '<#fbbf24>{schematic}</#fbbf24>' not found!</gradient> <#9ca3af>Check schematics folder"
  floor-created: "<gradient:#10b981:#34d399>✓ Floor {floor} created successfully!</gradient>"
  floor-applied: "<gradient:#10b981:#34d399>✓ Floor {floor} updated with schematic '<#fbbf24>{schematic}</#fbbf24>'</gradient>"
  floor-removed: "<gradient:#10b981:#34d399>✓ Floor {floor} removed</gradient>"

  # Session Management ───────────────────────────────
  session-complete: "<gradient:#10b981:#34d399>✓ Room '<gradient:#f59e0b:#fbbf24>{room}</gradient>' created and saved!</gradient>"
  session-cancelled: "<gradient:#ef4444:#dc2626>✘ Room creation cancelled</gradient>"
  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><bold>✓ EDITING EXISTING ROOM</bold></gradient>"
  edit-info-room: "<#9ca3af>You are now editing room: <gradient:#f59e0b:#fbbf24>{room}</gradient>"
  edit-info-floors: "<#9ca3af>• <gradient:#f59e0b:#fbbf24>{floors}</gradient> <#9ca3af>floor(s) configured"
  edit-info-hotbar: "<#9ca3af>• Use hotbar items to adjust settings"
  edit-info-list: "<#9ca3af>• Type '<gradient:#f59e0b:#fbbf24>list</gradient>' to see current floors"
  edit-info-done: "<#9ca3af>• Type '<gradient:#f59e0b:#fbbf24>done</gradient>' to save changes"
  edit-info-cancel: "<#9ca3af>• Use <gradient:#f59e0b:#fbbf24>/sf wand cancel</gradient> <#9ca3af>to discard changes"

  # Input Prompts ─────────────────────────────────────
  prompt-floor-input: "<gradient:#06b6d4:#3b82f6>📝 Enter floor information</gradient>\n<#9ca3af>Format: <gradient:#f59e0b:#fbbf24><schematic> <layer></gradient>\n<#6b7280>Examples: <#d1d5db>boss_arena 5</#d1d5db> or <#d1d5db>castle_hall 1-10</#d1d5db>\n<#6b7280>Type '<gradient:#10b981:#34d399>done</gradient>' to finish, '<gradient:#06b6d4:#3b82f6>list</gradient>' to see floors"
  prompt-floor-input-gui: "<gradient:#06b6d4:#3b82f6>📝 Select a schematic</gradient>\n<#9ca3af>Use the <gradient:#f59e0b:#fbbf24>schematic browser</gradient> to pick a schematic\n<#9ca3af>Then enter the <gradient:#f59e0b:#fbbf24>layer number</gradient> in chat\n<#6b7280>Type '<gradient:#10b981:#34d399>done</gradient>' to finish, '<gradient:#06b6d4:#3b82f6>list</gradient>' to see floors"
  prompt-set-positions: "<gradient:#f59e0b:#fbbf24>⚡ Select starter room area</gradient>\n<#9ca3af>Right-click: <gradient:#10b981:#34d399>Position 1</gradient>\n<#9ca3af>Left-click: <gradient:#ef4444:#dc2626>Position 2</gradient>"

  # Confirmation ──────────────────────────────────────
  confirm-overwrite: "<gradient:#f59e0b:#fbbf24>⚠ Floor {floor} already has schematic</gradient>\n<#9ca3af>Type '<gradient:#10b981:#34d399>confirm {schematic} {floor}</gradient>' to replace"
  confirmed-overwrite: "<gradient:#10b981:#34d399>✓ Confirmed! Replacing floor {floor}</gradient>"

  # 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 spawn(s)</gradient>"

  # Floor Configuration Output ────────────────────────
  floors-divider: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━</gradient>"
  floors-header: "<gradient:#f59e0b:#fbbf24><bold>Floor Configuration - {room}</bold></gradient>"
  floors-total: "<#9ca3af>Total Floors: <#fbbf24>{count}"
  floors-no-floors: "<#ef4444>No floors created yet!"
  floors-no-floors-hint: "<#9ca3af>Enter a schematic name in chat to create the first floor."
  floors-no-floors-hint-gui: "<#9ca3af>Use the schematic browser to select a schematic for the first floor."
  floors-entry: "<#fbbf24>Floor {index}<#9ca3af>: <#d1d5db>{schematic}{marker} <#9ca3af>({spawns} spawns)"
  floors-marker-custom: " <gradient:#10b981:#34d399>(custom)</gradient>"
  floors-marker-default: " <#9ca3af>(default)"
  floors-customize-hint: "<#9ca3af>Type '<#fbbf24><schematic> <floor#><#9ca3af>' to customize"
  floors-customize-hint-gui: "<#9ca3af>Use the schematic browser or type '<#fbbf24><schematic> <floor#><#9ca3af>' to customize"
  floors-done-hint: "<#9ca3af>Type '<#fbbf24>done<#9ca3af>' when 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-schematics: "<#fbbf24>/sf wand schematics <#9ca3af>- Browse & paste schematics"
  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..."
  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-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-cleared: "<gradient:#10b981:#34d399>✓ Floor {floor} cleared!</gradient> <#9ca3af>Dropping to next floor..."
  floor-next: "<gradient:#f59e0b:#fbbf24>⚡ Floor {floor}</gradient> <#6b7280>•</#6b7280> <gradient:#ef4444:#dc2626>{mobs} mobs</gradient> <#9ca3af>to clear!"

  # Victory ───────────────────────────────────────────
  victory-header: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
  victory-title: "<gradient:#f59e0b:#fbbf24><bold>✦ Dungeon Cleared</bold></gradient>"
  victory-room: "<#6b7280>Room <gradient:#f59e0b:#fbbf24>{room}</gradient>"
  victory-completed: "<gradient:#10b981:#34d399>Every floor in this run is done.</gradient>"
  victory-time: "<#9ca3af>Time <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{time}</gradient>"
  victory-stats-header: "<#6b7280>──────── <gradient:#06b6d4:#3b82f6>Run stats</gradient> <#6b7280>────────"
  victory-mobs-defeated: "<#9ca3af>Mobs defeated <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{kills}</gradient>"
  victory-total-mobs: "<#9ca3af>Total kills <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{kills}</gradient>"
  victory-your-kills: "<#9ca3af>Your kills <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{kills}</gradient>"
  victory-contributions: "<#fbbf24>Party kills"
  victory-player-kills: "<#d1d5db>{player} <#6b7280>· <gradient:#f59e0b:#fbbf24>{kills}</gradient> <#6b7280>({percentage}%)"
  victory-floors-cleared: "<#9ca3af>Floors cleared <#6b7280>·</#6b7280> <gradient:#f59e0b:#fbbf24>{floors}</gradient>"
  victory-footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"

  # Failure ───────────────────────────────────────────
  dungeon-failed: "<gradient:#ef4444:#dc2626>✘ You fell into the void! Dungeon failed.</gradient>"
  player-died: "<gradient:#ef4444:#dc2626>☠ {player} has fallen!</gradient>"
  removed-from-dungeon: "<gradient:#ef4444:#dc2626>✘ You were removed from the dungeon.</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>"

# ═════════════════════════════════════════════════════════════════
#  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>Vote for a challenge modifier to earn bonus rewards!"
  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})</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>Standard rewards <#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-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 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>Standard rewards, no modifiers."
  result-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"

  # Active weakness display ──────────────────────────
  applied: "<gradient:#ef4444:#dc2626>☠ Weakness active:</gradient> {name} <#6b7280>(x{multiplier} rewards)"
  removed: "<gradient:#10b981:#34d399>✓ Weakness effects removed.</gradient>"

# ═════════════════════════════════════════════════════════════════
#  ROOM - Join/leave/list commands
# ═════════════════════════════════════════════════════════════════
room:
  joined: "<gradient:#10b981:#34d399>✓ Joined room '<gradient:#f59e0b:#fbbf24>{room}</gradient>'</gradient>"
  started: "<gradient:#10b981:#34d399>✓ Starting room '<gradient:#f59e0b:#fbbf24>{room}</gradient>'...</gradient>"
  left: "<gradient:#06b6d4:#3b82f6>← Left room</gradient>"
  left-session: "<gradient:#10b981:#34d399>✓ You have left the room session.</gradient>"
  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-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 current room"
  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>"

# ═════════════════════════════════════════════════════════════════
#  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"
  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-room: "<gradient:#ef4444:#dc2626>✘ Already in a dungeon!</gradient>"
  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."
  room-full: "<gradient:#ef4444:#dc2626>✘ Room is full!</gradient> <#9ca3af>Maximum <gradient:#f59e0b:#fbbf24>{max}</gradient> players allowed"
  session-in-progress: "<gradient:#ef4444:#dc2626>✘ Session already started!</gradient> <#9ca3af>Join-in-progress is disabled"
  player-not-found: "<gradient:#ef4444:#dc2626>✘ Player not found!</gradient>"
  editor-no-floors: "<gradient:#ef4444:#dc2626>✘ Add floors before configuring!</gradient>"
  editor-select-floor: "<gradient:#f59e0b:#fbbf24>⚠ Select a floor first!</gradient> <#9ca3af>Use the floor selector"
  editor-preview-disabled: "<gradient:#f59e0b:#fbbf24>⚠ Enable previews to adjust gaps!</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>"

# ═════════════════════════════════════════════════════════════════
#  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"
  hazard-enabled: "<gradient:#10b981:#34d399>✓ Falling hazard:</gradient> <#fbbf24>Enabled"
  hazard-disabled: "<gradient:#10b981:#34d399>✓ Falling hazard:</gradient> <#9ca3af>Disabled"
  particle-input-title: "<gradient:#ef4444:#fbbf24>Falling 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>"
  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 ────────────────────────────────────────
  activated-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
  activated-title: "<gradient:#d946ef:#ec4899>Editor mode on</gradient>"
  activated-room: "<#9ca3af>» <gradient:#f59e0b:#fbbf24>{room}</gradient>"
  activated-steps-header: "<gradient:#06b6d4:#3b82f6>━━━ Creation Steps ━━━</gradient>"
  activated-step-1: "<#f59e0b>1.</#f59e0b> <#d1d5db>Select starter room area <#6b7280>(Right/Left-click with wand)"
  activated-step-2: "<#f59e0b>2.</#f59e0b> <#d1d5db>Set entry & exit spawn points <#6b7280>(Right-click blocks)"
  activated-step-3: "<#f59e0b>3.</#f59e0b> <#d1d5db>Add floor schematics <#6b7280>(Type in chat: <#d1d5db><schematic> <layer></#d1d5db><#6b7280>)"
  activated-step-3-gui: "<#f59e0b>3.</#f59e0b> <#d1d5db>Add floor schematics <#6b7280>(Shift + Right-Click the <#d1d5db>wand</#d1d5db><#6b7280>)"
  activated-step-4: "<#f59e0b>4.</#f59e0b> <#d1d5db>Configure mobs & settings <#6b7280>(Use hotbar items)"
  activated-step-5: "<#f59e0b>5.</#f59e0b> <#d1d5db>Finish and save <#6b7280>(Type <#d1d5db>'done'</#d1d5db> or <gradient:#10b981:#34d399>/sf wand finish</gradient><#6b7280>)"
  activated-help: "<#9ca3af>💡 Hotbar: Floor Editor, Falling Hazard, and Room Settings (nether star)."
  activated-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"

  # Deactivation ─────────────────────────────────────
  deactivated-header: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
  deactivated-title: "<gradient:#ec4899:#d946ef>Editor mode off</gradient>"
  deactivated-saved: "<gradient:#10b981:#34d399>✔</gradient> <#9ca3af>Room '<gradient:#f59e0b:#fbbf24>{room}</gradient>' <gradient:#10b981:#34d399>saved.</gradient>"
  deactivated-usage: "<#9ca3af>Use <gradient:#f59e0b:#fbbf24>/sf join <room></gradient> <#9ca3af>to play"
  deactivated-cancelled: "<gradient:#ef4444:#991b1b>✘ Room creation cancelled</gradient>"
  deactivated-no-changes: "<#9ca3af>No changes were saved"
  deactivated-footer: "<gradient:#3b3b3b:#1a1a1a>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"

  # Actionbar Hints ──────────────────────────────────
  hint-pos1: "<#fbbf24>[Editor] <#9ca3af>Right-click wand to set Position 1"
  hint-pos2: "<#fbbf24>[Editor] <#9ca3af>Right-click wand to set Position 2"
  hint-entry: "<#fbbf24>[Editor] <#9ca3af>Right-click to set entry spawn point"
  hint-exit: "<#fbbf24>[Editor] <#9ca3af>Right-click to set exit spawn point"
  hint-floors: "<#fbbf24>[Editor] <#9ca3af>Type '<schematic> <layer>' to add floors"
  hint-floors-gui: "<#fbbf24>[Editor] <#9ca3af>Shift + Right-Click wand to open the schematic browser"
  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"
  countdown-adjusted: "<gradient:#f59e0b:#fbbf24>Countdown:</gradient> <#9ca3af>{seconds} seconds"
  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}"
  mob-type-set: "<gradient:#f59e0b:#fbbf24>Floor {floor} mob type:</gradient> <#9ca3af>{type} <#fbbf24>{mob}"

  # 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-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-header: "<gradient:#f59e0b:#fbbf24><bold>⚔ MOB TYPE INPUT</bold></gradient>"
  mob-input-prompt: "<#9ca3af>Enter mob type for <gradient:#f59e0b:#fbbf24>Floor {floor}</gradient>:"
  mob-input-format: "<gradient:#f59e0b:#fbbf24>Format:</gradient>"
  mob-input-vanilla: "  <gradient:#10b981:#34d399>vanilla:<entity></gradient> <#6b7280>• <#9ca3af>Vanilla Minecraft mob"
  mob-input-mythic: "  <gradient:#d946ef:#ec4899>mythicmobs:<mobid></gradient> <#6b7280>• <#9ca3af>MythicMobs custom mob"
  mob-input-vanilla-title: "<gradient:#10b981:#34d399>Vanilla Hostile Mobs (Click to select):</gradient>"
  mob-input-examples: "<#6b7280>Examples: <#d1d5db>vanilla:zombie</#d1d5db>, <#d1d5db>mythicmobs:FireDemon"
  mob-input-cancel: "<#6b7280>Type '<gradient:#ef4444:#dc2626>cancel</gradient>' to abort"

  # 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"
  feedback-mob-floor-selected: "<gradient:#06b6d4:#3b82f6>Mob Settings:</gradient> <#9ca3af>Floor {floor}"
  feedback-commands-none: "<#ef4444>✘ Floor {floor} has no commands to clear"
  feedback-commands-cleared: "<gradient:#10b981:#34d399>✓ Cleared {count} commands from floor {floor}</gradient>"

  # 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>"

  # Command List ──────────────────────────────────────
  command-list-header: "<gradient:#3b82f6:#60a5fa>━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
  command-list-title: "<gradient:#3b82f6:#60a5fa><bold>Commands - Floor {floor}</bold></gradient>"
  command-list-empty: "<#9ca3af>No commands configured\n<#6b7280>Right-click the Command Block to add commands"
  command-list-entry: "<gradient:#f59e0b:#fbbf24>{index}.</gradient> <#d1d5db>{command}"
  command-list-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"
  wand-schematics: "<gradient:#f59e0b:#fbbf24>/sf wand schematics</gradient> <#6b7280>• <#9ca3af>Browse & paste schematics"
  room-join: "<gradient:#06b6d4:#3b82f6>/sf join <room></gradient> <#6b7280>• <#9ca3af>Join a room"
  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 current room"
  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"
  footer: "<gradient:#3b3b3b:#1a1a1a>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</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"
  opened: "<gradient:#10b981:#34d399>✓ Opening menu...</gradient>"
  not-implemented: "<gradient:#f59e0b:#fbbf24>⚠ This menu is not yet available!</gradient> <#9ca3af>Coming soon"
  error: "<gradient:#ef4444:#dc2626>✘ An error occurred while opening the menu!</gradient>"
  click-error: "<gradient:#ef4444:#dc2626>✘ An error occurred. GUI closed for safety.</gradient>"

# ═════════════════════════════════════════════════════════════════
#  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>Open the lobby menu to buy access to locked floors before the room locks."
  lobby-guest-hint: "<#9ca3af>The host can buy access to locked floors while you wait."
  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."

# ═════════════════════════════════════════════════════════════════
#  LEADERBOARD - Leaderboard display
# ═════════════════════════════════════════════════════════════════
leaderboard:
  no-data: "<#9ca3af>No leaderboard data available for this room yet."
  header: "<gradient:#f59e0b:#fbbf24>━━━ 🏆 Leaderboard: {room} ━━━</gradient>"

# ═════════════════════════════════════════════════════════════════
#  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>"

# ═════════════════════════════════════════════════════════════════
#  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 to protect your client.</#f59e0b>"
  too-large: "<gradient:#ef4444:#dc2626>✘ Schematic has {total} blocks (max preview {max}). Paste still works via chat.</gradient>"
  actionbar: "<gradient:#d946ef:#ec4899>📐 {schematic}</gradient> <#9ca3af>| Distance: <white>{distance}</white> | Scroll to adjust | Type '<#fbbf24>done</#fbbf24>' to paste, '<#ef4444>cancel</#ef4444>' to abort"
  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>"

gui.yml

# ============================================
#       SoapsFloor GUI Configuration
# ============================================
#
# Suite GUI: config.yml -> gui.enabled is the master kill-switch for this plugin's
# inventory UIs. This file defines menu layout (titles, sizes, items) and UI sounds.
# Text may use MiniMessage; & and § color codes are accepted where documented.
# SoapsAdmin uses a gui/ folder for many menus (advanced suite layout).
#
# All text supports MiniMessage format.
# Placeholders: {player}, {rooms_available}, {in_session},
#   {current_room}, {total_kills}, {games_completed},
#   {best_time_current_room}, {best_time_overall}, {best_room_name},
#   {rooms_with_best}, {feedback_mode}, {actionbar_state}, {preview_state},
#   {room_id}, {floors}, {players}, {max_players}, {status}, {best_time},
#   {room}, {tab}, {rank}, {value}, {schematic}, {size}, {page}
#
# Actions:
#   [close]                  - Close the GUI
#   [open_menu] <id>         - Open another menu (main_hub, room_browser, stats,
#                              settings, admin, leaderboards, leaderboard_view,
#                              schematic_browser)
#   [command] <cmd>          - Player runs /<cmd> (supports placeholders)
#   [prev_page]              - Previous page (paginated GUIs)
#   [next_page]              - Next page (paginated GUIs)
#   [refresh]                - Refresh current GUI
#   [join_random]            - Join a random available room
#   [leave_session]          - Leave current session
#   [help]                   - Show help commands
#   [toggle] feedback        - Toggle feedback mode
#   [toggle] actionbar       - Toggle actionbar hints
#   [toggle] preview         - Toggle floor preview
#   [reload]                 - Reload plugin configuration
#   [debug]                  - Show debug info
#   [tab] time               - Switch to time tab (leaderboard)
#   [tab] kills              - Switch to kills tab (leaderboard)
#   [none]                   - No action (decorative item)
#
# Slot numbers start at 0. Multi-slot: "0,1,2"
# permission: soapsfloor.some.perm  - item only shown/clickable with permission
# material-active / name-active / lore-active are used for toggled states.
# ============================================

settings:
  # Material used to fill empty slots in all GUIs
  filler-material: GRAY_STAINED_GLASS_PANE
  filler-name: " "
  # Sound played on GUI open
  open-sound: BLOCK_CHEST_OPEN
  open-sound-volume: 0.7
  open-sound-pitch: 1.2
  # Sound played on GUI click (set to NONE to disable)
  click-sound: UI_BUTTON_CLICK
  click-sound-volume: 0.5
  click-sound-pitch: 1.0

# ============================================
#               Menu Definitions
# ============================================
# size = ROW count (3–6), NOT total slot count. 5 rows = 45 slots.
menus:

  # ------------------------------------------
  #          Main Hub (5 rows)
  # ------------------------------------------
  main-hub:
    title: "<gradient:#f59e0b:#fbbf24><bold>🧼 SoapsFloor Hub</bold></gradient>"
    size: 5
    items:
      # Outer frame only — no inner filler panes
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26,27,35,36,44"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      # ── Row 1: info ──
      leaderboards:
        slot: 11
        material: GOLD_INGOT
        name: "<gradient:#f59e0b:#fbbf24><bold>🏆 Leaderboards</bold></gradient>"
        lore:
          - ""
          - "<gray>View top players for"
          - "<gray>each dungeon room."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to view</gradient>"
        action: "[open_menu] leaderboards"

      stats:
        slot: 13
        material: PLAYER_HEAD
        name: "<gradient:#3b82f6:#60a5fa><bold>📊 Your Stats</bold></gradient>"
        lore:
          - ""
          - "<gray>Total kills, wins, and"
          - "<gray>best times per room."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to view</gradient>"
        action: "[open_menu] stats"

      help:
        slot: 15
        material: BOOK
        name: "<gradient:#f59e0b:#fbbf24><bold>📖 Commands</bold></gradient>"
        lore:
          - ""
          - "<gray>List all available commands"
          - "<gray>and usage tips."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click for help</gradient>"
        action: "[help]"

      # ── Row 2: play ──
      join_random:
        slot: 20
        material: EMERALD
        name: "<gradient:#10b981:#34d399><bold>⚡ Quick Join</bold></gradient>"
        lore:
          - ""
          - "<gray>Join an open room, or"
          - "<gray>queue if all are full."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to join</gradient>"
        action: "[join_random]"

      browse_rooms:
        slot: 22
        material: COMPASS
        name: "<gradient:#06b6d4:#3b82f6><bold>🗺 Room Browser</bold></gradient>"
        lore:
          - ""
          - "<gray>Browse every room and"
          - "<gray>pick your challenge."
          - ""
          - "<yellow>Rooms: <gold>{rooms_available}"
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to browse</gradient>"
        action: "[open_menu] room_browser"

      current_session:
        slot: 24
        material: NETHER_STAR
        name: "<gradient:#a855f7:#c084fc><bold>📍 Session Status</bold></gradient>"
        lore:
          - ""
          - "<gray>Player: <white>{player}"
          - "<gray>In Session: <white>{in_session}"
          - "<gray>Room: <white>{current_room}"
          - ""
          - "<#9ca3af>Live status overview."
        action: "[none]"

      # ── Row 3: tools ──
      admin_control:
        slot: 29
        material: REDSTONE_TORCH
        name: "<gradient:#ef4444:#dc2626><bold>🛠 Admin Control</bold></gradient>"
        lore:
          - ""
          - "<gray>Open admin panel for"
          - "<gray>server management."
          - ""
          - "<red>Requires permission</red>"
        permission: soapsfloor.admin.gui
        action: "[open_menu] admin"

      settings:
        slot: 33
        material: COMPARATOR
        name: "<gradient:#8b5cf6:#a78bfa><bold>⚙ Settings</bold></gradient>"
        lore:
          - ""
          - "<gray>Customize your experience"
          - "<gray>and editor options."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to open</gradient>"
        permission: soapsfloor.admin.gui
        action: "[open_menu] settings"

      # ── Row 4: leave / close (own row, spaced) ──
      leave_session:
        slot: 39
        material: RED_BED
        name: "<gradient:#ef4444:#dc2626><bold>🚪 Leave Session</bold></gradient>"
        lore:
          - ""
          - "<gray>Exit your current room"
          - "<gray>and return to the exit point."
          - ""
          - "<red><bold>⚠</bold> Progress will be lost</red>"
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to leave</gradient>"
        action: "[leave_session]"

      close:
        slot: 41
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu."
        action: "[close]"


  # ------------------------------------------
  #          Room Browser (Paginated, 5 rows)
  # ------------------------------------------
  room-browser:
    title: "<gradient:#06b6d4:#3b82f6><bold>🗺 Room Browser</bold></gradient>"
    size: 5

    room-slots:
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      - 16
      - 19
      - 20
      - 21
      - 22
      - 23
      - 24
      - 25

    room-item:
      material: PAPER
      name: "<gradient:#10b981:#34d399><bold>{room_id}</bold></gradient>"
      lore:
        - ""
        - "<gray>Floors: <white>{floors}"
        - "<gray>Players: <white>{players}<gray>/<white>{max_players}"
        - "<gray>Status: <white>{status}"
        - ""
        - "<gray>Your Best: <gold>{best_time}"
        - ""
        - "<gradient:#f59e0b:#fbbf24>▸ Click to join</gradient>"

    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26,27,35,37,38,39,42,43"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      prev-page:
        slot: 36
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>◀ Previous</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to previous page"
        action: "[prev_page]"

      refresh:
        slot: 40
        material: CLOCK
        name: "<gradient:#10b981:#34d399><bold>⟳ Refresh</bold></gradient>"
        lore:
          - ""
          - "<gray>Refresh room list"
        action: "[refresh]"

      back:
        slot: 41
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Back</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to main menu"
        action: "[open_menu] main_hub"

      next-page:
        slot: 44
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>Next ▶</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to next page"
        action: "[next_page]"


  # ------------------------------------------
  #          Player Stats (3 rows)
  # ------------------------------------------
  player-stats:
    title: "<gradient:#3b82f6:#60a5fa><bold>📊 Your Statistics</bold></gradient>"
    size: 3
    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      background:
        slot: "10,12,14,16,19,20,21,23"
        material: LIGHT_GRAY_STAINED_GLASS_PANE
        name: " "

      total-kills:
        slot: 10
        material: IRON_SWORD
        name: "<gradient:#ef4444:#dc2626><bold>Monsters Killed</bold></gradient>"
        lore:
          - ""
          - "<gray>Total: <white>{total_kills}"
          - "<gray>Across all runs"

      games-completed:
        slot: 13
        material: EMERALD
        name: "<gradient:#10b981:#34d399><bold>Games Completed</bold></gradient>"
        lore:
          - ""
          - "<gray>Total: <white>{games_completed}"
          - "<gray>All rooms combined"

      best-time-current:
        slot: 16
        material: CLOCK
        name: "<gradient:#f59e0b:#fbbf24><bold>Best Time (Current Room)</bold></gradient>"
        lore:
          - ""
          - "<gray>Best: <white>{best_time_current_room}"
          - "<gray>Room you are in now"

      best-time-overall:
        slot: 22
        material: GOLD_INGOT
        name: "<gradient:#f59e0b:#fbbf24><bold>Best Time (Overall)</bold></gradient>"
        lore:
          - ""
          - "<gray>Best: <white>{best_time_overall}"
          - "<gray>Room: <white>{best_room_name}"

      rooms-with-best:
        slot: 19
        material: BOOK
        name: "<gradient:#06b6d4:#3b82f6><bold>Rooms Tracked</bold></gradient>"
        lore:
          - ""
          - "<gray>Best times set: <white>{rooms_with_best}"

      back:
        slot: 20
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>↩ Back</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to main menu"
        action: "[open_menu] main_hub"

      close:
        slot: 24
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"


  # ------------------------------------------
  #          Player Settings (3 rows)
  # ------------------------------------------
  player-settings:
    title: "<gradient:#8b5cf6:#a78bfa><bold>⚙ Settings</bold></gradient>"
    size: 3
    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      background:
        slot: "10,12,14,16,19,20,21,22,23"
        material: LIGHT_GRAY_STAINED_GLASS_PANE
        name: " "

      toggle-feedback:
        slot: 11
        material: COMPARATOR
        name: "<gradient:#8b5cf6:#a78bfa><bold>Feedback Mode</bold></gradient>"
        lore:
          - ""
          - "<gray>Switch between <white>Chat</white> and"
          - "<gray><white>Actionbar</white> for editor feedback."
          - ""
          - "<gray>Current: <white>{feedback_mode}"
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to toggle</gradient>"
        action: "[toggle] feedback"

      toggle-actionbar:
        slot: 13
        material: CLOCK
        name: "<gradient:#06b6d4:#3b82f6><bold>Actionbar Hints</bold></gradient>"
        lore:
          - ""
          - "<gray>Show or hide the actionbar"
          - "<gray>hints while using the wand."
          - ""
          - "<gray>Current: <white>{actionbar_state}"
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to toggle</gradient>"
        action: "[toggle] actionbar"

      toggle-preview:
        slot: 15
        material: GLASS
        name: "<gradient:#10b981:#34d399><bold>Floor Preview</bold></gradient>"
        lore:
          - ""
          - "<gray>Toggle ghost-block previews"
          - "<gray>for floor placement in the"
          - "<gray>wand editor."
          - ""
          - "<gray>Current: <white>{preview_state}"
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to toggle</gradient>"
        action: "[toggle] preview"

      back:
        slot: 20
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>↩ Back</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to main menu"
        action: "[open_menu] main_hub"

      close:
        slot: 24
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"


  # ------------------------------------------
  #          Admin Control (3 rows)
  # ------------------------------------------
  admin-control:
    title: "<gradient:#ef4444:#dc2626><bold>🛠 Admin Control</bold></gradient>"
    size: 3
    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      background:
        slot: "10,12,14,16,19,21,23,25"
        material: LIGHT_GRAY_STAINED_GLASS_PANE
        name: " "

      reload:
        slot: 11
        material: LIME_DYE
        name: "<gradient:#10b981:#34d399><bold>Reload Config</bold></gradient>"
        lore:
          - ""
          - "<gray>Reload plugin configuration"
        permission: soapsfloor.admin.gui
        action: "[reload]"

      debug:
        slot: 13
        material: REDSTONE
        name: "<gradient:#ef4444:#dc2626><bold>Debug Info</bold></gradient>"
        lore:
          - ""
          - "<gray>Show debug status"
        permission: soapsfloor.admin.gui
        action: "[debug]"

      open-room-browser:
        slot: 15
        material: COMPASS
        name: "<gradient:#06b6d4:#3b82f6><bold>Room Browser</bold></gradient>"
        lore:
          - ""
          - "<gray>Open room browser"
        action: "[open_menu] room_browser"

      open-main-hub:
        slot: 12
        material: NETHER_STAR
        name: "<gradient:#f59e0b:#fbbf24><bold>Main Hub</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to main hub"
        action: "[open_menu] main_hub"

      close:
        slot: 14
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"


  # ------------------------------------------
  #      Leaderboard Room Selector (Paginated, 5 rows)
  # ------------------------------------------
  leaderboard-rooms:
    title: "<gradient:#f59e0b:#fbbf24><bold>🏆 Leaderboards</bold></gradient>"
    size: 5

    room-slots:
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      - 16
      - 19
      - 20
      - 21
      - 22
      - 23
      - 24
      - 25

    room-item:
      material: GOLDEN_APPLE
      name: "<gradient:#f59e0b:#fbbf24><bold>{room_id}</bold></gradient>"
      lore:
        - ""
        - "<gray>Floors: <white>{floors}"
        - ""
        - "<gradient:#f59e0b:#fbbf24>▸ Click to view leaderboard</gradient>"

    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26,27,35,37,38,39,42,43"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      prev-page:
        slot: 36
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>◀ Previous</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to previous page"
        action: "[prev_page]"

      back:
        slot: 40
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>↩ Back</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to main hub"
        action: "[open_menu] main_hub"

      close:
        slot: 41
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"

      next-page:
        slot: 44
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>Next ▶</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to next page"
        action: "[next_page]"


  # ------------------------------------------
  #      Leaderboard View (Per Room, 5 rows)
  # ------------------------------------------
  leaderboard-view:
    title: "<gradient:#f59e0b:#fbbf24><bold>🏆 {room} – {tab}</bold></gradient>"
    size: 5

    entry-slots:
      - 19
      - 20
      - 21
      - 22
      - 23
      - 24
      - 25
      - 28
      - 29
      - 30

    entry-item:
      name: "<gold>#{rank}</gold> <white>{player}</white>"
      lore:
        - ""
        - "<gray>Value: <gold>{value}</gold>"

    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,10,12,13,14,16,17,18,26,27,35,37,38,39,40,41,42,43"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      tab_time:
        slot: 11
        material: CLOCK
        name: "<gradient:#10b981:#34d399><bold>⏱ Best Time</bold></gradient>"
        lore:
          - ""
          - "<gray>Ranked by fastest"
          - "<gray>completion time."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to view</gradient>"
        action: "[tab] time"

      tab_kills:
        slot: 15
        material: DIAMOND_SWORD
        name: "<gradient:#ef4444:#dc2626><bold>⚔ Best Kills</bold></gradient>"
        lore:
          - ""
          - "<gray>Ranked by most kills"
          - "<gray>in a single run."
          - ""
          - "<gradient:#f59e0b:#fbbf24>▸ Click to view</gradient>"
        action: "[tab] kills"

      back:
        slot: 36
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>↩ Back to Rooms</bold></gradient>"
        lore:
          - ""
          - "<gray>Return to room list"
        action: "[open_menu] leaderboards"

      close:
        slot: 44
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"


  # ------------------------------------------
  #          Schematic Browser (Paginated, 5 rows)
  # ------------------------------------------
  schematic-browser:
    title: "<gradient:#d946ef:#ec4899><bold>📂 Schematic Browser</bold></gradient>"
    size: 5

    schematic-slots:
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      - 16
      - 19
      - 20
      - 21
      - 22
      - 23
      - 24
      - 25

    schematic-item:
      material: PAPER
      name: "<gradient:#f59e0b:#fbbf24>{schematic}</gradient>"
      lore:
        - ""
        - "<gray>Size: <white>{size}</white> blocks"
        - ""
        - "<gray>Click to select this"
        - "<gray>schematic for a floor."
        - ""
        - "<gradient:#f59e0b:#fbbf24>▸ Click to select</gradient>"

    items:
      border:
        slot: "0,1,2,3,4,5,6,7,8,9,17,18,26,27,35,37,38,39,42,43"
        material: GRAY_STAINED_GLASS_PANE
        name: " "

      prev-page:
        slot: 36
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>◀ Previous</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to previous page"
        action: "[prev_page]"

      next-page:
        slot: 44
        material: ARROW
        name: "<gradient:#f59e0b:#fbbf24><bold>Next ▶</bold></gradient>"
        lore:
          - ""
          - "<gray>Go to next page"
        action: "[next_page]"

      close:
        slot: 40
        material: BARRIER
        name: "<gradient:#ef4444:#dc2626><bold>✖ Close</bold></gradient>"
        lore:
          - ""
          - "<gray>Close this menu"
        action: "[close]"

      empty-notice:
        slot: 22
        material: CHEST
        name: "<gradient:#06b6d4:#3b82f6><bold>📦 Built-in Templates</bold></gradient>"
        lore:
          - ""
          - "<gray>SoapsFloor includes two starter schematics:"
          - "<white>▸ ROOM</white> <gray>(floor template)</gray>"
          - "<white>▸ STARTER_ROOM</white> <gray>(lobby / entry room)</gray>"
          - ""
          - "<gray>If this folder is empty, run <white>/sf reload</white>"
          - "<gray>or restart the server to extract them."
          - ""
          - "<gray>Add custom <white>.schem</white> files to"
          - "<gray><white>plugins/SoapsFloor/schematics/</white>"
        action: "[none]"

    floor-selector:
      size: 5
      title: "<gradient:#06b6d4:#3b82f6><bold>⚙ Select Layer Count</bold></gradient>"
      slots:
        decrement-five: 20
        decrement-one: 21
        count-display: 22
        increment-one: 23
        increment-five: 24
        back: 39
        confirm: 41

weaknesses.yml

# ==========================================
#     Weakness / Challenge Modifier System
# ==========================================
# Optional vote-before-run challenges. Completing a run
# under a weakness boosts reward rolls by the multiplier.

enabled: true

voting:
  duration: 15
  options-count: 3
  allow-no-weakness: true

# ==========================================
# Weakness Definitions
# ==========================================
# name / description support MiniMessage.
# multiplier: 1.0 = normal rolls, 1.5 = 50% more rolls.
# enabled: false keeps the entry but out of the vote pool.
# Prefer challenges that always matter in a floor-drop run
# (not only if the player already uses a specific item).
weaknesses:
  no-sprint:
    name: "<#ef4444>No Sprint"
    description: "Cannot sprint. Mobs catch up faster."
    icon: LEATHER_BOOTS
    multiplier: 1.3
    enabled: true

  exposed:
    name: "<#ef4444>Exposed"
    description: "Cannot sneak. Full hitbox and easier for mobs to notice you."
    icon: SPYGLASS
    multiplier: 1.25
    enabled: true

  half-hearts:
    name: "<#ef4444>Half Hearts"
    description: "Max health cut in half."
    icon: GOLDEN_APPLE
    multiplier: 1.5
    enabled: true

  soft-spot:
    name: "<#ef4444>Soft Spot"
    description: "Take 25% more damage from all sources."
    icon: REDSTONE
    multiplier: 1.35
    enabled: true

  no-healing:
    name: "<#ef4444>No Healing"
    description: "Natural regen and regen potions do nothing."
    icon: FERMENTED_SPIDER_EYE
    multiplier: 1.5
    enabled: true

  # Always bites: shield ban alone is free if nobody uses shields.
  no-shield:
    name: "<#ef4444>Open Guard"
    description: "No shields, and take 20% more damage."
    icon: SHIELD
    multiplier: 1.4
    enabled: true

  no-crits:
    name: "<#ef4444>No Crits"
    description: "Critical hits deal normal damage."
    icon: IRON_SWORD
    multiplier: 1.3
    enabled: true

  slow-hands:
    name: "<#ef4444>Slow Hands"
    description: "Attack speed reduced by 40%."
    icon: CLOCK
    multiplier: 1.3
    enabled: true

  short-reach:
    name: "<#ef4444>Short Reach"
    description: "Melee reach cut in half."
    icon: STICK
    multiplier: 1.3
    enabled: true

  weakness-effect:
    name: "<#ef4444>Weak Arms"
    description: "Melee damage reduced."
    icon: SPIDER_EYE
    multiplier: 1.35
    enabled: true

  mining-fatigue:
    name: "<#ef4444>Heavy Arms"
    description: "Mining fatigue slows your swing."
    icon: PRISMARINE_SHARD
    multiplier: 1.25
    enabled: true

  fragile-armor:
    name: "<#ef4444>Fragile Armor"
    description: "Gear takes double durability damage."
    icon: CHAINMAIL_CHESTPLATE
    multiplier: 1.2
    enabled: true

  no-jumping:
    name: "<#ef4444>No Jumping"
    description: "Cannot jump."
    icon: RABBIT_FOOT
    multiplier: 1.35
    enabled: true

  heavy-gravity:
    name: "<#ef4444>Heavy Gravity"
    description: "Fall faster. Jumps feel heavier."
    icon: ANVIL
    multiplier: 1.4
    enabled: true

  slowness:
    name: "<#ef4444>Slowness"
    description: "Move slower."
    icon: SOUL_SAND
    multiplier: 1.25
    enabled: true

  hunger-drain:
    name: "<#ef4444>Hunger Drain"
    description: "Hunger drops every few seconds."
    icon: ROTTEN_FLESH
    multiplier: 1.3
    enabled: true

  blindness:
    name: "<#ef4444>Blindness"
    description: "Vision is severely limited."
    icon: INK_SAC
    multiplier: 1.4
    enabled: true

  darkness:
    name: "<#ef4444>Darkness"
    description: "See only a short distance."
    icon: SCULK
    multiplier: 1.45
    enabled: true

  poison:
    name: "<#ef4444>Lingering Poison"
    description: "Constant poison drain."
    icon: POISONOUS_POTATO
    multiplier: 1.5
    enabled: true

  no-food:
    name: "<#ef4444>Empty Stomach"
    description: "Cannot eat food. Manage hunger carefully."
    icon: BOWL
    multiplier: 1.35
    enabled: true

  no-potions:
    name: "<#ef4444>Dry Flask"
    description: "Cannot drink or throw potions."
    icon: GLASS_BOTTLE
    multiplier: 1.4
    enabled: true

  no-ranged:
    name: "<#ef4444>Melee Only"
    description: "Bows, crossbows, and tridents will not fire."
    icon: BOW
    multiplier: 1.25
    enabled: true

  no-totems:
    name: "<#ef4444>No Second Chance"
    description: "Totems of Undying do not activate."
    icon: TOTEM_OF_UNDYING
    multiplier: 1.3
    enabled: true

  heavy-hit:
    name: "<#ef4444>Heavy Hit"
    description: "Take much stronger knockback from hits."
    icon: PISTON
    multiplier: 1.35
    enabled: true

  bleeding:
    name: "<#ef4444>Bleeding"
    description: "Getting hit applies brief wither."
    icon: GHAST_TEAR
    multiplier: 1.4
    enabled: true

rewards.yml

# ═════════════════════════════════════════════════════════════════
#  SOAPSFLOOR REWARD TABLES
#  Assign to a room: /sf setreward <room> <table>
#  Clear:            /sf setreward <room> none
# ═════════════════════════════════════════════════════════════════
#
# append-to-global-rewards:
#   true  → table rolls + victory.reward-commands in config.yml
#   false → table only (skips global commands for that room)
#
# Table keys:
#   rolls         Weighted picks per player (default 1)
#   unique-rolls  No duplicate weighted entry on the same completion
#
# Entry keys:
#   weight      Relative chance (higher = more likely). Ignored if guaranteed.
#   guaranteed  Always granted once before weighted rolls
#   message     Optional MiniMessage to the player (prefix applied)
#   commands    Console commands. Placeholders:
#                 {player} {room} {time} {kills} {total_kills} {floors}
#               Prefixes (same as victory.reward-commands):
#                 message:<text>    private message
#                 broadcast:<text>  server broadcast (fires each time this entry is rolled)
#
# Weakness × party multipliers use fractional extras:
#   rolls 1 × 1.3 → 1 roll + 30% chance of a second (not always ceil to 2).

append-to-global-rewards: true

tables:
  # Casual / tutorial rooms: one pick
  basic:
    rolls: 1
    entries:
      - weight: 50
        message: "<gradient:#10b981:#34d399>+50 Coins!</gradient>"
        commands:
          - "eco give {player} 50"
      - weight: 30
        message: "<gradient:#f59e0b:#fbbf24>+100 Coins!</gradient>"
        commands:
          - "eco give {player} 100"
      - weight: 15
        message: "<gradient:#8b5cf6:#a78bfa>✦ Rare Drop: Diamond Sword!</gradient>"
        commands:
          - "give {player} diamond_sword 1"
      - weight: 5
        message: "<gradient:#ef4444:#ec4899>★ Legendary: Netherite + coins!</gradient>"
        commands:
          - "give {player} netherite_sword 1"
          - "eco give {player} 500"

  # Harder rooms: two unique picks plus a small guaranteed payout
  hard:
    rolls: 2
    unique-rolls: true
    entries:
      - guaranteed: true
        message: "<#9ca3af>Clear bonus: <#fbbf24>+75 coins</#fbbf24>."
        commands:
          - "eco give {player} 75"
      - weight: 40
        message: "<gradient:#f59e0b:#fbbf24>+200 Coins!</gradient>"
        commands:
          - "eco give {player} 200"
      - weight: 30
        message: "<gradient:#8b5cf6:#a78bfa>✦ Enchanted Book!</gradient>"
        commands:
          - "give {player} enchanted_book 1"
      - weight: 20
        message: "<gradient:#d946ef:#ec4899>★ Rare Crate Key!</gradient>"
        commands:
          - "crate givekey {player} rare 1"
      - weight: 10
        message: "<gradient:#ef4444:#dc2626>★★ Epic: Netherite Ingot!</gradient>"
        commands:
          - "give {player} netherite_ingot 1"