Configuration
AstralFarmPass reads its configuration from plugins/AstralFarmPass/ on startup and again on /pass reload.
File layout
File | Purpose |
|---|---|
| Node role — is this instance the season/quest master? |
| The three player-facing messages the plugin sends directly. |
| HikariCP/JDBC connection to the MySQL/MariaDB |
| The |
| Point-threshold rewards granted via |
| Blueprint folder — every YAML file here is scanned for quest blueprints — see Quests & Goals. |
| The |
config.yml
Field | Type | Description |
|---|---|---|
| boolean | Whether this node is the master for seasons and quest generation. |
Unlike every other file in this list, AstralFarmPass does not ship a bundled default config.yml — there is no such resource in the plugin JAR. configurationManager().load("config.yml", ...) still tries to copy one in if the file is missing from the data folder, so on a genuinely first-time install (no pre-existing config.yml) it throws Default configuration resource not found: config.yml and the plugin fails to enable. You must create config.yml with a master key yourself before starting the server the first time.
Only one node in the network should run with master: true. The master is the node responsible for creating and rotating seasons and generating their quests: SeasonRotationService only calls createNewSeason() (or re-rolls one via /pass reroll) when configuration().master() is true — every other node just waits and logs that it is "waiting for master to create/rotate" the season.
Non-master nodes stay in sync by listening for the FarmpassUpdatedPacket broadcast the master sends over messaging after every season creation or reroll: SeasonService re-reads the current season from the database and updates its local cache whenever that packet arrives (and ignores it entirely if it is itself the master, to avoid a redundant reload).
messages.yml
Backed by the FarmPassMessages enum — three keys, each a MiniMessage string.
Key | Placeholders | Sent when |
|---|---|---|
| — | A player runs |
|
| A quest goal is finished; |
| — |
|
database.properties
A standard HikariCP properties file — AstralFarmPass reuses AstralCore's DatabaseService connection model. It is copied to disk on first enable via copyResource and read from the plugin's data folder directly (not through Configurate).
On connect, DatabaseService executes the bundled schema.sql, creating the tables below if they do not already exist:
Table | Purpose |
|---|---|
| One row per season — |
| One row per generated quest — |
categories.yml and rewards.yml
categories.yml is loaded into CategoriesConfiguration and rewards.yml into RewardsConfiguration. Both are covered in full on their own pages:
Seasons & Categories — the
daily/weeklycategory definitions and theirregenerationrules that driveSeasonRotationService's quest generation.Rewards — the point-threshold rewards granted from
rewards.yml.
quests/ blueprint folder
BlueprintService.load() scans every YAML file under the quests/ folder (not just simple.yml) with configurationManager().loadFolder(...), deserialising each one as a BlueprintConfiguration whose blueprints map (keyed by blueprint id) is flattened into a single in-memory registry of QuestBlueprint entries. You can split blueprints across as many files as you like — file name and file count are not significant, only the blueprints.<id> keys inside each file.
See Quests & Goals for the full blueprint field reference and the catalogue of goal.type values.
menus/main.yml
Every file under menus/ is an AstralCore menu blueprint (see the core menu system docs). AstralFarmPass ships one: farmpass-main, the menu /pass opens via MenuService.openMainMenu.
Field | Description |
|---|---|
|
|
|
|
Reloading
/pass reload (permission farmpass.reload) calls AstralFarmPass.loadConfiguration() directly, which re-copies database.properties, reloads messages.yml, re-reads config.yml, rewards.yml, and categories.yml, then re-runs CategoriesService.load(), BlueprintService.load(), and MenuService.load() — so quest blueprints, categories, rewards, and menus all pick up file changes without a restart. It does not reconnect the database or messaging connections, and does not affect the currently active season. See Commands.