Default Config Files

Last updated Jul 6, 2026

Default Config Files

These are the exact default files shipped in SoapsTeleporter 1.0.5. They are copied from the plugin JAR on first run into plugins/SoapsTeleporter/.

Use this page to reset a file or compare your edits against the defaults.


config.yml

# ############################################
# #                                          #
# #   Plugin: SoapsTeleporter                #
# #                                          #
# #   Created by AlternativeSoap             #
# #   Website: www.SoapsUniverse.com         #
# #   Support: https://discord.gg/mawAzwFq   #
# #                                          #
# ############################################

# ==========================================
# General Settings
# ==========================================
general:
  # Enable debug logging (can also be toggled with /st debug)
  debug: false
  # Auto-save interval in minutes (0 to disable, recommended: 5-15)
  auto-save-interval: 5
  # Message spam prevention cooldown (milliseconds)
  message-cooldown: 3000

# ==========================================
# GUI Settings
# ==========================================
gui:
  # Enable GUI-based portal management (opens chest inventories)
  # When enabled: all management uses GUI menus, interactive chat is disabled
  # When disabled: all management uses the interactive chat system (clickable text)
  enabled: true

# ==========================================
# Performance Settings
# ==========================================
performance:
  # Maximum particles to spawn per tick (0 = unlimited, recommended: 100-200 for busy servers)
  max-particles-per-tick: 200
  # Maximum particles per portal (0 = unlimited)
  max-particles-per-portal: 500
  # Radius for detecting nearby players for particle rendering (blocks)
  nearby-player-radius: 30.0
  # Enable adaptive particle density based on player count
  adaptive-density: true
  # Number of online players required to trigger density limiting
  adaptive-density-player-threshold: 15

# ==========================================
# Particle Settings
# ==========================================
particles:
  # Enable particle effects globally
  enabled: true

  # Portal Region Particles
  portal:
    # Particle type (supports ALL Minecraft particles)
    # Popular: DUST, FLAME, END_ROD, PORTAL, ENCHANT, HEART, HAPPY_VILLAGER
    particle: "DUST"
    # Particle count per display interval
    count: 8
    # Particle spread/distribution (0.0 = tight, 1.0 = wide)
    spread: 0.3
    # Display interval in ticks (10 = 0.5 seconds, lower = smoother but more CPU)
    interval: 10
    # Enable 3D volumetric particles (fills entire portal space)
    volumetric-rendering: true

  # Teleportation Effect Particles
  teleport:
    particle: "ENCHANT"
    count: 30

  # Portal Selection Markers (wand p1/p2)
  selection:
    particle: "END_ROD"
    count: 1
    # Display interval in ticks (20 = 1 second)
    interval: 20
    spread: 0.2

# ==========================================
# Portal Mechanics
# ==========================================
portals:
  limits:
    # Maximum portals per player (0 = unlimited, bypass: st.portal.limit.bypass)
    max-portals-per-player: 0
    # Maximum portals per world (0 = unlimited)
    max-portals-per-world: 0
    # Maximum portals per chunk (0 = unlimited, prevents chunk overloading)
    max-portals-per-chunk: 4
    # Portal size limits (blocks per side)
    max-size: 50
    min-size: 1

  shape-preview:
    # Default frame block used by /st shapepreview place when no material is provided.
    default-frame-material: OBSIDIAN

  teleportation:
    # Preserve player orientation (yaw/pitch)
    preserve-orientation: true
    # Auto-adjust landing if destination is blocked
    auto-adjust-destination: true

# ==========================================
# Player Settings
# ==========================================
players:
  permissions:
    # Require specific permissions for portal access
    per-portal-permissions: true

# ==========================================
# Safety Settings
# ==========================================
safety:
  # Check for safe teleport destinations
  safe-teleport: true
  # Allow teleportation to different worlds
  cross-world: true
  # Enhanced destination safety checks
  enhanced-safety: true
  # Maximum radius to search for safe landing spots (blocks)
  safe-search-radius: 10

# ==========================================
# Random Teleport (RTP) Settings
# ==========================================
rtp:
  preload:
    enabled: true
    # Chunks to preload around destination (1 = 9 chunks total)
    radius: 1
    # Max wait time for chunk loading (milliseconds)
    timeout: 5000
    # Allow generation of new chunks
    allow-new-chunk-generation: true

  cooldown:
    enabled: true
    # Cooldown time in seconds (0 = no cooldown)
    time: 60

  retry:
    max-attempts: 10
    retry-delay: 100

# ==========================================
# Portal Protection
# ==========================================
protection:
  enabled: true
  # Radius around portal to protect (blocks)
  radius: 2
  # Protect the portal frame blocks
  protect-frame: true
  # Permission to bypass: st.protection.bypass
  bypass-permission: "st.protection.bypass"

# ==========================================
# Economy Settings (Vault Integration)
# ==========================================
economy:
  # Enable Vault economy integration (requires Vault + economy plugin)
  enabled: true
  # Currency format for display
  currency-format: "$%.2f"
  # Take payment before or after teleportation
  payment-timing: "before"
  # Refund on failed teleportation
  refund-on-failure: true

# ==========================================
# Plugin Integrations (all disabled by default)
# ==========================================
integrations:
  # WorldGuard integration - Respect region permissions
  worldguard:
    enabled: false
    require-build-permission: true
    check-teleport-permission: true
    respect-claims-rtp: true

  # Lands integration - Respect land claims
  lands:
    enabled: false
    respect-claims-rtp: true
    require-land-permission: true

messages.yml

# ############################################
# #                                          #
# #   Plugin: SoapsTeleporter                #
# #                                          #
# #   Created by AlternativeSoap             #
# #   Website: www.SoapsUniverse.com         #
# #   Support: https://discord.gg/mawAzwFq   #
# #                                          #
# ############################################

# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║               SoapsTeleporter - Messages Configuration                       ║
# ╚══════════════════════════════════════════════════════════════════════════════╝
#
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ FORMATTING SUPPORT                                                          │
# └─────────────────────────────────────────────────────────────────────────────┘
# • MiniMessage Format (Adventure API)
#   - Colors: <color:red>, <#FF5733>, <#hex>
#   - Gradients: <gradient:red:blue:green>, <gradient:#FF5733:#33FF57>
#   - Formatting: <bold>, <italic>, <underlined>, <strikethrough>, <obfuscated>
#   - Hover: <hover:show_text:'Tooltip text here'>
#   - Decorations: <rainbow>, <reset>
#   - Legacy codes also supported: <red>, <yellow>, <green>, etc.
#
# • Multi-line Messages:
#   message-name:
#     - "First line of text"
#     - "Second line of text"
#     - "Third line of text"
#
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ COMMON PLACEHOLDERS                                                         │
# └─────────────────────────────────────────────────────────────────────────────┘
# Portal & Player:
#   {portal}, {portal1}, {portal2} - Portal names
#   {player} - Player name
#   {time} - Time in seconds (cooldowns, warmup)
#   {location} - Formatted location coordinates
#
# Economy & Items:
#   {cost} - Cost amount (money or items)
#   {amount} - Required/current item amount
#   {item}, {material} - Item/material display name
#   {has} - Amount player currently has
#
# Conditions:
#   {required}, {current} - Required vs current values (level, health, food, world, biome, gamemode, etc.)
#   {maximum} - Maximum allowed value
#
# Help & Commands:
#   {command} - Command name
#   {description} - Command description
#   {page}, {total} - Page numbers for pagination
#
# Errors & Validation:
#   {error} - Error message details
#
# ┌─────────────────────────────────────────────────────────────────────────────┐
# │ CLICK EVENTS PATTERN                                                        │
# └─────────────────────────────────────────────────────────────────────────────┘
# IMPORTANT: Interactive buttons do NOT use <click> tags in YAML
# • Display text is defined in messages.yml (visual appearance only)
# • Hover text uses separate hover keys (e.g., "hover-particle")
# • Click handlers are added programmatically in Java code
# • This prevents raw <click> tags from appearing in chat
#
# ╔══════════════════════════════════════════════════════════════════════════════╗
# ║                           MESSAGE DEFINITIONS                                ║
# ╚══════════════════════════════════════════════════════════════════════════════╝

# =====================================
# GLOBAL PREFIX
# =====================================
prefix: "<gradient:#6C63FF:#A855F7>SoapsTeleporter</gradient> <dark_gray>»</dark_gray> "

# =====================================
# GENERAL
# =====================================
general:
  no-permission: "<gradient:#ff4b1f:#ff0000>You don't have permission to do that.</gradient>"
  player-only: "<gradient:#ff4b1f:#ff0000>This command can only be used by players.</gradient>"
  config-reloaded: "<gradient:#00ff6a:#00d4ff>Configuration reloaded successfully.</gradient>"

# =====================================
# SELF-TEST
# =====================================
selftest:
  header: "<gradient:#6C63FF:#A855F7>━━━ SoapsTeleporter Self-Test ━━━</gradient>"
  footer: "<gradient:#6C63FF:#A855F7>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
  all-passed: "<gradient:#00ff6a:#00d4ff>All checks passed!</gradient>"
  some-failed: "<gradient:#ff4b1f:#ff0000>Some checks failed. See above for details.</gradient>"
  config:
    ok: "<gradient:#00ff6a:#00d4ff>✔ Config loaded successfully.</gradient>"
    invalid: "<gradient:#ff4b1f:#ff0000>✘ Config has invalid entries: <#FFD700>{details}</#FFD700></gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ Config error: <#FFD700>{details}</#FFD700></gradient>"
  messages:
    ok: "<gradient:#00ff6a:#00d4ff>✔ Messages file loaded.</gradient>"
    invalid: "<gradient:#ff4b1f:#ff0000>✘ Messages file has issues: <#FFD700>{details}</#FFD700></gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ Messages file error: <#FFD700>{details}</#FFD700></gradient>"
  portal:
    ok: "<gradient:#00ff6a:#00d4ff>✔ <#FFD700>{count}</#FFD700> portals loaded.</gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ Portal loading error: <#FFD700>{details}</#FFD700></gradient>"
  particles:
    ok: "<gradient:#00ff6a:#00d4ff>✔ Particle system running.</gradient>"
    not-initialized: "<gradient:#ffa500:#ff6347>⚠ Particle system not initialized.</gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ Particle system error: <#FFD700>{details}</#FFD700></gradient>"
  permissions:
    ok: "<gradient:#00ff6a:#00d4ff>✔ Permissions system working.</gradient>"
    invalid: "<gradient:#ffa500:#ff6347>⚠ Permissions issue: <#FFD700>{details}</#FFD700></gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ Permissions error: <#FFD700>{details}</#FFD700></gradient>"
  files:
    ok: "<gradient:#00ff6a:#00d4ff>✔ All data files present.</gradient>"
    missing: "<gradient:#ff4b1f:#ff0000>✘ Missing files: <#FFD700>{details}</#FFD700></gradient>"
    error: "<gradient:#ff4b1f:#ff0000>✘ File system error: <#FFD700>{details}</#FFD700></gradient>"

# =====================================
# PORTAL EVENTS
# =====================================
portal-events:
  created: "<gradient:#00ff6a:#00d4ff>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> created successfully!</gradient>"
  removed: "<gradient:#ff6a00:#ff1a1a>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#ff6a00:#ff1a1a> has been removed.</gradient>"
  teleporting: "<gradient:#00ffea:#00bfff>Teleporting via </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ffea:#00bfff>...</gradient>"
  teleportation-failed: "<gradient:#ff4b1f:#ff0000>Teleportation failed. The destination may be unsafe.</gradient>"
  exists: "<gradient:#ff4b1f:#ff0000>A portal with that name already exists.</gradient>"
  overlap: "<gradient:#ff4b1f:#ff1a1a>Cannot create portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#ff4b1f:#ff1a1a> - it would overlap with an existing portal region.</gradient>"
  disabled: "<gradient:#ff6a00:#ff1a1a>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#ff6a00:#ff1a1a> disabled.</gradient>"
  enabled: "<gradient:#00ff6a:#00d4ff>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> enabled.</gradient>"
  linked: "<gradient:#00ff6a:#00d4ff>Portal </gradient><gradient:#f59e0b:#d97706>{portal1}</gradient><gradient:#00ff6a:#00d4ff> linked to </gradient><gradient:#f59e0b:#d97706>{portal2}</gradient><gradient:#00ff6a:#00d4ff>!</gradient>"
  portal-reset: "<gradient:#00ff6a:#00d4ff>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> has been reset to defaults.</gradient>"
  condition-set: "<gradient:#00ff6a:#00d4ff>Condition <#FFD700>{condition}</#FFD700> set on <#FFD700>{portal}</#FFD700>.</gradient>"
  condition-added: "<gradient:#00ff6a:#00d4ff>Condition </gradient><gradient:#f59e0b:#d97706>{condition}</gradient><gradient:#00ff6a:#00d4ff> added to portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff>!</gradient>"
  condition-invalid: "<gradient:#ff4b1f:#ff0000>Invalid condition: <#FFD700>{condition}</#FFD700>.</gradient>"
  condition-removed: "<gradient:#00ff6a:#00d4ff>Condition <#FFD700>{condition}</#FFD700> removed from <#FFD700>{portal}</#FFD700>.</gradient>"
  condition-not-found: "<gradient:#ff4b1f:#ff0000>Condition <#FFD700>{condition}</#FFD700> not found on portal <#FFD700>{portal}</#FFD700>.</gradient>"
  condition-item-set: "<gradient:#00ff6a:#00d4ff>Item condition set: <#FFD700>{amount}x {material}</#FFD700> on <#FFD700>{portal}</#FFD700>.</gradient>"
  condition-item-added: "<gradient:#00ff6a:#00d4ff>Item condition added: <#FFD700>{amount}x {material}</#FFD700> on <#FFD700>{portal}</#FFD700>.</gradient>"
  condition-item-invalid-amount: "<gradient:#ff4b1f:#ff0000>Invalid item amount. Must be a positive number.</gradient>"
  condition-item-invalid-material: "<gradient:#ff4b1f:#ff0000>Invalid material type: <#FFD700>{material}</#FFD700>.</gradient>"
  no-conditions-to-remove: "<gradient:#ff4b1f:#ff0000>Portal <#FFD700>{portal}</#FFD700> has no conditions to remove.</gradient>"
  all-conditions-removed: "<gradient:#00ff6a:#00d4ff>All conditions removed from <#FFD700>{portal}</#FFD700>.</gradient>"
  # Portal creation success messages (multi-line)
  creation-success:
    - "<gradient:#00ff6a:#00d4ff>Portal Created Successfully!</gradient>"
    - "<gradient:#6b7280:#9ca3af>Portal: </gradient><gradient:#f59e0b:#d97706>{portal}</gradient>"
    - "<gradient:#6b7280:#9ca3af>{particle_type} particle: </gradient><gradient:#a855f7:#9333ea>{particle}</gradient><gradient:#6b7280:#9ca3af>{particle_default}</gradient>"
    - "<gradient:#6b7280:#9ca3af>{sound_type} sound: </gradient><gradient:#a855f7:#9333ea>{sound}</gradient><gradient:#6b7280:#9ca3af>{sound_default}</gradient>"
    - "<gradient:#87ceeb:#4682b4>{direction_type}: </gradient><gradient:#FFD700:#FFFF00>{direction_value}</gradient><gradient:#87ceeb:#4682b4>{direction_suffix}</gradient>"
    - "{direction_note}"
    - "<gradient:#87ceeb:#4682b4>Orientation: </gradient><gradient:#FFD700:#FFFF00>{orientation}</gradient>"
    - ""
    - "<gradient:#87ceeb:#4682b4>Portal ready! Use </gradient><gradient:#FFD700:#FFFF00>/st connect <target></gradient><gradient:#87ceeb:#4682b4> to link it.</gradient>"
    - "<gradient:#87ceeb:#4682b4>Use </gradient><gradient:#FFD700:#FFFF00>/st setparticle {portal} <particle></gradient><gradient:#87ceeb:#4682b4> to change particles anytime.</gradient>"
    - "<gradient:#87ceeb:#4682b4>Use </gradient><gradient:#FFD700:#FFFF00>/st setdirection {portal} <direction></gradient><gradient:#87ceeb:#4682b4> to change teleport direction.</gradient>"
    - "<gradient:#87ceeb:#4682b4>Default permission </gradient><gradient:#FFD700:#FFFF00>{permission}</gradient><gradient:#87ceeb:#4682b4> assigned. Configure in portals.yml if needed.</gradient>"

  # Particle effects
  particle-effects-initialized: "<gradient:#00ff6a:#00d4ff>Particle effects initialized for portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff>!</gradient>"

# =====================================
# ECONOMY
# =====================================
economy:
  disabled:
    - "<gradient:#ff4b1f:#ff0000>⚠ Economy features are not available!</gradient>"
    - ""
    - "<gradient:#87ceeb:#4682b4> Requirements for economy features:</gradient>"
    - "<gradient:#87ceeb:#4682b4>  1. Enable economy in config.yml (economy.enabled: true)</gradient>"
    - "<gradient:#87ceeb:#4682b4>  2. Install Vault plugin on the server</gradient>"
    - "<gradient:#87ceeb:#4682b4>  3. Install an economy plugin (EssentialsX, etc.)</gradient>"
    - ""
    - "<gradient:#87ceeb:#4682b4>Contact an administrator for assistance.</gradient>"
  insufficient-money: "<gradient:#ff4b1f:#ff0000>You need <#FFD700>{cost}</#FFD700> to use this portal. You have <#FFD700>{balance}</#FFD700>.</gradient>"
  insufficient-items: "<gradient:#ff4b1f:#ff0000>You need </gradient><gradient:#f59e0b:#d97706>{amount}x {item}</gradient><gradient:#ff4b1f:#ff0000> to use this portal.</gradient>"
  payment-taken: "<gradient:#00ff6a:#00d4ff>Paid </gradient><gradient:#f59e0b:#d97706>{cost}</gradient><gradient:#00ff6a:#00d4ff> to use portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  cost-set: "<gradient:#00ff6a:#00d4ff>Cost for </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> set to </gradient><gradient:#f59e0b:#d97706>{cost}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  cost-set-custom-item: "<gradient:#00ff6a:#00d4ff>Cost for </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> set to </gradient><gradient:#f59e0b:#d97706>{amount}x {item}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  cost-disabled: "<gradient:#00ff6a:#00d4ff>Cost removed from </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  hand-empty: "<gradient:#ef4444:#dc2626>✖ You must hold an item in your hand to set as the cost.</gradient>"

