# Configuration version - Do not modify this value
config_version: 1.6.2

# TIME FORMAT GUIDE
# Simple formats: 20s (20 seconds), 5m (5 minutes), 1h (1 hour)
# Complex format: 1d_2h_30m_15s (1 day, 2 hours, 30 minutes, 15 seconds)
# Units: s = seconds, m = minutes, h = hours, d = days, w = weeks, mo = months, y = years

# ADDING CUSTOM LANGUAGE
# 1. Create a new folder in the language directory
# 2. Use the files from en_US folder as a template
# 3. Modify those files as needed (messages.yml, formatting.yml,...)
# 4. Set language to your custom folder name

#---------------------------------------------------
#               Language Settings
#---------------------------------------------------
# Language setting (available: en_US, vi_VN, de_DE, DonutSMP)
language: en_US

# Spawner GUI layout configuration (available: default, DonutSMP)
gui_layout: default

# Enable or disable debug mode (provides verbose console output)
debug: false

#---------------------------------------------------
#             Core Spawner Properties
#---------------------------------------------------
# These settings control the fundamental behavior of all spawners
spawner_properties:
  default:
    # Spawn Parameters - Controls mob generation frequency and amounts
    min_mobs: 1         # Minimum mobs spawned per cycle
    max_mobs: 4         # Maximum mobs spawned per cycle
    range: 16           # Player proximity required for activation (in blocks)
    delay: 25s          # Base delay between spawn cycles (see time format guide above)

    # Storage Settings - Defines internal inventory capacity
    max_storage_pages: 1  # Each page provides 45 inventory slots
    max_stored_exp: 1000  # Maximum experience points that can be stored
    max_stack_size: 10000  # Maximum number of spawners that can be stacked

    # Behavior Settings - Controls special spawner functionality
    allow_exp_mending: true   # Allow spawners to repair items with stored XP
    protect_from_explosions: true   # Protect spawner blocks from explosion

#---------------------------------------------------
#           Spawner Breaking Mechanics
#---------------------------------------------------
# Controls how players can break and collect spawners
spawner_break:
  enabled: true         # Master switch for spawner breaking feature

  # Whether to directly add spawner items to player inventory instead of dropping them on the ground
  direct_to_inventory: false

  # Tool Requirements - Which tools can break spawners
  required_tools:
    - IRON_PICKAXE
    - GOLDEN_PICKAXE
    - DIAMOND_PICKAXE
    - NETHERITE_PICKAXE

  # Durability impact on tools when breaking a spawner
  durability_loss: 1    # Number of durability points deducted

  # Enchantment Requirements for successful spawner collection
  silk_touch:
    required: true      # Whether Silk Touch is needed to obtain spawners
    level: 1            # Minimum level of Silk Touch required

#---------------------------------------------------
#           Natural/Vanilla Spawner Settings
#---------------------------------------------------
# Controls behavior of naturally generated dungeon spawners
natural_spawner:
  # Whether natural spawners can be broken and collected
  breakable: false

  # Convert natural spawners to smart spawners when broken
  # If false, natural spawners will drop vanilla spawner items
  convert_to_smart_spawner: false

  # Whether natural spawners will spawn mobs
  spawn_mobs: true

  # Whether natural spawner block will be protected from explosions
  protect_from_explosions: false

