> For the complete documentation index, see [llms.txt](https://docs.ohalee.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ohalee.com/products/modern-oneblock/configuration.md).

# Configuration

## config.yml

{% code title="config.yml" fullWidth="false" %}

```yaml
# Tracks which configuration migrations have been applied. Do not edit by hand;
# lowering it will re-run migrations against your files.
config-version: 1

# H2 and MariaDB are the only supported
database:
  type: "H2"
  mariadb:
    host: "localhost"
    port: 3306
    database: "island"
    username: "root"
    password: ""

lang: en-US

# How the strings in lang/*.yml and the item names below are written.
#   LEGACY       - "&a" colour codes (the default, and what the shipped files use)
#   MINIMESSAGE  - "<green>tags</green>"
# Switching this does not convert your files; pick the one they are written in.
text-format: LEGACY

# From central block to central block
# 1000 blocks means maximum 500 blocks from center to edge
island-distance: 1000

# If true, on login the player will be teleported to the island if the spawn is not enabled
island-join-on-first-login: true

# Teleport the player to their island when they fall in the void
island-teleport-on-fall: true

# Determines how many members can be on an island based on owner permission
# If you want to have unlimited members, set it to -1
# Permission: oneblock.max.<role>
# LUCKPERMS NEEDED
custom-max-players:
  default: 8
  vip: 12
  mvp: 16
  admin: -1

# If level < level-formula then the island will level up
#
# islandCoreBroken (Island core blocks broken)
# level (Island current level)
# phaseOrdinal (1 = First Phase, 2 = Second Phase, 3 = Third Phase)
level-formula: "floor(3.55 * log(islandCoreBroken + 211) - 18)"

world-protection:
  # "Spawn worlds"
  blacklist:
    - "world"

spawn:
  enabled: true
  # Spawn location
  world: "world"
  x: 0
  y: 100
  z: 0
  yaw: 0
  pitch: 0

reset:
  cost: 1000
  phase: Dungeon

world-border:
  base-size: 127
  max-size: 127

tops:
  # How often the rankings are rebuilt, in ticks. The rebuild is skipped
  # entirely when nothing has changed since the last one.
  refresh-interval: 200
  # How many islands each ranking holds. /is top pages through this many, and
  # %oneblock_top_<n>% is only answered up to it.
  top-size: 10

  # Standing hologram leaderboards, using whichever hologram plugin is
  # installed. Remove or empty this section for none.
  #
  #   type:  level, value or blocks
  #   lines: how many places to show, capped by top-size above
  #
  # holograms:
  #   spawn-level:
  #     type: level
  #     lines: 10
  #     world: world
  #     x: 0.5
  #     y: 70.0
  #     z: 0.5

hologram:
  enabled: true
  # Unlock hologram when player reaches this number of blocks
  unlock-at: 50000
  update-interval: 5

gui:
  title: "&8Island"
  items:
    no-member:
      material: "GRAY_STAINED_GLASS_PANE"
      displayName: "&7Available Slot"
      lore: [ ]
      left-action:
        command: ""
      right-action:
        command: ""
    member:
      material: "PLAYER_HEAD"
      displayName: "&b&l%player%"
      lore:
        - ""
        - "&7Role: &d%prefix%"
        - ""
        - "&7Left-click to &cBan"
        - "&7Right-click to &cKick"
      left-action:
        command: "is ban %target%"
      right-action:
        command: "is kick %target%"
    no-visitor:
      material: "YELLOW_STAINED_GLASS_PANE"
      displayName: "&eNo Visitors"
      lore: [ ]
      left-action:
        command: ""
      right-action:
        command: ""
    visitor:
      material: "PLAYER_HEAD"
      displayName: "&a&l%player%"
      lore:
        - ""
        - "&7Left-click to &cBan"
      left-action:
        command: "is ban %target%"
      right-action:
        command: ""
    info:
      material: "EXPERIENCE_BOTTLE"
      displayName: "&b&lInfo"
      lore:
        - ""
        - "&eOwner: &a%owner%"
        - "&eMembers: &b%members%"
        - "&eBans: &b%bans%"
        - ""
        - "&eBlocks Broken: &b%core-broken%"
        - "&eTotal Blocks Broken: &b%total-core-broken%"
        - "&eLevel: &b%level%"
        - ""
        - "&ePhase: &b%phase%"
        - "&eNext Phase: &b%nextPhase%"
        - "&ePhase Progress: &r%progress% &e(&b%percent%%&e)"
        - ""
        - "&eIsland Size: &b%size%"
      left-action:
        command: ""
      right-action:
        command: ""
    toggle:
      # When the island is open, this will be the item
      open:
        material: "BARRIER"
        displayName: "&c&lClose"
        lore: [ ]
        left-action:
          command: "is close"
        right-action:
          command: "is close"
      close:
        material: "BARRIER"
        displayName: "&a&lOpen"
        lore: [ ]
        left-action:
          command: "is open"
        right-action:
          command: "is open"

# What each role on an island may do, before the island changes anything itself.
#
# Islands store only the settings they have explicitly changed through
# /is flags, so editing a default here reaches every island that has never
# touched that setting.
#
# BUILD, BREAK, CONTAINERS and FLY are per role. PVP, MOB_SPAWNING,
# VISITOR_ACCESS and REDSTONE are one switch for the whole island -- PvP cannot
# be on for moderators and off for visitors, because it takes two people -- and
# only their OWNER line is read.
island-flags:
  defaults:
    BUILD:
      OWNER: true
      MODERATOR: true
      TRUSTED: true
      VISITOR: false
    BREAK:
      OWNER: true
      MODERATOR: true
      TRUSTED: true
      VISITOR: false
    CONTAINERS:
      OWNER: true
      MODERATOR: true
      TRUSTED: true
      VISITOR: false
    FLY:
      OWNER: true
      MODERATOR: true
      TRUSTED: true
      VISITOR: false
    PVP:
      OWNER: false
    MOB_SPAWNING:
      OWNER: true
    VISITOR_ACCESS:
      OWNER: true
    REDSTONE:
      OWNER: true
```

{% endcode %}

### Text format

`text-format` decides how every string in `lang/*.yml` and every item name above is read: `LEGACY` for `&a` colour codes (the default, and what the shipped files use) or `MINIMESSAGE` for `<green>tags</green>`. Switching does not convert your files — pick the one they are written in.

### Hologram leaderboards

`tops.holograms` holds any number of standing leaderboards, drawn with whichever hologram plugin is installed. Each entry takes a `type` (`level`, `value` or `blocks`), a `lines` count (capped by `tops.top-size`) and a `world` / `x` / `y` / `z` position. Remove or empty the section for none.

### Island flags

`island-flags.defaults` is what each role may do before an island changes anything itself. Islands store only the settings they have explicitly changed through `/is flags`, so editing a default here reaches every island that never touched that setting.

`BUILD`, `BREAK`, `CONTAINERS` and `FLY` are per role. `PVP`, `MOB_SPAWNING`, `VISITOR_ACCESS` and `REDSTONE` are one switch for the whole island — PvP cannot be on for moderators and off for visitors, because it takes two people — and only their `OWNER` line is read.

## worth.yml

Sell prices for `/is shop` and block worth for island value. The two lists are separate on purpose: sell prices are economy balance and get tuned, while block worth is a ranking weight and wants to stay stable. Anything not listed is worth nothing — unsellable, and ignored by island value.

{% code title="worth.yml" fullWidth="false" %}

```yaml
# What things are worth.
#
# items:  money paid into the island bank when sold through /is shop.
# blocks: how much a placed block adds to the island's value, which is what
#         /is top ranks by. Broken blocks subtract the same amount.
#
# The two lists are separate on purpose: sell prices are economy balance and
# get tuned, while block worth is a ranking weight and wants to stay stable.
# Use the same numbers in both if you want them to agree.
#
# Anything not listed is worth nothing: unsellable, and ignored by island value.
# Unknown material names are reported in the console and skipped.

items:
  COBBLESTONE: 0.5
  STONE: 1.0
  COAL: 4.0
  IRON_INGOT: 12.0
  GOLD_INGOT: 20.0
  REDSTONE: 3.0
  LAPIS_LAZULI: 5.0
  DIAMOND: 100.0
  EMERALD: 80.0
  NETHERITE_INGOT: 1200.0
  ANCIENT_DEBRIS: 300.0
  QUARTZ: 8.0
  AMETHYST_SHARD: 15.0
  ECHO_SHARD: 250.0
  PRISMARINE_SHARD: 10.0
  NETHER_STAR: 2500.0

blocks:
  IRON_BLOCK: 100.0
  GOLD_BLOCK: 180.0
  DIAMOND_BLOCK: 900.0
  EMERALD_BLOCK: 720.0
  NETHERITE_BLOCK: 10000.0
  LAPIS_BLOCK: 45.0
  REDSTONE_BLOCK: 27.0
  COAL_BLOCK: 36.0
  BEACON: 2500.0
  AMETHYST_BLOCK: 60.0
```

{% endcode %}

## upgrades.yml

Island upgrades, bought from the island bank by the owner or a moderator. Values are **absolute, not incremental**: a tier says what the island has at that tier, not what it adds to the previous one. Delete an upgrade's whole section to switch it off.

{% code title="upgrades.yml" fullWidth="false" %}

```yaml
# Island upgrades.
#
# Every upgrade is bought from the island bank (/is bank), and only the island
# owner or a moderator may buy one.
#
# Values are ABSOLUTE, not increments: a tier says what the island has at that
# tier, not what it adds to the previous one. Buying tier 3 straight after
# tier 1 therefore lands on the right number.
#
# Delete an upgrade's whole section to switch it off. An upgrade with no tiers
# is not offered.

upgrades:

  # Blocks added to world-border.base-size in config.yml.
  # Note that world-border.max-size still caps the total.
  border:
    material: OAK_FENCE
    display-name: "&aIsland border"
    base: 0
    tiers:
      1:
        cost: 5000.0
        value: 20
      2:
        cost: 20000.0
        value: 40
      3:
        cost: 60000.0
        value: 60

  # Percentage taken off every generator's delay on this island.
  # Capped at 90 in code -- an instant generator is a dupe machine.
  generator-speed:
    material: SUGAR
    display-name: "&aGenerator speed"
    base: 0
    tiers:
      1:
        cost: 7500.0
        value: 15
      2:
        cost: 25000.0
        value: 30
      3:
        cost: 75000.0
        value: 50

  # Extra member slots, on top of whatever custom-max-players grants the owner.
  members:
    material: PLAYER_HEAD
    display-name: "&aMember slots"
    base: 0
    tiers:
      1:
        cost: 10000.0
        value: 2
      2:
        cost: 35000.0
        value: 4
      3:
        cost: 100000.0
        value: 8

  # Living non-player entities allowed inside the island border.
  # Remove this section for no limit.
  mob-cap:
    material: ZOMBIE_HEAD
    display-name: "&aMob limit"
    base: 60
    tiers:
      1:
        cost: 15000.0
        value: 100
      2:
        cost: 50000.0
        value: 150

  # Hoppers allowed PER CHUNK inside the island.
  # Per chunk rather than per island: counting island-wide means walking every
  # chunk of the island every time a hopper is placed.
  hopper-cap:
    material: HOPPER
    display-name: "&aHopper limit"
    base: 8
    tiers:
      1:
        cost: 12500.0
        value: 16
      2:
        cost: 40000.0
        value: 32
```

{% endcode %}
