> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/0x48lab/skills/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuration

> Full reference for config.yml — database, skills, combat, magic, thief, taming, economy, and mob settings.

The main configuration file is `config.yml`, located in `plugins/Skills/`. Edit it with a text editor and run `/skilladmin reload` to apply changes without restarting the server.

<Note>
  Language files live in `plugins/Skills/lang/` (e.g., `en.yml`, `ja.yml`). They are created automatically on first run and can be edited to customize all player-facing messages.
</Note>

## Full default config.yml

```yaml theme={null}
# Skills Plugin Configuration

# Database settings
database:
  type: sqlite  # sqlite or mysql
  # MySQL settings (only used if type is mysql)
  host: localhost
  port: 3306
  name: skills
  user: root
  password: ""

# Skill settings
skills:
  total_cap: 700.0       # Maximum total skill points
  individual_max: 100.0  # Maximum for each skill
  gain_amount: 0.1       # Amount gained per successful gain check

# Combat settings
combat:
  damage_multiplier: 10.0    # Converts vanilla damage to internal
  parry_chance_max: 50.0     # Maximum parry chance (%)
  critical_chance_max: 50.0  # Maximum critical hit chance (%)

# Magic settings
magic:
  casting_time_base: 2000   # Base casting time in milliseconds
  targeting_timeout: 10000  # Targeting mode timeout in milliseconds
  spell_range: 12.0         # Maximum spell range in blocks
  reagent_search:
    search_shulker_boxes: true
    search_bundles: true

# Thief settings
thief:
  hide_movement_breaks: false
  stealth_max_distance: 10.0
  detect_range: 10.0
  stealth_distance_divisor: 5.0
  hide_timeout_base: 30
  hide_timeout_max: 300
  hide_timeout_warning: 10
  equipment_steal_penalty: 20

# Taming settings
taming:
  attempt_cooldown: 5000  # Cooldown between tame attempts in milliseconds

# Language settings
language:
  default: ja
  use_client_locale: true
  allow_player_change: true

# Auto-save settings
auto_save:
  enabled: true
  interval: 300  # Seconds between auto-saves

# Integration with other plugins
integration:
  notoriety: true

# Cooldown settings (in seconds)
cooldowns:
  hide: 10
  detect: 5
  snoop: 5
  steal: 3
  poison: 10
  tame: 5
  animal_lore: 3
  arms_lore: 3
  evaluate: 5
  cast_spell: 2
  meditation: 30

# Debug mode
debug: false

# Economy settings (Vault integration)
economy:
  enabled: true
  chunk_limit:
    enabled: true
    chunk_radius: 5
    time_window_minutes: 60
    world_limits:
      world: 500.0
      world_nether: 800.0
      world_the_end: 1000.0
      default: 500.0
  show_on_scoreboard: true

# Sleep Skip settings
sleep:
  enabled: true

# Bed Rest Recovery settings
bed_rest_recovery:
  enabled: true

# VengefulMobs settings
vengeful_mobs:
  enabled: true
  exclude_tamed: true
  anger_duration: 10000
  give_up_distance: 20.0
  extend_anger_while_chasing: false
  enabled_mobs:
    - SHEEP
    - PIG
    - COW
    - CHICKEN
    - RABBIT
    - HORSE
    - DONKEY
    - MULE
    - LLAMA
    - GOAT
    - MOOSHROOM
  default:
    damage: 2.0
    speed: 1.0
    attack_range: 2.0
    attack_cooldown: 1000
    mode: RETALIATE
  overrides:
    CHICKEN:
      damage: 1.0
      attack_cooldown: 1500
    RABBIT:
      damage: 1.0
      attack_cooldown: 1500
    COW:
      damage: 3.0
      attack_cooldown: 1200
      mode: RETALIATE
    GOAT:
      damage: 4.0
      speed: 1.3
      attack_cooldown: 800
      mode: RETALIATE_WITH_SUPPORT
    LLAMA:
      damage: 2.0
      mode: RETALIATE_ONCE
    HORSE:
      damage: 3.5
      speed: 1.5
      attack_cooldown: 1000
      mode: RETALIATE_ONCE

# Ender Dragon Scaling
ender_dragon_scaling:
  enabled: true
  respawn_interval_hours: 24
  hp_per_kill: 50
  max_hp: 1000
  damage_scale_per_kill: 0.15
  max_damage_scale: 4.0
  xp_scale_per_kill: 0.25
  announce_pre_respawn_minutes: [5, 1]

# Scoreboard settings
scoreboard:
  enabled: true
  update_interval_ticks: 20
  conflict_mode: RESPECT
  show_by_default: true
  allow_player_toggle: true

# Chunk Mob Limit settings
chunk_mob_limit:
  enabled: true
  limits:
    passive: 24
    hostile: 32
    ambient: 8
    water_creature: 8
    water_ambient: 16
  check_interval_ticks: 100
  notify_on_limit: true
```

