Folia & Paper Β· Skyblock Plugin Β· v3.x

The modern
Skyblock engine

Skyllia is the first Skyblock plugin natively compatible with Folia β€” built for multi-threaded servers, zero-lag gameplay, and full extensibility.

9
Official addons
50+
Island permissions
3
Database backends

What is Skyllia?

Skyllia is a modern, high-performance Skyblock plugin designed from the ground up to fully leverage the multi-threaded architecture of Folia β€” the first of its kind. It delivers exceptional performance even with hundreds of simultaneous players, thanks to its asynchronous architecture and HikariCP connection pooling.

πŸš€

Folia-native

Multi-threaded island creation, deletion, and biome changes without server freezes.

πŸ’Ύ

Multi-database

SQLite (default), MariaDB 10.5+, or PostgreSQL 12+ with HikariCP connection pooling.

πŸ”Œ

Addon ecosystem

9 official addons: bank, ore generators, challenges, chat, backup, and more.

πŸ‘‘

Role system

6 roles (Owner β†’ Ban) with 50+ granular per-island permissions fully configurable per role.

🌍

Multi-world

Overworld, Nether, and End all supported with automatic portal handling.

πŸ“

PlaceholderAPI

Rich placeholder support across the core plugin and all addons for scoreboards, tab lists, and chat.

Requirements

ComponentRequirementNotes
ServerFolia 1.20.6+ or Paper 1.20.6+Folia recommended for best performance
Java21+Required
RAM4 GB minimum8 GB+ recommended for production
DatabaseSQLite (built-in), MariaDB 10.5+, or PostgreSQL 12+PostgreSQL preferred for large servers
WorldEdit / FAWEOptionalRequired for schematic-based island creation
VaultOptionalRequired by SkylliaBank
PlaceholderAPIOptionalEnables all %skyllia_*% placeholders
LuckPermsOptionalRecommended for fine-grained server permissions

Official Addons Overview

AddonDescriptionNotable dependency
SkylliaBankShared island bank with Vault economy & leaderboardVault
SkylliaOreConfigurable weighted ore generatorβ€”
SkylliaChallengeYAML-defined challenges with GUI, cooldowns & rewardsβ€”
SkylliaChatPer-island private chat channelβ€”
SkylliaChestShared island chest accessible from anywhere (beta)β€”
SkylliaInsightsBlock/entity limits per island via InsightsInsights 6.19.2+
SkylliaExtraCustom island name & description with PAPIβ€”
SkylliaBackupZIP backups of island region files with HTTP uploadβ€”
SkylliaIslandValueIsland score/level from block scanning & leaderboardβ€”

Step-by-step

1

Download Skyllia

Grab the latest Skyllia.jar from Modrinth or GitHub Releases.

2

Place in plugins/

Copy the jar into your server's plugins/ directory. If you use WorldEdit or FAWE, make sure it is already present.

3

First start

Start your server once. Skyllia generates its config files under plugins/Skyllia/config/.

4

Configure

Edit config.toml, islands.toml, worlds.toml and database.toml as needed. See each config section in the sidebar for reference.

5

Restart & play

Restart the server. Players can now run /island create to get started.

Optional Plugins

PluginPurposeRequired by
WorldEditSchematic-based island creationCore (optional)
FastAsyncWorldEditFaster async schematic pasteCore (optional)
VaultEconomy abstractionSkylliaBank
PlaceholderAPIPlaceholder expansionAll addons (optional)
LuckPermsServer-level permissionsRecommended
Insights 6.19.2+Block & entity limitsSkylliaInsights
Oraxen / NexoCustom block supportSkylliaOre, SkylliaChallenge
ℹ️

Installing addons is the same process: drop the addon jar into plugins/ alongside Skyllia. Each addon auto-generates its own config on first launch.

Minimum config changes

Skyllia works out of the box with SQLite. The only values you typically want to customise immediately are island spacing and the database backend for production servers.

plugins/Skyllia/config/config.toml
# Distance between islands (in regions β€” 1 region = 512Γ—512 blocks)
[settings.island]
region-distance = 10        # 5120 blocks between island centres
max-islands    = 500_000

# Default: SQLite β€” no extra setup needed
[sqlite]
enabled = true
plugins/Skyllia/config/islands.toml
# Default island type used by /island create (no type arg)
[default-island]
default-schem-key = "my_first_island"

[island.my_first_island]
id          = "my_first_island"
size        = 50.0   # radius in blocks
max-members = 6

First steps in-game

/island createCreate your first island using the default type.
/island homeTeleport to your island home point.
/island invite <player>Invite another player to your island.
/isadmin reloadReload all config files after making changes.
config-version = 4
verbose        = false   # enable detailed console logging

[settings.island]
region-distance             = 10       # spacing in regions (1 = 512 blocks)
max-islands                 = 500_000
teleport-outside-island     = false   # auto-tp player if they fall below world min-y
restrict-player-movement    = false   # push players back if they leave their island boundary
enable-obsidian-to-lava-conversion = true  # right-click obsidian with bucket β†’ lava bucket

[settings.island.delete]
prevent-deletion-if-has-members = true
chunk-perimeter-island          = false  # true = delete only island chunks (faster but less clean)

[settings.island.chunk-processing.delete]
threads   = -1    # -1 = auto (max(4, cpu_cores / 8))
delay-ms  = 50    # ms between chunk deletions (50 = 1 chunk/tick)

[settings.island.chunk-processing.biome]
threads   = -1
delay-ms  = 50

[settings.island.invitation]
teleport-when-accepting = true

[settings.island.queue]
allow-bypass = true   # permit 'skyllia.island.bypass.queue' permission

[settings.spawn]
enable     = true
world-name = "world"
block-x    = 0.0
block-y    = 0.0
block-z    = 0.0
yaw        = 0.0
pitch      = 0.0

[debug]
permission = false   # log missing permissions to console (useful for admins)

[settings.cache.ttl]
# -1 = never expire, 0 = disabled
warps       = -1
name-role   = -1
role        = -1
island      = -1
player-link = -1
members     = -1
state       = -1

[permissions]
check-owner = false   # if true, OWNER role is also subject to permission checks
check-ban   = false   # if true, banned players are denied island actions

Each block under [island.<key>] defines one island type players can choose with /island create <key>. The key must match the schematic name (or your external config ID).

# Which type is used when /island create is called without a type argument
[default-island]
default-schem-key = "my_first_island"

[island.my_first_island]
id          = "my_first_island"
size        = 50.0    # radius in blocks from the island centre
max-members = 6

[island.my_second_island]
id          = "my_second_island"
size        = 50.0
max-members = 6

[island.my_third_island]
id          = "my_third_island"
size        = 50.0
max-members = 6

Admin commands for island sizes

/isadmin setsize <player> <size>Override the island radius for a specific player's island.
/isadmin setmaxmembers <player> <count>Override the max member count for a specific player's island.
# Suppress warning if Nether/End are enabled in server but portals are disabled here
suppress-warning-nether-end = false

[worlds.sky-overworld]
environment  = "NORMAL"
portal-nether = "sky-nether"
portal-end   = "sky-end"
generator    = "default"
biome-id     = "minecraft:plains"
# Optional: "ocean" generator needs these two:
# sea-height = 63.0
# sea-block  = "WATER"
# Optional: custom world height
# min-y          = -64
# height         = 384
# logical-height = 384

[worlds.sky-nether]
environment  = "NETHER"
portal-nether = "sky-overworld"
portal-end   = "sky-end"
generator    = "default"
biome-id     = "minecraft:basalt_deltas"

[worlds.sky-end]
environment  = "THE_END"
portal-nether = "sky-nether"
portal-end   = "sky-overworld"
generator    = "default"
biome-id     = "minecraft:end_highlands"
ℹ️

The world names here must match the actual folder names on disk. The portal-nether and portal-end keys control which world a portal leads to when a player steps through it.

SQLite (default)

[sqlite]
enabled = true
# Database file is placed automatically in plugins/Skyllia/

MariaDB

[mariadb]
enabled  = true
host     = "localhost"
port     = 3306
database = "skyllia"
username = "root"
password = "password"

[mariadb.pool]
maximum-pool-size  = 10
minimum-idle       = 5
connection-timeout = 30000
idle-timeout       = 600000
max-lifetime       = 1800000

PostgreSQL

[postgresql]
enabled  = true
host     = "localhost"
port     = 5432
database = "skyllia"
username = "postgres"
password = "password"

[postgresql.pool]
maximum-pool-size  = 10
minimum-idle       = 5
connection-timeout = 30000
idle-timeout       = 600000
max-lifetime       = 1800000
⚠️

Only one backend can be enabled = true at a time. PostgreSQL is recommended for large servers. Addons that have their own database (SkylliaBank, SkylliaChallenge) automatically inherit the same connection pool β€” no extra config needed.

[player.island.leave]
clear-inventory  = true   # clear inv when leaving the island (not the server)
clear-enderchest = true
clear-experience = true

[player.island.kicked]
clear-inventory  = false
clear-enderchest = false
clear-experience = false

[player.island.delete]
clear-inventory  = true
clear-enderchest = true
clear-experience = true

[player.join.teleport]
own-island       = true    # teleport player to their island on server join
spawn-not-island = false   # teleport to spawn if player has no island

[player.permissions]
allow-teleportation = true

Teleport on Join

Setting own-island = true under [player.join.teleport] makes every player teleport directly to their island's home point when they join the server. If spawn-not-island = true is also enabled, players without an island are sent to the global spawn instead of the default server spawn.

