Overview
AstralSkyblock is the network skyblock plugin for AstralRealms. Every island is an isolated SlimeWorld that is created from a blueprint, persisted to MySQL, and loaded on demand on whichever island server has room for it — players never need to be on the "home" server of their island to play on it. Island data (roles, permissions, members, co-ops, settings, upgrades) is cached in Redis and kept consistent across every server over RabbitMQ, and almost the entire player experience is driven through AstralCore menus and dialogs rather than commands.
Highlights
Area | Summary |
|---|---|
Islands | One |
Roles & permissions | Per-island |
Settings | 18 togglable |
Members, co-ops & invitations |
|
Upgrades | Priced, levelled |
Generators | Cobblestone/basalt generators re-roll into a configurable block table ( |
Multi-server hosting |
|
GUI-driven UX | Island management (members, roles, permissions, settings, co-ops, bans, upgrades) runs through AstralCore menus/dialogs, not subcommands. |
Requirements
Dependency | Required | Notes |
|---|---|---|
Paper | Yes |
|
AstralCore | Yes | Declared in |
AdvancedSlimePaper (ASP) | Yes | Island worlds are |
MySQL | Yes | Two independent MySQL surfaces: |
Redis | Yes |
|
RabbitMQ | Yes |
|
Island servers vs lobby servers
AstralSkyblock runs on every server that depends on it, but only some servers actually host island worlds. SkyblockConfiguration.islandsGroup (islands-group in config.yml) names the server group that hosts islands; SkyblockConfiguration#isIslandServer() compares it against the running server's own group (AstralPaperAPI.serverInformation().group()). AstralSkyblock#onEnable uses that check to decide what to register:
Island-only listeners —
IslandSettingsListener(applies/enforcesIslandSettingson the world) andIslandPermissionsListener(enforcesIslandPermissions on block/entity/interact events) register only whenisIslandServer()is true.Generators —
GeneratorListenerregisters only whenconfiguration.generators().enabled()is true (independent of the island-server check, but generator blocks only exist in island worlds).The idle-world sweep and per-server island-count heartbeat (
WorldService,ServerService) likewise only run on island servers, since only they hold loaded island worlds to sweep or report.
Every server — island or lobby — still runs PlayerConnectionListener, IslandListener, the base commands, and the placeholder/service layer, so /is go and menu-driven navigation work from anywhere on the network.
Core concepts
Concept | What it is |
|---|---|
Island | The persisted unit of gameplay: a |
IslandBlueprint | A named schematic template ( |
IslandRole / IslandPermission | Per-island governance: roles carry a |
IslandSettings | Per-island environment flags ( |
IslandMember / IslandCoop / IslandInvitation | Membership is owner + role-bearing members; co-op grants a trusted non-member a role's permissions without membership; invitations are time-boxed (15 minutes) offers of either kind. |
IslandUpgrade | A priced, levelled track ( |
Generators & block values |
|
Command surface at a glance
The base alias is skyblock|is|island. Subcommands are split across four ACF command classes that all share the alias:
Subcommand | Class | Purpose |
|---|---|---|
(default) |
| Opens the |
|
| Island lifecycle and teleport; |
|
| Invitation lifecycle for both member and co-op invites. |
|
| Membership and role management. |
|
| Removes a co-op grant. |
See Commands for full syntax, permissions and completions.
Services
AstralSkyblock#onEnable constructs and exposes the following services (accessible as AstralSkyblock.get().<name>()):
Getter | Service | Responsibility |
|---|---|---|
|
| Loads |
|
| ASP |
|
| Island CRUD, cache warmup, cross-server spawn resolution, settings flush. |
|
| Records last-seen player rows. |
|
| Role CRUD and permission seeding from |
|
| Membership CRUD, cross-server member sync. |
|
| Co-op grant CRUD, cross-server sync. |
|
| Invitation lifecycle, periodic pruning of expired invites. |
|
| Emptiest-island-server lookup, per-island host-server mapping. |
|
| Loads |
|
| Loads |
|
| Loads and opens the |
|
| Loads dialog-driven prompts (e.g. name entry, confirmations). |
Eleven AstralSkyblock actions back the settings/permissions/member/co-op menus and are registered directly on the plugin: toggle-role-permission, update-role-permissions, toggle-island-setting, update-island-settings, invite-member, kick-member, promote-member, demote-member, transfer-ownership, coop-player, uncoop-player.
GUI-driven UX
Beyond the handful of ACF commands above, island management is a menu/dialog flow: island-main links out to island-members, island-roles, island-permissions, island-settings, island-coops, island-bans, island-creation, island-member-manage, island-member-role, and confirmation menus (island-confirm-kick, island-confirm-leave, island-confirm-disband, island-confirm-ban) under resources/menus/, each wired up with [open-menu]/ action-list clicks rather than typed arguments. This is why most of the IslandPermission catalogue (role edits, settings toggles, warp/ban management, …) has no corresponding subcommand — it's exclusively menu-driven.
Multi-server hosting model
Because an island can be visited from any lobby server, AstralSkyblock resolves where to spawn a player before teleporting them:
ServerService#findHostServerchecks Redis for a live host-server mapping for the island.If none exists,
ServerService#findEmptiestServerpicks the island server with the fewest loaded islands (from a self-reported heartbeat each island server publishes every 300 ticks), filtered to servers under theirmaximum-islandscap.If the emptiest server is the current server, the world is loaded locally; otherwise an
IslandLoadRequestPacketis sent over RabbitMQ and awaited before aNetworkLocationis resolved.SkyblockCommand#onGo(and any other spawn path throughIslandService#spawnIsland) hands the resolvedNetworkLocationto AstralCore'sTeleportationService, which performs the actual cross-server teleport.
WorldService also runs an idle-unload sweep on island servers (default 5 minutes of emptiness, configurable via world-idle-unload-seconds, negative to disable) so unattended islands free their server's island slot.
See also
Configuration —
config.yml,loader.yml,roles.yml,block-values.ymland the rest of the shipped configuration surface.Commands — full subcommand reference.
Islands — blueprints, creation, upgrades, generators.
Roles, Permissions & Settings — the full
IslandPermissionandIslandSettingscatalogues.Members, Co-ops & Invitations — membership, co-op and invitation flows in detail.
Developer API — events, actions, and service access for other plugins.
Placeholders —
%skyblock_*%and per-model placeholder namespaces.