# =====================================
# ERRORS
# =====================================
errors:
  portal-not-found: "<gradient:#ff4b1f:#ff1a1a>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#ff4b1f:#ff1a1a> was not found.</gradient>"
  portal-cannot-use: "<gradient:#ff4b1f:#ff0000>You cannot use that portal.</gradient>"
  invalid-usage: "<gradient:#ff4b1f:#ff0000>Invalid usage. Use </gradient><gradient:#22c55e:#16a34a>/st help</gradient><gradient:#ff4b1f:#ff0000> for help.</gradient>"
  cross-world-positions: "<gradient:#ff4b1f:#ff0000>Both positions must be in the same world. Existing: <#FFD700>{existing_world}</#FFD700>, current: <#FFD700>{current_world}</#FFD700>.</gradient>"
  removal-error: "<gradient:#ff4b1f:#ff0000>An error occurred while removing the portal.</gradient>"
  move-start-error: "<gradient:#ff4b1f:#ff0000>An error occurred. Move mode was not started.</gradient>"
  not-moving-portal: "<gradient:#ff4b1f:#ff0000>You are not currently moving a portal.</gradient>"
  must-set-positions: "<gradient:#ff4b1f:#ff0000>You must set both positions first with the wand.</gradient>"
  invalid-positions: "<gradient:#ff4b1f:#ff0000>Invalid positions. Ensure both positions are set correctly.</gradient>"
  portal-move-failed: "<gradient:#ff4b1f:#ff0000>Failed to move portal.</gradient>"
  move-confirm-error: "<gradient:#ff4b1f:#ff0000>An error occurred while confirming the move.</gradient>"
  move-cancel-error: "<gradient:#ff4b1f:#ff0000>An error occurred while cancelling the move.</gradient>"
  unknown-command: "<gradient:#ff4b1f:#ff0000>Unknown command. Use </gradient><gradient:#22c55e:#16a34a>/st help</gradient><gradient:#ff4b1f:#ff0000> for a list of commands.</gradient>"
  command-error: "<gradient:#ff4b1f:#ff0000>An error occurred while executing the command.</gradient>"
  portal-connection-failed: "<gradient:#ff4b1f:#ff0000>Failed to connect portals. Please try again.</gradient>"
  portal-creation-error: "<gradient:#ff4b1f:#ff0000>An error occurred while creating the portal. Please try again.</gradient>"
  portal-invalid-size: "<gradient:#ff4b1f:#ff0000>Cannot create portal <#FFD700>{portal}</#FFD700> - {error}</gradient>"
  portal-different-worlds: "<gradient:#ff4b1f:#ff0000>Cannot create portal <#FFD700>{portal}</#FFD700> - both positions must be in the same world.</gradient>"
  portal-general-error: "<gradient:#ff4b1f:#ff0000>Failed to create portal <#FFD700>{portal}</#FFD700>: {error}</gradient>"
  no-positions: "<gradient:#ff4b1f:#ff0000>You must set both positions first. Use the wand (/st wand) or /st set p1 / /st set p2.</gradient>"
  no-custom-blocks: "<gradient:#ff4b1f:#ff0000>No blocks selected. Enter custom shape mode (shift+right-click) and select blocks first.</gradient>"
  not-enough-custom-blocks: "<gradient:#ff4b1f:#ff0000>You need at least 2 blocks for a custom shape portal.</gradient>"
  invalid-custom-blocks: "<gradient:#ff4b1f:#ff0000>Some selected blocks are no longer valid. Please re-select them.</gradient>"

# =====================================
# PERMISSIONS
# =====================================
permissions:
  portal-use: "<gradient:#ff4b1f:#ff0000>You don't have permission to use portal <#FFD700>{portal}</#FFD700>.</gradient>"

# =====================================
# ONE-WAY
# =====================================
oneway:
  blocked: "<gradient:#ff4b1f:#ff0000>This portal is one-way and cannot be used from this side.</gradient>"

# =====================================
# WAND (Portal Selection Tool)
# =====================================
wand:
  received: "<gradient:#00ff6a:#00d4ff>✨ You have received the portal wand!</gradient>"
  already-have: "<gradient:#ffa500:#ff6347>You already have the portal wand.</gradient>"
  both-positions-set: "<gradient:#00ff6a:#00d4ff>🎉 Both positions have been set! Use </gradient><gradient:#22c55e:#16a34a>/st add <name></gradient><gradient:#00ff6a:#00d4ff> to create a portal.</gradient>"
  positions-ready: "<gradient:#00ff6a:#00d4ff>Positions are ready. Use </gradient><gradient:#22c55e:#16a34a>/st add <name></gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  shapepreview-hint: "<gradient:#87ceeb:#4682b4>Preview a frame: </gradient><gradient:#22c55e:#16a34a>/st shapepreview <rectangle|circle|triangle|hexagon|random_rift></gradient>"
  shapepreview-controls: "<gradient:#87ceeb:#4682b4>Then use: </gradient><gradient:#22c55e:#16a34a>/st shapepreview rotate</gradient><gradient:#87ceeb:#4682b4>, </gradient><gradient:#22c55e:#16a34a>/st shapepreview mirror</gradient><gradient:#87ceeb:#4682b4>, </gradient><gradient:#22c55e:#16a34a>/st shapepreview undo</gradient><gradient:#87ceeb:#4682b4>, </gradient><gradient:#22c55e:#16a34a>/st shapepreview place [block]</gradient>"
  display-name: "<gradient:#6C63FF:#A855F7>Portal Wand</gradient>"
  lore:
    - "<gradient:#87ceeb:#4682b4>Right-click to select positions</gradient>"
    - "<gradient:#87ceeb:#4682b4>Shift+right-click to clear/switch mode</gradient>"
    - "<gradient:#8c50ff:#c084fc>Shift+click with no selection: custom shape mode</gradient>"
    - "<gradient:#8c50ff:#c084fc>In custom mode: click blocks to form a portal</gradient>"

# =====================================
# POSITIONS
# =====================================
positions:
  position-set-1: "<gradient:#00ff6a:#00d4ff>Position 1 set at <#FFD700>{x}</#FFD700>, <#FFD700>{y}</#FFD700>, <#FFD700>{z}</#FFD700>.</gradient>"
  position-set-2: "<gradient:#00ff6a:#00d4ff>Position 2 set at <#FFD700>{x}</#FFD700>, <#FFD700>{y}</#FFD700>, <#FFD700>{z}</#FFD700>.</gradient>"
  position-1-next: "<gradient:#87ceeb:#4682b4>Now right-click to set position 2.</gradient>"
  positions-cleared: "<gradient:#ffa500:#ff6347>Positions have been cleared.</gradient>"
  auto-cleared: "<gradient:#87ceeb:#4682b4>Previous positions were auto-cleared.</gradient>"
  custom-shape-started: "<gradient:#8c50ff:#c084fc>Custom shape mode enabled! Right-click blocks to select them. Shift+right-click to cancel.</gradient>"
  custom-shape-cancelled: "<gradient:#ffa500:#ff6347>Custom shape mode cancelled. All blocks cleared.</gradient>"
  custom-block-added: "<gradient:#8c50ff:#c084fc>Block added at <#FFD700>{x}</#FFD700>, <#FFD700>{y}</#FFD700>, <#FFD700>{z}</#FFD700>. <#b0b0b0>({count} blocks selected)</gradient>"
  custom-block-removed: "<gradient:#ffa500:#ff6347>Block removed at <#FFD700>{x}</#FFD700>, <#FFD700>{y}</#FFD700>, <#FFD700>{z}</#FFD700>. <#b0b0b0>({count} blocks selected)</gradient>"
  custom-shape-ready: "<gradient:#00ff6a:#00d4ff>{count} blocks selected. Use <#FFD700>/st add <name></#FFD700> to create.</gradient>"
  custom-blocks-cleared: "<gradient:#ffa500:#ff6347>Custom shape blocks cleared. Shift+right-click again to exit custom mode.</gradient>"

# =====================================
# CONDITIONS
# =====================================
conditions:
  portal-disabled: "<gradient:#ff4b1f:#ff0000>Portal <#FFD700>{portal}</#FFD700> is currently disabled.</gradient>"
  portal-not-connected: "<gradient:#ff4b1f:#ff0000>Portal <#FFD700>{portal}</#FFD700> is not connected to anything.</gradient>"
  cooldown-active: "<gradient:#ff4b1f:#ff0000>You must wait <#FFD700>{time}</#FFD700> before using this portal again.</gradient>"
  warmup-start: "<gradient:#ffa500:#ff6347>Teleporting in <#FFD700>{time}</#FFD700>... Don't move!</gradient>"
  warmup-active: "<gradient:#ffa500:#ff6347>You are already warming up for a teleport.</gradient>"
  warmup-continue: "<gradient:#87ceeb:#4682b4>Teleporting in <#FFD700>{time}</#FFD700>...</gradient>"
  warmup-cancelled: "<gradient:#ff4b1f:#ff0000>Teleportation cancelled — you moved!</gradient>"
  unsafe-destination: "<gradient:#ff4b1f:#ff0000>The destination is not safe. Teleportation cancelled.</gradient>"
  required-condition: "<gradient:#ff4b1f:#ff0000>You don't meet the requirements: <#FFD700>{condition}</#FFD700>.</gradient>"
  day-only: "<gradient:#ff4b1f:#ff0000>This portal can only be used during the day.</gradient>"
  night-only: "<gradient:#ff4b1f:#ff0000>This portal can only be used during the night.</gradient>"
  rain-only: "<gradient:#ff4b1f:#ff0000>This portal can only be used during rain.</gradient>"
  thunder-only: "<gradient:#ff4b1f:#ff0000>This portal can only be used during a thunderstorm.</gradient>"
  clear-weather-required: "<gradient:#ff4b1f:#ff0000>This portal can only be used during clear weather.</gradient>"
  level-too-low: "<gradient:#ff4b1f:#ff0000>You need at least level <#FFD700>{required}</#FFD700> to use this portal (current: <#FFD700>{current}</#FFD700>).</gradient>"
  level-too-high: "<gradient:#ff4b1f:#ff0000>Your level is too high — max <#FFD700>{maximum}</#FFD700> (current: <#FFD700>{current}</#FFD700>).</gradient>"
  sneak-required: "<gradient:#ff4b1f:#ff0000>You must be sneaking to use this portal.</gradient>"
  flying-required: "<gradient:#ff4b1f:#ff0000>You must be flying to use this portal.</gradient>"
  wrong-world: "<gradient:#ff4b1f:#ff0000>You must be in world <#FFD700>{required}</#FFD700> to use this portal.</gradient>"
  wrong-biome: "<gradient:#ff4b1f:#ff0000>You must be in the <#FFD700>{required}</#FFD700> biome.</gradient>"
  wrong-gamemode: "<gradient:#ff4b1f:#ff0000>You must be in <#FFD700>{required}</#FFD700> mode.</gradient>"
  not-enough-items: "<gradient:#ff4b1f:#ff0000>You need at least <#FFD700>{required}</#FFD700> items to use this portal (you have <#FFD700>{current}</#FFD700>).</gradient>"
  too-many-items: "<gradient:#ff4b1f:#ff0000>You have too many items — max <#FFD700>{maximum}</#FFD700> (you have <#FFD700>{current}</#FFD700>).</gradient>"
  item-required: "<gradient:#ff4b1f:#ff0000>You must have <#FFD700>{item}</#FFD700> to use this portal.</gradient>"
  money-required: "<gradient:#ff4b1f:#ff0000>You need <#FFD700>{amount}</#FFD700> to use this portal.</gradient>"
  missing-advancement: "<gradient:#ff4b1f:#ff0000>You need the advancement <#FFD700>{advancement}</#FFD700>.</gradient>"
  insufficient-playtime: "<gradient:#ff4b1f:#ff0000>You need at least <#FFD700>{required}</#FFD700> hours of playtime (you have <#FFD700>{current}</#FFD700>).</gradient>"
  insufficient-money: "<gradient:#ff4b1f:#ff0000>You need <#FFD700>{amount}</#FFD700> to meet the money condition.</gradient>"
  daily-limit-reached: "<gradient:#ff4b1f:#ff0000>You've reached your daily use limit for this portal.</gradient>"
  wrong-time: "<gradient:#ff4b1f:#ff0000>This portal is not available at this time of day.</gradient>"
  wrong-date: "<gradient:#ff4b1f:#ff0000>This portal is not available today.</gradient>"
  health-too-low: "<gradient:#ff4b1f:#ff0000>You need at least <#FFD700>{required}</#FFD700> health (current: <#FFD700>{current}</#FFD700>).</gradient>"
  health-too-high: "<gradient:#ff4b1f:#ff0000>Your health is too high — max <#FFD700>{maximum}</#FFD700> (current: <#FFD700>{current}</#FFD700>).</gradient>"
  food-too-low: "<gradient:#ff4b1f:#ff0000>You need at least <#FFD700>{required}</#FFD700> hunger (current: <#FFD700>{current}</#FFD700>).</gradient>"
  food-too-high: "<gradient:#ff4b1f:#ff0000>Your hunger is too high — max <#FFD700>{maximum}</#FFD700> (current: <#FFD700>{current}</#FFD700>).</gradient>"
  missing-armor: "<gradient:#ff4b1f:#ff0000>You must be wearing the required armor.</gradient>"
  missing-weapon: "<gradient:#ff4b1f:#ff0000>You must be holding a weapon.</gradient>"
  forbidden-item: "<gradient:#ff4b1f:#ff0000>You cannot have <#FFD700>{item}</#FFD700> in your inventory.</gradient>"
  not-enough-players-nearby: "<gradient:#ff4b1f:#ff0000>You need at least <#FFD700>{required}</#FFD700> other players nearby (found <#FFD700>{current}</#FFD700>).</gradient>"
  too-many-players-nearby: "<gradient:#ff4b1f:#ff0000>Too many players nearby! Maximum <#FFD700>{maximum}</#FFD700> allowed (found <#FFD700>{current}</#FFD700>).</gradient>"

# =====================================
# RTP
# =====================================
rtp:
  teleporting: "<gradient:#00ff6a:#00d4ff>Finding a random location...</gradient>"
  success: "<gradient:#00ff6a:#00d4ff>Teleported to <#FFD700>{x}</#FFD700>, <#FFD700>{y}</#FFD700>, <#FFD700>{z}</#FFD700> in <#FFD700>{world}</#FFD700>.</gradient>"
  error: "<gradient:#ff4b1f:#ff0000>Failed to find a safe random location. Try again.</gradient>"
  cooldown: "<gradient:#ff4b1f:#ff0000>You must wait <#FFD700>{time}</#FFD700> before using RTP again.</gradient>"
  world-not-found: "<gradient:#ff4b1f:#ff0000>RTP world <#FFD700>{world}</#FFD700> was not found.</gradient>"
  no-safe-location: "<gradient:#ff4b1f:#ff0000>Couldn't find a safe location after multiple attempts.</gradient>"
  preloading-chunks: "<gradient:#87ceeb:#4682b4>Preloading chunks at the destination...</gradient>"
  chunks-not-loaded: "<gradient:#ff4b1f:#ff0000>Chunks couldn't be preloaded in time.</gradient>"

# =====================================
# PROTECTION
# =====================================
protection:
  cannot-break: "<gradient:#ff4b1f:#ff0000>You cannot break blocks inside a portal.</gradient>"
  cannot-place: "<gradient:#ff4b1f:#ff0000>You cannot place blocks inside a portal.</gradient>"

# =====================================
# LINKING
# =====================================
linking:
  already-linked: "<gradient:#ff4b1f:#ff0000>Portal <#FFD700>{portal}</#FFD700> is already linked to <#FFD700>{target}</#FFD700>. Unlink it first.</gradient>"
  self-link-denied: "<gradient:#ff4b1f:#ff0000>You cannot link a portal to itself.</gradient>"
  connection-established: "<gradient:#ffa500:#ff6347>⚠ Portals <#FFD700>{portal1}</#FFD700> and <#FFD700>{portal2}</#FFD700> are already connected to each other!</gradient>"

# =====================================
# INTEGRATIONS
# =====================================
integrations:
  worldguard-denied: "<gradient:#ff4b1f:#ff0000>WorldGuard prevents you from using this portal.</gradient>"
  lands-denied: "<gradient:#ff4b1f:#ff0000>You are not trusted in this land area.</gradient>"


