Adventure Engine
An adventure opportunity shows up when you get near a structure. You accept it or you don't. If you take it, the site starts the objective (spawns, marks, planted items, whatever the template says). If you don't, it goes quiet for a while and you can come back later.
Y accept · H leave / abandon · hold G to expand the plaque
Accept only works when you are actually on the structure. Standing in the grass next to it just shows the preview. Creative mode draws the box if you need to see the bounds.
Ranks
Scout, Adventurer, Veteran, Champion, Legend. The site picks one when it first generates the offer. Higher rank means a longer timer, harder mobs, better loot table, and (for find / sacrifice) a different item list.
Pay is a loot table plus vanilla XP.
Objectives
Each offer has a primary. It can also roll a side. Built-in types: kill a leader, clear a pack, hold the site (optional waves), find a marked item, reclaim an item from a mob, reach a mark, break a marked block, rescue someone, protect a ward until the primary is done, sacrifice an item into lava / a cauldron / soul fire, or open containers on the site (chests, barrels, vaults, pots, chest minecarts).
Finish the primary and the same site might come back as revenge after the cooldown.
Sites in the jar
Outpost, desert pyramid, ruined portal, jungle temple, swamp hut, igloo, monument, mansion, ancient city, mineshaft, shipwreck, trail ruins, trial chambers, stronghold, fortress, bastion.
Adding your own
Content is datapack JSON. A target file says “this structure can offer work” and points at four polls: rank, quest, reward, revenge. Polls are weighted lists. Quest templates are the actual objective.
data/<your_namespace>/adventure_engine/
targets/ polls/rank/
ranks/ polls/quest/
quest_templates/ polls/reward/
polls/revenge/
Works as a normal datapack, as kubejs/data/..., or as files under config/adventure_engine/ (that last one overrides the jar). /adventure reload picks up the overlay.
Hook any structure id or structure tag, including other mods. Easiest start is copy a target from the jar and change the structure list + poll ids.
{
"target": { "type": "structure", "structures": ["minecraft:pillager_outpost"] },
"polls": {
"rank": "mypack:outpost_ranks",
"quest": "mypack:outpost_quests",
"reward": "adventure_engine:standard_rewards"
}
}
On quest poll entries, role is primary, side, or any. rank_min / rank_max use the rank order number: Scout=1, Adventurer=2, Veteran=3, Champion=4, Legend=5. Rank polls can also require distance from the box center (min_distance / max_distance).
item_bands on find and sacrifice use those same 1–5 keys. The game rolls one item from the list for that rank. If the key is missing it uses the next band down. Find puts a marked stack in a chest (or drops it glowing). Only that stack completes the find. Sacrifice does not plant anything; toss any item from the band.
Reuse adventure_engine:standard_rewards if you don't want to write loot. Vanilla XP is minecraft_xp on the rank file.
Commands
/adventure site — plaque for the site you are standing in/adventure site accept / leave/adventure reload — overlay (op)/adventure cooldown — delete the nearby site so it can roll again (op)/adventure cooldown all — this dimension (op)/adventure debug event — test event on you (op)
WIP Features
- World Events
- Adventure Bosses
- Adventure Modifiers
- Party System
- Procedural Campaign System Generator
- Structure Worldgen Rules

