> For the complete documentation index, see [llms.txt](https://docs-nightbeam.gitbook.io/infinity-rifts/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-nightbeam.gitbook.io/infinity-rifts/docs/configuration.md).

# Main configuration

InfinityRifts loads `plugins/InfinityRifts/config.yml` through Configurate into `RiftConfig` and immediately saves the mapped object. Values are read during service or instance creation; `/rift reload` replaces the main model, but active gateway instances retain their own gateway models. A restart is the reliable choice for scheduler/lifecycle changes.

## Option reference

| Path                                          | Type · default                         | Validation/allowed values                                               | Effect                                                                |
| --------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- |
| `general.debug`                               | boolean · `false`                      | Boolean                                                                 | Extra gateway/spawn lifecycle logs                                    |
| `mechanics.damage-multiplier`                 | decimal · `1.2`                        | Warning below 0; no automatic model mutation                            | Multiplies damage dealt by players in the legacy `RiftManager` path   |
| `mechanics.player-scaling`                    | decimal · `0.5`                        | Warning below 0                                                         | Per-additional-participant mob health/damage scaling                  |
| `mechanics.spawn-protection-radius`           | integer · `3`                          | Warning below 0                                                         | Rejects mob positions too close to the gateway center                 |
| `mechanics.max-spawn-attempts-per-mob`        | integer · `10`                         | Runtime clamps to at least 1                                            | Spawn retries for each configured mob slot                            |
| `mechanics.fail-rift-if-wave-spawn-fails`     | boolean · `true`                       | Boolean                                                                 | Fails a session when no mob in a wave is spawned                      |
| `mechanics.max-spawn-location-attempts`       | integer · `16`                         | Runtime clamps to at least 1                                            | Candidate-location search cap                                         |
| `bossbar.gateway.color`                       | string · `RED`                         | Adventure `BossBar.Color`; invalid becomes `WHITE`                      | Global model default; current active bars use per-gateway values      |
| `bossbar.gateway.style`                       | string · `SEGMENTED_10`                | `SOLID`, `SEGMENTED_6`, `_10`, `_12`, `_20`; invalid becomes `PROGRESS` | Global model default; per-gateway values drive bars                   |
| `bossbar.wave.color`                          | string · `YELLOW`                      | Same color rule                                                         | Global model default                                                  |
| `bossbar.wave.style`                          | string · `SOLID`                       | Same overlay rule                                                       | Global model default                                                  |
| `highlighting.enabled`                        | boolean · `true`                       | Boolean                                                                 | Parsed global default; current highlighting uses each gateway's block |
| `highlighting.default-glow-color`             | string · `GOLD`                        | Bukkit `ChatColor` shape                                                | Parsed but unused by current highlighter                              |
| `highlighting.particles.enabled`              | boolean · `true`                       | Boolean                                                                 | Parsed but unused by current highlighter                              |
| `highlighting.particles.type`                 | string · `FLAME`                       | Bukkit `Particle` shape                                                 | Parsed but unused by current highlighter                              |
| `highlighting.particles.count`                | integer · `3`                          | No validator bound                                                      | Parsed but unused by current highlighter                              |
| `sounds.gui-click`                            | string · `UI_BUTTON_CLICK`             | Bukkit `Sound`; invalid is silently skipped                             | Admin GUI click cue                                                   |
| Other `sounds.*` fields                       | strings                                | Bukkit `Sound` shape                                                    | Parsed but current gateway runtime uses hard-coded sounds             |
| `gui.theme.background`                        | material · `BLACK_STAINED_GLASS_PANE`  | Bukkit material; invalid becomes `STONE`                                | Admin GUI fill                                                        |
| `gui.theme.border`                            | material · `GRAY_STAINED_GLASS_PANE`   | Same                                                                    | Admin GUI border                                                      |
| `gui.theme.accent`                            | material · `PURPLE_STAINED_GLASS_PANE` | Parsed but not used by current GUI                                      | Reserved accent value                                                 |
| `gui.admin-panel.title`                       | MiniMessage string                     | Must deserialize                                                        | Admin GUI title                                                       |
| `gui.admin-panel.rows`                        | integer · `6`                          | Comment says 3–6, but code does not clamp                               | Inventory rows; values outside Bukkit inventory constraints can fail  |
| `messages.*`                                  | MiniMessage string                     | See [messages](/infinity-rifts/docs/messages-and-localization.md)       | Configurable user messages                                            |
| `party.invite-timeout-seconds`                | integer · `60`                         | Validator warns below 10                                                | Invitation lifetime                                                   |
| `party.toggle-cooldown-seconds`               | integer · `30`                         | Validator warns below 0                                                 | Party-change cooldown                                                 |
| `party.friendly-fire.enabled`                 | boolean · `true`                       | Boolean                                                                 | Master friendly-fire control                                          |
| `party.friendly-fire.allow-damage`            | boolean · `false`                      | Boolean                                                                 | Whether party members can damage each other                           |
| `party.friendly-fire.combat-tag-seconds`      | integer · `5`                          | Validator warns below 0                                                 | Combat tag duration                                                   |
| `party.friendly-fire.apply-to-melee`          | boolean · `true`                       | Boolean                                                                 | Filter melee damage                                                   |
| `party.friendly-fire.apply-to-projectiles`    | boolean · `true`                       | Boolean                                                                 | Filter projectile damage                                              |
| `party.friendly-fire.apply-to-splash-potions` | boolean · `true`                       | Boolean                                                                 | Set party-member potion intensity to zero                             |
| `mythicmobs.enabled`                          | boolean · `true`                       | Model default; absent from packaged YAML                                | Currently unused                                                      |
| `mythicmobs.log-spawns`                       | boolean · `false`                      | Model default; absent from packaged YAML                                | Currently unused                                                      |

Validator messages often say “using” a safe value, but `ConfigValidator.validate` does not mutate the configuration. Only a few runtime consumers clamp values. Treat every warning as an instruction to edit the file.

## Complete annotated `config.yml`

```yaml
general:
  debug: false # extra lifecycle logging

mechanics:
  damage-multiplier: 1.2
  player-scaling: 0.5
  spawn-protection-radius: 3
  max-spawn-attempts-per-mob: 10
  fail-rift-if-wave-spawn-fails: true
  max-spawn-location-attempts: 16

bossbar: # model defaults; gateway files provide the active titles/colors/styles
  gateway: { color: RED, style: SEGMENTED_10 }
  wave: { color: YELLOW, style: SOLID }

highlighting:
  enabled: true
  default-glow-color: GOLD
  particles: { enabled: true, type: FLAME, count: 3 }

sounds:
  gateway-start: ENTITY_ENDER_DRAGON_GROWL
  wave-start: ENTITY_WITHER_SPAWN
  wave-complete: ENTITY_PLAYER_LEVELUP
  gateway-complete: UI_TOAST_CHALLENGE_COMPLETE
  gateway-fail: ENTITY_WITHER_DEATH
  gui-click: UI_BUTTON_CLICK

gui:
  theme:
    background: BLACK_STAINED_GLASS_PANE
    border: GRAY_STAINED_GLASS_PANE
    accent: PURPLE_STAINED_GLASS_PANE # currently unused
  admin-panel:
    title: "<gradient:#9400D3:#4B0082>⚙ Gateway Admin Panel</gradient>"
    rows: 6

messages:
  gateway-started: "<green>⚔ Gateway <name> activated!"
  gateway-completed: "<gold>★ Gateway conquered! Rewards collected."
  gateway-failed: "<red>✖ Gateway collapsed! You failed."
  wave-started: "<yellow>Wave <wave>/<max> started!"
  wave-completed: "<green>✓ Wave <wave> complete!"
  no-permission: "<red>You don't have permission to do this!"
  gateway-not-found: "<red>Gateway not found: <id>"
  already-in-gateway: "<red>You are already in a gateway!"
  reload-success: "<green>✓ Configurations reloaded successfully!"
  player-not-found: "<red>Player not found: <name>"

party:
  invite-timeout-seconds: 60
  toggle-cooldown-seconds: 30
  friendly-fire:
    enabled: true
    allow-damage: false
    combat-tag-seconds: 5
    apply-to-melee: true
    apply-to-projectiles: true
    apply-to-splash-potions: true

# These two model defaults are written by Configurate even though the packaged file omits them.
mythicmobs:
  enabled: true       # currently not read by integration code
  log-spawns: false   # currently not read by integration code
```

Gateway files are covered in [Gateway configuration](/infinity-rifts/docs/gateway_configuration.md). There are no `messages.yml`, locale, menu, JSON, TOML, HOCON, or database configuration files.