# =====================================
# COMMANDS SYSTEM
# =====================================
commands:
  usage: "<gradient:#ff4b1f:#ff0000>Usage: <#FFD700>/st {command} {parameters}</#FFD700></gradient>"
  invalid-type: "<gradient:#ff4b1f:#ff0000>Invalid {type}: <#FFD700>{value}</#FFD700></gradient>"
  validation-help: "<gradient:#87ceeb:#4682b4>Valid options: <#FFD700>{options}</#FFD700></gradient>"
  not-found-entity: "<gradient:#ff4b1f:#ff0000>{entity_type} <#FFD700>{name}</#FFD700> was not found.</gradient>"
  setting-updated: "<gradient:#00ff6a:#00d4ff>{setting} for </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> set to </gradient><gradient:#f59e0b:#d97706>{value}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  state-changed: "<gradient:#00ff6a:#00d4ff>Portal </gradient><gradient:#f59e0b:#d97706>{portal}</gradient><gradient:#00ff6a:#00d4ff> has been </gradient><gradient:#f59e0b:#d97706>{action}</gradient><gradient:#00ff6a:#00d4ff>.</gradient>"
  rename-failed: "<gradient:#ff4b1f:#ff0000>Failed to rename portal.</gradient>"
  unlink-not-connected: "<gradient:#ff4b1f:#ff0000>Portal <#FFD700>{portal}</#FFD700> is not connected to anything.</gradient>"
  unlink-error: "<gradient:#ff4b1f:#ff0000>Failed to unlink portal.</gradient>"

  shapepreview:
    usage: "<gradient:#ff4b1f:#ff0000>Usage: <#FFD700>/st shapepreview <preset|rotate|mirror|undo|place [material]></#FFD700></gradient>"
    rotate-requires-pivot: "<gradient:#ff4b1f:#ff0000>Set a pivot with wand pos1 first.</gradient>"
    rotate-no-preview: "<gradient:#ff4b1f:#ff0000>No active preview shape to rotate.</gradient>"
    rotate-success: "<gradient:#00ff6a:#00d4ff>Rotated shape preview. Use <#FFD700>/st shapepreview place</#FFD700> when ready.</gradient>"
    mirror-requires-pivot: "<gradient:#ff4b1f:#ff0000>Set a pivot with wand pos1 first.</gradient>"
    mirror-no-preview: "<gradient:#ff4b1f:#ff0000>No active preview shape to mirror.</gradient>"
    mirror-success: "<gradient:#00ff6a:#00d4ff>Mirrored shape preview. Use <#FFD700>/st shapepreview place</#FFD700> when ready.</gradient>"
    undo-success: "<gradient:#00ff6a:#00d4ff>Undid last preview action.</gradient>"
    undo-empty: "<gradient:#ffa500:#ff6347>Nothing to undo.</gradient>"
    place-requires-positions: "<gradient:#ff4b1f:#ff0000>Set pos1 and pos2 with the wand before placing preview.</gradient>"
    invalid-material: "<gradient:#ff4b1f:#ff0000>Invalid frame material: <#FFD700>{material}</#FFD700>. Use a valid block type.</gradient>"
    place-no-preview: "<gradient:#ff4b1f:#ff0000>No active shape preview to place.</gradient>"
    place-success: "<gradient:#00ff6a:#00d4ff>Placed preview frame using <#FFD700>{material}</#FFD700>.</gradient>"
    generate-requires-positions: "<gradient:#ff4b1f:#ff0000>Set pos1 and pos2 with the wand before generating preview.</gradient>"
    generate-success: "<gradient:#00ff6a:#00d4ff>Generated preview shape: <#FFD700>{preset}</#FFD700>. Use <#FFD700>/st shapepreview place</#FFD700> to build it.</gradient>"
    unknown-preset: "<gradient:#ff4b1f:#ff0000>Unknown shape preset. Try: rectangle, square, circle, oval, triangle, hexagon, octagon, random_rift.</gradient>"
    preview-validation-failed: "<gradient:#ff4b1f:#ff0000>Preview validation failed: <#FFD700>{reason}</#FFD700></gradient>"

  setrouting:
    usage: "<gradient:#ff4b1f:#ff0000>Usage: <#FFD700>/st setrouting <portal> <fixed|random|weighted|permission></#FFD700></gradient>"
    success: "<gradient:#00ff6a:#00d4ff>Routing mode for <#FFD700>{portal}</#FFD700> set to <#FFD700>{mode}</#FFD700>.</gradient>"
    invalid-mode: "<gradient:#ff4b1f:#ff0000>Invalid mode. Use: <#FFD700>fixed, random, weighted, permission</#FFD700>.</gradient>"

  setdestinations:
    usage: "<gradient:#ff4b1f:#ff0000>Usage: <#FFD700>/st setdestinations <portal> <dest1,dest2,dest3|weight|permission></#FFD700></gradient>"
    success: "<gradient:#00ff6a:#00d4ff>Updated linked destinations for <#FFD700>{portal}</#FFD700>: <#FFD700>{count}</#FFD700> entries.</gradient>"

  manage-delete:
    invalid-request: "<gradient:#ff4b1f:#ff0000>Invalid deletion request.</gradient>"
    invalid-index: "<gradient:#ff4b1f:#ff0000>Invalid index provided.</gradient>"
    unknown-type: "<gradient:#ff4b1f:#ff0000>Unknown deletion type: <#FFD700>{type}</#FFD700>.</gradient>"
    invalid-command-index: "<gradient:#ff4b1f:#ff0000>Invalid command index.</gradient>"
    invalid-condition-index: "<gradient:#ff4b1f:#ff0000>Invalid condition index.</gradient>"
    returning: "<gradient:#6b7280:#9ca3af>Returning to management interface...</gradient>"

  manage-confirm-delete:
    invalid-request: "<gradient:#ff4b1f:#ff0000>Invalid deletion confirmation.</gradient>"
    invalid-index: "<gradient:#ff4b1f:#ff0000>Invalid index provided.</gradient>"
    unknown-type: "<gradient:#ff4b1f:#ff0000>Unknown deletion type: <#FFD700>{type}</#FFD700>.</gradient>"
    success: "<gradient:#00ff6a:#00d4ff>✓ Successfully deleted <#FFD700>{type}</#FFD700>: <#FFFFFF>{item}</#FFFFFF></gradient>"
    failed: "<gradient:#ff4b1f:#ff0000>Failed to delete item. Index may be invalid.</gradient>"

  # ── Hints & Suggestions ──
  hints:
    horizontal-direction-warning: "<gradient:#ffa500:#ff6347>⚠ Warning: Horizontal portals ignore directional settings. Players will always look UP when teleported.</gradient>"
    horizontal-direction-note: "<gradient:#87ceeb:#4682b4>Note: Horizontal portals always face UP regardless of direction setting.</gradient>"
    popular-particles: "<gradient:#ff8c00:#ff4500>Popular particles: <#FFD700>PORTAL</#FFD700>, <#FFD700>FLAME</#FFD700>, <#FFD700>END_ROD</#FFD700>, <#FFD700>ENCHANT</#FFD700>, <#FFD700>HEART</#FFD700>, <#FFD700>HAPPY_VILLAGER</#FFD700></gradient>"
    other-particles: "<gradient:#ff8c00:#ff4500>Other options: <#FFD700>SMOKE</#FFD700>, <#FFD700>CRIT</#FFD700>, <#FFD700>FIREWORK</#FFD700>, <#FFD700>DRAGON_BREATH</#FFD700>, <#FFD700>SOUL_FIRE_FLAME</#FFD700></gradient>"
    particle-tab-hint: "<gradient:#87ceeb:#4682b4>Use tab completion to see all available particles!</gradient>"
    valid-sounds: "<gradient:#ff8c00:#ff4500>Valid sounds include: <#FFD700>ENTITY_ENDERMAN_TELEPORT</#FFD700>, <#FFD700>BLOCK_PORTAL_AMBIENT</#FFD700>, <#FFD700>ENTITY_PLAYER_LEVELUP</#FFD700></gradient>"
    valid-directions: "<gradient:#ff8c00:#ff4500>Valid directions: <#FFD700>NORTH</#FFD700>, <#FFD700>SOUTH</#FFD700>, <#FFD700>EAST</#FFD700>, <#FFD700>WEST</#FFD700>, <#FFD700>UP</#FFD700>, <#FFD700>DOWN</#FFD700></gradient>"

  # ── Usage Parameters (per command) ──
  usage-parameters:
    add: "<name>"
    remove: "<portal>"
    connect: "<source> <target>"
    list: ""
    info: "<portal> [page]"
    tp: "<portal>"
    wand: ""
    reload: ""
    setdirection: "<portal> <direction>"
    setparticle: "<portal> <particle>"
    setcount: "<portal> <count>"
    setspread: "<portal> <tight> <wide>"
    setsound: "<portal> <sound> [volume] [pitch]"
    setinterval: "<portal> <ticks>"
    settype: "<portal> <standard|rtp> [world] [min] [max]"
    setcost: "<portal> <amount | hand [amount]>"
    setcooldown: "<portal> <seconds>"
    setwarmup: "<portal> <seconds>"
    setcommand: "<portal> <enter|exit> <command>"
    setcondition: "<portal> <condition> [value]"
    removecondition: "<portal> <condition|all>"
    addcondition: "<portal> <condition> [value]"
    setcolor: "<portal> <r> <g> <b>"
    setdisablesafecheck: "<portal>"
    reset: "<portal>"
    rename: "<portal> <newname>"
    move: "<portal>"
    debug: ""
    enable: "<portal>"
    disable: "<portal>"
    unlink: "<portal>"
    duplicate: "<source> <newname>"
    manage: "[portal]"
    backup: ""
    set: "<setting> <portal> <value>"
    help: "[command]"
    teleport: "<portal>"

  # ── Validation Parameters ──
  validation-parameters:
    particle: "Particle"
    sound: "Sound"
    direction: "Direction"
    material: "Material"
    world: "World"
    biome: "Biome"
    gamemode: "Gamemode"
    condition: "Condition"
    portaltype: "Portal Type"

  # ── Validation Options ──
  validation-options:
    particle: "FLAME, SOUL_FIRE_FLAME, PORTAL, ENCHANT, END_ROD, DUST, etc."
    sound: "ENTITY_ENDERMAN_TELEPORT, BLOCK_PORTAL_TRIGGER, etc."
    direction: "NORTH, SOUTH, EAST, WEST, UP, DOWN, PLAYER, NONE"
    portaltype: "standard, rtp"

  # ── State Actions ──
  state-actions:
    enabled: "enabled"
    disabled: "disabled"
    connected: "connected"
    unlinked: "unlinked"
    reset: "reset"

  # ── Set Cost ──
  setcost-examples:
    - "<gradient:#87ceeb:#4682b4>Examples:</gradient>"
    - "<gradient:#87ceeb:#4682b4>  • <#FFD700>/st setcost spawn 100</#FFD700> - Charge $100 money</gradient>"
    - "<gradient:#87ceeb:#4682b4>  • <#FFD700>/st setcost nether 5 DIAMOND</#FFD700> - Require 5 diamonds</gradient>"
    - "<gradient:#87ceeb:#4682b4>  • <#FFD700>/st setcost pvp 30 EXP</#FFD700> - Require 30 experience points</gradient>"
    - "<gradient:#87ceeb:#4682b4>  • <#FFD700>/st setcost end 0</#FFD700> - Disable cost (free portal)</gradient>"

  # ── Set Interval ──
  setinterval-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setinterval <portal> <ticks></gradient>"
  setinterval-warning: "<gradient:#ffa500:#ff6347>Warning: Very low intervals may impact performance.</gradient>"

  # ── Set Particle ──
  setparticle-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st setparticle myportal FLAME</gradient>"
  setparticle-default-tip: "<gradient:#87ceeb:#4682b4>Tip: Use <#FFD700>DEFAULT</#FFD700> to reset to the default particle.</gradient>"
  setparticle-error: "<gradient:#ff4b1f:#ff0000>Failed to set particle effect.</gradient>"

  # ── Set Sound ──
  setsound-example:
    - "<gradient:#87ceeb:#4682b4>Examples:</gradient>"
    - "<gradient:#87ceeb:#4682b4>  /st setsound portal1 ENTITY_ENDERMAN_TELEPORT</gradient>"
    - "<gradient:#87ceeb:#4682b4>  /st setsound portal1 ENTITY_ENDERMAN_TELEPORT 1.2 0.5</gradient>"
  setsound-default-tip: "<gradient:#87ceeb:#4682b4>Tip: Use <#FFD700>DEFAULT</#FFD700> to reset to default, or <#FFD700>NONE</#FFD700> to disable sounds.</gradient>"
  setsound-preview: "<gradient:#00ff6a:#00d4ff>Playing sound preview...</gradient>"
  setsound-failed: "<gradient:#ff4b1f:#ff0000>Failed to set sound.</gradient>"

  # ── Set Spread ──
  setspread-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setspread <portal> <tight> <wide></gradient>"
  setspread-tight-greater-than-wide: "<gradient:#ff4b1f:#ff0000>Tight spread must be less than or equal to wide spread.</gradient>"

  # ── Set Warmup ──
  setwarmup-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setwarmup <portal> <seconds></gradient>"
  setwarmup-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st setwarmup myportal 5</gradient>"

  # ── Set Cooldown ──
  setcooldown-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setcooldown <portal> <seconds></gradient>"
  setcooldown-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st setcooldown myportal 60</gradient>"

  # ── Set Direction ──
  setdirection-description: "<gradient:#87ceeb:#4682b4>Set which direction a player faces after teleporting.</gradient>"
  setdirection-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st setdirection myportal NORTH</gradient>"
  setdirection-valid-directions: "<gradient:#87ceeb:#4682b4>Valid: <#FFD700>NORTH, SOUTH, EAST, WEST, UP, DOWN, PLAYER, NONE</#FFD700></gradient>"
  setdirection-horizontal-warning: "<gradient:#ffa500:#ff6347>Note: Only horizontal directions (N/S/E/W) change the player's facing.</gradient>"
  setdirection-horizontal-explanation: "<gradient:#87ceeb:#4682b4>UP/DOWN modify pitch. PLAYER preserves the player's current facing.</gradient>"
  setdirection-success-header: "<gradient:#00ff6a:#00d4ff>✓ Direction updated!</gradient>"
  setdirection-success-portal: "<gradient:#87ceeb:#4682b4>Portal: <#FFD700>{portal}</#FFD700></gradient>"
  setdirection-success-direction: "<gradient:#87ceeb:#4682b4>Direction: <#FFD700>{direction}</#FFD700></gradient>"
  setdirection-success-info: "<gradient:#87ceeb:#4682b4>Players will now face <#FFD700>{direction}</#FFD700> after teleporting.</gradient>"
  setdirection-tip: "<gradient:#87ceeb:#4682b4>Use <#FFD700>NONE</#FFD700> to disable direction override.</gradient>"

  # ── Set Command ──
  setcommand-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setcommand <portal> <enter|exit> <command></gradient>"
  setcommand-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st setcommand myportal enter say Welcome!</gradient>"
  setcommand-invalid-trigger: "<gradient:#ff4b1f:#ff0000>Invalid trigger. Use <#FFD700>enter</#FFD700> or <#FFD700>exit</#FFD700>.</gradient>"

  # ── Set Condition ──
  setcondition-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setcondition <portal> <condition> [value]</gradient>"
  setcondition-available: "<gradient:#87ceeb:#4682b4>Available: <#FFD700>day, night, rain, thunder, clear, level, sneak, fly, world, biome, gamemode, item, money, advancement, playtime</#FFD700></gradient>"
  setcondition-item-usage: "<gradient:#87ceeb:#4682b4>Item usage: </gradient><gradient:#22c55e:#16a34a>/st setcondition <portal> item <material> [amount]</gradient>"

  # ── Add Condition ──
  addcondition-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st addcondition <portal> <condition> [value]</gradient>"
  addcondition-available: "<gradient:#87ceeb:#4682b4>Available: <#FFD700>day, night, rain, thunder, clear, level, sneak, fly, world, biome, gamemode, item, money, advancement, playtime</#FFD700></gradient>"
  addcondition-item-usage: "<gradient:#87ceeb:#4682b4>Item usage: </gradient><gradient:#22c55e:#16a34a>/st addcondition <portal> item <material> [amount]</gradient>"

  # ── Remove Condition ──
  removecondition-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st removecondition <portal> <condition|all></gradient>"

  # ── Set Type ──
  settype-example: "<gradient:#87ceeb:#4682b4>Example: </gradient><gradient:#22c55e:#16a34a>/st settype myportal rtp world 100 5000</gradient>"
  settype-defaults: "<gradient:#87ceeb:#4682b4>Defaults: world=current, min=100, max=5000</gradient>"
  settype-invalid-type: "<gradient:#ff4b1f:#ff0000>Invalid portal type. Use <#FFD700>standard</#FFD700> or <#FFD700>rtp</#FFD700>.</gradient>"
  settype-rtp-connected-error: "<gradient:#ff4b1f:#ff0000>Disconnect the portal first before changing to RTP type.</gradient>"
  settype-world-not-found: "<gradient:#ff4b1f:#ff0000>World <#FFD700>{world}</#FFD700> was not found.</gradient>"
  settype-available-worlds: "<gradient:#87ceeb:#4682b4>Available worlds: <#FFD700>{worlds}</#FFD700></gradient>"
  settype-invalid-range: "<gradient:#ff4b1f:#ff0000>Invalid range — min must be less than max.</gradient>"
  settype-range-limits: "<gradient:#ff4b1f:#ff0000>Range must be between 50 and 100000.</gradient>"
  settype-rtp-details: "<gradient:#00ff6a:#00d4ff>RTP portal configured: world=<#FFD700>{world}</#FFD700>, range=<#FFD700>{min}</#FFD700>-<#FFD700>{max}</#FFD700></gradient>"
  settype-rtp-used-defaults: "<gradient:#87ceeb:#4682b4>Note: Using default values for unspecified parameters.</gradient>"

  # ── Set Color ──
  setcolor-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setcolor <portal> <r> <g> <b></gradient><gradient:#87ceeb:#4682b4> (0-255)</gradient>"
  setcolor-not-dust: "<gradient:#ff4b1f:#ff0000>Color can only be set on DUST particles.</gradient>"
  setcolor-invalid: "<gradient:#ff4b1f:#ff0000>Invalid color values. Use numbers between 0 and 255.</gradient>"

  # ── Set Count ──
  setcount-usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setcount <portal> <count></gradient>"
  setcount-distribution-info: "<gradient:#87ceeb:#4682b4>Particles are distributed evenly across the portal surface.</gradient>"

  # ── Set Disable Safe Check ──
  setdisablesafecheck:
    usage: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st setdisablesafecheck <portal></gradient>"
    invalid-value: "<gradient:#ff4b1f:#ff0000>Invalid value '<#FFD700>{value}</#FFD700>'. Use 'true' or 'false'.</gradient>"
    success: "<gradient:#00ff6a:#00d4ff>Safety checks for portal '<#FFD700>{portal}</#FFD700>' have been <#FFD700>{value}</#FFD700>.</gradient>"

  # ── Reset ──
  usage-reset: "<gradient:#ff4b1f:#ff0000>Usage: </gradient><gradient:#22c55e:#16a34a>/st reset <portal></gradient>"

  # ── Move ──
  move-mode-activated: "<gradient:#ffa500:#ff6347>Move mode activated for portal <#FFD700>{portal}</#FFD700>.</gradient>"
  move-instructions: "<gradient:#87ceeb:#4682b4>Set two new positions with the wand, then the portal will move.</gradient>"
  move-cancel-hint: "<gradient:#87ceeb:#4682b4>Use </gradient><gradient:#22c55e:#16a34a>/st move cancel</gradient><gradient:#87ceeb:#4682b4> to cancel.</gradient>"
  portal-moved: "<gradient:#00ff6a:#00d4ff>Portal <#FFD700>{portal}</#FFD700> has been moved to the new location!</gradient>"
  move-cancelled: "<gradient:#ffa500:#ff6347>Move mode cancelled.</gradient>"

  # ── Add Usage Hints ──
  add-usage-header: "<gradient:#87ceeb:#4682b4>━━━ Creating a Portal ━━━</gradient>"
  add-usage-examples: "<gradient:#87ceeb:#4682b4>1. Get the wand: </gradient><gradient:#22c55e:#16a34a>/st wand</gradient>"
  add-usage-tip: "<gradient:#87ceeb:#4682b4>2. Select two corners, then: </gradient><gradient:#22c55e:#16a34a>/st add <name></gradient>"
  add-usage-directions: "<gradient:#87ceeb:#4682b4>3. Connect portals: </gradient><gradient:#22c55e:#16a34a>/st connect <source> <target></gradient>"

  # ── Backup ──
  backup-success: "<gradient:#00ff6a:#00d4ff>Portal backup created successfully!</gradient>"
  backup-failed: "<gradient:#ff4b1f:#ff0000>Failed to create backup. Check console for details.</gradient>"

  # ── Reload ──
  reload:
    start: "<gradient:#00d4ff:#00ff6a>Reloading SoapsTeleporter...</gradient>"
    error-summary: "<gradient:#ff4b1f:#ff0000>Error during reload: {count} errors occurred</gradient>"
    error-check-console: "<gradient:#ff4b1f:#ff0000>Check the console for detailed error information.</gradient>"
    step:
      config: "<gradient:#00ff6a:#00d4ff>✓ Config files regenerated if missing</gradient>"
      messages: "<gradient:#00ff6a:#00d4ff>✓ Messages system reloaded</gradient>"
      portals: "<gradient:#00ff6a:#00d4ff>✓ Portal data refreshed</gradient>"
      economy: "<gradient:#00ff6a:#00d4ff>✓ Economy system reinitialized</gradient>"
      teleport: "<gradient:#d946ef:#9333ea>✓ Teleport manager reinitialized</gradient>"
      particles: "<gradient:#00ff6a:#00d4ff>✓ Particle system restarted</gradient>"
      integrations: "<gradient:#a855f7:#9333ea>✓ Integration managers reinitialized</gradient>"
      cache: "<gradient:#f59e0b:#d97706>✓ Cached data invalidated and refreshed</gradient>"
    selftest: "<gradient:#00d4ff:#00ff6a>Running self-test...</gradient>"