#---------------------------------------------------
#                Economy Settings
#---------------------------------------------------
# Economy Configuration for selling items from spawners inventory
custom_economy:

  # Enable or disable selling items from spawners
  enabled: true

  # Supported types: VAULT, COINSENGINE (more will be added in the future)
  currency: VAULT

  # Specifies the name of the currency used by COINSENGINE
  # This setting is only required when using COINSENGINE as the economy currency
  coinsengine_currency: coins

  # SHOP_ONLY:
  #   - Uses ONLY shop integration prices (e.g., ShopGUI+, EconomyShopGUI, etc.)
  #   - Custom prices are completely ignored, even if enabled
  #   - Items without shop prices cannot be sold
  #   - Requires valid shop integration to function
  #
  # SHOP_PRIORITY: (Recommended for most servers)
  #   - Primary: Shop integration prices
  #   - Fallback: Custom prices (if shop price not found)
  #   - Best for servers that primarily use shop plugins but want
  #     custom prices as backup for items not in the shop
  #
  # CUSTOM_ONLY:
  #   - Uses ONLY custom prices from the price configuration file
  #   - Shop integration prices are completely ignored
  #   - Items without custom prices will use the default price
  #   - Requires custom prices to be configured
  #
  # CUSTOM_PRIORITY:
  #   - Primary: Custom prices from configuration file
  #   - Fallback: Shop integration prices (if custom price not found)
  #   - Ideal for servers that want full control over spawner item prices
  #     while still benefiting from shop integration for unconfigured items
  price_source_mode: SHOP_PRIORITY

  # Shop plugin integration
  shop_integration:
    enabled: true
    # Supported shop plugins: auto, EconomyShopGUI, EconomyShopGUI-Premium, ShopGUIPlus, zShop, ExcellentShop
    # 'auto' will attempt to detect your installed shop plugin automatically
    preferred_plugin: auto

  # Custom sell price configuration
  custom_prices:
    enabled: true
    # Path to custom item prices file
    price_file_name: "item_prices.yml"

    # Default price for items without specific custom prices
    # Set to 0.0 to disable selling items without custom prices
    default_price: 1.0

#---------------------------------------------------
#              Item Collection System
#---------------------------------------------------
# Configuration for automated item collection
hopper:
  enabled: false
  check_delay: 3s       # Time between collection checks (see time format guide above)
  stack_per_transfer: 5 # Number of item stacks transferred in one operation (max 5)

#---------------------------------------------------
#              Bedrock Player Support
#---------------------------------------------------
# Configuration for Bedrock Edition player support via Floodgate
bedrock_support:
  # Enable FormUI (form-based menus) for Bedrock players
  # When enabled, Bedrock players will see mobile-friendly form menus instead of chest GUIs
  # Requires Floodgate plugin to be installed and enabled
  enable_formui: true

#---------------------------------------------------
#                 Visual Effects
#---------------------------------------------------
# Configure visual indicators and effects for spawners
hologram:
  enabled: false        # Show floating text above spawners

  # Hologram Text Display (supports color codes)
  # Available placeholders:
  # {entity} - Type of mob
  # {stack_size} - Number of stacked spawners
  # {current_exp} - Current stored XP
  # {max_exp} - Maximum XP capacity
  # {used_slots} - Used inventory slots
  # {max_slots} - Total inventory slots
  # {percent_storage_decimal} - Storage usage as percentage (e.g., "75.5" for 75.5% full)
  # {percent_storage_rounded} - Storage usage as rounded percentage (e.g., "76" for 76% full)
  # {percent_exp_decimal} - Experience storage as percentage (e.g., "50.0" for 50.0% full)
  # {percent_exp_rounded} - Experience storage as rounded percentage (e.g., "50" for 50% full)
  text:
    - '[&#f8f8ff{stack_size}] &#7b68ee{ᴇɴᴛɪᴛʏ} ꜱᴘᴀᴡɴᴇʀ'
    - '&#ab7afd• &#e6e6faxᴘ: &#37eb9a{current_exp}&#f8f8ff/&#37eb9a{max_exp}'
    - '&#ab7afd• &#e6e6faɪᴛᴇᴍꜱ: &#37eb9a{used_slots}&#f8f8ff/&#37eb9a{max_slots}'

  # Position Offset from spawner block center
  offset_x: 0.5
  offset_y: 1.6
  offset_z: 0.5

  # Display Settings
  alignment: CENTER     # Text alignment (CENTER, LEFT, or RIGHT)
  shadowed_text: true   # Apply shadow effect to text
  see_through: false    # Hologram visible through blocks
  transparent_background: false  # Make background fully transparent

# Particle effect toggles for visual feedback
particle:
  spawner_stack: true           # Show effects when spawners are stacked
  spawner_activate: true        # Show effects when spawner activates
  spawner_generate_loot: true   # Show effects when items are generated

