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.
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
| Component | Requirement | Notes |
|---|---|---|
| Server | Folia 1.20.6+ or Paper 1.20.6+ | Folia recommended for best performance |
| Java | 21+ | Required |
| RAM | 4 GB minimum | 8 GB+ recommended for production |
| Database | SQLite (built-in), MariaDB 10.5+, or PostgreSQL 12+ | PostgreSQL preferred for large servers |
| WorldEdit / FAWE | Optional | Required for schematic-based island creation |
| Vault | Optional | Required by SkylliaBank |
| PlaceholderAPI | Optional | Enables all %skyllia_*% placeholders |
| LuckPerms | Optional | Recommended for fine-grained server permissions |
Official Addons Overview
| Addon | Description | Notable dependency |
|---|---|---|
| SkylliaBank | Shared island bank with Vault economy & leaderboard | Vault |
| SkylliaOre | Configurable weighted ore generator | β |
| SkylliaChallenge | YAML-defined challenges with GUI, cooldowns & rewards | β |
| SkylliaChat | Per-island private chat channel | β |
| SkylliaChest | Shared island chest accessible from anywhere (beta) | β |
| SkylliaInsights | Block/entity limits per island via Insights | Insights 6.19.2+ |
| SkylliaExtra | Custom island name & description with PAPI | β |
| SkylliaBackup | ZIP backups of island region files with HTTP upload | β |
| SkylliaIslandValue | Island score/level from block scanning & leaderboard | β |
Installation
Get Skyllia running on your server in under 5 minutes.
Step-by-step
Download Skyllia
Grab the latest Skyllia.jar from Modrinth or GitHub Releases.
Place in plugins/
Copy the jar into your server's plugins/ directory. If you use WorldEdit or FAWE, make sure it is already present.
First start
Start your server once. Skyllia generates its config files under plugins/Skyllia/config/.
Configure
Edit config.toml, islands.toml, worlds.toml and database.toml as needed. See each config section in the sidebar for reference.
Restart & play
Restart the server. Players can now run /island create to get started.
Optional Plugins
| Plugin | Purpose | Required by |
|---|---|---|
| WorldEdit | Schematic-based island creation | Core (optional) |
| FastAsyncWorldEdit | Faster async schematic paste | Core (optional) |
| Vault | Economy abstraction | SkylliaBank |
| PlaceholderAPI | Placeholder expansion | All addons (optional) |
| LuckPerms | Server-level permissions | Recommended |
| Insights 6.19.2+ | Block & entity limits | SkylliaInsights |
| Oraxen / Nexo | Custom block support | SkylliaOre, 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.
Quick Start
The minimum viable configuration to get a working Skyblock server.
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.
# 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
# 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
General Settings
File: plugins/Skyllia/config/config.toml
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
Island Types
File: plugins/Skyllia/config/islands.toml
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
World Configuration
File: plugins/Skyllia/config/worlds.toml
# 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.
Database Configuration
File: plugins/Skyllia/config/database.toml
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 Settings
File: plugins/Skyllia/config/players.toml
[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.
Schematics
File: plugins/Skyllia/config/schematics.toml
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
| Key | Description |
|---|---|
| schematic | Path to the .schem file, relative to the server root or absolute |
| height | Y coordinate where the schematic's origin will be placed |
| ignore-air-blocks | If true, air blocks in the schematic are skipped (preserves existing terrain) |
| copy-entities | If true, entities embedded in the schematic (animals, etc.) are also spawned |
| plugin | WorldEdit, 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.
Roles System
Skyllia has 6 built-in roles with a strict hierarchy.
| Role | Description |
|---|---|
| OWNER | Full control. Created automatically when an island is created. Cannot be demoted by anyone. |
| CO_OWNER | Near-owner access. Can manage most settings except delwarp (off by default) and permission/trust management. |
| MODERATOR | Can ban, kick, expel visitors, and change biomes. Cannot invite, promote/demote, or manage permissions. |
| MEMBER | Can build, interact, and use warps. Cannot manage the island. |
| VISITOR | Default role for players on someone else's island. All actions off by default. |
| BAN | Banned 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 Permissions
File: plugins/Skyllia/config/permissions-v2.toml
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 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:decor.hanging.place | Placing item frames, paintings, etc. |
| skyllia:decor.hanging.break | Breaking item frames, paintings, etc. |
| skyllia:player.teleport | Teleporting to the island (home / warp) |
| skyllia:command.island.access | Toggle the island open/closed to visitors |
| skyllia:command.island.ban | Ban players from the island |
| skyllia:command.island.unban | Unban players |
| skyllia:command.island.kick | Kick members from the island |
| skyllia:command.island.expel | Teleport a visitor off the island |
| skyllia:command.island.invite | Invite new players |
| skyllia:command.island.promote | Promote a member |
| skyllia:command.island.demote | Demote a member |
| skyllia:command.island.permission | Manage island permissions in-game |
| skyllia:command.island.manage_trust | Grant/revoke temporary trust |
| skyllia:command.island.set_home | Set the island home point |
| skyllia:command.island.set_warp | Create a named warp point |
| skyllia:command.island.delwarp | Delete a warp point |
| skyllia:command.island.warp | Use warp points |
| skyllia:command.island.visit.bypass | Visit private islands without needing access |
| skyllia:command.island.set_biome | Change the island biome |
| skyllia:command.island.gamerule | Change per-island game rules (flags) |
Default permission matrix
| Permission | OWNER | CO_OWNER | MODERATOR | MEMBER | VISITOR | BAN |
|---|---|---|---|---|---|---|
| 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 Flags
File: plugins/Skyllia/config/flags.toml
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 key | What it controls | Default |
|---|---|---|
| skyllia:island.allow.fire | Fire ignition (flint & steel, lava, lightning strikes) | false |
| skyllia:island.allow.explosions | Block & entity explosion damage | false |
| skyllia:island.allow.fluids | Water/lava flow between blocks | true |
| skyllia:island.allow.pistons | Piston extend/retract | true |
| skyllia:island.allow.mob-grief | Generic mob griefing (fallback) | false |
| skyllia:island.allow.creeper-grief | Creeper explosions destroying blocks | false |
| skyllia:island.allow.enderman-grief | Endermen picking up blocks | false |
| skyllia:island.allow.ghast-grief | Ghast fireball block destruction | false |
| skyllia:island.allow.tnt-grief | TNT & explosive minecart block damage | false |
| skyllia:island.allow.wither-grief | Wither explosion block damage | false |
| skyllia:island.allow.wither-skull-grief | Wither skull block damage | false |
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
skyllia:command.island.gamerule permission.Player Commands
All island commands use the /island prefix (alias: /is).
Island Lifecycle
Visiting
Members
<owner>.Island Settings
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, leaderboard, and island economy mode.
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
[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 money, /is bal, /is balance./is bank baltop.Admin Commands
skyllia.bank.admin.Island Permission Nodes
| Permission Node | What it controls |
|---|---|
| skylliabank:command.bank.deposit | Whether a member can deposit into the island bank |
| skylliabank:command.bank.withdraw | Whether a member can withdraw from the island bank |
PlaceholderAPI
Identifier: skybank
| Placeholder | Returns |
|---|---|
| %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
Configurable weighted 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. 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
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
skylliaore.use. Note: there is a ~30 s cache delay before the change takes effect.PlaceholderAPI
Identifier: skyore
| Placeholder | Returns |
|---|---|
| %skyore_name% | Name of the active generator for the player's island |
SkylliaChallenge
Configurable challenge system with GUI browser, cooldowns, and rewards.
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
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
| Type | Syntax example | Description |
|---|---|---|
| ITEM | ITEM:WHEAT 64 | Player must have the item in their inventory. Supports nexo: / oraxen: prefixes. |
| BLOCKBREAK | BLOCKBREAK:STONE 100 | Player must break N blocks of that type on their island. |
| CRAFT | CRAFT:IRON_SWORD 10 | Player must craft N items. |
| KILL | KILL:ZOMBIE 20 | Player must kill N entities of that type. |
| CONSUME | CONSUME:COOKED_BEEF 30 | Player must eat/drink N items. |
| FISH | FISH:COD 10 | Player must fish N items of that type. |
| ENCHANTMENT | ENCHANTMENT:SHARPNESS 5 | Player must apply that enchantment N times. |
| POTION | POTION:SPEED 3 | Player must drink N potions of that type. |
| NEAR | NEAR:COW 3 | Player must have N entities of that type near them. |
| BANK | BANK: 1000 | Island bank must have at least N coins. Requires SkylliaBank. |
| ECO | ECO: 500 | Player's personal wallet must have at least N. Requires Vault. |
Reward types
| Type | Syntax example | Description |
|---|---|---|
| ITEM | ITEM:DIAMOND 3 | Give the player N items. Supports nexo: / oraxen: prefixes. |
| CMD | CMD:say Hello %player% | Execute a console command. %player% is replaced with the player's name. |
| BANK | BANK: 500 | Deposit 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
SkylliaChat
Per-island private chat channel.
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
Chat is toggled per session. When a player reconnects, island chat is off by default.
SkylliaChest
A shared chest accessible by all island members from anywhere. Beta
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
SkylliaChest is currently in beta. Data is stored as a serialised inventory in persistent data. Back up your data before updating.
SkylliaInsights
Block and entity limits per island using the Insights plugin.
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
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"
limit: type: "TILE" bypass-permission: "insights.bypass.limit.tile" name: "Tiles" limit: 256
Configuration reference
| Field | Description |
|---|---|
| type | TILE, GROUP, or PERMISSION |
| bypass-permission | Permission node to bypass this specific limit |
| settings.enabled-addons.whitelist | true = only apply inside listed addon regions |
| settings.enabled-addons.addons | List of addon names β use skyllia for Skyllia islands |
| settings.disallow-placement-outside-region | Prevents block placement outside any matching region |
SkylliaExtra
Custom island name & description with MiniMessage formatting and PlaceholderAPI support.
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
<gradient:red:blue>My Island).<PlayerName>'s Island).Using these commands also requires the matching island-level permission (set_name / set_description).
Admin Commands
skyllia.admin.setname.skyllia.admin.setdescription.PlaceholderAPI
Identifier: skylliaextra
| Placeholder | Returns |
|---|---|
| %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
ZIP-based backups of island region files with automatic rotation and optional HTTP upload.
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
- All Skyllia worlds for the island are retrieved.
- Region files covering the island footprint are collected from each world's
region/folder. - A ZIP archive is created:
<folder>/<islandId>/backup_<owner>_<trigger>_<timestamp>.zip - Backups beyond
max-per-islandare deleted (oldest first). - If an upload URL is configured, the ZIP is uploaded asynchronously via multipart HTTP POST.
Configuration
[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
skyllia.island.backup.skyllia.admins.commands.backup.SkylliaIslandValue
Island score & level calculated from block scanning, with leaderboard and PlaceholderAPI. Beta
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
- Every N seconds (default 300 s), online players' islands are retrieved.
- All chunks covered by the island are scanned block by block.
- Each block count is multiplied by its configured value β raw score.
- The level formula is applied β calculated level.
- Score and level are saved to Skyllia's PersistentData (
skylliaislandlevel:data).
Configuration
[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 niveau scan.PlaceholderAPI
Identifier: islandlevel
| Placeholder | Returns |
|---|---|
| %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 |
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")
}
<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
| Class | Description |
|---|---|
| SkylliaAPI | Main entry point. Get island by player UUID or island ID. Register custom permissions/flags. |
| Island | Represents an island. Access size, members, warps, permissions, flags, persistent data. |
| Players | Represents a player's island membership: role, UUID. |
| IslandFlags | Read and write island flags programmatically. |
| PermissionRegistry | Register 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
| Event | Fired when |
|---|---|
| IslandCreateEvent | A new island is created |
| IslandDeleteEvent | An island is deleted |
| IslandMemberJoinEvent | A player joins an island |
| IslandMemberLeaveEvent | A player leaves an island |
| IslandTeleportEvent | A player teleports to an island (home/warp/visit) |
| IslandPermissionChangeEvent | An island permission is changed |
| IslandFlagChangeEvent | An island flag is toggled |
PlaceholderAPI
Use Skyllia variables in scoreboards, tab lists, chat, and more. Requires PlaceholderAPI installed.
Core plugin placeholders
Identifier: skyllia
| Placeholder | Returns |
|---|---|
| %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
| Identifier | Addon | Key placeholders |
|---|---|---|
| skybank | SkylliaBank | %skybank_balance%, %skybank_balance_formatted%, %skybank_rank%, %skybank_top_<n>_*% |
| skyore | SkylliaOre | %skyore_name% |
| islandlevel | SkylliaIslandValue | %islandlevel_level%, %islandlevel_score%, %islandlevel_rank%, %islandlevel_top_<N>_*% |
| skylliaextra | SkylliaExtra | %skylliaextra_name%, %skylliaextra_name_raw%, %skylliaextra_description%, %skylliaextra_description_raw% |
Plugin Hooks
How Skyllia integrates with other plugins.
| Plugin | Hook class | 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 Essentials spawn system |
| Vault | VaultHook | Economy abstraction for SkylliaBank |
| PlaceholderAPI | SkylliaExpansion | Registers all %skyllia_*% placeholders |
| Insights | SkylliaInsights addon | Island-scoped block/entity limits |
| Oraxen / Nexo | HookManager (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.