# =====================================
# GUI CHAT INPUT
# =====================================
gui:
  chat-input:
    cancelled: "<gradient:#6b7280:#9ca3af>Input cancelled.</gradient>"
    expected-pitch-volume: "<gradient:#ff4b1f:#ff0000>Expected: <#FFD700><pitch> <volume></#FFD700> (e.g., <#FFD700>1.0 1.0</#FFD700>).</gradient>"
    unknown-type: "<gradient:#ff4b1f:#ff0000>Unknown input type <#FFD700>{type}</#FFD700>. Action cancelled.</gradient>"
    processing-error: "<gradient:#ff4b1f:#ff0000>An error occurred while processing your input.</gradient>"

# =====================================
# PORTAL LIST
# =====================================
portal-list:
  header: "<gradient:#6C63FF:#A855F7>━━━ Portals ━━━</gradient>"
  footer: "<gradient:#6C63FF:#A855F7>━━━ Total: {total} | Connected: {connected} ━━━</gradient>"
  no-portals: "<gradient:#ffa500:#ff6347>No portals have been created yet.</gradient>"
  entry-enabled: "<gradient:#00ff6a:#00d4ff>● {name}</gradient> <gradient:#6b7280:#9ca3af>({world})</gradient>"
  entry-disabled: "<gradient:#ff4b1f:#ff0000>● {name}</gradient> <gradient:#6b7280:#9ca3af>({world})</gradient>"
  entry-connected: " <gradient:#87ceeb:#4682b4>→ <#FFD700>{target}</#FFD700></gradient>"
  entry-not-connected: " <gradient:#87ceeb:#4682b4>(not connected)</gradient>"
  entry-rtp: " <gradient:#00ffea:#00bfff>[RTP]</gradient> <gradient:#6b7280:#9ca3af>{world} ({range}m)</gradient>"
  entry-disabled-badge: " <gradient:#ff4b1f:#ff0000>[Disabled]</gradient>"
  entry-warmup: " <gradient:#87ceeb:#4682b4>⏱ {warmup}s</gradient>"
  entry-cooldown: " <gradient:#87ceeb:#4682b4>⏳ {cooldown}s</gradient>"
  entry-cost: " <gradient:#f59e0b:#d97706>💰 {cost}</gradient>"
  entry-error: "<gradient:#ff4b1f:#ff0000>● {name} — Error: {error}</gradient>"

# =====================================
# PORTAL INFO
# =====================================
portal-info:
  header: "<gradient:#87ceeb:#4682b4>=== Portal Info:</gradient> <#FFD700>{portal}</#FFD700> <gradient:#87ceeb:#4682b4>===</gradient>"
  header-paginated: "<gradient:#87ceeb:#4682b4>=== Portal Info:</gradient> <#FFD700>{portal}</#FFD700> <gradient:#87ceeb:#4682b4>(Page {page}/{total}) ===</gradient>"
  footer-next: "<click:run_command:'/st info {portal} {page}'><gradient:#22c55e:#16a34a>[Next »]</gradient></click>"
  footer-prev: "<click:run_command:'/st info {portal} {page}'><gradient:#22c55e:#16a34a>[« Prev]</gradient></click>"
  world: "<gradient:#87ceeb:#4682b4>World:</gradient> <#FFD700>{world}</#FFD700>"
  status-enabled: "<gradient:#00ff6a:#00d4ff>Enabled</gradient>"
  status-disabled: "<gradient:#ff4b1f:#ff0000>Disabled</gradient>"
  connected-to: "<gradient:#87ceeb:#4682b4>Connected to:</gradient> <#FFD700>{target}</#FFD700>"
  target-status: "<gradient:#87ceeb:#4682b4>Target status:</gradient> {status}"
  target-missing: "<gradient:#ff4b1f:#ff0000>⚠ Target portal missing!</gradient>"
  type-rtp: "<gradient:#00ffea:#00bfff>Random Teleport (RTP)</gradient>"
  rtp-world: "<gradient:#87ceeb:#4682b4>RTP World:</gradient> <#FFD700>{world}</#FFD700>"
  rtp-range: "<gradient:#87ceeb:#4682b4>RTP Range:</gradient> <#FFD700>{min}</#FFD700> — <#FFD700>{max}</#FFD700>"
  not-connected: "<gradient:#87ceeb:#4682b4>Not connected</gradient>"
  size: "<gradient:#87ceeb:#4682b4>Size:</gradient> <#FFD700>{x}</#FFD700> × <#FFD700>{y}</#FFD700> × <#FFD700>{z}</#FFD700>"
  invalid-page: "<gradient:#ff4b1f:#ff0000>Invalid page number.</gradient>"
  invalid-page-max: "<gradient:#ff4b1f:#ff0000>Max page is <#FFD700>{max}</#FFD700>.</gradient>"
  error: "<gradient:#ff4b1f:#ff0000>Error loading portal info.</gradient>"
  position-1: "<gradient:#87ceeb:#4682b4>Position 1:</gradient> <#FFD700>{location}</#FFD700>"
  position-2: "<gradient:#87ceeb:#4682b4>Position 2:</gradient> <#FFD700>{location}</#FFD700>"
  warmup-time-active: "<gradient:#87ceeb:#4682b4>Warmup time:</gradient> <#FFD700>{time}s</#FFD700>"
  warmup-time-disabled: "<gradient:#87ceeb:#4682b4>Warmup time:</gradient> <gradient:#6b7280:#9ca3af>Disabled</gradient>"
  cooldown-time-active: "<gradient:#87ceeb:#4682b4>Cooldown time:</gradient> <#FFD700>{time}s</#FFD700>"
  cooldown-time-disabled: "<gradient:#87ceeb:#4682b4>Cooldown time:</gradient> <gradient:#6b7280:#9ca3af>Disabled</gradient>"
  safety-check-enabled: "<gradient:#87ceeb:#4682b4>Safety checks:</gradient> <gradient:#00ff6a:#00d4ff>Enabled</gradient>"
  safety-check-disabled: "<gradient:#87ceeb:#4682b4>Safety checks:</gradient> <gradient:#ff4b1f:#ff0000>Disabled</gradient>"
  orientation-horizontal: "<gradient:#87ceeb:#4682b4>Orientation:</gradient> <#FFD700>Horizontal (ground)</#FFD700>"
  orientation-vertical: "<gradient:#87ceeb:#4682b4>Orientation:</gradient> <#FFD700>Vertical (standing)</#FFD700>"
  particle-custom: "<gradient:#87ceeb:#4682b4>Particle type:</gradient> <#d946ef>{particle}</#d946ef>"
  particle-default: "<gradient:#87ceeb:#4682b4>Particle type:</gradient> <gradient:#87ceeb:#4682b4>Default</gradient> (<#FFD700>{particle}</#FFD700>)"
  spread-custom: "<gradient:#87ceeb:#4682b4>Particle spread:</gradient> <#d946ef>Tight: {tight}, Wide: {wide}</#d946ef>"
  spread-default: "<gradient:#87ceeb:#4682b4>Particle spread:</gradient> <gradient:#87ceeb:#4682b4>Default</gradient> (<#FFD700>Tight: {tight}, Wide: {wide}</#FFD700>)"
  dust-color-custom: "<gradient:#87ceeb:#4682b4>DUST particle color:</gradient> <color:#fbbf24>{color}</color>"
  dust-color-default: "<gradient:#87ceeb:#4682b4>DUST particle color:</gradient> <gradient:#87ceeb:#4682b4>Default</gradient> (<color:#fbbf24>{color}</color>)"
  sound-custom: "<gradient:#87ceeb:#4682b4>Teleport sound:</gradient> <#d946ef>{sound}</#d946ef>"
  sound-default: "<gradient:#87ceeb:#4682b4>Teleport sound:</gradient> <gradient:#87ceeb:#4682b4>Default</gradient> (<#FFD700>{sound}</#FFD700>)"
  direction-horizontal: "<gradient:#87ceeb:#4682b4>Teleport direction:</gradient> <#FFD700>UP</#FFD700> <gradient:#87ceeb:#4682b4>(horizontal portal default)</gradient>"
  direction-horizontal-note: "  <gradient:#6b7280:#9ca3af>Note: Direction overrides are ignored for horizontal portals</gradient>"
  direction-custom: "<gradient:#87ceeb:#4682b4>Teleport direction:</gradient> <#d946ef>{direction}</#d946ef>"
  direction-default: "<gradient:#87ceeb:#4682b4>Teleport direction:</gradient> <#FFD700>Preserve player direction</#FFD700> <gradient:#87ceeb:#4682b4>(default)</gradient>"
  conditions: "<gradient:#87ceeb:#4682b4>Usage conditions:</gradient> <#FFD700>{conditions}</#FFD700>"
  conditions-none: "<gradient:#87ceeb:#4682b4>Usage conditions:</gradient> <gradient:#6b7280:#9ca3af>None (anyone can use)</gradient>"
  conditions-header: "<gradient:#87ceeb:#4682b4>Usage conditions:</gradient>"
  conditions-item: "<gradient:#87ceeb:#4682b4>  • </gradient><#FFD700>{condition}</#FFD700>"
  conditions-multiple: "<gradient:#87ceeb:#4682b4>Usage conditions ({count}):</gradient>"
  permission-custom: "<gradient:#87ceeb:#4682b4>Required permission:</gradient> <#d946ef>{permission}</#d946ef>"
  permission-default: "<gradient:#87ceeb:#4682b4>Required permission:</gradient> <gradient:#87ceeb:#4682b4>Default</gradient> (<#FFD700>{permission}</#FFD700>)"
  permission-none: "<gradient:#87ceeb:#4682b4>Required permission:</gradient> <gradient:#6b7280:#9ca3af>None</gradient>"
  cost-enabled: "<gradient:#87ceeb:#4682b4>Teleport cost:</gradient> <gradient:#00ff6a:#00d4ff>${cost}</gradient>"
  cost-free: "<gradient:#87ceeb:#4682b4>Teleport cost:</gradient> <gradient:#6b7280:#9ca3af>Free</gradient>"

# =====================================
# HELP SYSTEM
# =====================================
help:
  fallback-not-initialized: "<gradient:#ff4b1f:#ff0000>Help system is loading, please try again.</gradient>"
  no-commands: "<gradient:#ff4b1f:#ff0000>No commands available to you.</gradient>"

  defaults:
    description: "No description available."
    category: "General"
    details: "No additional details."

  modern:
    title: "✨ <gradient:#FF6B35:#F7931E:#FFD23F>Soaps Teleporters</gradient> ✨"
    page-info: "<gradient:#00F5FF:#1E90FF>Page {page} of {total}</gradient>"
    click-info: "<gradient:#32CD32:#00FA9A> • Click commands for more info</gradient>"
    divider: "<gradient:#FF1493:#9370DB:#4169E1>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬</gradient>"
    command-prefix: "  <gradient:#00FF00:#32CD32>/st</gradient> "
    command-name: "<gradient:#4169E1:#1E90FF>{command}</gradient>"
    command-separator: " <gradient:#87CEEB:#B0C4DE>-</gradient> "
    command-description: "<gradient:#F8F8FF:#E6E6FA>{description}</gradient>"
    command-hover: "<gradient:#87CEEB:#B0E0E6>Category:</gradient> <gradient:#FFD700:#FFA500>{category}</gradient>\n<gradient:#87CEEB:#B0E0E6>Details:</gradient> <gradient:#FFE4B5:#FFDAB9>{details}</gradient>\n\n<gradient:#32CD32:#00FA9A>Click to show detailed help!</gradient>"
    footer-divider: "<gradient:#FF1493:#9370DB:#4169E1>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</gradient>"
    nav:
      prev: "<gradient:#32CD32:#00FA9A>« Previous</gradient> "
      prev-hover: "<gradient:#98FB98:#90EE90>Go to page {page}</gradient>"
      next: " <gradient:#32CD32:#00FA9A>Next »</gradient>"
      next-hover: "<gradient:#98FB98:#90EE90>Go to page {page}</gradient>"
      page: "<gradient:#00F5FF:#87CEEB>Page {page}/{total}</gradient>"
      spacer: "<dark_gray>           </dark_gray>"

  console:
    header: "━━━ SoapsTeleporter Help ━━━"
    separator: "━━━━━━━━━━━━━━━━━━━━━━━━━━"
    entry: "  {command} — {description}"
    footer: "━━━━━━━━━━━━━━━━━━━━━━━━━━"

  welcome:
    title: "🌟 <gradient:#FFD700:#FFA500>Welcome to Soaps Teleporters!</gradient> 🌟"
    subtitle: "<gradient:#87CEEB:#B0E0E6>Create magical portals to teleport around your world</gradient>"
    hint-prefix: "<gradient:#F0F8FF:#E6E6FA>Type</gradient> "
    hint-command: "<gradient:#32CD32:#00FA9A>/st help</gradient>"
    hint-suffix: " <gradient:#F0F8FF:#E6E6FA>to get started!</gradient>"
    hint-hover: "<gradient:#98FB98:#90EE90>Click to view help!</gradient>"
    console-header: "━━━ Welcome to SoapsTeleporter ━━━"
    console-subtitle: "Use /st help for a list of commands."
    console-footer: "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

  command-help:
    header: "📘 <gradient:#4A90E2:#1E90FF>Command Help:</gradient> <gradient:#32CD32:#00FA9A>/st {command}</gradient>"
    description-label: "<gradient:#87CEEB:#B0E0E6>Description:</gradient> "
    description: "<gradient:#F0F8FF:#E6E6FA>{description}</gradient>"
    category-label: "<gradient:#87CEEB:#B0E0E6>Category:</gradient> "
    category: "<gradient:#FFD700:#FFA500>{category}</gradient>"
    details-label: "<gradient:#87CEEB:#B0E0E6>Details:</gradient> "
    details: "<gradient:#FFE4B5:#FFDAB9>{details}</gradient>"
    console-header: "=== Command Help: /st {command} ==="
    console-description: "Description: {description}"
    console-category: "Category: {category}"
    console-details: "Details: {details}"


  # ── Command Descriptions ──
  commands:
    add:
      description: "Create a new portal"
      category: "Creation"
      details: "Select two positions with the wand first."
    remove:
      description: "Remove a portal"
      category: "Management"
      details: "Permanently deletes the portal."
    connect:
      description: "Connect two portals"
      category: "Connection"
      details: "Links source portal to target."
    list:
      description: "List all portals"
      category: "Information"
      details: "Shows all portals and their status."
    info:
      description: "View portal details"
      category: "Information"
      details: "Shows detailed information about a portal."
    wand:
      description: "Get the portal selection wand"
      category: "Creation"
      details: "Used to select two corners for portal creation."
    reload:
      description: "Reload the plugin configuration"
      category: "Admin"
      details: "Reloads config.yml, messages.yml, and portals."
    setdirection:
      description: "Set portal exit direction"
      category: "Settings"
      details: "Controls which way players face after teleporting."
    setparticle:
      description: "Set portal particle effect"
      category: "Visual"
      details: "Changes the particle displayed at the portal."
    setsound:
      description: "Set portal teleport sound"
      category: "Audio"
      details: "Changes the sound played on teleport."
    setcommand:
      description: "Set portal entry/exit commands"
      category: "Automation"
      details: "Runs commands when players enter or exit a portal."
    setcondition:
      description: "Set portal conditions"
      category: "Conditions"
      details: "Adds requirements for portal usage."
    setcost:
      description: "Set portal usage cost"
      category: "Economy"
      details: "Charges money or items to use a portal."
    debug:
      description: "Toggle debug mode"
      category: "Admin"
      details: "Enables/disables debug logging."
    manage:
      description: "Open interactive management"
      category: "Management"
      details: "Interactive GUI for managing portal settings."
    settype:
      description: "Set portal type"
      category: "Settings"
      details: "Switch between standard and RTP modes."
    enable:
      description: "Enable a portal"
      category: "Management"
      details: "Re-enables a disabled portal."
    disable:
      description: "Disable a portal"
      category: "Management"
      details: "Temporarily disables a portal."
    tp:
      description: "Teleport to a portal"
      category: "Teleportation"
      details: "Teleports you directly to a portal."
    backup:
      description: "Backup portal data"
      category: "Admin"
      details: "Creates a backup of all portal data."
    reset:
      description: "Reset portal to defaults"
      category: "Management"
      details: "Resets all portal settings to defaults."
    rename:
      description: "Rename a portal"
      category: "Management"
      details: "Changes the name of a portal."
    move:
      description: "Move a portal"
      category: "Management"
      details: "Enter move mode to relocate a portal."
    unlink:
      description: "Unlink a portal"
      category: "Connection"
      details: "Disconnects a portal from its target."
    duplicate:
      description: "Duplicate a portal"
      category: "Creation"
      details: "Creates a copy of an existing portal."
    setcooldown:
      description: "Set portal cooldown"
      category: "Settings"
      details: "Sets the cooldown between portal uses."
    setwarmup:
      description: "Set portal warmup"
      category: "Settings"
      details: "Sets the warmup time before teleporting."
    setcolor:
      description: "Set particle color"
      category: "Visual"
      details: "Sets the RGB color for DUST particles."
    setcount:
      description: "Set particle count"
      category: "Visual"
      details: "Sets how many particles are displayed."
    setspread:
      description: "Set particle spread"
      category: "Visual"
      details: "Controls particle distribution area."
    setinterval:
      description: "Set particle interval"
      category: "Visual"
      details: "How often particles are displayed (ticks)."
    setdisablesafecheck:
      description: "Toggle safety checks"
      category: "Settings"
      details: "Disables destination safety checking."
    set:
      description: "Modify portal settings"
      category: "Settings"
      details: "General setting modification command."
    shapepreview:
      description: "Preview and build preset portal frames"
      category: "Creation"
      details: "Generate, rotate, mirror, undo, and place shape previews."
    setrouting:
      description: "Set portal routing mode"
      category: "Connection"
      details: "Choose fixed, random, weighted, or permission-based destination routing."
    setdestinations:
      description: "Set portal linked destinations"
      category: "Connection"
      details: "Configure destination list used by advanced routing modes."
    addcondition:
      description: "Add a condition"
      category: "Conditions"
      details: "Adds an additional usage requirement to a portal."
    removecondition:
      description: "Remove a condition"
      category: "Conditions"
      details: "Removes a condition from a portal."
    help:
      description: "Show help information"
      category: "Information"
      details: "Displays all available commands with pagination."
    teleport:
      description: "Teleport to a portal"
      category: "Teleportation"
      details: "Teleports you directly to a portal location."

