Island Modes

IgniteSky ships three island modes in one plugin. You do not install three plugins or run three servers; you decide which modes are available and which one new players get by default. A player picks a mode when they create an island with /is create <mode>, or takes the server default with a plain /is create.

The three modes

Skyblock

The mode everyone knows. Each island is a small starter platform floating in an otherwise empty void world. Everything you have comes from what you can make with what you start with. It is the most familiar mode and the safest default for a new server.

OneBlock

You stand on a single block. Mine it and it comes back, and as you go it advances through phases, each with its own loot and theme. There is no spreading island to manage at first, just one block and the question of what comes out of it next. It rewards momentum and is very approachable for newer players.

The phases are fully authored in modes/oneblock.yml: each phase has a weighted block table, an optional mob table with a spawn chance, a reward for reaching it, and a length (blocks mined before the next phase). loop restarts the cycle after the last phase. The phase reward is the shared reward object (bare number = island-bank shorthand); since a phase advance has no single triggering player, personal money falls back to the bank and items are skipped, but commands and bank/effects apply.

modes/oneblock.yml
oneblock:
  loop: true
  phases:
    plains:
      display: "<green>Plains"
      length: 50          # blocks mined in this phase before the next
      reward: 50.0        # paid into the island bank on reaching it
      mob-chance: 0.04    # 0..1 odds a phase mob spawns per break
      jackpot-chance: 0.01  # 0..1 odds a break hits a "super-block" bonus
      jackpot-reward: { money: 500 }  # shared reward object, paid to the breaker
      blocks:             # weighted random (weights are relative)
        GRASS_BLOCK: 35
        DIRT: 25
        OAK_LOG: 12
        COAL_ORE: 8
      mobs:
        CHICKEN: 4
        PIG: 4

A floating progress hologram can hover over the source block, showing the current phase and how far through it the island is - it refreshes as the block is mined, with no resource pack (a vanilla text display). Lines are MiniMessage with {phase}, {progress}, {length}, {count} and {total} placeholders.

modes/oneblock.yml
progress-hologram:
  enabled: true
  height: 1.5                # blocks above the source block
  lines:
    - "<red><bold>OneBlock"
    - "<gray>Phase: <white>{phase}"
    - "<gray>Progress: <yellow>{progress}<gray>/<white>{length}"

ChunkBlock

ChunkBlock starts you on natural, vanilla generated terrain, but boxed into a single accessible chunk. The rest of your claim is locked behind a visible border. You expand by unlocking neighbouring chunks one at a time, through money, progression or quests.

Stand in a locked chunk and run /is unlock, or right click the floating "BUY CHUNK" marker over it. A particle border shows your current claim, and an optional WorldBorder draws the outer wall.

The whole chunklock behaviour is configured under chunklock in config.yml, with the unlock price under economy:

config.yml
chunklock:
  block-entry: true          # physically stop players walking into locked chunks
  starting-radius: 0         # chunks unlocked around spawn on create (0 = 1 chunk, 1 = 3x3, 2 = 5x5)
  world-border: true         # a per-player WorldBorder square around the whole claim (the red wall)
  border:
    enabled: true            # draw a particle border at the edge of the unlocked claim
    interval-ticks: 10       # how often the border particles refresh (lower = smoother, costlier)
    particle: FLAME          # which particle the claim border is drawn with (any Bukkit Particle)
  buy-hologram:              # the floating "BUY CHUNK" marker over each buyable chunk
    enabled: true
    height: 1.6              # blocks above the ground the text floats
    view-range: 0.6          # how close a player must be before it renders (lower = closer)
    interaction-width: 2.0   # clickable box width, in blocks
    interaction-height: 2.0
 
economy:
  chunk-unlock-cost: 1000.0  # Vault cost to unlock one chunk

Both the WorldBorder wall and the particle border are vanilla (no resource pack); turn either off independently. Set chunk-unlock-cost to 0 to make unlocking free, or gate it behind quests/progression instead of money.

Per-mode files

