pack: v0.37.0 — village supply/demand + Structory structure mods #75

Merged
Matt merged 1 commits from feature/v0.37.0-villages-and-structures into main 2026-06-07 16:27:53 +00:00
Owner

Summary

Pre-wipe consolidation. After this merges, the worldgen mod set is locked in and the seed pick is unblocked.

bnstoolkit 0.5.0 — village supply/demand

Anti-farm system for spur-paying villager trades. Per-tile (64×64 block) demand pools, lazy refresh, ~150 spurs/hour cap per saturated tile. Kills the 50-librarian-hall exploit; players who want more income must spread halls across distant tiles or diversify professions.

Design details:

  • World partitioned into 64×64 tiles by integer division of villager position. No POI lookup, no bell dependency.
  • Each tile has server.persistentData.bnsVillageDemand[dim:tileX:tileZ] storing {item_id: remaining} + lastUpdated.
  • Per-item caps in VillageDemand.java: paper=20, wheat=25, rotten flesh=15, iron=6, diamond=1, etc.
  • Refresh: full cap restored over 1 hour real time, computed lazily on each query — no scheduled tick.
  • When pool is saturated at offer-build time, the trade comes back with uses=maxUses (vanilla "out of stock" UI).
  • Hook: MerchantOffer.increaseUses() override via subclass. Zero mixins.
  • Wandering trader: same tracking, uses whatever tile he wandered into.
  • Perf: microseconds per trade. Idle servers do zero work.

New worldgen mods (NeoForge 1.21.1)

  • Structory 1.3.16 — 15 thematic ruins: chapels, graveyards, fire watchtowers, abandoned camps, boats
  • Structory: Towers 1.0.16 — 21 mid/rare-tier towers: lighthouses, engineer towers, ocean pillars, wizard towers

Fits the colonial/mercantile vibe; loot is in line with vanilla bastion/mansion (finite chest pool, naturally balanced by DR and the village supply system).

Verified live

Server restart at 16:26 UTC with bnstoolkit-0.5.0 + Structory + Structory: Towers:

  • Done (2.984s), port 25565 bound
  • Both Structory mods loaded
  • bnstoolkit trade rebalance log (rebalanced trades for profession ...) for every vanilla profession
  • Zero inner ItemListing ... threw warnings
  • No ModLoadingException

Test plan tomorrow

  • Find / spawn a librarian, do 20 paper trades → 21st returns vanilla "out of stock". Wait an hour real time, 21st works again.
  • Build 2 librarians in same tile, alternate: only ~20 paper trades total before both stocks lock.
  • Move 64+ blocks away (new tile), build 2 more librarians: each tile has its own 20-trade budget.
  • Explore and find a Structory ruin or fire watchtower — should feel atmospheric, not loot-piñata
  • Cross-test: existing /bns sell / /bns bounty / hub UI still work as before

🤖 Generated with Claude Code

## Summary Pre-wipe consolidation. After this merges, the worldgen mod set is locked in and the seed pick is unblocked. ### bnstoolkit 0.5.0 — village supply/demand Anti-farm system for spur-paying villager trades. Per-tile (64×64 block) demand pools, lazy refresh, ~150 spurs/hour cap per saturated tile. Kills the 50-librarian-hall exploit; players who want more income must spread halls across distant tiles or diversify professions. Design details: - World partitioned into 64×64 tiles by integer division of villager position. No POI lookup, no bell dependency. - Each tile has `server.persistentData.bnsVillageDemand[dim:tileX:tileZ]` storing `{item_id: remaining}` + `lastUpdated`. - Per-item caps in `VillageDemand.java`: paper=20, wheat=25, rotten flesh=15, iron=6, diamond=1, etc. - Refresh: full cap restored over 1 hour real time, computed lazily on each query — no scheduled tick. - When pool is saturated at offer-build time, the trade comes back with `uses=maxUses` (vanilla "out of stock" UI). - Hook: `MerchantOffer.increaseUses()` override via subclass. Zero mixins. - Wandering trader: same tracking, uses whatever tile he wandered into. - Perf: microseconds per trade. Idle servers do zero work. ### New worldgen mods (NeoForge 1.21.1) - **Structory** 1.3.16 — 15 thematic ruins: chapels, graveyards, fire watchtowers, abandoned camps, boats - **Structory: Towers** 1.0.16 — 21 mid/rare-tier towers: lighthouses, engineer towers, ocean pillars, wizard towers Fits the colonial/mercantile vibe; loot is in line with vanilla bastion/mansion (finite chest pool, naturally balanced by DR and the village supply system). ### Verified live Server restart at 16:26 UTC with bnstoolkit-0.5.0 + Structory + Structory: Towers: - `Done (2.984s)`, port 25565 bound - Both Structory mods loaded - bnstoolkit trade rebalance log (rebalanced trades for profession ...) for every vanilla profession - Zero `inner ItemListing ... threw` warnings - No `ModLoadingException` ## Test plan tomorrow - [ ] Find / spawn a librarian, do 20 paper trades → 21st returns vanilla "out of stock". Wait an hour real time, 21st works again. - [ ] Build 2 librarians in same tile, alternate: only ~20 paper trades total before both stocks lock. - [ ] Move 64+ blocks away (new tile), build 2 more librarians: each tile has its own 20-trade budget. - [ ] Explore and find a Structory ruin or fire watchtower — should feel atmospheric, not loot-piñata - [ ] Cross-test: existing `/bns sell` / `/bns bounty` / hub UI still work as before 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Matt added 1 commit 2026-06-07 16:27:52 +00:00
Pre-wipe consolidation. After this, the seed pick is unblocked.

bnstoolkit 0.4.1 → 0.5.0 — village supply/demand throttle
- 64×64 block tiles each have a finite demand pool per cost item
- Spur-paying trades decrement their tile's pool; pool refills over 1
  hour real-time (lazy refresh, no scheduled tick, no perf overhead)
- Saturated trades show vanilla "out of stock" in the UI until the
  villager restocks AND the tile's demand has refilled
- ~150 spurs/hour cap per tile in a fully-stocked multi-profession hall
- 50-librarian-hall exploit dies; players who want more income must
  build halls in distant tiles (overworld logistics) OR diversify
  professions (each item type has its own pool)
- Anyone with /bns admin can inspect a tile's state — full picture
  lives in server.persistentData.bnsVillageDemand

New worldgen mods (Modrinth — both NeoForge 1.21.1):
- Structory 1.3.16 — 15 small thematic ruins: chapels, graveyards,
  fire-watch towers, abandoned camps, boats, outcast huts
- Structory: Towers 1.0.16 — 21 mid/rare-tier towers: lighthouses,
  engineer's tower, ocean pillars, wizard towers, end towers

Density assessment (per earlier audit): pack goes from ~52 to ~88
generating structure types. Towers are mostly rare-tier (40-80 chunk
spacing) so they read as discoveries, not clutter. Loot is in line
with vanilla bastion/mansion tier — finite chest pool that the
diminishing-returns sell shop and village supply system already
balance against.

Pack mods: 102 → 104.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matt merged commit 8d9c04dc05 into main 2026-06-07 16:27:53 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: minecraft/brass-and-sigil#75