# =====================================
# INTERACTIVE MANAGEMENT (GUI)
# =====================================
interactive-management:
  # ===========================================
  # MAIN MANAGEMENT INTERFACE
  # ===========================================
  header: "\n\n\n<gradient:#00ffee:#98d4b0>Portal Management:</gradient> <color:#fbbf24>{portal}</color>"
  info-header: "<gradient:#94a3b8:#64748b>Portal Information</gradient>"
  portal-info: "<color:#e5e7eb>Status:</color> {status} | <color:#e5e7eb>Type:</color> <color:#fbbf24>{type}</color> | <color:#e5e7eb>Connection:</color> <color:#60a5fa>{connection}</color>"
  categories-header: "<gradient:#a78bfa:#8b5cf6>Management Categories:</gradient>"
  main-instructions: "<gradient:#fde047:#fbbf24>Click category buttons to configure portal behavior</gradient>"
  breadcrumb-main: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Main Menu</gradient>"

  # Separators
  menu-separator: "<gradient:#6b7280:#9ca3af>──────────────────────────────────</gradient>"
  quick-separator: "<color:#808080>│</color>"

  # Category buttons
  visual-category: "<gradient:#f472b6:#ec4899> [Visual Effects]</gradient>"
  audio-category: "<gradient:#fbbf24:#f59e0b> [Audio Settings]</gradient>"
  economy-category: "<gradient:#34d399:#22c55e> [Economy & Timing]</gradient>"
  connection-category: "<gradient:#60a5fa:#3b82f6> [Connection Settings]</gradient>"
  conditions-category: "<gradient:#fbbf24:#f59e0b> [Conditions & Requirements]</gradient>"
  commands-category: "<gradient:#a78bfa:#8b5cf6> [Commands & Events]</gradient>"
  admin-category: "<gradient:#ef4444:#dc2626> [Administrative]</gradient>"

  # Category hover messages
  hover-visual: "<gradient:#f472b6:#ec4899>Configure visual effects like particles and colors</gradient>"
  hover-audio: "<gradient:#fbbf24:#f59e0b>Configure sound effects and audio settings</gradient>"
  hover-economy: "<gradient:#34d399:#22c55e>Configure cost, cooldown, and warmup settings</gradient>"
  hover-connection: "<gradient:#60a5fa:#3b82f6>Connect this portal to another portal</gradient>"
  hover-conditions: "<gradient:#fbbf24:#f59e0b>Configure portal access requirements (money, items, level, time, weather)</gradient>"
  hover-admin: "<gradient:#f87171:#ef4444>Access admin functions and portal control</gradient>"
  hover-commands: "<gradient:#a78bfa:#8b5cf6>Configure commands that run when portal is used</gradient>"

  # ===========================================
  # DELETE CONFIRMATION
  # ===========================================
  delete-confirmation-header: "\n\n\n<gradient:#ef4444:#dc2626>Delete Confirmation</gradient>"
  delete-confirmation-question: "<gradient:#f59e0b:#d97706>Are you sure you want to delete this {type}?</gradient>"
  delete-confirmation-type: "<gradient:#6b7280:#9ca3af>Type: </gradient><gradient:#22c55e:#16a34a>{command_type}</gradient>"
  delete-confirmation-type-exit: "<gradient:#6b7280:#9ca3af>Type: </gradient><gradient:#ef4444:#dc2626>{command_type}</gradient>"
  delete-confirmation-item: "<gradient:#6b7280:#9ca3af>Item: </gradient><gradient:#f8fafc:#ffffff>{item}</gradient>"
  delete-confirmation-confirm: "Confirm: "
  delete-confirmation-yes: "<gradient:#ef4444:#dc2626>[YES]</gradient>"
  delete-confirmation-yes-hover: "<gradient:#ef4444:#dc2626>Delete this {type}</gradient>"
  delete-confirmation-no: "<gradient:#22c55e:#16a34a>[NO]</gradient>"
  delete-confirmation-no-hover: "<gradient:#22c55e:#16a34a>Cancel deletion</gradient>"

  # ===========================================
  # COMMANDS MANAGEMENT
  # ===========================================
  commands-list-header: "\n\n\n<gradient:#a78bfa:#8b5cf6>Commands for Portal: {portal}</gradient>"
  commands-empty:
    - "<gradient:#fde047:#fbbf24>No commands configured yet.</gradient>"
    - "<gradient:#94a3b8:#64748b>Commands execute automatically when players use this portal.</gradient>"
    - "<gradient:#94a3b8:#64748b>Examples: Give items, teleport, run effects, send messages.</gradient>"
    - "<gradient:#22c55e:#16a34a>💡 Click [✚ Add Command] above to get started!</gradient>"
  commands-add-button: "<gradient:#4ade80:#22c55e>✚ Add Command</gradient>"
  commands-add-hover: "<gradient:#94a3b8:#64748b>Add a new command to execute when portal is used</gradient>"
  commands-back-button: "<gradient:#6b7280:#9ca3af>← [Back to Main Menu]</gradient>"
  commands-back-hover: "<gradient:#94a3b8:#64748b>Return to main portal menu</gradient>"

  # Add command interface
  add-command-header: "\n\n\n<gradient:#a78bfa:#8b5cf6>Add Command for {portal}:</gradient>"
  add-command-select: "<gradient:#94a3b8:#64748b>Select when this command should execute:</gradient>"
  add-enter-button: "<gradient:#4ade80:#22c55e>█ Enter Command</gradient>"
  add-exit-button: "<gradient:#f87171:#ef4444>█ Exit Command</gradient>"
  command-tip-header: "<gradient:#fde047:#fbbf24>Command Tips:</gradient>"

  # Command specific hovers
  hover-enter-command: "<gradient:#6366f1:#8b5cf6>Command executed when entering portal</gradient>"
  hover-exit-command: "<gradient:#6366f1:#8b5cf6>Command executed when exiting portal</gradient>"
  hover-back-commands: "<gradient:#6b7280:#9ca3af>Return to commands list</gradient>"

  # Command list display format
  enter-command-type: "<gradient:#22c55e:#16a34a>ENTER:</gradient>"
  exit-command-type: "<gradient:#ef4444:#dc2626>EXIT:</gradient>"

  # Chat input prompts for commands
  enter-command-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#4ade80:#22c55e>Enter a command to execute when players ENTER this portal:</gradient>"
  enter-command-examples:
    - "<gradient:#94a3b8:#64748b>Examples:</gradient>"
    - "<gradient:#94a3b8:#64748b>• say Welcome %player%!</gradient>"
    - "<gradient:#94a3b8:#64748b>• give %player% diamond 1</gradient>"
    - "<gradient:#94a3b8:#64748b>• tp %player% spawn</gradient>"
    - "<gradient:#94a3b8:#64748b>• effect give %player% speed 30 1</gradient>"
  enter-command-placeholder: "<gradient:#fbbf24:#f59e0b>Use %player% for the player's name</gradient>"
  cancel-instruction: "<gradient:#6b7280:#9ca3af>Type 'cancel' to cancel</gradient>"

  exit-command-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#ef4444:#dc2626>Enter a command to execute when players EXIT at this portal:</gradient>"
  exit-command-examples:
    - "<gradient:#94a3b8:#64748b>Examples:</gradient>"
    - "<gradient:#94a3b8:#64748b>• say Welcome %player%!</gradient>"
    - "<gradient:#94a3b8:#64748b>• give %player% diamond 1</gradient>"
    - "<gradient:#94a3b8:#64748b>• tp %player% spawn</gradient>"
    - "<gradient:#94a3b8:#64748b>• effect give %player% speed 30 1</gradient>"
  exit-command-placeholder: "<gradient:#fbbf24:#f59e0b>Use %player% for the player's name</gradient>"

  # Command success messages
  command-added-enter: "<gradient:#22c55e:#16a34a>✓ ENTER command added:</gradient> <gradient:#22c55e:#16a34a>{command}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} commands)</gradient>"
  command-added-exit: "<gradient:#ef4444:#dc2626>✓ EXIT command added:</gradient> <gradient:#ef4444:#dc2626>{command}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} commands)</gradient>"

  # Command error messages
  input-cancelled: "<gradient:#ef4444:#dc2626>✖ Input cancelled</gradient>"
  command-cannot-be-empty: "<gradient:#ef4444:#dc2626>✖ Command cannot be empty!</gradient>"
  enter-valid-command: "<gradient:#3b82f6:#2563eb>Please enter a valid command:</gradient>"

  # ===========================================
  # CONDITIONS MANAGEMENT
  # ===========================================
  conditions-header: "\n\n\n\n\n<gradient:#f472b6:#ec4899>Conditions for Portal: {portal}</gradient>"
  conditions-empty:
    - "<gradient:#fde047:#fbbf24>No conditions configured yet.</gradient>"
    - "<gradient:#94a3b8:#64748b>Conditions control when players can use this portal.</gradient>"
    - "<gradient:#94a3b8:#64748b>Examples: Time of day, items required, money cost, player level.</gradient>"
    - "<gradient:#22c55e:#16a34a>💡 Click [✚ Add Condition] above to get started!</gradient>"
  conditions-add-button: "<gradient:#4ade80:#22c55e>✚ Add Condition</gradient>"
  conditions-add-hover: "<gradient:#94a3b8:#64748b>Add a new condition for portal usage</gradient>"
  conditions-back-button: "<gradient:#6b7280:#9ca3af>← [Back to Main Menu]</gradient>"
  conditions-back-hover: "<gradient:#94a3b8:#64748b>Return to main portal menu</gradient>"

  # Add condition menu
  add-condition-select: "<gradient:#94a3b8:#64748b>Select the type of condition to add:</gradient>"

  # Time & Weather conditions
  time-weather-header: "<gradient:#fde047:#fbbf24>Time & Weather:</gradient>"
  day-button: "<gradient:#4ade80:#22c55e>[Day]  </gradient>"
  day-hover: "<gradient:#94a3b8:#64748b>Portal only works during daytime</gradient>"
  night-button: "<gradient:#60a5fa:#3b82f6>[Night]  </gradient>"
  night-hover: "<gradient:#94a3b8:#64748b>Portal only works during nighttime</gradient>"
  rain-button: "<gradient:#a78bfa:#8b5cf6>[Rain]  </gradient>"
  rain-hover: "<gradient:#94a3b8:#64748b>Portal only works when it's raining</gradient>"
  thunder-button: "<gradient:#c084fc:#a855f7>[Thunder]  </gradient>"
  thunder-hover: "<gradient:#94a3b8:#64748b>Portal only works during thunderstorms</gradient>"
  clear-button: "<gradient:#fbbf24:#f59e0b>[Clear]  </gradient>"
  clear-hover: "<gradient:#94a3b8:#64748b>Portal works anytime (no restrictions)</gradient>"
  sun-button: "<gradient:#fde047:#facc15>[Sun]  </gradient>"
  sun-hover: "<gradient:#94a3b8:#64748b>Portal only works during daytime with clear weather</gradient>"
  storm-button: "<gradient:#7c3aed:#6d28d9>[Storm]  </gradient>"
  storm-hover: "<gradient:#94a3b8:#64748b>Portal only works during rain and thunder</gradient>"

  # Item and economy requirements
  item-requirements-header: "<gradient:#fbbf24:#f59e0b>Economy & Items:</gradient>"
  economy-requirements-header: "<gradient:#fbbf24:#f59e0b>Economy Requirements</gradient>"
  add-item-requirement: "<gradient:#4ade80:#22c55e>[Add Item Requirement]</gradient>"
  item-requirement-hover: "<gradient:#10b981:#22c55e>Click and type in chat</gradient>"
  add-money-requirement: "<gradient:#fbbf24:#f59e0b>[Add Money Requirement]</gradient>"
  money-requirement-hover: "<gradient:#f59e0b:#d97706>Click and type in chat</gradient>"

  # Level requirement conditions
  level-requirements-header: "<gradient:#fde047:#fbbf24>Player Level:</gradient>"
  add-level-requirement: "<gradient:#22c55e:#16a34a>[Custom Level]</gradient>"
  level-requirement-hover: "<gradient:#6b7280:#9ca3af>Set custom level requirement</gradient>"
  add-min-level-requirement: "<gradient:#22c55e:#16a34a>[Min Level]</gradient>"
  min-level-hover: "<gradient:#6b7280:#9ca3af>Set minimum player level required</gradient>"
  add-max-level-requirement: "<gradient:#ef4444:#dc2626>[Max Level]</gradient>"
  max-level-hover: "<gradient:#6b7280:#9ca3af>Set maximum player level allowed</gradient>"

  # Health & Food requirement conditions
  health-requirements-header: "<gradient:#f87171:#ef4444>Health & Food:</gradient>"
  add-min-health-requirement: "<gradient:#22c55e:#16a34a>[Min Health]</gradient>"
  min-health-hover: "<gradient:#6b7280:#9ca3af>Set minimum health required</gradient>"
  add-max-health-requirement: "<gradient:#ef4444:#dc2626>[Max Health]</gradient>"
  max-health-hover: "<gradient:#6b7280:#9ca3af>Set maximum health allowed</gradient>"
  add-min-food-requirement: "<gradient:#22c55e:#16a34a>[Min Food]</gradient>"
  min-food-hover: "<gradient:#6b7280:#9ca3af>Set minimum food level required</gradient>"
  add-max-food-requirement: "<gradient:#ef4444:#dc2626>[Max Food]</gradient>"
  max-food-hover: "<gradient:#6b7280:#9ca3af>Set maximum food level allowed</gradient>"

  # Equipment requirement conditions
  equipment-requirements-header: "<gradient:#a855f7:#9333ea>Equipment:</gradient>"
  add-armor-requirement: "<gradient:#6366f1:#4f46e5>[Armor]</gradient>"
  armor-hover: "<gradient:#6b7280:#9ca3af>Require specific armor type</gradient>"
  add-weapon-requirement: "<gradient:#f59e0b:#d97706>[Weapon]</gradient>"
  weapon-hover: "<gradient:#6b7280:#9ca3af>Require specific weapon in hand</gradient>"
  add-naked-requirement: "<gradient:#8b5cf6:#7c3aed>[Naked]</gradient>"
  naked-hover: "<gradient:#6b7280:#9ca3af>Player must have no armor equipped</gradient>"
  add-full-armor-requirement: "<gradient:#10b981:#059669>[Full Armor]</gradient>"
  full-armor-hover: "<gradient:#6b7280:#9ca3af>Player must have full armor set</gradient>"

  # Player State conditions
  player-state-header: "<gradient:#06b6d4:#0891b2>Player State:</gradient>"
  add-sneak-requirement: "<gradient:#8b5cf6:#7c3aed>[Sneaking]</gradient>"
  sneak-hover: "<gradient:#6b7280:#9ca3af>Player must be sneaking</gradient>"
  add-flying-requirement: "<gradient:#06b6d4:#0891b2>[Flying]</gradient>"
  flying-hover: "<gradient:#6b7280:#9ca3af>Player must be flying</gradient>"
  add-jumping-requirement: "<gradient:#22c55e:#16a34a>[Jumping]</gradient>"
  jumping-hover: "<gradient:#6b7280:#9ca3af>Player must be jumping/in air</gradient>"
  add-on-fire-requirement: "<gradient:#ef4444:#dc2626>[On Fire]</gradient>"
  on-fire-hover: "<gradient:#6b7280:#9ca3af>Player must be on fire</gradient>"
  add-sprinting-requirement: "<gradient:#f59e0b:#d97706>[Sprinting]</gradient>"
  sprinting-hover: "<gradient:#6b7280:#9ca3af>Player must be sprinting</gradient>"

  # Environment requirement conditions
  environment-requirements-header: "<gradient:#10b981:#059669>Environment:</gradient>"
  add-world-requirement: "<gradient:#6366f1:#4f46e5>[World]</gradient>"
  world-hover: "<gradient:#6b7280:#9ca3af>Restrict to specific world</gradient>"
  add-biome-requirement: "<gradient:#22c55e:#16a34a>[Biome]</gradient>"
  biome-hover: "<gradient:#6b7280:#9ca3af>Restrict to specific biome</gradient>"
  add-gamemode-requirement: "<gradient:#a855f7:#9333ea>[GameMode]</gradient>"
  gamemode-hover: "<gradient:#6b7280:#9ca3af>Require specific game mode</gradient>"

  # Social requirement conditions
  social-requirements-header: "<gradient:#f472b6:#ec4899>Social:</gradient>"
  add-min-players-requirement: "<gradient:#22c55e:#16a34a>[Min Players]</gradient>"
  min-players-hover: "<gradient:#6b7280:#9ca3af>Minimum players nearby required</gradient>"
  add-max-players-requirement: "<gradient:#ef4444:#dc2626>[Max Players]</gradient>"
  max-players-hover: "<gradient:#6b7280:#9ca3af>Maximum players nearby allowed</gradient>"
  add-solo-requirement: "<gradient:#8b5cf6:#7c3aed>[Solo Only]</gradient>"
  solo-hover: "<gradient:#6b7280:#9ca3af>Player must be alone (no nearby players)</gradient>"

  # Achievement requirement conditions
  achievement-requirements-header: "<gradient:#fbbf24:#f59e0b>Achievements:</gradient>"
  add-advancement-requirement: "<gradient:#10b981:#059669>[Advancement]</gradient>"
  advancement-hover: "<gradient:#6b7280:#9ca3af>Require specific advancement/achievement</gradient>"
  add-playtime-requirement: "<gradient:#6366f1:#4f46e5>[Playtime]</gradient>"
  playtime-hover: "<gradient:#6b7280:#9ca3af>Require minimum playtime in minutes</gradient>"

  # Navigation buttons
  back-to-conditions-button: "<gradient:#6b7280:#9ca3af>← Back to Conditions</gradient>"
  back-to-conditions-hover: "<gradient:#6b7280:#9ca3af>Return to conditions management</gradient>"

  # Chat input prompts for conditions
  money-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter money amount in dollars (0.01 - 999999):</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common values: 100, 500, 1000</gradient>"
  money-input-example: "<gradient:#3b82f6:#2563eb>Examples: 100, 50.5, 1000, 2500</gradient>"
  material-input-prompt: "<gradient:#fbbf24:#f59e0b>Enter the material name required to use this portal:</gradient>"
  material-input-example: "<gradient:#6b7280:#9ca3af>Example: DIAMOND, GOLD_INGOT, EMERALD</gradient>"
  amount-input-prompt: "<gradient:#f59e0b:#d97706>Enter the quantity (1-64 typical):</gradient>"
  amount-input-example: "<gradient:#3b82f6:#2563eb>Examples: 1, 5, 10, 32, 64</gradient>"
  level-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter player level requirement (0-1000):</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common: 10, 25, 50, 100</gradient>"
  level-input-example: "<gradient:#3b82f6:#2563eb>Examples: 10, 25, 50, 100</gradient>"
  min-players-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter minimum players nearby required (1+):</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common: 2, 3, 5, 10</gradient>"
  min-players-input-example: "<gradient:#3b82f6:#2563eb>Examples: 2, 3, 5, 10</gradient>"
  max-players-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter maximum players nearby allowed (1+):</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common: 5, 10, 20, 50</gradient>"
  max-players-input-example: "<gradient:#3b82f6:#2563eb>Examples: 5, 10, 20, 50</gradient>"
  playtime-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter required playtime in minutes (1+):</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common: 60 (1hr), 120 (2hr), 300 (5hr)</gradient>"
  playtime-input-example: "<gradient:#3b82f6:#2563eb>Examples: 30, 60, 120, 300, 600</gradient>"
  world-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter world name required (exact spelling):</gradient>"
  world-input-example: "<gradient:#3b82f6:#2563eb>Examples: world, world_nether, world_the_end</gradient>"
  biome-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter biome name (not case-sensitive):</gradient>"
  biome-input-example: "<gradient:#3b82f6:#2563eb>Examples: plains, FOREST, desert, mountains</gradient>"
  gamemode-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter game mode (not case-sensitive):</gradient>"
  gamemode-input-example: "<gradient:#3b82f6:#2563eb>Examples: survival, CREATIVE, adventure, spectator</gradient>"
  advancement-input-prompt:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' at any time to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Enter advancement ID (namespace:path format):</gradient>"
  advancement-input-example: "<gradient:#3b82f6:#2563eb>Examples: minecraft:story/mine_stone, minecraft:nether/root</gradient>"

  # Condition validation messages
  amount-too-small: "<gradient:#ef4444:#dc2626>✖ Amount must be greater than 0!</gradient>"
  enter-valid-amount: "<gradient:#6b7280:#9ca3af>Please enter a valid amount:</gradient>"
  invalid-number-format: "<gradient:#ef4444:#dc2626>✖ Invalid number format!</gradient>"
  enter-valid-number: "<gradient:#6b7280:#9ca3af>Please enter a valid number (e.g., 100):</gradient>"
  enter-valid-whole-number: "<gradient:#3b82f6:#2563eb>Please enter a valid whole number (e.g., 5):</gradient>"
  invalid-money-amount: "<gradient:#ef4444:#dc2626>Invalid money amount! Please enter a valid number.</gradient>"
  invalid-item-amount: "<gradient:#ef4444:#dc2626>Invalid item amount! Please enter a valid number.</gradient>"

  # Condition success messages
  condition-added: "<gradient:#22c55e:#16a34a>Successfully added {condition} condition to portal {portal}!</gradient>"
  money-condition-added: "<gradient:#22c55e:#16a34a>✓ Money condition added: ${amount}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  item-condition-added: "<gradient:#22c55e:#16a34a>✓ Item condition added: {amount}x {material}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  level-condition-added: "<gradient:#22c55e:#16a34a>✓ Level requirement added: Level {level}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  min-players-condition-added: "<gradient:#22c55e:#16a34a>✓ Min players added: {count} players</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  max-players-condition-added: "<gradient:#22c55e:#16a34a>✓ Max players added: {count} players</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  playtime-condition-added: "<gradient:#22c55e:#16a34a>✓ Playtime added: {count} minutes</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  world-condition-added: "<gradient:#22c55e:#16a34a>✓ World requirement added: {world}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  biome-condition-added: "<gradient:#22c55e:#16a34a>✓ Biome requirement added: {biome}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  gamemode-condition-added: "<gradient:#22c55e:#16a34a>✓ Gamemode requirement added: {gamemode}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"
  advancement-condition-added: "<gradient:#22c55e:#16a34a>✓ Advancement required: {advancement}</gradient> <gradient:#6b7280:#9ca3af>(Total: {total_count} conditions)</gradient>"

  # Condition validation errors
  level-too-small: "<gradient:#ef4444:#dc2626>✖ Level must be at least 1.</gradient>"
  enter-valid-level: "<gradient:#3b82f6:#2563eb>Please enter a valid level (1 or higher).</gradient>"
  min-players-too-small: "<gradient:#ef4444:#dc2626>✖ Minimum players must be at least 1.</gradient>"
  enter-valid-min-players: "<gradient:#3b82f6:#2563eb>Please enter a valid number (1 or higher).</gradient>"
  max-players-too-small: "<gradient:#ef4444:#dc2626>✖ Maximum players must be at least 1.</gradient>"
  enter-valid-max-players: "<gradient:#3b82f6:#2563eb>Please enter a valid number (1 or higher).</gradient>"
  playtime-too-small: "<gradient:#ef4444:#dc2626>✖ Playtime must be at least 1 minute.</gradient>"
  enter-valid-playtime: "<gradient:#3b82f6:#2563eb>Please enter a valid number of minutes.</gradient>"
  world-name-empty: "<gradient:#ef4444:#dc2626>✖ World name cannot be empty!</gradient>"
  enter-valid-world: "<gradient:#3b82f6:#2563eb>Please enter a valid world name.</gradient>"
  biome-name-empty: "<gradient:#ef4444:#dc2626>✖ Biome name cannot be empty!</gradient>"
  enter-valid-biome: "<gradient:#3b82f6:#2563eb>Please enter a valid biome name.</gradient>"
  gamemode-name-empty: "<gradient:#ef4444:#dc2626>✖ Gamemode cannot be empty!</gradient>"
  enter-valid-gamemode: "<gradient:#3b82f6:#2563eb>Please enter a valid gamemode.</gradient>"
  advancement-id-empty: "<gradient:#ef4444:#dc2626>✖ Advancement ID cannot be empty!</gradient>"
  enter-valid-advancement: "<gradient:#3b82f6:#2563eb>Please enter a valid advancement ID.</gradient>"
  invalid-advancement: "<gradient:#ef4444:#dc2626>✖ Invalid advancement ID format!</gradient>"

  # Material/item handling
  hand-empty: "<gradient:#ef4444:#dc2626>✖ You must hold an item in your hand.</gradient>"
  enter-valid-material: "<gradient:#3b82f6:#2563eb>Please enter a valid material name.</gradient>"
  custom-item-set: "<gradient:#22c55e:#16a34a>✓ Custom item set:</gradient> <gradient:#f59e0b:#d97706>{item}</gradient>"
  material-set: "<gradient:#22c55e:#16a34a>✓ Material set:</gradient> <gradient:#f59e0b:#d97706>{material}</gradient>"
  enter-amount-required:
    - "<gradient:#ef4444:#dc2626>⚠ Type 'cancel' to abort</gradient>"
    - "<gradient:#22c55e:#16a34a>Step 2 of 2: Now enter the amount of {material} required:</gradient>"
    - "<gradient:#6b7280:#9ca3af>💡 Common: 1, 5, 10, 64</gradient>"
  amount-example: "<gradient:#3b82f6:#2563eb>Examples: 1, 5, 10, 32, 64</gradient>"
  invalid-material: "<gradient:#ef4444:#dc2626>✖ Invalid material:</gradient> <gradient:#f59e0b:#d97706>{material}</gradient>"
  material-tip: "<gradient:#3b82f6:#2563eb>Tip: Type 'HAND' to use the item in your hand, or use tab completion.</gradient>"
  custom-item-condition-added: "<gradient:#22c55e:#16a34a>✓ Item condition added: </gradient><gradient:#f59e0b:#d97706>{amount}x {item}</gradient>"
  portal-not-found: "<gradient:#ef4444:#dc2626>✖ Portal not found! Session expired.</gradient>"

  # ===========================================
  # VISUAL EFFECTS MANAGEMENT
  # ===========================================
  visual-header: "\n\n\n<gradient:#f472b6:#ec4899>Visual Effects:</gradient> <color:#fbbf24>{portal}</color>"
  visual-current:
    - "<gradient:#94a3b8:#64748b>Current Settings:</gradient>"
    - "<color:#e5e7eb>Particle:</color> <color:#fbbf24>{particle}</color> | <color:#e5e7eb>Color:</color> <color:#fbbf24>{color}</color> | <color:#e5e7eb>Count:</color> <color:#fbbf24>{count}</color>"
  visual-particle-button: "<gradient:#f472b6:#ec4899> [Set Particle]</gradient>"
  visual-color-button: "<gradient:#fbbf24:#f59e0b> [Set Color]</gradient>"
  visual-count-button: "<gradient:#4ade80:#22c55e> [Set Count]</gradient>"
  visual-spread-button: "<gradient:#60a5fa:#3b82f6> [Set Spread]</gradient>"
  visual-interval-button: "<gradient:#a78bfa:#8b5cf6> [Set Interval]</gradient>"

  hover-particle: "<gradient:#f472b6:#ec4899>Change particle effect type</gradient>"
  hover-color: "<gradient:#fbbf24:#f59e0b>Set custom particle color</gradient>"
  hover-count: "<gradient:#4ade80:#22c55e>Adjust particle density</gradient>"
  hover-spread: "<gradient:#60a5fa:#3b82f6>Configure particle spread pattern</gradient>"
  hover-interval: "<gradient:#a78bfa:#8b5cf6>Set particle display timing</gradient>"

  # ===========================================
  # AUDIO EFFECTS MANAGEMENT
  # ===========================================
  audio-header: "\n\n\n<gradient:#fbbf24:#f59e0b>Audio Settings:</gradient> <color:#fbbf24>{portal}</color>"
  audio-current-detailed: "<gradient:#94a3b8:#64748b>Current:</gradient> <color:#fbbf24>{sound}</color> | <color:#e5e7eb>Pitch:</color> <color:#fbbf24>{pitch}</color> | <color:#e5e7eb>Volume:</color> <color:#fbbf24>{volume}</color>"
  audio-set-button: "<gradient:#fbbf24:#f59e0b> [Set Sound]</gradient>"
  audio-disable-button: "<gradient:#f87171:#ef4444> [Disable Sound]</gradient>"
  audio-pitch-volume-header: "\n<gradient:#a78bfa:#8b5cf6>🎵 Pitch & Volume Controls</gradient>"
  audio-pitch-low-button: "<gradient:#60a5fa:#3b82f6> [Low Pitch (0.8)]</gradient>"
  audio-pitch-normal-button: "<gradient:#4ade80:#22c55e> [Normal Pitch (1.0)]</gradient>"
  audio-pitch-high-button: "<gradient:#fbbf24:#f59e0b> [High Pitch (1.5)]</gradient>"
  audio-pitch-custom-button: "<gradient:#e5e7eb:#d1d5db> [Custom Pitch...]</gradient>"
  audio-volume-quiet-button: "<gradient:#60a5fa:#3b82f6> [Quiet (0.3)]</gradient>"
  audio-volume-normal-button: "<gradient:#4ade80:#22c55e> [Normal (1.0)]</gradient>"
  audio-volume-loud-button: "<gradient:#fbbf24:#f59e0b> [Loud (1.5)]</gradient>"
  audio-volume-custom-button: "<gradient:#e5e7eb:#d1d5db> [Custom Volume...]</gradient>"
  hover-set-sound: "<gradient:#fbbf24:#f59e0b>Configure portal sound effect</gradient>"
  hover-disable-sound: "<gradient:#f87171:#ef4444>Turn off portal sounds</gradient>"
  hover-pitch-low: "<gradient:#60a5fa:#3b82f6>Set pitch to 0.8 (lower tone)</gradient>"
  hover-pitch-normal: "<gradient:#4ade80:#22c55e>Set pitch to 1.0 (normal tone)</gradient>"
  hover-pitch-high: "<gradient:#fbbf24:#f59e0b>Set pitch to 1.5 (higher tone)</gradient>"
  hover-pitch-custom: "<gradient:#e5e7eb:#d1d5db>Enter a custom pitch value (0.0-2.0)</gradient>"
  hover-volume-quiet: "<gradient:#60a5fa:#3b82f6>Set volume to 0.3 (quieter)</gradient>"
  hover-volume-normal: "<gradient:#4ade80:#22c55e>Set volume to 1.0 (normal)</gradient>"
  hover-volume-loud: "<gradient:#fbbf24:#f59e0b>Set volume to 1.5 (louder)</gradient>"
  hover-volume-custom: "<gradient:#e5e7eb:#d1d5db>Enter a custom volume value (0.0-2.0)</gradient>"
  audio-need-sound-first: "<gradient:#94a3b8:#64748b>→ Set a custom sound first to adjust pitch and volume</gradient>"

  # ===========================================
  # ECONOMY & TIMING MANAGEMENT
  # ===========================================
  economy-header: "\n\n\n<gradient:#4ade80:#22c55e>Economy & Timing:</gradient> <color:#fbbf24>{portal}</color>"
  economy-current:
    - "<gradient:#94a3b8:#64748b>Current Settings:</gradient>"
    - "<color:#e5e7eb>Cost:</color> <color:#fbbf24>{cost}</color> | <color:#e5e7eb>Cooldown:</color> <color:#fbbf24>{cooldown}</color> | <color:#e5e7eb>Warmup:</color> <color:#fbbf24>{warmup}</color>"
  economy-cost-button: "<gradient:#fbbf24:#f59e0b> [Set Cost]</gradient>"
  economy-cooldown-button: "<gradient:#60a5fa:#3b82f6> [Set Cooldown]</gradient>"
  economy-warmup-button: "<gradient:#c084fc:#a855f7> [Set Warmup]</gradient>"
  hover-cost: "<gradient:#fbbf24:#f59e0b>Set portal usage fee</gradient>"
  hover-cooldown: "<gradient:#60a5fa:#3b82f6>Set time between portal uses</gradient>"
  hover-warmup: "<gradient:#c084fc:#a855f7>Set activation delay</gradient>"

  # ===========================================
  # CONNECTION MANAGEMENT
  # ===========================================
  connection-header: "\n\n\n<gradient:#60a5fa:#3b82f6>Connection Settings:</gradient> <color:#fbbf24>{portal}</color>"
  connection-current: "<gradient:#94a3b8:#64748b>Connected To:</gradient> <color:#fbbf24>{target}</color>"
  connection-connect-button: "<gradient:#4ade80:#22c55e> [Connect Portal]</gradient>"
  connection-unlink-button: "<gradient:#f87171:#ef4444> [Unlink Portal]</gradient>"
  connection-type-button: "<gradient:#fbbf24:#f59e0b> [Set Type]</gradient>"
  connection-direction-button: "<gradient:#c084fc:#a855f7> [Set Direction]</gradient>"
  hover-connect: "<gradient:#4ade80:#22c55e>Link to another portal</gradient>"
  hover-unlink: "<gradient:#f87171:#ef4444>Remove portal connection</gradient>"
  hover-type: "<gradient:#fbbf24:#f59e0b>Change portal type (standard/RTP/oneway)</gradient>"
  hover-direction: "<gradient:#c084fc:#a855f7>Set teleport facing direction</gradient>"

  # ===========================================
  # ADMINISTRATIVE MANAGEMENT
  # ===========================================
  admin-header: "\n\n\n\n\n\n\n\n\n\n<gradient:#f87171:#ef4444>Administrative Actions:</gradient> <color:#fbbf24>{portal}</color>"
  admin-status: "<gradient:#94a3b8:#64748b>Portal Status:</gradient> {status}"
  admin-enable-button: "<gradient:#4ade80:#22c55e> [Enable Portal]</gradient>"
  admin-disable-button: "<gradient:#f87171:#ef4444> [Disable Portal]</gradient>"
  admin-rename-button: "<gradient:#fbbf24:#f59e0b> [Rename Portal]</gradient>"
  admin-move-button: "<gradient:#60a5fa:#3b82f6> [Move Portal]</gradient>"
  admin-reset-button: "<gradient:#c084fc:#a855f7> [Reset Settings]</gradient>"
  hover-enable: "<gradient:#4ade80:#22c55e>Activate portal for use</gradient>"
  hover-disable: "<gradient:#f87171:#ef4444>Deactivate portal temporarily</gradient>"
  hover-rename: "<gradient:#fbbf24:#f59e0b>Change portal name</gradient>"
  hover-move: "<gradient:#60a5fa:#3b82f6>Relocate portal to current position</gradient>"
  hover-reset: "<gradient:#c084fc:#a855f7>Reset all settings to defaults</gradient>"

  # ===========================================
  # PAGINATION SYSTEM
  # ===========================================
  paginated-header: "<gradient:#a78bfa:#8b5cf6>{title} ({current}/{total})</gradient>"
  delete-button: "<gradient:#f87171:#ef4444> ✖</gradient>"
  delete-hover: "<gradient:#f87171:#ef4444>Delete {item}</gradient>"
  previous-button: "<gradient:#60a5fa:#3b82f6>←</gradient>"
  previous-hover: "<gradient:#94a3b8:#64748b>Go to page {page}</gradient>"
  page-info: "<gradient:#94a3b8:#64748b> Page {page}/{total_pages} </gradient>"
  next-button: "<gradient:#60a5fa:#3b82f6>→</gradient>"
  next-hover: "<gradient:#94a3b8:#64748b>Go to page {page}</gradient>"
  add-item-button: "<gradient:#4ade80:#22c55e>✚ Add {type}</gradient>"
  add-item-hover: "<gradient:#94a3b8:#64748b>Add a new {type}</gradient>"
  back-to-menu-button: "<gradient:#6b7280:#9ca3af>← [Back to Main Menu]</gradient>"
  back-to-menu-hover: "<gradient:#94a3b8:#64748b>Return to main portal menu</gradient>"

  # ===========================================
  # BREADCRUMB NAVIGATION
  # ===========================================
  breadcrumb-conditions: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Conditions</gradient>"
  breadcrumb-add-condition: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Conditions > Add Condition</gradient>"
  breadcrumb-commands: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Commands</gradient>"
  breadcrumb-add-command: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Commands > Add Command</gradient>"
  breadcrumb-visual: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Visual Effects</gradient>"
  breadcrumb-audio: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Audio Settings</gradient>"
  breadcrumb-economy: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Economy & Timing</gradient>"
  breadcrumb-connection: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Connection Settings</gradient>"
  breadcrumb-admin: "<gradient:#6b7280:#9ca3af>❯ Portal Management > Administrative</gradient>"

  # Back navigation
  back-main-button: "<gradient:#6b7280:#9ca3af>← [Back to Main Menu]</gradient>"
  hover-back-main: "<gradient:#fbbf24:#f59e0b>Return to portal management overview</gradient>"

