From 57b6cd8dea7d08974770fe538e87b5ef3fc2b893 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 6 Jun 2026 23:57:23 +0000 Subject: [PATCH] docs: economy V1 overnight handoff Tomorrow-evening testing guide for the command-driven economy shipped in PR #67. Covers: what works, how to test each system, quick reference of every /bns command, what's deferred and why, recovery steps if anything bricks. Co-Authored-By: Claude Opus 4.7 --- docs/economy-handoff-overnight-2026-06-06.md | 215 +++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 docs/economy-handoff-overnight-2026-06-06.md diff --git a/docs/economy-handoff-overnight-2026-06-06.md b/docs/economy-handoff-overnight-2026-06-06.md new file mode 100644 index 0000000..bde0acd --- /dev/null +++ b/docs/economy-handoff-overnight-2026-06-06.md @@ -0,0 +1,215 @@ +# Economy V1 — overnight build handoff + +> Built 2026-06-06 / 23:00-23:55 UTC. All shipped via PR #67 (v0.33.0). +> Server running clean at port 25565. All scripts verified loaded with 0 errors. + +## TL;DR — what to test tomorrow + +A full command-driven economy is live. Pure-server (no client mod yet), works in chat and over the Telegram bridge equally. Open the in-game chat or telnet and try: + +``` +/bns help ← top of the iceberg +/bns me ← your status +``` + +That alone surfaces every command available. Below is the deeper walkthrough. + +--- + +## What ships + +### 1. 13-tier civic ladder (`/bns tier upgrade`) + +Every player has a tier integer (1-13) in their NBT. New joiners are auto-set to tier 1 (Peasant). Upgrading costs spurs and runs `ftbranks add ` to apply the rank's permission nodes (chunk allowance, name format). + +| # | Title | Cost to reach | Chunk allowance | Plot slots | Bounty slots | Shop fee | +|---|---|---|---|---|---|---| +| 1 | Peasant | 0 | 9 | 0 | 3 | 25% | +| 2 | Farmer | 200 | 18 | 0 | 3 | 25% | +| 3 | Citizen | 750 | 35 | 1 | 3 | 25% | +| 4 | Merchant | 2,500 | 60 | 1 | 4 | 23% | +| 5 | Knight | 6,500 | 100 | 2 | 4 | 20% | +| 6 | Baron | 15,000 | 150 | 2 | 5 | 18% | +| 7 | Viscount | 35,000 | 220 | 3 | 5 | 16% | +| 8 | Earl | 75,000 | 300 | 3 | 6 | 14% | +| 9 | Marquess | 150,000 | 400 | 4 | 6 | 12% | +| 10 | Duke | 300,000 | 525 | 5 | 7 | 10% | +| 11 | Archduke | 700,000 | 700 | 6 | 7 | 8% | +| 12 | Grand Duke | 1,500,000 | 900 | 7 | 8 | 6% | +| 13 | Sovereign | 10,000,000 | 1,500 | 10 | 10 | 0% | + +**Test it:** +- `/bns me` shows your tier + balance + everything else +- `/bns admin tier set <1-13>` to jump anyone instantly +- `/bns admin tier list` shows the full table in-chat +- `/give @s numismatics:spur 64` for testing money +- `/bns tier upgrade` pays + promotes + +### 2. Bazaar sell shop (`/bns sell`) + +Sell raw commodities for spurs. Tier discount reduces a flat 25% Bazaar fee. Diminishing returns lower the per-unit payout as you sell more of the same item over a lifetime (10% per 64 sold, floor 50%). + +| Item | Base price | +|---|---| +| Diamond | 10 spurs | +| Netherite ingot | 100 | +| Emerald | 1 | +| Gold ingot | 2 | +| Iron ingot | 1 | +| Lapis | 1 | +| Redstone | 1 | +| Coal | 1 | +| Ancient debris | 500 | + +**Test it:** +- `/bns sell list` — your effective prices right now (after fee + DR) +- `/bns sell minecraft:diamond 8` sells 8 diamonds +- Sell ~70 diamonds and watch the per-unit price drop as the DR kicks in + +### 3. Bounty engine (`/bns bounty`) + +20 bounties in the catalogue. Each player gets a random 5 from the pool, refreshed every 24h per-player. Slot cap = your tier (3 at Peasant, up to 10 at Sovereign). + +States: AVAILABLE → ACTIVE → READY → COMPLETED → (24h cooldown) → AVAILABLE. + +- Kill bounties auto-track via `EntityEvents.death` — you'll get progress messages in chat +- Cancelling applies the same 24h cooldown as completing (no RNG-shopping) + +Highlights from the pool: +- Slay 10 Zombies — 15 spurs +- Hunt 5 Plunderers — 75 +- Slay 3 Wither Skeletons — 150 +- Slay a Skreecher — 400 +- Slay the Warden — 800 +- Slay a Warped Mosco — 700 +- Slay the Farseer — 900 +- Destroy a Void Worm — 1,200 + +**Test it:** +- `/bns bounty list` — what's on offer for you today +- `/bns bounty accept b_zombie_10` — accept +- Kill 10 zombies — progress chat messages every 5, ready notification at 10 +- `/bns bounty active` — see your accepted with progress +- `/bns bounty turnin b_zombie_10` — claim 15 spurs + +### 4. Plot system (multi-slot) (`/bns plot`) + +Existing plot system (3 plots at chunks 10,10 / 12,10-11 / 14-15,10-11) now supports tier-based multi-ownership. Slot cap from your tier (0 at Peasant, up to 10 at Sovereign). + +- `/bns plot list` — all plots, their state, prices +- `/bns plot buy ` — claim it (must be Citizen+ for at least 1 slot) +- `/bns plot release ` — 50% refund, opens slot +- `/bns plot mine` — list your owned plots + +You'll need at least Citizen (tier 3) for any plot. **You can't buy a plot at Peasant.** + +### 5. Waystones + welcome (pre-existing, untouched) + +- One starter Waystone given on first login (per existing `welcome.js`) +- Waystone placement cap of 1 per player (per existing `waystones_policy.js`) +- Sharestones / Portstones banned via existing config + +### 6. FTB Ranks 13-rank config + +Live at `world/serverconfig/ftbranks/ranks.snbt`. Each rank has: +- `ftbchunks.max_claimed_chunks` (sets the FTB Chunks claim cap) +- `ftbchunks.max_force_loaded_chunks` (set to ~15% of claim cap) +- `ftbranks.name_format` (chat colour) + +FTB Ranks auto-applies `peasant` to all players via `condition: always_active`. Tier-up commands set the rank explicitly. The `admin` rank with `condition: op` overrides everyone — you'll appear as Admin in chat regardless of your civic tier, useful for op-mode actions. + +--- + +## What's deferred + +### Villager trade rebalance + +**Blocked.** KubeJS 2101.7.2 doesn't ship a villager-trade event. I verified by extracting the KubeJS jar — `ServerEvents` only exposes `command`, `loaded`, `recipes`, `registry`, `tags`, `tick`, `unloaded`. No `villagerTrades`. No KubeJS-villager-trade addon on Modrinth for NeoForge 1.21.1. + +Options to unblock later: +1. **Add a third-party trade-overrides mod** — needs research (Villager Trade Tables-style mod for 1.21.1 NeoForge) +2. **Build into the custom mod** — KubeJS calls into Java mixin +3. **Mixin via a tiny standalone mod** — minimal Java project that just rebalances trades from a JSON + +For now: vanilla villager trades remain. The 60+ trades I drafted live in the commit history (deleted file `pack/overrides/kubejs/server_scripts/economy/01_villager_rebalance.js`, restore from git when we unblock the API). + +### Custom UI mod (bnstoolkit) + +**Deferred to a session where you can iterate visually.** No Java/Gradle toolchain on glados, and the screens (QuestLog, BountyBoard, TierUpgrade, PlotPurchase, ShopBrowser, HUD, FTB Chunks mixin) all need visual feedback I can't get blind overnight. + +The complete architecture spec is in `docs/bnstoolkit-architecture.md` — when you're ready to build, that's the source of truth. The KubeJS substrate I shipped tonight is exactly the backend the mod will sit on top of. + +### Spawn build + +Your manual task. The economy works from anywhere right now — no spawn buildings needed. + +### FTB Quests progression chapters + +Needs your arc design (themes, milestones). Mod is installed; the campaign content isn't. + +--- + +## Files added/changed (PR #67) + +``` +pack/overrides/kubejs/server_scripts/economy/ + 00_tier_system.js NEW (170 lines) + 02_sell_shop.js NEW (197 lines) + 03_bounty_engine.js NEW (347 lines) + 04_player_commands.js NEW (146 lines) +pack/overrides/kubejs/server_scripts/ + plots.js MODIFIED (+86 lines — multi-slot) +pack/overrides/world/serverconfig/ftbranks/ + ranks.snbt NEW (122 lines — 13 ranks) +pack/pack.lock.json version bump → 0.33.0 +``` + +## Quick recovery if something goes wrong + +If a script errors at startup, KubeJS logs to: +``` +/srv/fast/brass-sigil-server/server/logs/kubejs/server.log +``` + +To hot-reload KubeJS server scripts without a server restart: +``` +/kubejs reload server_scripts +``` + +To revert this PR entirely if it bricks something: +``` +cd /home/matt/dev/brass-and-sigil +git revert +git push origin main +``` + +The next pack-version-sync at MC server restart will undo all the changes. + +## Suggested testing path + +1. `/bns me` — sanity check, you should be Peasant tier 1 +2. `/give @s numismatics:spur 500` — give yourself spurs +3. `/bns tier upgrade` — should pay 200 and bump you to Farmer +4. `/bns tier upgrade` again — should pay 550 (the difference up to Citizen at 750) … actually wait — the cost is per-tier-to-reach. Each upgrade costs the NEXT tier's listed cost. So Peasant → Farmer = 200, Farmer → Citizen = 750, Citizen → Merchant = 2,500. **Worth balance-checking in playtest.** +5. `/bns admin tier set 13` — jump to Sovereign for testing +6. `/bns me` — should show Sovereign + 10 plot slots + unlimited everything +7. `/bns plot list` — should show 3 plots available +8. Stand in the relevant chunks (e.g. chunk 10,10), `/bns plot buy p001` +9. `/bns bounty list` — random 5 from pool +10. Accept one, kill enough mobs, turn in +11. `/bns sell list` — see effective prices +12. `/bns sell minecraft:diamond 4` (if you have diamonds) + +If any step fails, the KubeJS log tells you why. Ping me with the error and I'll patch tomorrow. + +--- + +## What I'd build next session + +In priority order: + +1. **bnstoolkit mod scaffolding (M0)** — need to install Java/Gradle on glados first. Empty Gradle project that builds + loads cleanly. Probably 4-6 hours of focused work. +2. **TierUpgrade GUI** (M1) — first screen in the mod, replaces the `/bns tier upgrade` text flow with a visual ladder + Upgrade button. +3. **BountyBoard GUI** (M3, after M0 is done) — replaces the chat-based `/bns bounty list/accept` with a poster-board screen. + +Or — if you'd rather playtest the command-driven version first and only build the UI once the mechanics feel right — that's a perfectly defensible choice. The CLI version is fully functional.