Skyllia supports two schematic backends:

🌍

WorldEdit / FAWE

Paste .schem or .schematic files from the WorldEdit schematics folder. FAWE provides async paste for better performance.

πŸ”§

Built-in

Skyllia's own lightweight schematic system. Place .json files in plugins/Skyllia/schematics/.

Each island type is configured per world. The key format is "<island_id>.<world_name>". You need one block per island type Γ— world combination.

# island: my_first_island | world: sky-overworld
["my_first_island.sky-overworld"]
schematic        = "./schematics/default.schem"   # path to the .schem file
height           = 64.0                           # Y level where the schematic is placed
ignore-air-blocks = true                          # don't place air blocks (preserves existing terrain)
copy-entities    = true                           # copy entities from the schematic (cows, etc.)
plugin           = "WorldEdit"                    # "WorldEdit", "FastAsyncWorldEdit", or "Internal"
# Optional: restrict build height for this island type
# min-build-height = 0
# max-build-height = 150

["my_first_island.sky-nether"]
schematic        = "./schematics/default.schem"
height           = 64.0
ignore-air-blocks = true
copy-entities    = true
plugin           = "WorldEdit"

["my_first_island.sky-end"]
schematic        = "./schematics/default.schem"
height           = 64.0
ignore-air-blocks = true
copy-entities    = true
plugin           = "WorldEdit"

# Repeat for each island type (my_second_island, my_third_island…)

Configuration reference

KeyDescription
schematicPath to the .schem file, relative to the server root or absolute
heightY coordinate where the schematic's origin will be placed
ignore-air-blocksIf true, air blocks in the schematic are skipped (preserves existing terrain)
copy-entitiesIf true, entities embedded in the schematic (animals, etc.) are also spawned
pluginWorldEdit, FastAsyncWorldEdit, or Internal (WE and FAWE are equivalent here)
min-build-height(Optional) Minimum Y players can build at on this island type
max-build-height(Optional) Maximum Y players can build at on this island type
ℹ️

You must add one block per island type Γ— world. If your server has 3 island types and 3 worlds, that's 9 blocks total. Missing a world block will cause island creation to fail for that world.

OWNER CO_OWNER MODERATOR MEMBER VISITOR BAN
RoleDescription
OWNERFull control. Created automatically when an island is created. Cannot be demoted by anyone.
CO_OWNERNear-owner access. Can manage most settings except delwarp (off by default) and permission/trust management.
MODERATORCan ban, kick, expel visitors, and change biomes. Cannot invite, promote/demote, or manage permissions.
MEMBERCan build, interact, and use warps. Cannot manage the island.
VISITORDefault role for players on someone else's island. All actions off by default.
BANBanned players. Cannot enter the island. All permissions off.

Role hierarchy rules

A player can only promote or demote players with a role strictly below their own. An OWNER cannot be demoted by anyone. Ownership can be transferred with /island transfer <player> (or /isadmin forcetransfer).

Managing roles in-game

/island promote <player>Promote a member one step up the hierarchy.
/island demote <player>Demote a member one step down.
/island kick <player>Remove a member from the island.
/island ban <player>Ban a player from the island.
/island unban <player>Unban a player.
/island transfer <player>Transfer island ownership to another member.

Permissions control what actions each role can perform on an island. These are the server-wide defaults for all new islands. Players with the right role can further toggle permissions in-game via /island permission.

πŸ’‘

Each role has its own default values in permissions-v2.toml. OWNER and CO_OWNER have almost everything enabled, MODERATOR has partial access, MEMBER can build but not manage the island, VISITOR and BAN have everything disabled. Changes apply to new islands only β€” existing islands are not retroactively updated.

Available permissions

Permission keyWhat it controls
skyllia:block.breakBreaking blocks on the island
skyllia:block.placePlacing blocks on the island
skyllia:block.interactInteracting with blocks (doors, levers, chests, etc.)
skyllia:block.physicalTriggering pressure plates and tripwires
skyllia:block.use.bucketUsing buckets to pick up or place liquids
skyllia:entity.damageDealing damage to entities
skyllia:entity.interactInteracting with entities (ride horse, trade with villager, etc.)
skyllia:entity.breedBreeding animals
skyllia:item.dropDropping items on the ground
skyllia:item.pickupPicking up items from the ground
skyllia:inventory.openOpening containers (chests, furnaces, etc.)
skyllia:inventory.modifyMoving items inside open containers
skyllia:decor.hanging.placePlacing item frames, paintings, etc.
skyllia:decor.hanging.breakBreaking item frames, paintings, etc.
skyllia:player.teleportTeleporting to the island (home / warp)
skyllia:command.island.accessToggle the island open/closed to visitors
skyllia:command.island.banBan players from the island
skyllia:command.island.unbanUnban players
skyllia:command.island.kickKick members from the island
skyllia:command.island.expelTeleport a visitor off the island
skyllia:command.island.inviteInvite new players
skyllia:command.island.promotePromote a member
skyllia:command.island.demoteDemote a member
skyllia:command.island.permissionManage island permissions in-game
skyllia:command.island.manage_trustGrant/revoke temporary trust
skyllia:command.island.set_homeSet the island home point
skyllia:command.island.set_warpCreate a named warp point
skyllia:command.island.delwarpDelete a warp point
skyllia:command.island.warpUse warp points
skyllia:command.island.visit.bypassVisit private islands without needing access
skyllia:command.island.set_biomeChange the island biome
skyllia:command.island.gameruleChange per-island game rules (flags)