gui.yml

# ============================================
#     SoapsTeleporter 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). Text may use
# MiniMessage; legacy & and § are accepted where documented.
# SoapsAdmin uses a gui/ folder for many menus (advanced suite layout).
#
# All text supports MiniMessage format.
# Placeholders (replaced per-context):
#   {portal}         - Portal name
#   {status}         - Enabled/Disabled
#   {type}           - Portal type (STANDARD, ONEWAY, RTP)
#   {connected}      - Connected portal name or "None"
#   {world}          - Portal world name
#   {direction}      - Exit direction
#   {cost}           - Teleport cost or "Free"
#   {cooldown}       - Cooldown in seconds or "None"
#   {warmup}         - Warmup in seconds or "None"
#   {conditions}     - Number of conditions
#   {commands}       - Number of commands
#   {uses}           - Total usage count
#   {last_used}      - Last used timestamp
#   {page}           - Current page number
#   {total_pages}    - Total pages
#   {total_portals}  - Total portal count
#   {pos1}           - Position 1 coordinates
#   {pos2}           - Position 2 coordinates
#   {particle}       - Particle type
#   {color}          - Dust color
#   {sound}          - Sound name
#   {pitch}          - Sound pitch
#   {volume}         - Sound volume
#   {orientation}    - Portal orientation
#   {size}           - Portal size (blocks)
#   {player}         - Player name
#
# Actions:
#   [close]            - Close the GUI
#   [back]             - Go back to previous menu
#   [open_menu] <id>   - Open a menu (portal_list, main_menu, visual, audio, economy, connection, conditions, commands, admin, info, connect_selector, type_selector, direction_selector)
#   [prev_page]        - Previous page
#   [next_page]        - Next page
#   [toggle_enable]    - Toggle portal enabled/disabled
#   [chat_input] <t>   - Open chat input (setparticle, setcolor, setcount, setspread, setsound, setpitchvolume, setcost, setcooldown, setwarmup, connect, rename)
#   [unlink]           - Unlink connected portal
#   [delete]           - Delete portal (shows confirm)
#   [move]             - Move portal to selection
#   [tp]               - Teleport to portal
#   [select_portal]    - Select this portal for connection
#   [set_type] <type>  - Set portal type
#   [set_direction] <dir> - Set exit direction
#   [disable_sound]    - Disable portal sound
#   [add_condition]    - Open add-condition menu
#   [add_enter_cmd]    - Start enter command input
#   [add_exit_cmd]     - Start exit command input
#   [confirm]          - Confirm pending action
#   [cancel]           - Cancel pending action
#
# Slot numbers start at 0.
# 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 click (set to NONE to disable)
  click-sound: UI_BUTTON_CLICK
  click-sound-volume: 0.5
  click-sound-pitch: 1.0