#---------------------------------------------------
#              Spawner Action Logging
#---------------------------------------------------
# Comprehensive logging system for tracking spawner interactions and events
# Provides audit trail and debugging capabilities with minimal performance impact
logging:
  # Enable/disable the logging system
  enabled: true
  
  # Output format: false for human-readable, true for JSON structured logs
  json_format: false
  
  # Also output logs to console (useful for debugging)
  console_output: false
  
  # Directory where log files are stored (relative to plugin folder)
  log_directory: "logs"
  
  # Maximum number of log files to keep (oldest files deleted first)
  max_log_files: 10
  
  # Maximum size of each log file in MB before rotation
  max_log_size_mb: 10
  
  # Log all events (if true, logged_events list is ignored)
  log_all_events: false
  
  # Specific events to log (only used if log_all_events is false)
  # Available events:
  # - SPAWNER_PLACE: Spawner placement
  # - SPAWNER_BREAK: Spawner breaking
  # - SPAWNER_EXPLODE: Spawner destroyed by explosion
  # - SPAWNER_STACK_HAND: Spawner stacked by hand
  # - SPAWNER_STACK_GUI: Spawner stacked via GUI
  # - SPAWNER_DESTACK_GUI: Spawner destacked via GUI
  # - SPAWNER_GUI_OPEN: Main spawner GUI opened
  # - SPAWNER_STORAGE_OPEN: Storage GUI opened
  # - SPAWNER_STACKER_OPEN: Stacker GUI opened
  # - SPAWNER_EXP_CLAIM: Experience claimed
  # - SPAWNER_SELL_ALL: Items sold
  # - SPAWNER_ITEM_TAKE_ALL: All items taken from storage
  # - SPAWNER_ITEM_DROP: Item dropped from storage (using Q key)
  # - SPAWNER_ITEMS_SORT: Items sorted in storage
  # - SPAWNER_ITEM_FILTER: Item filter toggled in storage
  # - SPAWNER_DROP_PAGE_ITEMS: All items on current page dropped from storage
  # - COMMAND_EXECUTE_PLAYER: Command executed by player
  # - COMMAND_EXECUTE_CONSOLE: Command executed by console
  # - COMMAND_EXECUTE_RCON: Command executed by RCON
  # - SPAWNER_EGG_CHANGE: Entity type changed
  logged_events:
    - SPAWNER_PLACE
    - SPAWNER_BREAK
    - SPAWNER_EXPLODE
    - SPAWNER_STACK_HAND
    - SPAWNER_STACK_GUI
    - SPAWNER_DESTACK_GUI
    - SPAWNER_EXP_CLAIM
    - SPAWNER_SELL_ALL
    - SPAWNER_ITEM_TAKE_ALL
    - SPAWNER_ITEMS_SORT
    - SPAWNER_ITEM_FILTER
    - SPAWNER_DROP_PAGE_ITEMS
    - COMMAND_EXECUTE_PLAYER
    - COMMAND_EXECUTE_CONSOLE
    - COMMAND_EXECUTE_RCON
  
  # Discord Webhook Integration
  # Send beautiful formatted log messages to Discord with rich embeds
  discord:
    # Enable/disable Discord webhook logging
    enabled: false

    # Discord webhook URL
    webhook_url: ""

    # Show player head/avatar in embed thumbnail
    show_player_head: true

    # Log all events to Discord (if true, logged_events list is ignored)
    log_all_events: false

    # Specific events to log to Discord
    logged_events:
      - SPAWNER_PLACE
      - SPAWNER_BREAK
      - SPAWNER_EXPLODE
      - SPAWNER_STACK_HAND
      - SPAWNER_STACK_GUI
      - SPAWNER_DESTACK_GUI
      - SPAWNER_GUI_OPEN
      - COMMAND_EXECUTE_PLAYER
      - COMMAND_EXECUTE_CONSOLE
      - COMMAND_EXECUTE_RCON

    # Discord Embed Configuration
    embed:
      # Embed title (supports placeholders)
      title: "{description}"

      # Embed description (supports placeholders)
      description: "{description}"

      # Embed footer text
      footer: "SmartSpawner • {time}"

      # Individual embed colors for each event type (hexadecimal without #)
      # You can customize any event color below
      colors:
        # Command Events - Blue Shades
        COMMAND_EXECUTE_PLAYER: "5865F2"    # Discord Blurple
        COMMAND_EXECUTE_CONSOLE: "3B5998"   # Dark Blue
        COMMAND_EXECUTE_RCON: "7289DA"      # Light Blurple

        # Spawner Actions - Green/Red
        SPAWNER_PLACE: "57F287"             # Green (Success)
        SPAWNER_BREAK: "ED4245"             # Red (Destructive)
        SPAWNER_EXPLODE: "FF6B6B"           # Light Red (Danger)

        # Stack Operations - Yellow/Orange
        SPAWNER_STACK_HAND: "FEE75C"        # Yellow
        SPAWNER_STACK_GUI: "F1C40F"         # Gold
        SPAWNER_DESTACK_GUI: "E67E22"       # Orange

        # GUI Operations - Purple Shades
        SPAWNER_GUI_OPEN: "9B59B6"          # Purple
        SPAWNER_STORAGE_OPEN: "8E44AD"      # Dark Purple
        SPAWNER_STACKER_OPEN: "BB8FCE"      # Light Purple

        # Economic Actions - Green Shades
        SPAWNER_EXP_CLAIM: "2ECC71"         # Emerald Green
        SPAWNER_SELL_ALL: "27AE60"          # Dark Green

        # Item Management - Cyan/Teal
        SPAWNER_ITEM_TAKE_ALL: "1ABC9C"     # Turquoise
        SPAWNER_ITEM_DROP: "16A085"         # Dark Turquoise
        SPAWNER_ITEMS_SORT: "48C9B0"        # Light Teal
        SPAWNER_ITEM_FILTER: "45B7AF"       # Teal
        SPAWNER_DROP_PAGE_ITEMS: "138D75"   # Dark Teal

        # Entity Change - Pink
        SPAWNER_EGG_CHANGE: "E91E63"        # Pink

        # Default fallback color
        DEFAULT: "99AAB5"                   # Gray

      # Custom fields to add to embeds (supports placeholders)
      fields:
      # Example custom field:
      #  - name: "Server"
      #    value: "Production"
      #    inline: true

      #  - name: "Action Time"
      #    value: "{time}"
      #    inline: false

