Overview
AstralFarmPass is the seasonal battle-pass plugin for AstralRealms. A season is a calendar month: every month deals a fresh set of daily and weekly quests, players advance them through normal gameplay to earn points, and spend those points unlocking the free and premium tiers of the reward ladder from the /pass menu.
Quests are generated deterministically from the month, a configured salt and the loaded blueprint files — no database, no master node, no coordination. Every server derives the same quests, with the same targets and the same identifiers. Only what a player did with those quests is stored, and that travels through AstralSync.
Core concepts
Concept | Summary |
|---|---|
Season | The current calendar month in the configured time zone, identified by its |
Quest blueprint | One |
Quest instance | A blueprint dealt to a slot of the current month: a deterministic id, a rolled target, and an |
Quest type |
|
Points | Per-player, per-season currency ( |
Reward tier | An entry in |
Architecture at a glance
How the pieces fit together
BlueprintServiceloads every YAML file underblueprints/(recursively) into a sorted registry ofQuestBlueprints and prints a fingerprint — a hash of everything that influences generation. Two servers that don't print the same fingerprint will not deal the same quests. See Quests & Goals.QuestServicegenerates the whole month up-front fromSeeds: the blueprint pool of each quest type is shuffled once for the month and dealt period by period, and each slot's target is rolled inside the blueprint'sgoal-valuerange. Nothing is persisted — the same inputs re-derive the same output on every server and after every restart. See Seasons & Generation.EventServiceregisters a listener for every entry ofEventAdapterRegistry(20 events), turns each one into aQuestGoalContext, and runs it against every active quest. A goal that recognises the event returns the progress it is worth; when a quest reaches its target, the type'srewardpoints are credited andquest-completedis sent. See Quests & Goals.MultiKillServicebatches same-tick kills per player and raisesPlayerMultiKillEvent, which is what lets a quest ask for several mobs killed in a single swing.rewards.ymldefines the point-gated ladder; the/passmenu claims a tier with theclaim-farmpass-rewardaction. See Rewards.FarmPassSnapshotAdapterpersists and cross-server syncsFarmPassPlayerDatathrough AstralSync, stamping the season it was saved under so a player who was offline over a rollover is reset on join.
Requirements
Dependency | Required | Notes |
|---|---|---|
Paper 1.21+ | Yes |
|
AstralCore | Yes | Plugin bootstrap ( |
AstralVote | Yes |
|
AstralScrolls | Yes |
|
AstralTower-Bridge | Yes |
|
AstralShop | Yes |
|
AstralSync | Runtime | Not in |
There is no database and no messaging channel — both were removed once generation became deterministic. Nothing about a season is written anywhere.
Registered surfaces
Everything AstralFarmPass#onEnable registers:
Surface | Name | Notes |
|---|---|---|
Action | Claims one track of one reward tier. Registered on the plugin's own registry ( | |
Command |
| Opens the main menu; |
Placeholder namespace |
|
|
Sync adapter |
|
|
Menus |
| Loaded from |
Listeners | one per | Registered at |
Listener |
| Batches same-tick kills and fires |
See Commands, Placeholders and Developer API for the detail on each.
Cross-server model
Every node generates the same season independently. What must match across the network is the generation input: time-zone, seed-salt, the categories block and the blueprint files — the fingerprint logged at startup is there to check exactly that. Player progress, points and claimed rewards are the only things that travel, through AstralSync's replication of FarmPassPlayerData.
Further reading
Configuration —
config.yml,messages.ymland the file layout.Commands —
/passand thepointssubcommands.Quests & Goals — blueprint format and the catalogue of 24 goal types.
Seasons & Generation — how a month's quests are derived, and what resets when.
Rewards —
rewards.ymlformat and the claim flow.Placeholders —
%farmpass_…%and the menu parameter namespaces.Developer API — services, the goal framework, the event and player data.