# ============================================
#               Menu Definitions
# ============================================
menus:

  # ------------------------------------------
  #         Portal List (Paginated)
  # ------------------------------------------
  portal_list:
    title: "<dark_purple><bold>Portal List</bold></dark_purple> <gray>(Page {page}/{total_pages})</gray>"
    size: 6
    portal-item:
      name: "<green><bold>{portal}</bold></green>"
      lore:
        - "<gray>Status: {status}</gray>"
        - "<gray>Type: {type}</gray>"
        - "<gray>Connected: {connected}</gray>"
        - "<gray>Uses: {uses}</gray>"
        - ""
        - "<yellow>Left-click to manage</yellow>"
        - "<aqua>Right-click for info</aqua>"
      material-enabled: ENDER_PEARL
      material-disabled: ENDER_EYE
    items:
      prev-page:
        slot: 45
        material: ARROW
        name: "<gold>← Previous Page</gold>"
        action: "[prev_page]"
      page-info:
        slot: 49
        material: BOOK
        name: "<white>Page {page}/{total_pages}</white>"
        lore:
          - "<gray>{total_portals} total portals</gray>"
      close:
        slot: 48
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"
      next-page:
        slot: 53
        material: ARROW
        name: "<gold>Next Page →</gold>"
        action: "[next_page]"

  # ------------------------------------------
  #         Portal Info (Dashboard)
  # ------------------------------------------
  portal_info:
    title: "<dark_aqua><bold>Info:</bold></dark_aqua> <white>{portal}</white>"
    size: 5
    items:
      header:
        slot: 4
        material: ENDER_PEARL
        name: "<green><bold>{portal}</bold></green>"
        lore:
          - "<gray>Detailed portal information</gray>"
          - ""
          - "<gray>Status: {status}</gray>"
          - "<gray>Type: {type}</gray>"
      # --- Row 1: Location & Geometry ---
      world:
        slot: 10
        material: GRASS_BLOCK
        name: "<green>World</green>"
        lore:
          - "<gray>World: <white>{world}</white></gray>"
          - "<gray>Orientation: <white>{orientation}</white></gray>"
          - "<gray>Size: <white>{size} blocks</white></gray>"
      position1:
        slot: 11
        material: CYAN_CONCRETE
        name: "<aqua>Position 1</aqua>"
        lore:
          - "<gray>{pos1}</gray>"
      position2:
        slot: 12
        material: ORANGE_CONCRETE
        name: "<gold>Position 2</gold>"
        lore:
          - "<gray>{pos2}</gray>"
      connection:
        slot: 14
        material: CHAIN
        name: "<aqua>Connection</aqua>"
        lore:
          - "<gray>Connected to: <white>{connected}</white></gray>"
          - "<gray>Type: <white>{type}</white></gray>"
          - "<gray>Direction: <white>{direction}</white></gray>"
        material-active: CHAIN
        name-active: "<red>Not Connected</red>"
        lore-active:
          - "<gray>This portal is not linked</gray>"
          - "<gray>Use the connection menu to link</gray>"
      # --- Row 2: Effects & Economy ---
      particles:
        slot: 19
        material: BLAZE_POWDER
        name: "<light_purple>Particles</light_purple>"
        lore:
          - "<gray>Type: <white>{particle}</white></gray>"
          - "<gray>Color: <white>{color}</white></gray>"
      sound:
        slot: 20
        material: NOTE_BLOCK
        name: "<gold>Sound</gold>"
        lore:
          - "<gray>Sound: <white>{sound}</white></gray>"
          - "<gray>Pitch: <white>{pitch}</white></gray>"
          - "<gray>Volume: <white>{volume}</white></gray>"
      economy:
        slot: 22
        material: GOLD_INGOT
        name: "<green>Economy & Timing</green>"
        lore:
          - "<gray>Cost: <white>{cost}</white></gray>"
          - "<gray>Cooldown: <white>{cooldown}</white></gray>"
          - "<gray>Warmup: <white>{warmup}</white></gray>"
      conditions:
        slot: 23
        material: COMPARATOR
        name: "<red>Conditions</red>"
        lore:
          - "<gray>Active conditions: <white>{conditions}</white></gray>"
      commands:
        slot: 24
        material: COMMAND_BLOCK
        name: "<yellow>Commands</yellow>"
        lore:
          - "<gray>Active commands: <white>{commands}</white></gray>"
      # --- Row 3: Stats & Actions ---
      stats:
        slot: 28
        material: EXPERIENCE_BOTTLE
        name: "<aqua>Usage Statistics</aqua>"
        lore:
          - "<gray>Total uses: <white>{uses}</white></gray>"
          - "<gray>Last used: <white>{last_used}</white></gray>"
      teleport:
        slot: 30
        material: ENDER_EYE
        name: "<light_purple>Teleport to Portal</light_purple>"
        lore:
          - "<gray>Click to teleport to this portal</gray>"
        action: "[tp]"
      manage:
        slot: 32
        material: WRITABLE_BOOK
        name: "<gold>Manage Portal</gold>"
        lore:
          - "<gray>Open full management menu</gray>"
        action: "[open_menu] main_menu"
      back:
        slot: 36
        material: ARROW
        name: "<gray>Back to Portal List</gray>"
        action: "[open_menu] portal_list"
      close:
        slot: 40
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #          Main Management Menu
  # ------------------------------------------
  main_menu:
    title: "<dark_purple><bold>Manage:</bold></dark_purple> <white>{portal}</white>"
    size: 5
    items:
      header:
        slot: 4
        material: ENDER_PEARL
        name: "<green><bold>{portal}</bold></green>"
        lore:
          - "<gray>Status: {status}</gray>"
          - "<gray>Type: {type}</gray>"
          - "<gray>Connected: {connected}</gray>"
        material-active: ENDER_EYE
        name-active: "<red><bold>{portal}</bold></red>"
        lore-active:
          - "<red>Status: Disabled</red>"
          - "<gray>Type: {type}</gray>"
          - "<gray>Connected: {connected}</gray>"
      # --- Category Buttons (Row 2) ---
      info:
        slot: 10
        material: BOOK
        name: "<dark_aqua><bold>Portal Info</bold></dark_aqua>"
        lore:
          - "<gray>View complete portal details</gray>"
          - "<gray>Coordinates, stats, properties</gray>"
          - ""
          - "<yellow>Click to view</yellow>"
        action: "[open_menu] info"
      visual:
        slot: 12
        material: PAINTING
        name: "<light_purple><bold>Visual Effects</bold></light_purple>"
        lore:
          - "<gray>Particles, colors, spread</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] visual"
      audio:
        slot: 14
        material: NOTE_BLOCK
        name: "<gold><bold>Audio Settings</bold></gold>"
        lore:
          - "<gray>Sound, pitch, volume</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] audio"
      economy:
        slot: 16
        material: GOLD_INGOT
        name: "<green><bold>Economy & Timing</bold></green>"
        lore:
          - "<gray>Cost, cooldown, warmup</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] economy"
      connection:
        slot: 20
        material: CHAIN
        name: "<aqua><bold>Connection</bold></aqua>"
        lore:
          - "<gray>Link portals, set type & direction</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] connection"
      conditions:
        slot: 22
        material: COMPARATOR
        name: "<red><bold>Conditions ({conditions})</bold></red>"
        lore:
          - "<gray>Requirements to use portal</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] conditions"
      commands:
        slot: 24
        material: COMMAND_BLOCK
        name: "<yellow><bold>Commands ({commands})</bold></yellow>"
        lore:
          - "<gray>Enter/exit commands</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] commands"
      admin:
        slot: 31
        material: REDSTONE_TORCH
        name: "<dark_red><bold>Admin Actions</bold></dark_red>"
        lore:
          - "<gray>Enable/disable, rename, move, delete</gray>"
          - ""
          - "<yellow>Click to configure</yellow>"
        action: "[open_menu] admin"
      # --- Navigation (Row 4) ---
      back:
        slot: 36
        material: ARROW
        name: "<gray>Back to Portal List</gray>"
        action: "[open_menu] portal_list"
      close:
        slot: 40
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #          Visual Effects Menu
  # ------------------------------------------
  visual:
    title: "<light_purple><bold>Visual:</bold></light_purple> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: PAINTING
        name: "<light_purple><bold>Current Settings</bold></light_purple>"
        lore:
          - "<gray>Particle: <white>{particle}</white></gray>"
          - "<gray>Color: <white>{color}</white></gray>"
          - "<gray>Count: <white>{count}</white></gray>"
      set-particle:
        slot: 10
        material: BLAZE_POWDER
        name: "<gold><bold>Set Particle Type</bold></gold>"
        lore:
          - "<gray>Change the particle effect</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setparticle"
      set-color:
        slot: 12
        material: RED_DYE
        name: "<red><bold>Set Color</bold></red>"
        lore:
          - "<gray>Set dust particle color (hex)</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setcolor"
      set-count:
        slot: 14
        material: REDSTONE
        name: "<dark_red><bold>Set Particle Count</bold></dark_red>"
        lore:
          - "<gray>Number of particles per tick</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setcount"
      set-spread:
        slot: 16
        material: FEATHER
        name: "<white><bold>Set Spread</bold></white>"
        lore:
          - "<gray>Particle spread distribution</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setspread"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #            Audio Menu
  # ------------------------------------------
  audio:
    title: "<gold><bold>Audio:</bold></gold> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: NOTE_BLOCK
        name: "<gold><bold>Current Settings</bold></gold>"
        lore:
          - "<gray>Sound: <white>{sound}</white></gray>"
          - "<gray>Pitch: <white>{pitch}</white></gray>"
          - "<gray>Volume: <white>{volume}</white></gray>"
      set-sound:
        slot: 11
        material: JUKEBOX
        name: "<green><bold>Set Sound</bold></green>"
        lore:
          - "<gray>Change teleport sound effect</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setsound"
      set-pitch-volume:
        slot: 13
        material: BELL
        name: "<aqua><bold>Set Pitch & Volume</bold></aqua>"
        lore:
          - "<gray>Adjust sound properties</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setpitchvolume"
      disable-sound:
        slot: 15
        material: STRUCTURE_VOID
        name: "<red><bold>Disable Sound</bold></red>"
        lore:
          - "<gray>Remove the teleport sound</gray>"
          - ""
          - "<yellow>Click to disable</yellow>"
        action: "[disable_sound]"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #         Economy & Timing Menu
  # ------------------------------------------
  economy:
    title: "<green><bold>Economy:</bold></green> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: GOLD_INGOT
        name: "<green><bold>Current Settings</bold></green>"
        lore:
          - "<gray>Cost: <white>{cost}</white></gray>"
          - "<gray>Cooldown: <white>{cooldown}</white></gray>"
          - "<gray>Warmup: <white>{warmup}</white></gray>"
      set-cost:
        slot: 11
        material: EMERALD
        name: "<green><bold>Set Cost</bold></green>"
        lore:
          - "<gray>Set teleportation cost</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setcost"
      set-cooldown:
        slot: 13
        material: CLOCK
        name: "<aqua><bold>Set Cooldown</bold></aqua>"
        lore:
          - "<gray>Time between uses (seconds)</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setcooldown"
      set-warmup:
        slot: 15
        material: HOPPER
        name: "<gold><bold>Set Warmup</bold></gold>"
        lore:
          - "<gray>Delay before teleport (seconds)</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] setwarmup"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #          Connection Menu
  # ------------------------------------------
  connection:
    title: "<aqua><bold>Connection:</bold></aqua> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: CHAIN
        name: "<aqua><bold>Connection Status</bold></aqua>"
        lore:
          - "<gray>Target: <white>{connected}</white></gray>"
          - "<gray>Type: <white>{type}</white></gray>"
          - "<gray>Direction: <white>{direction}</white></gray>"
      connect:
        slot: 10
        material: TRIPWIRE_HOOK
        name: "<green><bold>Connect Portal</bold></green>"
        lore:
          - "<gray>Link to another portal</gray>"
          - ""
          - "<yellow>Click to browse portals</yellow>"
        material-active: SHEARS
        name-active: "<red><bold>Unlink Portal</bold></red>"
        lore-active:
          - "<gray>Currently linked to: <white>{connected}</white></gray>"
          - ""
          - "<yellow>Click to unlink</yellow>"
        action: "[open_menu] connect_selector"
        action-active: "[unlink]"
      set-type:
        slot: 13
        material: END_PORTAL_FRAME
        name: "<dark_purple><bold>Set Portal Type</bold></dark_purple>"
        lore:
          - "<gray>Current: <white>{type}</white></gray>"
          - ""
          - "<yellow>Click to change type</yellow>"
        action: "[open_menu] type_selector"
      set-direction:
        slot: 16
        material: COMPASS
        name: "<gold><bold>Set Direction</bold></gold>"
        lore:
          - "<gray>Current: <white>{direction}</white></gray>"
          - ""
          - "<yellow>Click to change direction</yellow>"
        action: "[open_menu] direction_selector"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #    Connect Selector (Paginated Picker)
  # ------------------------------------------
  connect_selector:
    title: "<green><bold>Connect:</bold></green> <white>{portal}</white> <gray>(Page {page})</gray>"
    size: 6
    portal-item:
      name: "<yellow>{portal}</yellow>"
      lore:
        - "<gray>World: {world}</gray>"
        - "<gray>Type: {type}</gray>"
        - ""
        - "<green>Click to connect</green>"
      name-connected: "<red>{portal}</red>"
      lore-connected:
        - "<gray>World: {world}</gray>"
        - "<red>Already connected to another portal</red>"
      material-available: LIME_CONCRETE
      material-connected: RED_CONCRETE
    items:
      prev-page:
        slot: 45
        material: ARROW
        name: "<gold>← Previous Page</gold>"
        action: "[prev_page]"
      page-info:
        slot: 49
        material: BOOK
        name: "<white>Page {page}/{total_pages}</white>"
        lore:
          - "<gray>Select a portal to connect</gray>"
      back:
        slot: 48
        material: ARROW
        name: "<gray>Back to Connection</gray>"
        action: "[back]"
      next-page:
        slot: 53
        material: ARROW
        name: "<gold>Next Page →</gold>"
        action: "[next_page]"

  # ------------------------------------------
  #       Type Selector (Click-to-Pick)
  # ------------------------------------------
  type_selector:
    title: "<dark_purple><bold>Portal Type:</bold></dark_purple> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: END_PORTAL_FRAME
        name: "<dark_purple><bold>Select Portal Type</bold></dark_purple>"
        lore:
          - "<gray>Current type: <white>{type}</white></gray>"
          - ""
          - "<gray>Click a type below to apply</gray>"
      standard:
        slot: 11
        material: ENDER_PEARL
        name: "<green><bold>Standard</bold></green>"
        lore:
          - "<gray>Two-way teleport between</gray>"
          - "<gray>connected portals</gray>"
          - ""
          - "<yellow>Click to select</yellow>"
        material-active: ENDER_PEARL
        name-active: "<green><bold>✔ Standard (Active)</bold></green>"
        lore-active:
          - "<gray>Two-way teleport between</gray>"
          - "<gray>connected portals</gray>"
          - ""
          - "<green>Currently selected</green>"
        action: "[set_type] STANDARD"
      oneway:
        slot: 13
        material: ARROW
        name: "<gold><bold>One-Way</bold></gold>"
        lore:
          - "<gray>Teleport in one direction only</gray>"
          - "<gray>Destination does not teleport back</gray>"
          - ""
          - "<yellow>Click to select</yellow>"
        material-active: SPECTRAL_ARROW
        name-active: "<gold><bold>✔ One-Way (Active)</bold></gold>"
        lore-active:
          - "<gray>Teleport in one direction only</gray>"
          - "<gray>Destination does not teleport back</gray>"
          - ""
          - "<green>Currently selected</green>"
        action: "[set_type] ONEWAY"
      rtp:
        slot: 15
        material: CHORUS_FRUIT
        name: "<light_purple><bold>Random Teleport</bold></light_purple>"
        lore:
          - "<gray>Teleport to a random location</gray>"
          - "<gray>within configurable range</gray>"
          - ""
          - "<yellow>Click to select</yellow>"
        material-active: CHORUS_FLOWER
        name-active: "<light_purple><bold>✔ RTP (Active)</bold></light_purple>"
        lore-active:
          - "<gray>Teleport to a random location</gray>"
          - "<gray>within configurable range</gray>"
          - ""
          - "<green>Currently selected</green>"
        action: "[set_type] RTP"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Connection</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #    Direction Selector (Compass-Style)
  # ------------------------------------------
  direction_selector:
    title: "<gold><bold>Direction:</bold></gold> <white>{portal}</white>"
    size: 3
    items:
      header:
        slot: 4
        material: COMPASS
        name: "<gold><bold>Select Exit Direction</bold></gold>"
        lore:
          - "<gray>Current: <white>{direction}</white></gray>"
          - ""
          - "<gray>Players will face this direction</gray>"
          - "<gray>after teleporting</gray>"
      north:
        slot: 10
        material: BLUE_CONCRETE
        name: "<blue><bold>North</bold></blue>"
        lore:
          - "<gray>Players face North (-Z)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] NORTH"
      south:
        slot: 11
        material: RED_CONCRETE
        name: "<red><bold>South</bold></red>"
        lore:
          - "<gray>Players face South (+Z)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] SOUTH"
      east:
        slot: 12
        material: GREEN_CONCRETE
        name: "<green><bold>East</bold></green>"
        lore:
          - "<gray>Players face East (+X)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] EAST"
      west:
        slot: 13
        material: YELLOW_CONCRETE
        name: "<yellow><bold>West</bold></yellow>"
        lore:
          - "<gray>Players face West (-X)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] WEST"
      up:
        slot: 15
        material: WHITE_CONCRETE
        name: "<white><bold>Up</bold></white>"
        lore:
          - "<gray>Players look up (-90° pitch)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] UP"
      down:
        slot: 16
        material: BLACK_CONCRETE
        name: "<dark_gray><bold>Down</bold></dark_gray>"
        lore:
          - "<gray>Players look down (90° pitch)</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] DOWN"
      default:
        slot: 22
        material: RECOVERY_COMPASS
        name: "<gray><bold>Default (Preserve)</bold></gray>"
        lore:
          - "<gray>Keep player's original facing</gray>"
          - "<yellow>Click to select</yellow>"
        action: "[set_direction] DEFAULT"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Connection</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #      Conditions Menu (Paginated)
  # ------------------------------------------
  conditions:
    title: "<red><bold>Conditions:</bold></red> <white>{portal}</white> <gray>(Page {page})</gray>"
    size: 6
    items:
      add-condition:
        slot: 47
        material: EMERALD
        name: "<green><bold>Add Condition</bold></green>"
        lore:
          - "<gray>Add a new condition</gray>"
        action: "[add_condition]"
      page-info:
        slot: 49
        material: BOOK
        name: "<white>Page {page}/{total_pages}</white>"
        lore:
          - "<gray>{conditions} conditions</gray>"
      back:
        slot: 51
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      prev-page:
        slot: 45
        material: ARROW
        name: "<gold>← Previous Page</gold>"
        action: "[prev_page]"
      next-page:
        slot: 53
        material: ARROW
        name: "<gold>Next Page →</gold>"
        action: "[next_page]"

  # ------------------------------------------
  #    Add Condition Menu (3 Pages)
  # ------------------------------------------
  add_condition:
    title: "<green><bold>Add Condition</bold></green> <gray>(Page {page}/3)</gray>"
    size: 3
    items:
      back:
        slot: 22
        material: ARROW
        name: "<gray>Back to Conditions</gray>"
        action: "[back]"
      prev-page:
        slot: 18
        material: ARROW
        name: "<gold>← Previous Page</gold>"
        action: "[prev_page]"
      next-page:
        slot: 26
        material: ARROW
        name: "<gold>Next Page →</gold>"
        action: "[next_page]"

  # ------------------------------------------
  #      Commands Menu (Paginated)
  # ------------------------------------------
  commands:
    title: "<yellow><bold>Commands:</bold></yellow> <white>{portal}</white> <gray>(Page {page})</gray>"
    size: 6
    items:
      add-enter:
        slot: 47
        material: LIME_CONCRETE_POWDER
        name: "<green><bold>Add Enter Command</bold></green>"
        lore:
          - "<gray>Type command in chat</gray>"
        action: "[add_enter_cmd]"
      add-exit:
        slot: 48
        material: RED_CONCRETE_POWDER
        name: "<red><bold>Add Exit Command</bold></red>"
        lore:
          - "<gray>Type command in chat</gray>"
        action: "[add_exit_cmd]"
      page-info:
        slot: 49
        material: BOOK
        name: "<white>Page {page}/{total_pages}</white>"
        lore:
          - "<gray>{commands} commands</gray>"
      back:
        slot: 51
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      prev-page:
        slot: 45
        material: ARROW
        name: "<gold>← Previous Page</gold>"
        action: "[prev_page]"
      next-page:
        slot: 53
        material: ARROW
        name: "<gold>Next Page →</gold>"
        action: "[next_page]"

  # ------------------------------------------
  #            Admin Menu
  # ------------------------------------------
  admin:
    title: "<dark_red><bold>Admin:</bold></dark_red> <white>{portal}</white>"
    size: 3
    items:
      status:
        slot: 4
        material: LIME_WOOL
        name: "<green><bold>Status: Enabled</bold></green>"
        material-active: RED_WOOL
        name-active: "<red><bold>Status: Disabled</bold></red>"
      toggle-enable:
        slot: 10
        material: EMERALD_BLOCK
        name: "<green><bold>Enable Portal</bold></green>"
        lore:
          - "<gray>Allow portal usage</gray>"
          - "<yellow>Click to enable</yellow>"
        material-active: REDSTONE_BLOCK
        name-active: "<red><bold>Disable Portal</bold></red>"
        lore-active:
          - "<gray>Prevent portal usage</gray>"
          - "<yellow>Click to disable</yellow>"
        action: "[toggle_enable]"
      rename:
        slot: 12
        material: NAME_TAG
        name: "<gold><bold>Rename Portal</bold></gold>"
        lore:
          - "<gray>Change the portal name</gray>"
          - ""
          - "<dark_gray>Type in chat after clicking</dark_gray>"
        action: "[chat_input] rename"
      move:
        slot: 14
        material: MINECART
        name: "<aqua><bold>Move Portal</bold></aqua>"
        lore:
          - "<gray>Move to your current selection</gray>"
          - ""
          - "<yellow>Click to move</yellow>"
        action: "[move]"
      delete:
        slot: 16
        material: TNT
        name: "<dark_red><bold>Delete Portal</bold></dark_red>"
        lore:
          - "<red>Permanently delete this portal</red>"
          - ""
          - "<yellow>Click to confirm</yellow>"
        action: "[delete]"
      back:
        slot: 18
        material: ARROW
        name: "<gray>Back to Manage</gray>"
        action: "[back]"
      close:
        slot: 26
        material: BARRIER
        name: "<red>Close</red>"
        action: "[close]"

  # ------------------------------------------
  #          Confirm Dialog
  # ------------------------------------------
  confirm:
    title: "<red><bold>Confirm Action</bold></red>"
    size: 3
    items:
      info:
        slot: 4
        material: PAPER
        name: "<red><bold>Confirm: {action}</bold></red>"
        lore:
          - "<gray>{description}</gray>"
      confirm-btn:
        slot: 11
        material: LIME_WOOL
        name: "<green><bold>CONFIRM</bold></green>"
        lore:
          - "<gray>Proceed with action</gray>"
        action: "[confirm]"
      cancel-btn:
        slot: 15
        material: RED_WOOL
        name: "<red><bold>CANCEL</bold></red>"
        lore:
          - "<gray>Go back</gray>"
        action: "[cancel]"