#---------------------------------------------------
#               Database Settings
#---------------------------------------------------
# Configure database storage for spawner data.
# Database mode provides better performance for large servers
# and enables cross-server spawner management.
database:
  # Storage mode: YAML, MYSQL, or SQLITE
  # YAML: Default file-based storage (spawners_data.yml)
  # MYSQL: MariaDB/MySQL database storage with HikariCP connection pool
  # SQLITE: Local SQLite database storage (no external server required)
  mode: YAML

  # Server identifier for cross-server setups
  # Must be unique per server when using shared database
  # Used to distinguish spawners from different servers
  server_name: "server1"

  # Enable cross-server spawner viewing in /smartspawner list
  # When true, shows a server selection page before world selection
  # Allows viewing spawners from all servers in the shared database
  # Only works when mode is MYSQL (SQLite is local only)
  sync_across_servers: false

  # Automatic migration from local storage formats
  # When enabled, the plugin will automatically migrate data on startup:
  #
  # 1. If mode is MYSQL or SQLITE:
  #    - Checks for spawners_data.yml and migrates to target database
  #    - File is renamed to spawners_data.yml.migrated after success
  #
  # 2. If mode is MYSQL (additional step):
  #    - Checks for spawners.db (SQLite) and migrates to MySQL
  #    - File is renamed to spawners.db.migrated after success
  #
  # The .migrated suffix prevents re-migration on subsequent restarts.
  # Set to false if you want to manually manage your data migration.
  migrate_from_local: true

  # Database name to use (only for MYSQL mode)
  database: "smartspawner"

  # SQLite settings (only for SQLITE mode)
  sqlite:
    # Database file name (stored in plugin data folder)
    file: "spawners.db"

  # MySQL/MariaDB connection settings (only for MYSQL mode)
  sql:
    host: "localhost"
    port: 3306
    username: "root"
    password: ""

    # Connection pool settings
    pool:
      # Maximum number of connections in the pool
      maximum-size: 10
      # Minimum number of idle connections to maintain
      minimum-idle: 2
      # Maximum time (ms) to wait for a connection from the pool
      connection-timeout: 10000
      # Maximum lifetime (ms) of a connection in the pool
      max-lifetime: 1800000
      # Maximum time (ms) a connection can sit idle before being removed
      # Must be less than max-lifetime (0 = same as max-lifetime)
      idle-timeout: 600000
      # Interval (ms) for keepalive queries to prevent connection timeouts
      # Must be less than max-lifetime (0 = disabled)
      keepalive-time: 30000
      # Time (ms) before logging a potential connection leak warning
      # Useful for debugging connection issues (0 = disabled)
      leak-detection-threshold: 0
