Astral Realms Documentation Help

Configuration

plugins/AstralHomes/config.yml is loaded through AstralCore's Configurate-backed configuration manager directly into the MainConfiguration record — camelCase Java fields map to kebab-case YAML keys (e.g. restoreLocationOnJoinGroupsrestore-location-on-join-groups). Reload at runtime with /home reload (astralhomes.admin.reload); see Reloading below.

config.yml

Shipped defaults:

# Blacklist of disallowed home worlds blacklist: - spawn # Teleportation warmup time in seconds warmup: astralhomes.default: "5s" astralhomes.vip: "3s" astralhomes.mvp: "0s" # List of home limits per rank limits: astralhomes.default: 3 astralhomes.vip: 5 astralhomes.mvp: 10 # Permissions worlds worlds-permissions: world_nether: worlds.nether world_the_end: worlds.end restore-location-on-join-groups: - "construction" - "resource"

YAML key

Java field

Type

Description

blacklist

blacklist

List<String>

World names where /sethome is refused.

warmup

warmup

Map<String, Duration>

Permission node → teleport warmup duration.

limits

limits

Map<String, Integer>

Permission node → maximum number of homes.

worlds-permissions

worldsPermissions

Map<String, String>

World name → permission required to send a teleport request into that world.

restore-location-on-join-groups

restoreLocationOnJoinGroups

Set<String>

Server groups where a player's last in-world location is restored on join.

blacklist

Worlds a player cannot /sethome in. HomeService.set checks the player's current world name against this list before doing anything else (before the SetHomeEvent, before the home-limit check) and, if present, aborts and sends HOME_BLACKLISTED_WORLD — the home is neither created nor updated. It only gates setting a home; it does not stop a player from teleporting to an existing home located in a now-blacklisted world. Shipped default blocks the spawn world only. See Homes.

warmup

A permission → Duration map, parsed by AstralCore's DurationTypeSerializer/DurationParser (y, d, h, m, s, ms units, combinable — e.g. "1d 5h"). MainConfiguration.warmup(Player) walks the map entries and, for each permission the player holds, replaces the running value with the entry's duration only if it is strictly lower than the current running value — the running value starts at a hardcoded 3s. In practice this means:

  • A player matching no configured permission gets the 3s hardcoded fallback.

  • astralhomes.mvp: 0s always wins when held, since 0s is lower than everything else.

  • A configured duration greater than the 3s fallback can never be applied on its own. With the shipped defaults, a player holding only astralhomes.default (5s) is not granted 5s — the loop only lowers the running value, so it never rises off the 3s starting point, and the result is identical to holding no warmup permission at all. This is a real quirk of MainConfiguration.warmup(), not a documentation simplification — raising a permission's warmup above 3 seconds by editing this map alone has no effect unless every lower entry is also removed or raised.

The resolved duration is applied by the shared WarmupService (action-bar progress display, cancelled on movement/disconnect) before /home teleports, /warp, /spawn, and /back. Accepted /tpa//tpahere requests teleport immediately and are not subject to this warmup — see Teleport Requests.

limits

A permission → int map. MainConfiguration.limit(Player) walks the map and keeps the highest limit among the permissions the player holds, falling back to 1 if none match. HomeService.set enforces this only when creating a new home (renaming/overwriting an existing home by name is never blocked by the limit) — once data.homes().size() reaches the resolved limit, the player is sent HOME_LIMIT_REACHED with the %limit% placeholder and the home is not created.

worlds-permissions

World name → permission node. Used exclusively by TeleportationRequestService to gate /tpa and /tpahere: when a request's target player is standing in a world present in this map, the sending player must hold the mapped permission, or the request is rejected with WORLD_PROTECTED (checked both for local same-server targets in doPreFlightCheck and for cross-server targets, where the recipient's server reports its world's permission back over the messaging exchange). Shipped defaults protect world_nether (worlds.nether) and world_the_end (worlds.end). See Teleport Requests.

restore-location-on-join-groups

Server groups (AstralPaperAPI.serverInformation().group()) in which HomeSnapshotAdapter.apply restores a player's last known location on join, provided the player wasn't already teleported on join by the teleportation service. The stored location itself is keyed per specific server (serverId:world, set by HomeSnapshotAdapter.unload on quit via HomePlayerData.setLastServerLocation), not per group — so a match requires rejoining that exact server instance in that exact world, with restoration only enabled at all when that server's group is listed here. The restore only happens if the stored location passes LocationUtils.isSafeLocation. Shipped default enables this for the construction and resource groups.

database.properties

Copied into plugins/AstralHomes/ on first boot (and on every /home reload, though an existing file is never overwritten) for DatabaseService to open a HikariCP-pooled MariaDB connection — see the AstralCore database docs for the full key reference. AstralHomes only stores one thing in this database: warps (homes, last-locations, and the TPA toggle are AstralSync-replicated per-player data, not SQL rows — see Overview). The warps table is created automatically from the bundled schema.sql on first connection:

Column

Type

Notes

id

CHAR(36)

Primary key, defaults to UUID().

name

VARCHAR(16)

Unique warp name.

server_group

TEXT

Server group the warp was set on.

x, y, z

DOUBLE

Location coordinates.

yaw, pitch

FLOAT

Look direction.

world

TEXT

World name.

created_at, updated_at

TIMESTAMP

Auto-managed.

messages.yml

Every user-facing string the plugin sends is a case of the HomesMessages enum, loaded from messages.yml (one YAML key per enum constant, kebab-cased — e.g. HOME_LIMIT_REACHEDhome-limit-reached). Edit the value for each key to customize the text; see Placeholders for the %...% tokens each message supports.

Reloading

/home reload (requires astralhomes.admin.reload) re-runs AstralHomes.loadConfiguration(), which re-copies database.properties (no-op if it already exists), reloads config.yml into MainConfiguration, reloads messages.yml into HomesMessages, and reloads the menu definitions. It does not reconnect the database, messaging, or cache services — those are only established during onEnable, so changes to database.properties, RabbitMQ, or Redis credentials require a full restart. See Commands.

Last modified: 25 July 2026