***

## Settings reference

<AccordionGroup>
  <Accordion title="Database">
    Controls how player skill data is stored. SQLite requires no external setup; MySQL is recommended for networks sharing data across multiple servers.

    <ParamField path="database.type" type="string" default="sqlite">
      Storage backend. Set to `sqlite` or `mysql`.
    </ParamField>

    **SQLite** (default — no external server required)

    <ParamField path="database.host" type="string" default="localhost">
      Ignored when `type` is `sqlite`.
    </ParamField>

    **MySQL** (used when `type: mysql`)

    <ParamField path="database.host" type="string" default="localhost">
      MySQL server hostname or IP address.
    </ParamField>

    <ParamField path="database.port" type="number" default="3306">
      MySQL server port.
    </ParamField>

    <ParamField path="database.name" type="string" default="skills">
      Name of the MySQL database to use.
    </ParamField>

    <ParamField path="database.user" type="string" default="root">
      MySQL username.
    </ParamField>

    <ParamField path="database.password" type="string" default="">
      MySQL password. Leave empty for no password.
    </ParamField>

    <Note>
      SQLite stores data in `plugins/Skills/skills.db`. It works well for single-server setups. Use MySQL if you run a multi-server network and need shared player data.
    </Note>
  </Accordion>

  <Accordion title="Skills">
    <ParamField path="skills.total_cap" type="number" default="700">
      Maximum total skill points a player can accumulate across all 37 skills. At 700 points, the player can max out exactly 7 skills at 100 each. When this cap is reached, gaining a skill automatically reduces the least-recently-used skill.
    </ParamField>

    <ParamField path="skills.individual_max" type="number" default="100">
      Maximum value for any single skill.
    </ParamField>

    <ParamField path="skills.gain_amount" type="number" default="0.1">
      Amount added to a skill on a successful gain check. Decreases use the same amount.
    </ParamField>

    <Note>
      The skill decline system activates when the player's total skill points reach **600** (not 700). Between 600 and 700 points the least-used skill decreases each time another skill increases. This mirrors the Ultima Online design where the "soft cap" creates meaningful trade-offs before the hard cap is reached.
    </Note>
  </Accordion>

  <Accordion title="Combat">
    <ParamField path="combat.damage_multiplier" type="number" default="10.0">
      Multiplier applied when converting vanilla damage to the plugin's internal HP system. Internal HP is tracked separately from vanilla hearts and is synced back after each hit.
    </ParamField>

    <ParamField path="combat.parry_chance_max" type="number" default="50.0">
      Maximum percentage chance that a parry attempt can succeed (with a shield). Actual chance equals `Parrying × 0.5%`, capped at this value.
    </ParamField>

    <ParamField path="combat.critical_chance_max" type="number" default="50.0">
      Maximum critical hit chance as a percentage. Actual chance equals `Anatomy ÷ 2 %`, capped at this value.
    </ParamField>
  </Accordion>

  <Accordion title="Magic">
    <ParamField path="magic.casting_time_base" type="number" default="2000">
      Base casting time in milliseconds before the spell circle multiplier is applied. Formula: `(casting_time_base + circle × 500ms) × (1 − Magery reduction)`.
    </ParamField>

    <ParamField path="magic.targeting_timeout" type="number" default="10000">
      How long (in milliseconds) the targeting phase waits for a click before automatically cancelling. No mana or reagents are consumed on timeout.
    </ParamField>

    <ParamField path="magic.spell_range" type="number" default="12.0">
      Maximum range in blocks for targeted spells. Clicking a target beyond this range produces an out-of-range error and cancels without consuming resources.
    </ParamField>

    <ParamField path="magic.reagent_search.search_shulker_boxes" type="boolean" default="true">
      When `true`, the plugin looks inside shulker boxes in the player's inventory for reagents.
    </ParamField>

    <ParamField path="magic.reagent_search.search_bundles" type="boolean" default="true">
      When `true`, the plugin looks inside bundles in the player's inventory for reagents.
    </ParamField>
  </Accordion>

  <Accordion title="Thief">
    <ParamField path="thief.hide_movement_breaks" type="boolean" default="false">
      When `true`, any movement (not just sprinting) breaks the Hiding effect. When `false`, only sprinting breaks it — walking is allowed if the Stealth skill permits.
    </ParamField>

    <ParamField path="thief.stealth_max_distance" type="number" default="10.0">
      Hard cap on how far a player can walk while hidden, regardless of Stealth skill.
    </ParamField>

    <ParamField path="thief.detect_range" type="number" default="10.0">
      Hard cap on `/detect` radius in blocks, regardless of Detecting Hidden skill.
    </ParamField>

    <ParamField path="thief.stealth_distance_divisor" type="number" default="5.0">
      Controls how Stealth skill translates to walkable distance. Formula: `skill ÷ divisor`. With the default of 5.0, Stealth 60 allows 12 blocks of movement.
    </ParamField>

    <ParamField path="thief.hide_timeout_base" type="number" default="30">
      Minimum number of seconds a player can remain hidden (at skill 0).
    </ParamField>

    <ParamField path="thief.hide_timeout_max" type="number" default="300">
      Maximum number of seconds a player can remain hidden (at skill 100).
    </ParamField>

    <ParamField path="thief.hide_timeout_warning" type="number" default="10">
      Seconds before the hide duration expires at which the player receives a warning message.
    </ParamField>

    <ParamField path="thief.equipment_steal_penalty" type="number" default="20">
      Additional difficulty applied when attempting to steal an equipped item (worn armour, held weapon, etc.).
    </ParamField>
  </Accordion>

  <Accordion title="Taming">
    <ParamField path="taming.attempt_cooldown" type="number" default="5000">
      Minimum time in milliseconds between taming attempts, even if the first attempt fails.
    </ParamField>
  </Accordion>

  <Accordion title="Language">
    <ParamField path="language.default" type="string" default="ja">
      The fallback language used when no per-player setting exists and the client locale cannot be matched. Supported values: `en`, `ja`.
    </ParamField>

    <ParamField path="language.use_client_locale" type="boolean" default="true">
      When `true`, the plugin reads the player's Minecraft client locale and automatically selects the matching language if supported.
    </ParamField>

    <ParamField path="language.allow_player_change" type="boolean" default="true">
      When `true`, players can change their own language with `/skills language <code>`. Set to `false` to enforce the server default for all players.
    </ParamField>

    <Note>
      Language files are in `plugins/Skills/lang/`. The plugin ships with `en.yml` and `ja.yml`. To add a new language, copy one of these files, rename it to the locale code (e.g., `fr.yml`), translate the values, and set `language.default` to the new code.
    </Note>
  </Accordion>

  <Accordion title="Integration">
    <ParamField path="integration.notoriety" type="boolean" default="true">
      When `true` and the [notoriety](https://github.com) plugin is installed, successful Stealing actions are recorded as crimes via the notoriety API. If the notoriety plugin is absent, this setting is ignored.
    </ParamField>

    <Note>
      The notoriety plugin is a soft dependency — the Skills plugin loads and functions normally without it.
    </Note>
  </Accordion>

  <Accordion title="Scoreboard">
    <ParamField path="scoreboard.enabled" type="boolean" default="true">
      Master switch for the sidebar scoreboard. When `false`, no scoreboard is shown and the `/skills sb` toggle command is disabled.
    </ParamField>

    <ParamField path="scoreboard.update_interval_ticks" type="number" default="20">
      How often the scoreboard updates, in ticks. 20 ticks = 1 second.
    </ParamField>

    <ParamField path="scoreboard.conflict_mode" type="string" default="RESPECT">
      Behaviour when another plugin is using the sidebar slot.

      * `ALWAYS` — always show the Skills scoreboard, overwriting the other plugin.
      * `RESPECT` — do not show if another plugin has claimed the sidebar.
    </ParamField>

    <ParamField path="scoreboard.show_by_default" type="boolean" default="true">
      Whether new players see the scoreboard by default on first join.
    </ParamField>

    <ParamField path="scoreboard.allow_player_toggle" type="boolean" default="true">
      Whether players can toggle the scoreboard on and off with `/skills sb`.
    </ParamField>
  </Accordion>

  <Accordion title="VengefulMobs">
    Makes passive mobs retaliate when attacked by a player. Inspired by the VengefulMobs plugin.

    <ParamField path="vengeful_mobs.enabled" type="boolean" default="true">
      Enable or disable the entire VengefulMobs feature.
    </ParamField>

    <ParamField path="vengeful_mobs.exclude_tamed" type="boolean" default="true">
      When `true`, tamed animals owned by the attacking player will not fight back.
    </ParamField>

    <ParamField path="vengeful_mobs.anger_duration" type="number" default="10000">
      How long (in milliseconds) a mob stays in its angry/retaliating state after being hit.
    </ParamField>

    <ParamField path="vengeful_mobs.give_up_distance" type="number" default="20.0">
      Distance in blocks at which an angry mob gives up chasing the player.
    </ParamField>

    <ParamField path="vengeful_mobs.extend_anger_while_chasing" type="boolean" default="false">
      When `true`, the anger timer resets while the mob is actively chasing, effectively making it chase until the player escapes beyond `give_up_distance`.
    </ParamField>

    <ParamField path="vengeful_mobs.enabled_mobs" type="string[]">
      List of mob types that will fight back. See the default `config.yml` for the full list of supported mob type names.
    </ParamField>

    <ParamField path="vengeful_mobs.default.damage" type="number" default="2.0">
      Damage dealt per attack in half-hearts, applied to all enabled mobs unless overridden.
    </ParamField>

    <ParamField path="vengeful_mobs.default.speed" type="number" default="1.0">
      Movement speed multiplier for angry mobs.
    </ParamField>

    <ParamField path="vengeful_mobs.default.attack_range" type="number" default="2.0">
      Attack range in blocks.
    </ParamField>

    <ParamField path="vengeful_mobs.default.attack_cooldown" type="number" default="1000">
      Milliseconds between attacks (1000 = 1 second).
    </ParamField>

    <ParamField path="vengeful_mobs.default.mode" type="string" default="RETALIATE">
      Aggression mode. Available values:

      * `RETALIATE` — fight back and keep attacking until anger expires
      * `RETALIATE_ONCE` — attack once only (suitable for accidental hits)
      * `RETALIATE_WITH_SUPPORT` — call nearby same-type mobs to join the fight
      * `HOSTILE` — always attack players on sight
      * `MURDER_ALL` — attack all entities
      * `MURDER_OTHERS` — attack all entities except same type
    </ParamField>

    <ParamField path="vengeful_mobs.overrides" type="object">
      Per-mob overrides for `damage`, `speed`, `attack_range`, `attack_cooldown`, and `mode`. The mob type name (e.g., `GOAT`) is the key. Any field omitted in the override falls back to the `default` values.
    </ParamField>
  </Accordion>

  <Accordion title="Chunk mob limits">
    Prevents server lag from large mob farms by capping the number of mobs per chunk category.

    <ParamField path="chunk_mob_limit.enabled" type="boolean" default="true">
      Enable or disable the chunk mob limit feature.
    </ParamField>

    <ParamField path="chunk_mob_limit.limits.passive" type="number" default="24">
      Maximum passive mobs (cows, sheep, pigs, etc.) per chunk.
    </ParamField>

    <ParamField path="chunk_mob_limit.limits.hostile" type="number" default="32">
      Maximum hostile mobs (zombies, skeletons, creepers, etc.) per chunk.
    </ParamField>

    <ParamField path="chunk_mob_limit.limits.ambient" type="number" default="8">
      Maximum ambient mobs (bats) per chunk.
    </ParamField>

    <ParamField path="chunk_mob_limit.limits.water_creature" type="number" default="8">
      Maximum water creatures (squid, dolphins, etc.) per chunk.
    </ParamField>

    <ParamField path="chunk_mob_limit.limits.water_ambient" type="number" default="16">
      Maximum water ambient mobs (fish) per chunk.
    </ParamField>

    <ParamField path="chunk_mob_limit.check_interval_ticks" type="number" default="100">
      How often the mob count cache refreshes, in ticks. 100 ticks = 5 seconds.
    </ParamField>

    <ParamField path="chunk_mob_limit.notify_on_limit" type="boolean" default="true">
      When `true`, players receive a chat message when their breeding attempt is blocked by the chunk limit.
    </ParamField>
  </Accordion>

  <Accordion title="Cooldowns">
    All values are in seconds.

    <ParamField path="cooldowns.hide" type="number" default="10">
      Seconds between `/hide` attempts.
    </ParamField>

    <ParamField path="cooldowns.detect" type="number" default="5">
      Seconds between `/detect` uses.
    </ParamField>

    <ParamField path="cooldowns.snoop" type="number" default="5">
      Seconds between `/snoop` attempts.
    </ParamField>

    <ParamField path="cooldowns.steal" type="number" default="3">
      Seconds between stealing attempts.
    </ParamField>

    <ParamField path="cooldowns.poison" type="number" default="10">
      Seconds between `/poison` uses.
    </ParamField>

    <ParamField path="cooldowns.tame" type="number" default="5">
      Seconds between `/tame` attempts.
    </ParamField>

    <ParamField path="cooldowns.animal_lore" type="number" default="3">
      Seconds between `/lore` uses.
    </ParamField>

    <ParamField path="cooldowns.arms_lore" type="number" default="3">
      Seconds between `/arms` uses.
    </ParamField>

    <ParamField path="cooldowns.evaluate" type="number" default="5">
      Seconds between `/evaluate` uses.
    </ParamField>

    <ParamField path="cooldowns.cast_spell" type="number" default="2">
      Seconds between spell casts.
    </ParamField>

    <ParamField path="cooldowns.meditation" type="number" default="30">
      Seconds between meditation skill gain checks.
    </ParamField>
  </Accordion>

  <Accordion title="Auto-save">
    <ParamField path="auto_save.enabled" type="boolean" default="true">
      Enable periodic background saves of all online player data.
    </ParamField>

    <ParamField path="auto_save.interval" type="number" default="300">
      Seconds between auto-saves. Data is also always saved on player disconnect and server shutdown.
    </ParamField>
  </Accordion>
</AccordionGroup>