Default permission matrix

PermissionOWNERCO_OWNERMODERATORMEMBERVISITORBAN
block.break / block.place / block.interactβœ”βœ”βœ”βœ”βœ˜βœ˜
inventory.open / inventory.modifyβœ”βœ”βœ”βœ”βœ˜βœ˜
command.island.inviteβœ”βœ”βœ˜βœ˜βœ˜βœ˜
command.island.ban / unbanβœ”βœ”βœ” / ✘✘✘✘
command.island.permission / manage_trustβœ”βœ”βœ˜βœ˜βœ˜βœ˜
command.island.gamerule / set_biomeβœ”βœ”βœ˜ / βœ”βœ˜βœ˜βœ˜
command.island.set_homeβœ”βœ”βœ˜βœ˜βœ˜βœ˜

In-game permission management

/island permissionOpen the permission management GUI for your island.
/island trust <player>Grant temporary visitor-level trust to a player.
/island untrust <player>Revoke temporary trust from a player.

Flags are passive environmental toggles β€” they control automatic/environmental behaviour on an island with no player context. They are NOT player permissions. Island owners can toggle flags in-game via the flag GUI (requires the skyllia:command.island.gamerule permission).

Flag keyWhat it controlsDefault
skyllia:island.allow.fireFire ignition (flint & steel, lava, lightning strikes)false
skyllia:island.allow.explosionsBlock & entity explosion damagefalse
skyllia:island.allow.fluidsWater/lava flow between blockstrue
skyllia:island.allow.pistonsPiston extend/retracttrue
skyllia:island.allow.mob-griefGeneric mob griefing (fallback)false
skyllia:island.allow.creeper-griefCreeper explosions destroying blocksfalse
skyllia:island.allow.enderman-griefEndermen picking up blocksfalse
skyllia:island.allow.ghast-griefGhast fireball block destructionfalse
skyllia:island.allow.tnt-griefTNT & explosive minecart block damagefalse
skyllia:island.allow.wither-griefWither explosion block damagefalse
skyllia:island.allow.wither-skull-griefWither skull block damagefalse

Per-world and per-island-type overrides

# Global defaults
[defaults]
"skyllia:island.allow.fire"       = false
"skyllia:island.allow.explosions"  = false
"skyllia:island.allow.fluids"      = true

# Override for a specific world (uncomment to use)
# [worlds.sky-nether.defaults]
# "skyllia:island.allow.explosions" = true
# "skyllia:island.allow.fire"       = true

# Override for a specific island type (uncomment to use)
# [island.my_first_island.defaults]
# "skyllia:island.allow.fluids" = false

In-game flag management

/island gameruleOpen the flag management GUI for your island. Requires the skyllia:command.island.gamerule permission.

Island Lifecycle

/island create [type]Create a new island. Optionally specify an island type. Uses the default type if omitted.
/island homeTeleport to your island home point.
/island sethomeSet your island home to your current location.
/island delete confirmPermanently delete your island. The "confirm" keyword is required as a safety measure.
/island leave confirmLeave an island you're a member of.
/island infoView information about your island (size, members, etc.).
/island transfer <player>Transfer island ownership to another member.
/island tpsView the TPS of your island's region (Folia only).

Visiting

/island visit <player>Visit another player's island (if it is open).
/island accessToggle your island open/closed to visitors.
/island expel <player>Teleport a visitor off your island immediately.
/island warp <player> [warpname]Use a warp point set on another player's island.
/island setwarp <name>Create a named warp point at your current location.
/island delwarp <name>Delete a warp point.

Members

/island invite <player>Invite a player to your island.
/island invite accept <owner>Accept an island invitation from <owner>.
/island kick <player>Remove a member from your island.
/island promote <player>Promote a member one role step up.
/island demote <player>Demote a member one role step down.
/island ban <player>Ban a player from your island.
/island unban <player>Unban a player from your island.
/island banlistList banned players on your island.
/island trust <player>Grant temporary visitor-level access to a player.
/island untrust <player>Revoke temporary trust from a player.

Island Settings

