Skip to content

Add geyser offerings: sacrifice items to vents for transmuted rewards - #178

Merged
tastybento merged 2 commits into
developfrom
geyser-offerings
Jul 22, 2026
Merged

Add geyser offerings: sacrifice items to vents for transmuted rewards#178
tastybento merged 2 commits into
developfrom
geyser-offerings

Conversation

@tastybento

Copy link
Copy Markdown
Member

What this does

Adds an optional mechanic on top of the sulfur vents: items thrown into the water around a vent are consumed as offerings (sizzle + smoke), and when the vent's vanilla geyser next erupts, the offerings are transmuted into rewards spewed out of the plume in a radial fountain.

How it works

  • A once-a-second task consumes floating items (60-tick grace period so freshly spewed rewards aren't eaten back) found near a vent cap — a 7×7 area scanned 4 blocks down, so items bobbing anywhere in the pool count.
  • Offerings are categorized into channels (gems, nether, mineral, forestry, husbandry) and bias the reward table towards what was fed: ores beget gems, wood begets living things.
  • Rewards are rolled from a weighted geyser-loot.yml table (item entries with amount ranges, plus console command entries with %player% substitution for the nearest player), one reward per item offered, capped by config.
  • The task watches fed vents for potent_sulfur_state to pass through erupting and pays out as the plume settles, so the vanilla eruption cannot fling the rewards away.
  • All sulfur API is reflective/string-based (compiles against Paper 1.21.11); the mechanic is inert on servers older than Minecraft 26.2 and mined-out vents forfeit their offerings.

Config

  • world.geyser-offerings.enabled (default true)
  • world.geyser-offerings.max-rewards (default 12)
  • geyser-loot.yml copied to the data folder on first run for server owners to edit

API

  • GeyserSacrificeEvent (cancellable) and GeyserTransmuteEvent for other addons

Testing

  • 34 new unit tests (loot entry parsing, bias roll math, channel categorizer, events, task guard paths); 411 total, all passing
  • Playtested on a Minecraft 26.2 server: offerings consume from anywhere in the pool and rewards pay out on eruption

Version bumped to 2.1.0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CZvWEiRd9SePSigryf11Bh

tastybento and others added 2 commits July 20, 2026 22:55
Items thrown into the water around a sulfur vent are consumed as
offerings and transmuted into rewards spewed out when the vent's
vanilla geyser next erupts. Rewards are rolled from a weighted
geyser-loot.yml table (GushBlock-style entries with channels and
command rewards) biased towards the channels of the sacrificed
materials: ores beget gems, wood begets living things.

A once-a-second task consumes floating items near a vent cap (7x7
area, 4 deep, so bobbing items anywhere in the pool count) and
watches fed vents for the potent_sulfur_state to pass through
erupting, paying out as the plume settles so the eruption cannot
fling the rewards away. All sulfur API is reflective/string-based
since the addon compiles against Paper 1.21.11; the mechanic is
inert on servers older than Minecraft 26.2.

Configurable under world.geyser-offerings (enabled, max-rewards).
New cancellable GeyserSacrificeEvent and GeyserTransmuteEvent for
other addons. Version bumped to 2.1.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CZvWEiRd9SePSigryf11Bh
- S2184: make COMMAND_RANGE_SQUARED a double multiplication
- S135: restructure consumeOfferings, watchVents (extracted checkVent)
  and spew (extracted launchReward) to drop extra break/continue
- S2259: return early from onLoad when settings fail to load instead
  of dereferencing a null settings object
- S5786: remove public modifier from new test classes

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CZvWEiRd9SePSigryf11Bh
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 3f36be6 into develop Jul 22, 2026
3 of 4 checks passed
@tastybento
tastybento deleted the geyser-offerings branch July 22, 2026 15:18
@tastybento tastybento mentioned this pull request Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant