The modern
Skyblock plugin.
High-performance, fully asynchronous Skyblock plugin for Paper and Folia. Configure islands, roles, permissions and more — all from simple TOML files.
What is Skyllia?
Skyllia is the first Skyblock plugin with native Folia support. Every operation — island creation, teleportation, data saving — runs asynchronously. This means zero server freeze even at peak load.
It works equally well on standard Paper 1.20.1+ servers, making it a safe choice for any server setup.
Island Management
Create, delete, resize and teleport to islands instantly. Support for Overworld, Nether and End dimensions per island.
Team System
6 hierarchical roles with 50+ granular permissions. Invite players, manage members, transfer ownership.
Flexible Database
SQLite for small servers, MariaDB or PostgreSQL for larger ones. Connection pooling via HikariCP.
Extensible
5 official addons (Bank, Ore Generator, Challenges, Chat, Chest). Full Java API for your own addons.
Requirements
| Component | Minimum | Recommended |
|---|---|---|
| Server | Paper 1.20.1 or Folia 1.20 | Folia (latest) |
| Java | Java 21 | Java 21+ |
| RAM | 4 GB | 8 GB+ |
| Database | SQLite (built-in) | PostgreSQL 12+ for large servers |
Installation
Get Skyllia running on your server in under 5 minutes.
Step-by-step
Download Skyllia
Get the latest .jar from Modrinth or GitHub Releases. Make sure to pick
the version matching your Minecraft server version.
Install optional dependencies
For schematic support (island templates), install WorldEdit or FastAsyncWorldEdit. For economy features, install Vault and an economy plugin. For placeholders, install PlaceholderAPI.
Place the .jar in /plugins
Copy Skyllia-x.x.x.jar into your server's plugins/ folder. Do not rename the
file.
Start the server once
Start (or restart) your server. Skyllia will generate all config files in
plugins/Skyllia/config/. Then stop the server.
Configure
Edit the files in plugins/Skyllia/config/ to your needs. At minimum, review
worlds.toml (world names) and islands.toml (island types). See each
configuration section for details.
Restart & play!
Restart the server. Players can now use /island create to start their adventure.
To install addons (SkylliaBank, SkylliaOre, etc.), simply drop their .jar files in
plugins/ alongside Skyllia and restart.
Optional Plugins
| Plugin | Purpose | Required? |
|---|---|---|
| WorldEdit / FAWE | Paste island schematics (.schem files) | For schematics Optional |
| Vault | Economy support for SkylliaBank | For bank |
| PlaceholderAPI | Scoreboard / tab variables | Optional |
| LuckPerms | Server-side permission management | Optional |
| EssentialsX | Spawn integration | Optional |
| Insights | Block/entity limits per island | For Insights addon Optional |
Quick Start
Minimal configuration to get a Skyblock server running fast.
Skyllia works out of the box with zero configuration. The defaults use SQLite and a single island type. This guide shows what to change for a real server.
Minimum config changes
After the first startup, only a few files really need editing for a basic server:
# These world names must match actual worlds on your server [worlds.sky-overworld] environment = "NORMAL" portal-nether = "sky-nether" portal-end = "sky-end" generator = "default" # void world [worlds.sky-nether] environment = "NETHER" [worlds.sky-end] environment = "THE_END"
[default-island] default-schem-key = "starter" [island.starter] id = "starter" size = 50.0 # 50 blocks in each direction from center max-members = 6
["starter.sky-overworld"] schematic = "./schematics/starter.schem" height = 64.0 ignore-air-blocks = true copy-entities = true plugin = "WorldEdit"
First steps in-game
General Settings
File: plugins/Skyllia/config/config.toml
| Option | Default | What it does |
|---|---|---|
| verbose | false | Enables detailed console debug logging. Only turn on when troubleshooting. |
| settings.global.cache. update-timer-seconds |
30 | How often the island cache refreshes (seconds). Lower = fresher data, more DB queries. |
| settings.island. region-distance |
10 | Distance between islands, in regions. 1 region = 512×512 blocks, so 10 = 5120 blocks between island centers. |
| settings.island. max-islands |
500 000 | Hard cap on total islands the server can host. |
| settings.island. teleport-outside-island |
false | If enabled, players who fall into the void outside their island are teleported back to their island home automatically. |
| settings.island. restrict-player-movement |
false | Prevents players from walking beyond their island boundary. They are gently pushed back. |
| settings.island. enable-obsidian-to-lava-conversion |
true | Right-clicking obsidian with an empty bucket gives the player a lava bucket and consumes the obsidian. Useful for renewable lava on Skyblock. |
| settings.island.delete. prevent-deletion-if-has-members |
true | Blocks the owner from deleting their island while other members are on it. They must be kicked/expelled first. |
| settings.island.delete. chunk-perimeter-island |
false | false = deletes the entire region (safer, slower). true = only removes chunks inside the island radius (faster but may leave some blocks). |
| settings.island.invitation. teleport-when-accepting |
true | When a player accepts an invite, they are automatically teleported to the island. |
| settings.island.queue. allow-bypass |
true | Players with permission skyllia.island.bypass.queue can skip the island creation queue.
|
| settings.spawn.enable | true | Enables a global spawn point accessible via /spawn. |
| settings.spawn.world-name block-x/y/z, yaw, pitch |
world / 0,0,0 | The world name and exact coordinates of the spawn point. |
region-distance cannot be changed after islands have been created — it would cause collisions between existing islands. Set this value before your server goes live.
Island Types
File: plugins/Skyllia/config/islands.toml
Island types define the different "starter" templates players can choose from when running
/island create. Each type can have a different size, member limit, and starting schematic.
# The type used when the player doesn't specify one [default-island] default-schem-key = "starter" # A small starter island [island.starter] id = "starter" size = 50.0 max-members = 6 # A larger VIP island [island.vip] id = "vip" size = 120.0 max-members = 20
| Field | Description |
|---|---|
| id | Unique identifier for this island type. Must match the key in schematics.toml. |
| size | The radius in blocks from the island center that the player "owns". A value of 50 means the island extends 50 blocks in each cardinal direction. |
| max-members | Maximum number of players (including owner) who can be members of this island. |
After adding a new island type, link its schematic in schematics.toml for each world dimension
(Overworld, Nether, End). Players create it with /island create <id>.
Admin commands for island sizes
Admins can override the size or member count for a specific player's island at runtime:
World Configuration
File: plugins/Skyllia/config/worlds.toml
Skyllia manages its own set of worlds separate from the main server worlds. Each world can be linked to Nether and End portals so players move seamlessly between dimensions.
[worlds.sky-overworld] environment = "NORMAL" # NORMAL | NETHER | THE_END portal-nether = "sky-nether" # which world nether portals lead to portal-end = "sky-end" # which world end portals lead to generator = "default" # "default" = void, or a plugin generator name biome-id = "minecraft:plains" [worlds.sky-nether] environment = "NETHER" portal-nether = "sky-overworld" biome-id = "minecraft:basalt_deltas"
| Option | Values | Description |
|---|---|---|
| environment | NORMAL / NETHER / THE_END | Minecraft dimension type. Must match the actual world type. |
| portal-nether | World name string | Target world when a player enters a Nether portal from this world. |
| portal-end | World name string | Target world when a player enters an End portal from this world. |
| generator | "default" or plugin name | "default" generates a void world. You can specify a custom generator plugin name. |
| biome-id | Minecraft biome ID | Default biome for the world (e.g. minecraft:plains). Players can override per-island.
|
| sea-height | Number | Only for the "ocean" generator. Sets the water level height. |
| sea-block | Block name | Only for the "ocean" generator. Block used for ocean floor. |
Database Configuration
File: plugins/Skyllia/config/database.toml
Skyllia supports three database backends. By default, SQLite is used — perfect for small to medium servers with no external database setup required.
SQLite
File-based, zero setup. Best for small servers or testing.
MariaDB
Great for medium servers. Compatible with MySQL.
PostgreSQL
Recommended for large servers with many concurrent players.
[postgres] enabled = true hostname = "127.0.0.1" port = 5432 database = "skyblock" username = "your_user" password = "your_password" useSSL = false minPool = 2 maxPool = 10 [mariadb] enabled = true hostname = "127.0.0.1" port = 3306 database = "skyblock" username = "your_user" password = "your_password" useSSL = false minPool = 2 maxPool = 10 [sqlite] enabled = false # disable SQLite when using MariaDB file = "plugins/Skyllia/skyllia.db" # Path to the SQLite file used.
| Option | Description |
|---|---|
| minPool | Minimum number of persistent connections. For small servers keep at 1–2. |
| maxPool | Maximum simultaneous database connections. Scale with player count (10–20 for medium servers). |
| maxLifeTime | Max connection lifetime in milliseconds (default 1 800 000 = 30 min). Prevents stale connections. |
| keepAliveTime | Frequency (ms) to send a keepalive ping to the database. Set to 0 to disable. |
| timeOut | Max wait (ms) to get a connection from the pool before failing. |
Player Settings
File: plugins/Skyllia/config/players.toml
Controls what happens to a player's inventory, ender chest, and experience in various island lifecycle situations.
| Situation | Option | Default | Effect when true |
|---|---|---|---|
| Leave island (/island leave) |
clear-inventory | true | Player's inventory is wiped on leaving |
| clear-enderchest | true | Ender chest contents are cleared | |
| clear-experience | true | All XP is reset to zero | |
| Kicked (/island kick) |
clear-inventory | false | Inventory kept when kicked |
| clear-enderchest | false | Ender chest kept when kicked | |
| clear-experience | false | XP kept when kicked | |
| Island deleted (/island delete) |
clear-inventory | true | Inventory wiped on island deletion |
| clear-enderchest | true | Ender chest cleared | |
| clear-experience | true | XP reset |
Teleport on Join
| Option | Default | Description |
|---|---|---|
| player.join.teleport.own-island | true | Players are teleported to their island home when they join the server. |
| player.join.teleport.spawn-not-island | false | If a player doesn't have an island, teleport them to the global spawn on join. |
Schematics
File: plugins/Skyllia/config/schematics.toml
Schematics define what structure is pasted when a new island is created. Each island type + world combination gets its own schematic entry.
# Format: ["islandTypeId.worldName"] ["starter.sky-overworld"] schematic = "./schematics/starter_overworld.schem" height = 64.0 ignore-air-blocks = true copy-entities = true plugin = "WorldEdit" ["starter.sky-nether"] schematic = "./schematics/starter_nether.schem" height = 64.0 ignore-air-blocks = true copy-entities = false plugin = "WorldEdit"
| Option | Description |
|---|---|
| schematic | Path to the .schem file. Relative paths start from the server root. Place files in
plugins/Skyllia/schematics/. |
| height | Y level where the schematic will be placed. For Overworld typically 64, for Nether and End typically 64 or 128. |
| ignore-air-blocks | If true, air blocks in the schematic are skipped. This prevents the schematic from overwriting existing terrain around the paste point. |
| copy-entities | If true, animals and entities saved inside the schematic will also be spawned. |
| plugin | WorldEdit — use WorldEdit or FastAsyncWorldEdit to paste. Internal — use Skyllia's built-in paster (no WorldEdit needed). |
Every island type must have a schematic entry for every world configured in worlds.toml. If a
player's island is in a world with no schematic, creation will fail with an error.
Roles System
Six built-in hierarchical roles, each with configurable permissions.
| Role | Level | Description |
|---|---|---|
| OWNER | 4 | Full control over the island. Can delete, transfer ownership, manage all roles. Only one per island. |
| CO_OWNER | 3 | Trusted second-in-command. Can promote/demote below their level. Ownership can be transferred to a co-owner. |
| MODERATOR | 2 | Can kick members, manage lower roles, and help run the island. |
| MEMBER | 1 | Standard island resident. Permissions are configured in permissions-v2.toml. |
| VISITOR | 0 | Any player who visits the island but isn't a member. Defaults to restricted access. |
| BAN | -1 | Banned players cannot enter the island territory. |
Role hierarchy rules
A player can only manage roles strictly below their own. This means:
An Owner can promote/demote anyone. A Co-Owner can manage Moderators and Members but not other Co-Owners. A Moderator can manage Members but not Co-Owners, etc.
Managing roles in-game
Island Permissions
File: plugins/Skyllia/config/permissions-v2.toml
Permissions control what actions each role can perform on an island. These are the defaults
for all islands — players with the right role can further toggle these in-game via
/island permission.
All permissions default to false in permissions-v2.toml. Set them to
true to enable the action for a role by default across all new islands.
Available permissions
| Permission key | What it controls |
|---|---|
| skyllia:block.break | Breaking blocks on the island |
| skyllia:block.place | Placing blocks on the island |
| skyllia:block.interact | Interacting with blocks (doors, levers, chests, etc.) |
| skyllia:block.physical | Triggering pressure plates and tripwires |
| skyllia:block.use.bucket | Using buckets to pick up or place liquids |
| skyllia:entity.damage | Dealing damage to entities |
| skyllia:entity.interact | Interacting with entities (ride horse, trade with villager, etc.) |
| skyllia:entity.breed | Breeding animals |
| skyllia:item.drop | Dropping items on the ground |
| skyllia:item.pickup | Picking up items from the ground |
| skyllia:inventory.open | Opening containers (chests, furnaces, etc.) |
| skyllia:inventory.modify | Moving items inside open containers |
| skyllia:player.teleport | Teleporting to the island |
| skyllia:decor.hanging.place | Placing item frames, paintings |
| skyllia:decor.hanging.break | Breaking item frames, paintings |
| skyllia:command.island.invite | Sending island invites |
| skyllia:command.island.kick | Kicking members from the island |
| skyllia:command.island.ban | Banning players from the island |
| skyllia:command.island.unban | Unbanning players |
| skyllia:command.island.promote | Promoting members |
| skyllia:command.island.demote | Demoting members |
| skyllia:command.island.set_warp | Creating island warps |
| skyllia:command.island.delwarp | Deleting island warps |
| skyllia:command.island.warp | Using island warps |
| skyllia:command.island.set_home | Setting island home point |
| skyllia:command.island.set_biome | Changing island biome |
| skyllia:command.island.gamerule | Changing island gamerules |
| skyllia:command.island.access | Opening/closing island to visitors |
| skyllia:command.island.expel | Expelling visitors currently on the island |
| skyllia:command.island.permission | Editing island permissions |
| skyllia:command.island.manage_trust | Managing trusted players |
| skyllia:command.island.visit.bypass | Visiting closed islands |
[defaults.MEMBER] "skyllia:block.break" = true "skyllia:block.place" = true "skyllia:block.interact" = true "skyllia:item.pickup" = true "skyllia:item.drop" = true
In-game permission management
Island Flags
File: plugins/Skyllia/config/flags.toml
Flags are island-wide environmental toggles — they don't depend on who is doing the action. They control things like whether fire can spread or whether explosions damage blocks.
The values in flags.toml are the server-wide defaults. Island owners can toggle
flags for their own island via /island flag.
| Flag key | Default | Controls |
|---|---|---|
| skyllia:island.allow.fire | false | Fire ignition on the island (from flint & steel, lava, lightning) |
| skyllia:island.allow.explosions | false | Whether explosions can damage blocks and entities |
| skyllia:island.allow.fluids | true | Water and lava flow between blocks |
| skyllia:island.allow.pistons | true | Piston extend and retract |
| skyllia:island.allow.mob-grief | false | Generic mob griefing fallback (affects mobs not covered by specific flags) |
| skyllia:island.allow.creeper-grief | false | Creeper explosions destroying blocks |
| skyllia:island.allow.enderman-grief | false | Endermen picking up and placing blocks |
| skyllia:island.allow.ghast-grief | false | Ghast fireball explosions |
| skyllia:island.allow.tnt-grief | false | TNT and explosive minecarts destroying blocks |
| skyllia:island.allow.wither-grief | false | Wither boss destroying blocks via explosions |
| skyllia:island.allow.wither-skull-grief | false | Wither skull projectile explosions |
In-game flag management
Player Commands
All island commands use the /island prefix (alias: /is).
Island Lifecycle
Visiting
Members
Island Settings
keepInventory true).
Admin Commands
All admin commands use the /isadmin prefix. Requires the skyllia.admin
permission.
Admin commands bypass all island protections and permissions. Only grant skyllia.admin to
trusted staff members.
SkylliaBank
A shared island bank account system with Vault economy support.
SkylliaBank adds a shared bank account to each island. All members of an island share the same bank balance, separate from their personal wallet. Requires Vault and a compatible economy plugin (e.g. EssentialsX Economy, CMI).
Features
Shared Balance
All island members access the same bank balance. Perfect for island team projects and shared purchases.
PlaceholderAPI
Exposes island bank balance as placeholders for use in scoreboards, tab lists, and chat.
Commands
Supported databases
SkylliaBank supports the same databases as Skyllia: SQLite, MariaDB, and PostgreSQL. It uses the same connection pool.
SkylliaOre
Configurable ore generator for island cobblestone generators.
SkylliaOre intercepts cobblestone generator events and replaces the generated block with a weighted random selection from your configured ore table. Players can have different generators based on their island tier.
Generator configuration
generator_default: "basic" # generator assigned by default generators: - name: "basic" replace_block: # which blocks can be replaced - 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" # better generator for VIP players replace_block: - cobblestone world: - sky-overworld block_chance: - block: cobblestone chance: 50.0 - block: gold_ore chance: 25.0 - block: diamond_ore chance: 15.0 - block: emerald_ore chance: 10.0
Chances are relative weights — they don't need to sum to 100. A block with chance 80 is 8× more likely than
one with chance 10. You can also use Oraxen or Nexo custom blocks by prefixing with oraxen: or
nexo:.
Commands
SkylliaChallenge
Configurable challenge system with rewards, cooldowns, and a GUI.
SkylliaChallenge lets you define custom challenges that players can complete for rewards. Each challenge is
defined in its own YAML file in the challenges/ folder.
Challenge file format
id: "skyllia:farmer_1" name: "<yellow>Farmer I" lore: - "Harvest 64 Wheat on your island." requirements: # conditions player must meet - "ITEM:WHEAT 64" # player must have 64 wheat rewards: # what the player receives on completion - "ITEM:DIAMOND 3" # 3 diamonds - "CMD:broadcast %player% completed Farmer I!" maxTimes: -1 # -1 = unlimited completions cooldown: "24h" # must wait 24h before doing it again broadcast: true # announce completion server-wide showInGui: true gui: row: 2 column: 5 page: 1 item: "HAY_BLOCK"
Requirement types
| Type | Example | Description |
|---|---|---|
| ITEM | ITEM:WHEAT 64 |
Player must have a certain amount of an item in their inventory |
| BLOCK_BREAK | BLOCK_BREAK:STONE 100 |
Player must break X blocks of a type |
| CRAFT | CRAFT:BREAD 10 |
Player must craft X of an item |
| KILL | KILL:ZOMBIE 50 |
Player must kill X entities |
| FISH | FISH:COD 20 |
Player must catch X of a fish type |
| ENCHANT | ENCHANT:SHARPNESS 5 |
Player must enchant items with a certain enchantment |
| CONSUME | CONSUME:BREAD 30 |
Player must eat X of an item |
Cooldown formats
Supported: 24h, 1d / 1day, 1w / 1week,
1m / 1month, 1y / 1year
Commands
SkylliaChat
Island-specific chat channel that keeps island conversations private.
SkylliaChat adds an island chat channel visible only to members of the same island. Players can toggle between global chat and island chat at will.
Usage
SkylliaChest
A shared island chest accessible by all members from anywhere.
SkylliaChest provides a virtual shared chest that all island members can access from any location. It functions like a shared ender chest for the entire island team.
Commands
InsightsSkyllia
Integrate block and entity limits per island using the Insights plugin.
InsightsSkyllia bridges the Insights plugin with Skyllia. It allows you to set limits on how many of a specific block or entity each island can place. This prevents players from placing thousands of hoppers, spawners, or redstone components that could lag the server.
This addon requires Insights 6.x to be installed on your server. Download it from its own Modrinth/Spigot page.
Configure limits directly in the Insights plugin configuration — InsightsSkyllia automatically scopes those limits to individual islands rather than the entire server.
Developer API
Build your own Skyllia addons using the public Java API.
Maven / Gradle dependency
repositories {
maven("https://repo.euphyllia.moe/repository/maven-public/")
}
dependencies {
compileOnly("fr.euphyllia.skyllia:api:3.x")
}
Core API classes
| Class | Description |
|---|---|
| SkylliaAPI | Main entry point. Get island by player or island ID. |
| Island | Represents an island. Provides access to size, members, warps, permissions, flags. |
| Players | Represents a player's island membership. Provides role, UUID. |
| IslandFlags | Read and write island flags programmatically. |
| PermissionRegistry | Register custom permissions that appear in /island permission. |
import fr.euphyllia.skyllia.api.SkylliaAPI; import fr.euphyllia.skyllia.api.skyblock.Island; import org.bukkit.entity.Player; // Get the island for a specific player Island island = SkylliaAPI.getIslandByPlayerId(player.getUniqueId()); if (island != null) { double size = island.getIslandSize(); player.sendMessage("Island size: " + size); }
Events
| Event | Fired when |
|---|---|
| SkyblockCreateEvent | An island is successfully created |
| SkyblockDeleteEvent | An island is deleted |
| SkyblockLoadEvent | An island is loaded from the database into cache |
| SkyblockChangeOwnerEvent | Island ownership is transferred |
| SkyblockChangeSizeEvent | Island size is modified |
| SkyblockChangeAccessEvent | Island is opened or closed to visitors |
| SkyblockChangePermissionEvent | A permission is changed on an island |
| SkyblockCreateWarpEvent | A warp is created on an island |
| SkyblockDeleteWarpEvent | A warp is deleted |
| PrepareSkyblockCreateEvent | Before island creation (cancellable) |
| PlayerTeleportIslandEvent | A player teleports to an island |
| PlayerChangeWorldSkyblockEvent | A player moves between Skyllia worlds |
PlaceholderAPI
Use Skyllia variables in scoreboards, tab lists, chat and more.
Requires PlaceholderAPI installed on your server.
| Placeholder | Returns |
|---|---|
| %skyllia_island_id% | The player's island UUID |
| %skyllia_island_size% | The radius of the player's island in blocks |
| %skyllia_island_max_members% | Maximum member count for the island |
| %skyllia_island_member_count% | Current number of members |
| %skyllia_island_role% | The player's role on their island (OWNER, MEMBER, etc.) |
| %skyllia_island_owner% | Name of the island owner |
| %skyllia_island_is_open% | true/false — whether the island accepts visitors |
| %skylliabank_balance% | (SkylliaBank) Island bank balance |
| %skylliaore_generator% | (SkylliaOre) Active generator name for the island |
Plugin Hooks
How Skyllia integrates with other plugins.
| Plugin | Hook | What it enables |
|---|---|---|
| WorldEdit | WorldEditUtils | Pastes island schematics using WorldEdit's schematic API |
| FastAsyncWorldEdit | FastAsyncWorldEditUtils | Same as WorldEdit but uses FAWE for faster async paste |
| EssentialsX | EssentialsSpawnHook | Integrates with EssentialsX's spawn system |
| Canvas (Folia) | CanvasHook | Optimized teleport implementation for Folia Canvas servers |
| Luminol (Folia) | LuminolHook | Optimized teleport implementation for Luminol servers |
| Vault | Via SkylliaBank | Economy integration for island bank accounts |
| PlaceholderAPI | SkylliaExpansion | Exposes island data as placeholders |
| Insights | Via InsightsSkyllia | Block/entity limits scoped to individual islands |
Skyllia automatically detects which compatible plugins are installed and activates the relevant hooks. No manual hook configuration is required.