/island biome <biome>Change the biome of your island.
/island permissionOpen the island permission management GUI.
/island gameruleOpen the island flags (gamerule) GUI.
⚠️

Admin commands bypass all island protections and permissions. Only grant skyllia.admin to trusted staff members.

/isadmin reloadReload all Skyllia configuration files without restarting the server.
/isadmin info <player>View detailed information about a player's island.
/isadmin currentDisplay information about the island at your current location.
/isadmin setsize <player> <size>Override the island radius for a specific player's island.
/isadmin setmaxmembers <player> <count>Override the max member count for a specific player's island.
/isadmin setheight <player> <min> <height>Override the world height bounds for a player's island.
/isadmin forcecreate <player> [type]Force-create an island for a player who doesn't have one yet.
/isadmin forcedelete <player>Force-delete a player's island as an administrator.
/isadmin forcetransfer <from> <to>Transfer an island's ownership from one player to another.
/isadmin schematic listList all available schematic configurations.
πŸ’°
SkylliaBank
Island-shared bank account β€’ Vault integration β€’ Island economy mode β€’ PlaceholderAPI

SkylliaBank adds a shared bank account to each island. All members share the same balance, separate from personal wallets. It supports two operating modes.

Operating Modes

Classic mode (default)

SkylliaBank uses an existing Vault economy provider (EssentialsX, CMI…). Players transfer money between their personal wallet and the island bank using /is bank deposit / withdraw.

Island economy mode

SkylliaBank registers itself as the Vault Economy provider. Every Vault call from any plugin (shops, auction houses…) transparently operates on the player's island bank. No separate economy plugin needed.

Features

  • Shared island bank balance with deposit & withdrawal (automatic rollback on failure)
  • Per-island deposit/withdraw permission gating via Skyllia's role system
  • Paginated leaderboard (/is bank top) and rank display (/is bank rank)
  • Admin commands for balance management
  • PlaceholderAPI integration with async-refreshed cache
  • SQLite, MariaDB, PostgreSQL β€” shared with Skyllia's connection pool
  • Folia compatible

Configuration

plugins/SkylliaBank/config.toml
[bank-account]
format   = "#,##0.##"   # Java DecimalFormat pattern
locale   = "fr_FR"       # e.g. "en_US" for 1,234.56 β€” "fr_FR" for 1 234,56
reset-on-island-delete = false

[cache]
ttl     = 60    # balance cache TTL in seconds (PAPI only)
ttl-top = 300   # leaderboard cache TTL in seconds

[vault]
enable-island-economy    = false  # true = SkylliaBank becomes the Vault provider
currency-name-singular   = "Coin"
currency-name-plural     = "Coins"
fractional-digits        = -1    # -1 = no rounding

Player Commands

/is bankShow your island's current bank balance. Aliases: /is money, /is bal, /is balance.
/is bank deposit <amount>Transfer money from your personal wallet into the island bank. Requires island deposit permission.
/is bank withdraw <amount>Transfer money from the island bank to your wallet. Requires island withdraw permission.
/is bank top [page]Paginated leaderboard of islands by balance (10 per page). Alias: /is bank baltop.
/is bank rankShow your island's rank in the leaderboard.

Admin Commands

/skylliadmin bank balance <player>View the bank balance of a player's island.
/skylliadmin bank deposit <player> <amount>Add money directly to an island bank (no wallet involved).
/skylliadmin bank withdraw <player> <amount>Remove money from an island bank.
/skylliadmin bank setbalance <player> <amount>Overwrite an island's bank balance. Requires skyllia.bank.admin.

Island Permission Nodes

Permission NodeWhat it controls
skylliabank:command.bank.depositWhether a member can deposit into the island bank
skylliabank:command.bank.withdrawWhether a member can withdraw from the island bank

PlaceholderAPI

Identifier: skybank

PlaceholderReturns
%skybank_balance%Raw balance (e.g. 12500.5)
%skybank_balance_formatted%Formatted balance using locale & pattern from config
%skybank_rank%Leaderboard rank of the player's island
%skybank_top_<n>_name%Island owner name at leaderboard position n
%skybank_top_<n>_balance%Raw balance of island at position n
%skybank_top_<n>_balance_formatted%Formatted balance of island at position n

SkylliaOre intercepts cobblestone generator events and replaces the generated block with a weighted random selection from your configured ore table. Each island can be assigned a different generator tier.

πŸ’‘

Chances are relative weights, not percentages. A block with chance: 80 is 8Γ— more likely than one with chance: 10. They do not need to sum to 100.

Generator configuration

plugins/SkylliaOre/config.yml
generator_default: "basic"   # generator assigned by default to new islands

