Configuration
AstralFarmPass reads its configuration from plugins/AstralFarmPass/ on enable and again on /pass reload.
File layout
File | Purpose |
|---|---|
| Time zone, generation seed, target rounding, premium permission and the quest categories. |
| Every string the plugin sends directly ( |
| The reward ladder — see Rewards. |
| One file per possible quest — see Quests & Goals. |
| AstralCore menu blueprints. |
config.yml
Key | Type | Description |
|---|---|---|
| String ( | Zone every period boundary is computed in — the start of a month, of a daily batch, of a weekly batch. Must be identical on every server. |
| String | Mixed into every derived seed and quest id. Changing it re-rolls the current month for everybody. Must be identical on every server. |
| String | Permission required to claim the premium track. Leave it empty/absent to open the premium track to everyone. |
| int | Rolled quest targets are rounded down to a multiple of this, to keep big numbers readable. |
|
| One entry per quest type ( |
categories.<TYPE>
Key | Type | Description |
|---|---|---|
| int | Points credited when a quest of this type is completed. |
| Duration ( | Days between two batches, counted from the 1st of the month. |
|
| How long a batch stays available. |
| int | Quests dealt per batch. |
interval and lifetime accept whole days only — the pattern is (\d+)\s*d and the value must be at least 1. Anything else (12h, 0d, 1w) throws at load time with the offending value in the message. lifetime: "season" is the only non-day form accepted.
See Seasons & Generation for how these values turn into a month's schedule.
messages.yml
Backed by the FarmPassMessages enum; every value is a MiniMessage string.
Key | Placeholders | Sent when |
|---|---|---|
|
| A quest reaches its target — |
| — |
|
|
| The player is short of the tier's |
| — | The premium track was claimed without |
| — | A month rollover happened while the player was online; their pass has just been reset. |
|
|
|
|
| A |
|
| Same, to the targeted player. |
| — | Declared in the enum but never sent — generation always produces a season for the current month. |
blueprints/
BlueprintService.load() resolves plugins/AstralFarmPass/blueprints/, and — only if that folder does not exist yet — writes out every blueprints/ entry bundled in the JAR, preserving the daily/ and weekly/ sub-folders. Once the folder exists nothing is ever copied again, so edited or deleted quests stay edited or deleted.
The folder is then walked recursively: every .yml/.yaml file below it is one QuestBlueprint, keyed by its id field. The README.md shipped alongside them is ignored. A file that fails to deserialize logs an error and is skipped — the others still load. Two blueprints sharing an id are a configuration error: the second one seen is skipped with a Duplicate quest blueprint ID found warning, and which of the two that is is not defined (files come back unordered), so ids must be unique.
See Quests & Goals for the file format.
rewards.yml and menus/
rewards.yml is loaded into RewardsConfiguration — see Rewards.
menus/ is an ordinary AstralCore MenuContainer — it loads every menu blueprint it finds under plugins/AstralFarmPass/menus/ and registers it globally. Unlike blueprints/, nothing is copied out of the JAR: the bundled main.yml (farmpass-main) and pass-weekly_quest.yml (pass-weekly_quest) are reference copies you have to place yourself, and an empty folder logs No menu blueprint was loaded from … and leaves /pass with nothing to open.
Both read the plugin's placeholders through layout providers: farmpass-main draws three reward rows off %farmpass_rewards% plus the daily and weekly quest rows, and pass-weekly_quest lists the month's weekly quests — locked ones included — off %farmpass_all_WEEKLY%.
Reloading
/pass reload calls AstralFarmPass.loadConfiguration(), which re-reads config.yml, rewards.yml and messages.yml, re-loads the blueprint folder and the menus. The quest service is not restarted: its rollover task survives, and re-generating the current month from unchanged inputs produces the same quests, so a reload never wipes anybody's progress.
Editing anything that feeds generation — the salt, the categories, a blueprint's goal-value, type or availability window — changes the fingerprint and re-rolls the running month. Check the Loaded N quest blueprints (fingerprint: …) line on every server after such a change.