Villager trade rebalance (new — unblocks task #30)
Subscribes to VillagerTradesEvent + WandererTradesEvent and swaps emerald cost/result on every existing listing for Numismatics coins (1..7 emeralds -> spurs, 8..63 -> bevels, 64+ -> cogs). Works with all vanilla + modded villager professions automatically.
Why in-tree instead of a third-party mod: the obvious Modrinth option (numismatics-villager-currency) requires NeoForge 21.1.230+ (we're on 21.1.228); the alternative (data-trades) needs per-trade JSON. Reusing the event hook is simpler and avoids a runtime upgrade.
Verified live
Server restart at 02:41 UTC with bnstoolkit-0.3.1.jar:
Done (3.400s) on port 25565
[bns/trades] rebalanced trades for profession ... logged 20+ times (every vanilla profession + modded ones)
## Summary
bnstoolkit jumps from M0 (empty scaffold) to feature-complete in one PR.
### Screens (FTB Library widgets — match FTB Quests / FTB Chunks visual style)
- **K** — Civic tier ladder: 13 rows, current tier highlighted, Upgrade button to next tier with cost + affordability check
- **J** — Bounty board: today's pool + active set, Accept/Cancel/TurnIn per state, slot-cap indicator
- **N** — Plot office: list + detail, Buy/Release with ownership colour-coding and tier-gated buy
- **H** — Bazaar shop: 9-cell item grid, quick-sell buttons (1/16/64) with DR-aware effective price preview
- **M** — Quest log: at-a-glance tier+balance summary, active bounties with progress bars, owned plots
### HUD overlay
Top-left tier name + spurs balance. Registered above the experience bar via `RegisterGuiLayersEvent`. 1Hz server push keeps it current.
### Network contract
- C2S: `RequestEconomySnapshot`, `RunBnsCommand` (whitelisted verb routing — same /bns commands the player can type)
- S2C: `TierStateUpdate`, `SellSnapshot`, `BountySnapshot`, `PlotSnapshot`
### Villager trade rebalance (new — unblocks task #30)
Subscribes to `VillagerTradesEvent` + `WandererTradesEvent` and swaps emerald cost/result on every existing listing for Numismatics coins (1..7 emeralds -> spurs, 8..63 -> bevels, 64+ -> cogs). Works with all vanilla + modded villager professions automatically.
Why in-tree instead of a third-party mod: the obvious Modrinth option (`numismatics-villager-currency`) requires NeoForge 21.1.230+ (we're on 21.1.228); the alternative (`data-trades`) needs per-trade JSON. Reusing the event hook is simpler and avoids a runtime upgrade.
## Verified live
Server restart at 02:41 UTC with bnstoolkit-0.3.1.jar:
- `Done (3.400s)` on port 25565
- `[bns/trades] rebalanced trades for profession ...` logged 20+ times (every vanilla profession + modded ones)
- No `ModLoadingException`
- KubeJS economy substrate (/bns me, /bns sell, /bns bounty, /bns tier, /bns plot) untouched
## Test plan tomorrow
- [ ] Log in as a normal player — HUD overlay top-left shows tier + balance
- [ ] Press K — TierUpgradeScreen opens, you're Peasant tier 1
- [ ] `/give @s numismatics:spur 500`, refresh, then click Upgrade — should go to Farmer
- [ ] Press H — Bazaar opens, click diamond, click Sell 1
- [ ] Press J — Bounty Board opens, accept one, kill the mobs, turn it in
- [ ] Press N — Plot Office opens, buy a plot (need tier 3 Citizen first)
- [ ] Press M — Quest Log shows everything at a glance
- [ ] Find a villager — costs/results should be in spurs/bevels/cogs instead of emeralds
🤖 Generated with [Claude Code](https://claude.com/claude-code)
bnstoolkit jumps from M0 (empty scaffold) straight to feature complete:
UI screens (all FTB Library widgets, opens via keybinds):
K Civic tier ladder + upgrade
J Bounty board (accept/cancel/turn-in)
N Plot office (buy/release)
H Bazaar sell shop (1/16/64 quick-sell)
M Quest log (status overview)
HUD: top-left tier + spurs balance overlay, refreshed 1Hz server-side.
Villager trade rebalance (NEW): the mod now hooks VillagerTradesEvent
+ WandererTradesEvent and swaps every emerald cost/result for the
Numismatics equivalent (1..7 emeralds -> spurs, 8..63 -> bevels, 64+
-> cogs). This was the blocked Modrinth dep — the third-party mod
options either required a NeoForge bump (numismatics-villager-currency
1.1.0 wants 21.1.230+, we're on 21.1.228) or hand-written JSON for
every trade (data-trades). The in-tree wrapper is cleaner.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The previous commit deleted 0.1.1 from the gitignored mods dir but
git swallowed the add for 0.3.1 because pack/overrides/mods is
ignored. Re-adding with -f.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Matt
merged commit a7f95691bb into main2026-06-07 02:42:43 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
bnstoolkit jumps from M0 (empty scaffold) to feature-complete in one PR.
Screens (FTB Library widgets — match FTB Quests / FTB Chunks visual style)
HUD overlay
Top-left tier name + spurs balance. Registered above the experience bar via
RegisterGuiLayersEvent. 1Hz server push keeps it current.Network contract
RequestEconomySnapshot,RunBnsCommand(whitelisted verb routing — same /bns commands the player can type)TierStateUpdate,SellSnapshot,BountySnapshot,PlotSnapshotVillager trade rebalance (new — unblocks task #30)
Subscribes to
VillagerTradesEvent+WandererTradesEventand swaps emerald cost/result on every existing listing for Numismatics coins (1..7 emeralds -> spurs, 8..63 -> bevels, 64+ -> cogs). Works with all vanilla + modded villager professions automatically.Why in-tree instead of a third-party mod: the obvious Modrinth option (
numismatics-villager-currency) requires NeoForge 21.1.230+ (we're on 21.1.228); the alternative (data-trades) needs per-trade JSON. Reusing the event hook is simpler and avoids a runtime upgrade.Verified live
Server restart at 02:41 UTC with bnstoolkit-0.3.1.jar:
Done (3.400s)on port 25565[bns/trades] rebalanced trades for profession ...logged 20+ times (every vanilla profession + modded ones)ModLoadingExceptionTest plan tomorrow
/give @s numismatics:spur 500, refresh, then click Upgrade — should go to Farmer🤖 Generated with Claude Code