generators:
  - name: "basic"
    replace_block:   # which blocks the generator replaces
      - cobblestone
      - stone
    world:
      - sky-overworld
    block_chance:
      - block: cobblestone
        chance: 80.0
      - block: iron_ore
        chance: 15.0
      - block: diamond_ore
        chance: 5.0

  - name: "vip"
    replace_block:
      - cobblestone
    world:
      - sky-overworld
    block_chance:
      - block: cobblestone
        chance: 50.0
      - block: gold_ore
        chance: 25.0
      - block: "oraxen:custom_ore"   # Oraxen custom block
        chance: 15.0
      - block: "nexo:custom_ore"    # Nexo custom block
        chance: 10.0

Custom blocks from Oraxen or Nexo are supported with the oraxen: or nexo: prefix.

Commands

/skylliaadmin generator <player> <generator>Assign a specific generator to a player's island. Requires skylliaore.use. Note: there is a ~30 s cache delay before the change takes effect.

PlaceholderAPI

Identifier: skyore

PlaceholderReturns
%skyore_name%Name of the active generator for the player's island

SkylliaChallenge lets you define custom challenges that players can complete for rewards. Each challenge is a single .yml file in the challenges/ folder. Challenges can have multiple completion modes, cooldowns, and custom GUI positions.

Challenge file format

plugins/SkylliaChallenge/challenges/my_challenge.yml
id: "skyllia:farmer_1"
name: "<yellow>Farmer I"        # MiniMessage supported
lore:
  - "Harvest 64 Wheat on your island."

requirements:                    # conditions the player must meet
  - "ITEM:WHEAT 64"              # must have 64 wheat in inventory

rewards:                         # what the player receives on completion
  - "ITEM:DIAMOND 3"
  - "CMD:broadcast %player% completed Farmer I!"

maxTimes: -1                    # -1 = unlimited completions
cooldown: "24h"                  # must wait 24 h between completions
broadcast: true                  # announce completion server-wide
showInGui: true

gui:
  row: 2
  column: 5
  page: 1
  item: "HAY_BLOCK"               # use "oraxen:id" or "nexo:id" for custom items
  amount: 1

Requirement types

TypeSyntax exampleDescription
ITEMITEM:WHEAT 64Player must have the item in their inventory. Supports nexo: / oraxen: prefixes.
BLOCKBREAKBLOCKBREAK:STONE 100Player must break N blocks of that type on their island.
CRAFTCRAFT:IRON_SWORD 10Player must craft N items.
KILLKILL:ZOMBIE 20Player must kill N entities of that type.
CONSUMECONSUME:COOKED_BEEF 30Player must eat/drink N items.
FISHFISH:COD 10Player must fish N items of that type.
ENCHANTMENTENCHANTMENT:SHARPNESS 5Player must apply that enchantment N times.
POTIONPOTION:SPEED 3Player must drink N potions of that type.
NEARNEAR:COW 3Player must have N entities of that type near them.
BANKBANK: 1000Island bank must have at least N coins. Requires SkylliaBank.
ECOECO: 500Player's personal wallet must have at least N. Requires Vault.

Reward types

TypeSyntax exampleDescription
ITEMITEM:DIAMOND 3Give the player N items. Supports nexo: / oraxen: prefixes.
CMDCMD:say Hello %player%Execute a console command. %player% is replaced with the player's name.
BANKBANK: 500Deposit N into the island bank. Requires SkylliaBank.

Cooldown formats

Cooldowns use a simple duration notation: 24h, 7d, 30m, 1h30m. Set to 0 or omit to disable cooldown.

Commands

/island challengeOpen the challenge GUI browser.
/isadmin challenge reloadReload all challenge YAML files.
/isadmin challenge reset <player> <challengeId>Reset a player's progress on a specific challenge.

SkylliaChat adds a private island chat channel. When a player toggles island chat on, all their messages are only visible to members of their island. Perfect for team coordination without cluttering global chat.

Usage

/island chatToggle island chat on/off. When enabled, all your messages go to the island channel only.
πŸ’‘

Chat is toggled per session. When a player reconnects, island chat is off by default.

SkylliaChest provides a virtual shared chest that every island member can open from anywhere on the island. Items placed in it are accessible to all members based on their island permissions.

Commands

/island chestOpen the shared island chest.
⚠️

SkylliaChest is currently in beta. Data is stored as a serialised inventory in persistent data. Back up your data before updating.

ℹ️

This addon requires Insights 6.19.2+ to be installed on your server. Download it from its own Modrinth / Spigot page. Place SkylliaInsights.jar in plugins/Insights/addons/ β€” NOT in the main plugins folder.