portals.yml

# ############################################
# #                                          #
# #   Plugin: SoapsTeleporter                #
# #                                          #
# #   Created by AlternativeSoap             #
# #   Website: www.SoapsUniverse.com         #
# #   Support: https://discord.gg/mawAzwFq   #
# #                                          #
# ############################################

# ==========================================
# Portal Storage File
# ==========================================
# WARNING: Do not edit this file manually unless you know what you're doing!
# All portals are saved and loaded automatically by the plugin.
#
# Use in-game commands or the GUI to manage portals:
#   /st create <name>  - Create a new portal
#   /st manage <name>  - Open the management menu
#   /st list            - View all portals
#
# Each portal entry stores: region bounds, destination,
# particles, sounds, conditions, economy, commands, and more.
# Manual edits may corrupt portal data or cause errors.
# ==========================================

portals: {}

plugin.yml

# ############################################
# #                                          #
# #   Plugin: SoapsTeleporter                #
# #                                          #
# #   Created by AlternativeSoap             #
# #   Website: www.SoapsUniverse.com         #
# #   Support: https://discord.gg/mawAzwFq   #
# #                                          #
# ############################################

main: com.soaps.teleporters.SoapsTeleporter
version: 1.0.5
name: SoapsTeleporter
author: AlternativeSoap
api-version: 1.21
folia-supported: false
description: A premium teleportation portal system for PaperMC - Supporting Minecraft 1.21+ with enhanced particle effects, async teleportation, MiniMessage formatting, and optimized performance

depend: ["SoapsCommon"]
softdepend: ["PlaceholderAPI", "Vault", "WorldGuard", "Lands"]

commands:
  st:
    description: Main portal command
    usage: /<command> <subcommand>
    aliases: [soapsteleporter, teleporter]

permissions:
  st.admin:
    description: Admin permission for all portal commands
    default: op
  st.manage:
    description: Permission to use interactive portal management interface
    default: op
  st.portal.use:
    description: General permission to use any portal
    default: true
  st.portal.bypass.warmup:
    description: Bypass warmup timer
    default: op
  st.portal.bypass.cooldown:
    description: Bypass cooldown timer
    default: op
  st.portal.group.*:
    description: Access to portal groups (st.portal.group.<groupname>)
    default: false
  st.command.set:
    description: Permission to use /st set commands
    default: op
  st.command.shapepreview:
    description: Permission to use preview shape tools
    default: op
  st.command.add:
    description: Permission to create portals
    default: op
  st.command.connect:
    description: Permission to connect portals
    default: op
  st.command.remove:
    description: Permission to remove portals
    default: op
  st.command.list:
    description: Permission to list portals
    default: op
  st.command.disable:
    description: Permission to disable portals
    default: op
  st.command.enable:
    description: Permission to enable portals
    default: op
  st.command.reload:
    description: Permission to reload the plugin
    default: op
  st.command.tp:
    description: Permission to teleport to portals
    default: op
  st.command.tool:
    description: Permission to get the portal tool
    default: op
  st.command.wand:
    description: Permission to get the portal wand
    default: op
  st.command.info:
    description: Permission to view portal info
    default: op
  st.command.backup:
    description: Permission to backup portals
    default: op
  st.command.debug:
    description: Permission to toggle debug mode
    default: op
  st.command.setdirection:
    description: Permission to set portal teleportation direction
    default: op
  st.command.setrouting:
    description: Permission to set multi-destination routing mode
    default: op
  st.command.setdestinations:
    description: Permission to configure linked portal destinations
    default: op
  st.command.settype:
    description: Permission to set portal type (standard/rtp)
    default: op
  st.command.setcommand:
    description: Permission to set portal commands
    default: op
  st.command.setcondition:
    description: Permission to set portal conditions
    default: op
  st.command.addcondition:
    description: Permission to add portal conditions
    default: op
  st.command.reset:
    description: Permission to reset portals to defaults
    default: op
  st.command.rename:
    description: Permission to rename portals
    default: op
  st.command.move:
    description: Permission to move portals
    default: op
  st.command.unlink:
    description: Permission to unlink portals
    default: op
  st.command.setparticle:
    description: Permission to set portal particles
    default: op
  st.command.setcolor:
    description: Permission to set particle colors
    default: op
  st.command.setcount:
    description: Permission to set particle count
    default: op
  st.command.setspread:
    description: Permission to set particle spread
    default: op
  st.command.setinterval:
    description: Permission to set particle display interval
    default: op
  st.command.setsound:
    description: Permission to set portal sounds
    default: op
  st.command.setcost:
    description: Permission to set portal costs
    default: op
  st.command.setcooldown:
    description: Permission to set portal cooldowns
    default: op
  st.command.setwarmup:
    description: Permission to set portal warmup times
    default: op
  st.command.setdisablesafecheck:
    description: Permission to disable safety checks
    default: op
  st.debug:
    description: Permission to use debug commands
    default: op
Discord