Each mode owns one file, modes/<mode>.yml (modes/skyblock.yml, modes/oneblock.yml, modes/chunkblock.yml). That file is the whole story for the mode: how it appears in the create menu, the starter kit a new island of that mode hands out, and any mode-specific logic (OneBlock's phase table lives in the same file). Tuning one mode never touches another.

Every file starts with the same presentation block. Leave a field blank to fall back to the language file and the built-in icon.

modes/skyblock.yml
selectable: true        # false hides the mode from the create menu (existing islands keep working)
display-name: ""        # MiniMessage, e.g. "<green><bold>Skyblock"; blank = language file
icon: ""                # e.g. GRASS_BLOCK; blank = built-in default icon
description: []          # MiniMessage lines; blank = language file

selectable: false is the clean way to run a single-mode server or stage a mode before launch: the mode still works for any island already on it, it just stops appearing in the picker.

Per-mode rules

Each mode can override a handful of global rules just for its own islands, under a rules: block. Omit a key to inherit the global config.yml value, so you only write what differs.

modes/skyblock.yml
rules:
  max-per-player: 1          # islands of THIS mode a player may own (global total still applies)
  locked-by-default: false   # new islands start locked to visitors
  public-warps-default: false # new warps are listed publicly straight away
  nether: true               # this mode's islands get a Nether
  end: true                  # this mode's islands get an End
  starting-balance: 0.0      # money seeded into the island bank when a new island of this mode is created
  base-size: 32              # base build/protection radius (blocks) when no island-size upgrade is set
  drops-multiplier: 1.0      # multiply block/mob drops on this mode's islands (needs world-rules on)
  limit-multiplier: 1.0      # scale the global block/entity limits for this mode (2.0 = double the caps)

drops-multiplier lets one mode pay out richer than another (a "×3 drops" event mode, say); it needs the global world-rules feature enabled. limit-multiplier scales the global block/entity limits for the mode (so OneBlock can run looser caps than Skyblock). base-size is the default island radius for the mode; if you run the island-size upgrade it takes over from there. Both sizes are clamped just inside the grid cell so neighbouring islands never overlap.

OneBlock phases also support a rare jackpot ("super-block"): set jackpot-chance (0..1) and a jackpot-reward and that fraction of breaks pays the breaker a bonus on top of the normal block -a slot-machine thrill while mining.

That makes things like "Skyblock has a Nether, ChunkBlock does not", "players may own three OneBlocks but only one ChunkBlock", or "ChunkBlock islands start with 5,000 in the bank" pure config. Beyond these, a mode can also default its own flags (PvP, mob spawning and the rest).

Per-mode island effects

A mode can grant its own passive island effects on top of the global ones - members standing on an island of that mode get them. Perfect for theming a mode (a mining mode with Haste, say).

modes/skyblock.yml
island-effects:
  - HASTE:0      # TYPE:amplifier, amplifier 0 = level I
  - SPEED:0

Island generation

How a new island is physically built is configured per mode under generation: in its file. There are two paths:

  1. A schematic, if you set one and have a paste engine (WorldEdit or FastAsyncWorldEdit) installed. The .schem file (under plugins/IgniteSky/schematics/) is pasted on the island home.
  2. The built-in code build, used when no schematic is set or no paste engine is present. This is the fallback, and it is fully configurable too.
modes/skyblock.yml
generation:
  schematic: ""            # e.g. "skyblock-start.schem"; blank = use the code build below
  platform-top: GRASS_BLOCK
  platform-base: DIRT
  platform-radius: 1       # 1 = 3x3, 2 = 5x5, 0 = a single block
  platform-depth: 2        # layers of platform-base under the top
  platform-bottom: ""      # e.g. BEDROCK; blank = none
  tree: true
  tree-log: OAK_LOG
  tree-leaves: OAK_LEAVES
  tree-height: 4

So you can ship a hand-built island as a schematic, or design the classic platform-and-tree start entirely from config without any schematic at all. The two are complementary: the schematic is the polished option, the code build the always-works fallback.

The schematic only replaces Skyblock's platform

For Skyblock a pasted schematic replaces the code platform entirely. For OneBlock the source block is still placed (the schematic can decorate around it) via safe-platform-radius / safe-platform-material, and for ChunkBlock the terrain already exists, so its generation only sets the surface-cap material used when a spawn lands on water.

Starter content

Starter content is the chests and signs stamped onto a brand new island the instant it is created, and it is configured per mode under starter-content in that mode's file. A fresh Skyblock island and a fresh OneBlock island can therefore hand out entirely different gear. Offsets are whole blocks relative to the island home; sign lines are MiniMessage; each chest item is slot / material / amount. Containers may be CHEST, BARREL, SHULKER_BOX, and so on. This kit is layered on top of whatever terrain the mode generates, so leave enabled: false to ship only the generated start.

modes/skyblock.yml
starter-content:
  enabled: false
  chests:
    - material: CHEST
      offset: { x: 1, y: 0, z: 0 }
      items:
        - { slot: 0, material: OAK_LOG, amount: 16 }
        - { slot: 1, material: ICE, amount: 2 }
        - { slot: 2, material: LAVA_BUCKET, amount: 1 }
        - { slot: 3, material: BONE_MEAL, amount: 16 }
  signs:
    - offset: { x: 0, y: 1, z: 1 }
      lines: ["<gold>Welcome!", "<gray>Good luck on", "<gray>your island.", ""]
Misconfiguration is skipped, not fatal

An unplaceable block, an unknown material, or an offset outside the world is skipped silently; the rest of the kit still places. Block edits run on the island's own region thread, so this is Folia-safe.

Hosting and Nether / End

How a mode's islands are physically stored is a separate decision from the mode itself, covered on World Hosting Strategies. In short: grid packs many islands into one shared world, world_per_island gives every island its own world copied from a template, and server_shared spreads them across a network.

Per island Nether and End are on by default. Each island's Nether sits directly under its overworld claim, reachable with /is nether, /is end, or /is home nether. Portals inside an island relink to that island's own cell.

Per-island Ender Dragon

With the End enabled, the island owner can summon a real Ender Dragon into their own End cell with /is dragon. Because the vanilla pillar fight is a single per-world boss anchored at 0,0, IgniteSky spawns a self-contained dragon instead and anchors it inside the island's cell so it never drifts into a neighbour. On death it pays out a configurable reward, optionally drops a dragon egg, then the island goes on cooldown.

config.yml
dragon:
  enabled: true
  cooldown-minutes: 60
  health: 200.0       # vanilla dragon is 200
  drop-egg: true
  spawn-height: 25    # blocks above the End cell floor it spawns / is recalled to
  anchor:             # how far the dragon may stray before being pulled back into its cell
    y-below: 8
    y-above: 90
    check-ticks: 40   # watchdog interval (20 ticks = 1s)
  reward:
    bank: 50000
    commands:
      - "broadcast {owner} slew their island dragon!"

The reward uses the shared reward object, so it can grant money, a bank deposit, items, console commands and sound/title effects. Cooldowns reset on a server restart.

Setting the default and the lineup

config.yml
island:
  # skyblock | oneblock | chunkblock
  default-mode: skyblock
 
modes:
  skyblock:
    hosting: grid
  oneblock:
    hosting: grid
  chunkblock:
    hosting: world_per_island

The modes block decides which modes exist and how each is hosted. To take a mode off the create menu without removing its hosting, set selectable: false in its modes/<mode>.yml file (see Per-mode files).

Maps

A map is a selectable template within a mode: after a player picks a mode they pick a map, each with its own world and look. ChunkBlock uses the map's seed to give genuinely different natural terrain (Highlands vs Badlands); the void modes mostly use it to distinguish worlds and the selection tile. Maps live in islands/maps.yml.

islands/maps.yml
maps:
  classic:
    mode: skyblock
    display: "<green><bold>Classic"
    icon: GRASS_BLOCK
    description: ["<gray>The original skyblock start."]
    seed: 0            # chunkblock: terrain seed; others cosmetic. 0 = fixed-random
    previewable: true  # show a "Preview" orbit button before creating
  badlands:
    mode: chunkblock
    display: "<gold><bold>Badlands"
    icon: RED_SAND
    description: ["<gray>Mesa canyons, rich gold."]
    seed: 1234567
    previewable: false

Each map id must be unique across all modes (it names the world folder). Remove every map of a mode to fall back to a synthesized default. Offer several maps per mode to give players a real choice of start.