SkylliaInsights bridges the Insights plugin with Skyllia. It registers each island as an Insights region, so every limit rule you define in Insights is automatically scoped to individual islands. The addon identifier to use in Insights configurations is skyllia (Skyllia's plugin name, lowercased).

Example limit configurations

plugins/Insights/limits/redstone_limit.yml
limit:
  type: "GROUP"
  bypass-permission: "insights.bypass.limit.redstone"
  name: "Redstone"
  limit: 64
  settings:
    enabled-addons:
      whitelist: true   # only apply inside Skyllia islands
      addons:
        - "skyllia"
  materials:
    - "REDSTONE_WIRE"
    - "HOPPER"
    - "DISPENSER"
    - "COMPARATOR"
plugins/Insights/limits/tile_limit.yml
limit:
  type: "TILE"
  bypass-permission: "insights.bypass.limit.tile"
  name: "Tiles"
  limit: 256

Configuration reference

FieldDescription
typeTILE, GROUP, or PERMISSION
bypass-permissionPermission node to bypass this specific limit
settings.enabled-addons.whitelisttrue = only apply inside listed addon regions
settings.enabled-addons.addonsList of addon names β€” use skyllia for Skyllia islands
settings.disallow-placement-outside-regionPrevents block placement outside any matching region

SkylliaExtra bundles quality-of-life features too lightweight for their own addon. Currently it lets players set a custom name and description for their island, with full MiniMessage formatting support and PlaceholderAPI integration.

Player Commands

/is setname <name>Set a custom name for your island. Supports MiniMessage formatting (e.g. <gradient:red:blue>My Island).
/is setname resetReset the island name to the default (<PlayerName>'s Island).
/is setdescription <text>Set a custom description for your island.
/is setdescription resetReset the island description.

Using these commands also requires the matching island-level permission (set_name / set_description).

Admin Commands

/isadmin setname <player|uuid> <name|reset>Override the island name of any player's island. Requires skyllia.admin.setname.
/isadmin setdescription <player|uuid> <text|reset>Override the island description. Requires skyllia.admin.setdescription.

PlaceholderAPI

Identifier: skylliaextra

PlaceholderReturns
%skylliaextra_name%Island name rendered from MiniMessage to legacy color codes
%skylliaextra_name_raw%Island name as stored (raw MiniMessage string)
%skylliaextra_description%Island description rendered from MiniMessage
%skylliaextra_description_raw%Island description as stored (raw MiniMessage string)

If no custom name is set, %skylliaextra_name% falls back to <PlayerName>'s Island. Description placeholders return an empty string if not set.

SkylliaBackup packages the Minecraft region files (.mca) covering an island into a timestamped ZIP archive. Backups can be triggered by players (subject to cooldown) or by admins. Old backups are automatically pruned.

How it works

  1. All Skyllia worlds for the island are retrieved.
  2. Region files covering the island footprint are collected from each world's region/ folder.
  3. A ZIP archive is created: <folder>/<islandId>/backup_<owner>_<trigger>_<timestamp>.zip
  4. Backups beyond max-per-island are deleted (oldest first).
  5. If an upload URL is configured, the ZIP is uploaded asynchronously via multipart HTTP POST.

Configuration

plugins/SkylliaBackup/config.toml
[backup]
folder                  = "plugins/SkylliaBackup/backups"  # or an absolute path, e.g. /mnt/nas/backups
max-per-island          = 5       # 0 = unlimited
allow-player-backup     = true
player-cooldown-seconds = 3600   # 0 = no cooldown

[upload]
url   = ""   # empty = disabled; example: "http://my-server:3000/upload"
token = ""   # Bearer token for Authorization header

Commands

/is backupCreate a backup of your own island. Subject to cooldown. Requires skyllia.island.backup.
/isadmin backup <player>Back up a specific player's island immediately. Requires skyllia.admins.commands.backup.
/isadmin backup allBack up every active island on the server.

SkylliaIslandValue periodically scans each island, assigns a configurable point value to every block type, computes a raw score, then converts it into a level using a customisable mathematical formula. Scores are stored in Skyllia's persistent data β€” no external database required.

How it works

  1. Every N seconds (default 300 s), online players' islands are retrieved.
  2. All chunks covered by the island are scanned block by block.
  3. Each block count is multiplied by its configured value β†’ raw score.
  4. The level formula is applied β†’ calculated level.
  5. Score and level are saved to Skyllia's PersistentData (skylliaislandlevel:data).

Configuration

plugins/SkylliaIslandLevel/config/config.toml
[island-level]
level-expression             = "FLOOR(SQRT(score / 100))"
min-level                    = 0
timer-interval-seconds       = 300   # scan cycle interval
timer-interval-seconds-top   = 300   # leaderboard refresh interval

[blocks]
# Point value per block type (use Minecraft material names)
DIAMOND_BLOCK  = 500
EMERALD_BLOCK  = 400
GOLD_BLOCK     = 200
IRON_BLOCK     = 100
DIAMOND_ORE    = 80
NETHERITE_BLOCK = 2000
BEACON         = 1000

Commands

/island level scanManually trigger a scan of your island and display score + level. Alias: /island niveau scan.
/island level top [page]Display the island leaderboard (10 entries per page).
/island level rankDisplay your position in the global leaderboard.

PlaceholderAPI

Identifier: islandlevel

PlaceholderReturns
%islandlevel_level%Level of the player's island
%islandlevel_score%Raw score of the player's island
%islandlevel_rank%Player's position in the global leaderboard
%islandlevel_top_<N>_name%Island owner name at position N
%islandlevel_top_<N>_level%Level of the island at position N
%islandlevel_top_<N>_score%Score of the island at position N

Maven / Gradle dependency

build.gradle.kts
repositories {
    maven("https://repo.euphyllia.moe/repository/maven-public/")
}
dependencies {
    compileOnly("fr.euphyllia.skyllia:api:3.x")
}
pom.xml (Maven)
<repository>
    <id>euphyllia-repo</id>
    <url>https://repo.euphyllia.moe/repository/maven-public/</url>
</repository>

<dependency>
    <groupId>fr.euphyllia.skyllia</groupId>
    <artifactId>api</artifactId>
    <version>3.x</version>
    <scope>provided</scope>
</dependency>

Core API classes

ClassDescription
SkylliaAPIMain entry point. Get island by player UUID or island ID. Register custom permissions/flags.
IslandRepresents an island. Access size, members, warps, permissions, flags, persistent data.
PlayersRepresents a player's island membership: role, UUID.
IslandFlagsRead and write island flags programmatically.
PermissionRegistryRegister custom permission nodes for your addon.

Usage example

// Get a player's island
Island island = SkylliaAPI.getIslandByPlayerId(player.getUniqueId());
if (island != null) {
    player.sendMessage("Your island size: " + island.getSize());
}

// Check a flag on the island
boolean allowFire = island.getFlag("skyllia:island.allow.fire");

// Listen to Skyllia events
@EventHandler
public void onIslandCreate(IslandCreateEvent event) {
    Island island = event.getIsland();
    // ...
}

Events

EventFired when
IslandCreateEventA new island is created
IslandDeleteEventAn island is deleted
IslandMemberJoinEventA player joins an island
IslandMemberLeaveEventA player leaves an island
IslandTeleportEventA player teleports to an island (home/warp/visit)
IslandPermissionChangeEventAn island permission is changed
IslandFlagChangeEventAn island flag is toggled

Core plugin placeholders

Identifier: skyllia

PlaceholderReturns
%skyllia_island_id%The player's island UUID
%skyllia_island_size%Island radius in blocks
%skyllia_island_size_int%Island radius as integer
%skyllia_island_max_members%Maximum member count for the island
%skyllia_island_members_size%Current number of members
%skyllia_island_members_online%Number of island members currently online
%skyllia_island_visitors_online%Number of visitors currently on the island
%skyllia_island_members_total%Total member count (alias for members_size)
%skyllia_island_role% / %skyllia_island_rank%The player's role on their island (OWNER, MEMBER, etc.)
%skyllia_island_role_value%Numeric role value (for comparisons)
%skyllia_island_owner_name%Name of the island owner
%skyllia_island_owner_uuid%UUID of the island owner
%skyllia_island_create_date%Island creation date
%skyllia_island_access%Whether the island is open to visitors (true/false)
%skyllia_island_disabled%Whether the island is disabled (true/false)
%skyllia_visited_id%UUID of the island the player is currently visiting
%skyllia_visited_owner_name%Owner name of the island the player is visiting
%skyllia_is_on_island%Whether the player is currently on an island (true/false)

Addon placeholders summary

IdentifierAddonKey placeholders
skybankSkylliaBank%skybank_balance%, %skybank_balance_formatted%, %skybank_rank%, %skybank_top_<n>_*%
skyoreSkylliaOre%skyore_name%
islandlevelSkylliaIslandValue%islandlevel_level%, %islandlevel_score%, %islandlevel_rank%, %islandlevel_top_<N>_*%
skylliaextraSkylliaExtra%skylliaextra_name%, %skylliaextra_name_raw%, %skylliaextra_description%, %skylliaextra_description_raw%
PluginHook classWhat it enables
WorldEditWorldEditUtilsPastes island schematics using WorldEdit's schematic API
FastAsyncWorldEditFastAsyncWorldEditUtilsSame as WorldEdit but uses FAWE for faster async paste
EssentialsXEssentialsSpawnHookIntegrates with Essentials spawn system
VaultVaultHookEconomy abstraction for SkylliaBank
PlaceholderAPISkylliaExpansionRegisters all %skyllia_*% placeholders
InsightsSkylliaInsights addonIsland-scoped block/entity limits
Oraxen / NexoHookManager (Challenge & Ore)Custom block and item support in generators and challenges
ℹ️

All hooks are checked on startup and activated only if the corresponding plugin is present. Skyllia starts normally without any optional dependency.