promotional banner

NeroQuests

One guided path through the whole ecosystem — story missions, daily contracts, faction quests and space-race milestones that turn a pile of mods into a designed journey.
Back to Files

NeroQuests 0.2.0-beta.1 - Fabric 26.3

File nameneroquests-fabric-26.3-0.2.0-beta.1.jar
Uploader
NerolandNeroland
Uploaded
Sep 21, 2026
Downloads
28
Size
1.4 MB
Mod Loaders
Fabric
File ID
8942841
Type
B
Beta
Supported game versions
  • 26.3

Curse Maven Snippet

Fabric

modImplementation "curse.maven:neroquests-1635560:8942841"

Learn more about Curse Maven

What's new

Minecraft 26.3 support, plus the changes previously listed under Unreleased.

Added

  • neroquests:custom_event, the seventh objective type — a quest can now wait on another mod reporting that one of its tracked quantities crossed a threshold: a region's pollution, a colony's life support, a boss changing phase. The publisher fires a crossing on Neroland Core's ThresholdEvents bus and NeroQuests listens, so neither mod imports the other and both depend only on Core. This closes the last gap in the objective set: gate_open already covered your progress, and this covers the world's.
  • The objective matches on exactly what a crossing carries and nothing else — channel, event_scope (the crossing's scope key, named so it can never be read as the quest's own scope), direction (rising / falling / any), min_value / max_value and count.
  • Channels follow a <modid>:<channel> convention, and that convention is load-bearing. The namespace is how the objective works out whether the publishing mod is installed at all: a channel nobody publishes can never fire, so it is treated as missing content and degrades under missingModObjectivePolicy — skip or autocomplete — exactly like an unregistered item id or an unloaded dimension, instead of blocking the quest forever. A publisher that is installed but switched off (NeroColonies' thresholdEventsEnabled, Nerotech's pollutionEventThreshold) is deliberately not missing content: the objective waits, because an operator can turn it back on.
  • audience decides who a broadcast is credited to, and the default is the safe one. A crossing names a place or a system and never a person — Core's contract, for POPIA/GDPR reasons — so nothing in the event says whose quest should move. audience: world (the default) moves the quest's shared counter exactly once per crossing, however many players were online; audience: everyone is the explicit opt-in that credits every online player working on the quest. Without that split, one colony's good news would silently complete a personal quest for a player asleep on the other side of the world.
  • Shared counters move once per crossing even though the trigger fans out over every online player: each objective instance is claimed by the first pass that credits it, by identity.
  • A custom_event left on audience: world inside a scope: player quest has no shared counter to write and could never advance, so QuestDefinitions now drops that quest at load time with the reason named in /neroquests reload-check, rather than shipping a counter that never ticks. The check runs through a new ObjectiveSpec.unusableInScope(QuestScope) seam, so it is a general "this objective cannot work here" rule and not a special case for one type.
  • CoreEvents.onThreshold is now subscribed from QuestTriggers.init(), alongside the existing progression-gate subscription. Both of Core's buses are add-only — there is no way to remove a listener — so the only correct lifecycle is one subscription per JVM, which common init gives: nothing leaks across an integrated-server world switch and there is nothing to unsubscribe on server stop. Per-server state is dropped instead, by the existing server-instance check in serverTick, and the handler does nothing while there is no current server.
  • Three new quests in The Space Race, branching off First Colony and taking the chapter to 10 (27 across the whole spine): Breathing Room (nerocolonies:oxygen, scope: server), Full Larder (nerocolonies:food_stock, scope: server) and Settled Ground (nerocolonies:structures past its third building, scope: player with audience: everyone). They are the alloy_ambitions pattern applied to events: an optional branch that fills in when a colony mod is present and degrades quietly when it is not, so the spine still plays through on a Core-only server.
  • Quest-book line for the new type (gui.neroquests.objective.custom_event), showing the raw channel id — its meaning belongs to the publishing mod, and NeroQuests has no dependency on it to ask for a nicer name.

Documentation

  • wiki/Quest-Format.md gains a full custom_event section: the field table, the <modid>:<channel> convention, the broadcast-versus-player-scoped semantics, the degradation behaviour, and a table of the six channels that actually exist today across Nerotech, NeroColonies and NeroCreatures — what each scope key and value means, and what rising means on each (it is not a synonym for "good": rising is recovery on nerocolonies:oxygen and a worsening on nerotech:pollution).
  • wiki/Objectives.md documents the type in full alongside the other six; wiki/Story-Chapters.md covers the new branch; USING-CORE.md moves event.ThresholdEvents out of Deferred and into the consumed-API table.

Notes

  • No Core pin bump: ThresholdEvents shipped in Core 1.7.0 and NeroQuests already pins 1.9.0.
  • Core exposes no removeCrossingListener. That is fine for a once-per-JVM subscription, but it does mean a listener cannot be withdrawn — worth an upstream look if Core ever grows unloadable modules.
  • Runtime verification of the new objective needs a second mod to fire a crossing; it is not covered by the compile-verify pass.

Minecraft 26.3

  • Minecraft 26.3 as a new Stonecutter node on every loader — NeoForge 26.3.0.7-beta, Forge 26.3-66.0.2 and Fabric (fabric-api 0.161.0+26.3, NeoForm 26.3-1) — built alongside 26.1.2 and 26.2, so every release now ships nine loader × version jars.
  • VS Code run/debug configurations (.vscode/launch.json, .vscode/tasks.json) gain the three 26.3 cells; the "Build all" task now builds all nine.
  • CI (multiloader.yml, publish.yml) builds, attaches and publishes the 26.3 jars.
  • Requires Neroland Core 1.13.0 (was 1.9.0) — the first Core release with a 26.3 build. The loader range still derives from the pin ([${nerolandcore_version},2.0)).
  • JEI pins moved to the newest published builds on each Minecraft version: 29.40.0.101 (26.1.2), 30.35.0.223 (26.2) and 31.3.0.18 (26.3). Compile-time API only — JEI remains a soft dependency and the shipped jar gains no hard requirement.

26.3 port notes

  • 26.3 API differences are handled with Stonecutter blocks: PoseStack#rotate (was mulPose), the new Prediction argument on drop / placeItemBackInInventory, setPermanentlyInvulnerable, and similar renames.
  • Build: the shared common/ Java source is now preprocessed by Stonecutter for every non-active node (stonecutterProcessCommon), so common code can carry //? if >=26.3 { blocks, and common/src/main/resources-<mc> overlay folders are merged over the shared resources for matching nodes (mergeCommonResources). The active node still compiles the raw common/ folder.
  • Build plugins aligned with Neroland Core: ModDevGradle 2.0.147 (the older 2.0.141 cannot set up NeoForge 26.3), ForgeGradle 7.0.40, Stonecutter 0.9.8.

This mod has no additional files