From 61dd3d3754356c5a130a6e4dea5f545f6101c5a7 Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 7 Jun 2026 00:13:05 +0000 Subject: [PATCH] =?UTF-8?q?pack:=20v0.34.0=20=E2=80=94=20bnstoolkit=20M0?= =?UTF-8?q?=20scaffold?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ships the empty bnstoolkit companion mod (0.1.0) into the pack. The mod loads cleanly on client and server with zero visible surface — it just proves the deploy pipeline end-to-end so M1-M4 only have to add code, not figure out tooling. Per-milestone scope locked in docs/bnstoolkit-discussion-points-2026-06-07.md. Source: http://10.16.5.102:3000/minecraft/bnstoolkit Co-Authored-By: Claude Opus 4.7 --- ...bnstoolkit-discussion-points-2026-06-07.md | 143 ++++++++++++++++++ pack/overrides/mods/bnstoolkit-0.1.0.jar | Bin 0 -> 15633 bytes pack/pack.lock.json | 4 +- 3 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 docs/bnstoolkit-discussion-points-2026-06-07.md create mode 100644 pack/overrides/mods/bnstoolkit-0.1.0.jar diff --git a/docs/bnstoolkit-discussion-points-2026-06-07.md b/docs/bnstoolkit-discussion-points-2026-06-07.md new file mode 100644 index 0000000..2ed69a2 --- /dev/null +++ b/docs/bnstoolkit-discussion-points-2026-06-07.md @@ -0,0 +1,143 @@ +# bnstoolkit M0 — discussion points for testing session + +> Built 2026-06-07 (early hours UTC). Shipped via pack v0.34.0. +> Repo: http://10.16.5.102:3000/minecraft/bnstoolkit +> Jar: `bnstoolkit-0.1.0.jar` (15.6 KB) + +## What this is + +The skeleton of the custom companion mod. It loads cleanly on the client +and the dedicated server, registers nothing visible yet, and exposes the +package layout we'll fill in over M1–M4. The point of this milestone is: + +1. Tooling proven end-to-end (Java 21, ModDevGradle, NeoForge 21.1.228, jar in pack) +2. Mod-id, package, and resource paths locked so future commits only ADD code +3. One C2S/S2C packet pair wired to prove the network plumbing +4. Placeholder screens in place so wiring keybinds to real UI is M1's first task + +## Open decisions — please walk through these tomorrow + +Each is marked with `TODO(matt …)` in the source. + +### 1. Key bindings (BnsKeyBindings.java) + +Defaults I picked, all unbinding is in the vanilla controls menu: + +| Binding | Key | Opens | +|---|---|---| +| Tier ladder | T | `TierUpgradeScreen` | +| Bounty board | B | `BountyBoardScreen` | +| Plot map | P | `PlotPurchaseScreen` | + +**Question**: any conflicts with mods you already use? `T` is vanilla's +chat-open IIRC — I should probably move it. Pick a free combo when you +playtest, I'll bump the defaults. + +### 2. Screen open triggers — keybind only, or block + keybind? + +Each major screen has two viable open paths: + +- **Keybind** (already drafted): bnstoolkit binds T/B/P +- **In-world block**: e.g. a "Bounty Board" block placed at the spawn + guild building. Right-click opens the screen. More immersive, ties the + feature to a physical location. + +Both can coexist easily — they're not exclusive. I'd default to "both for +TierUpgrade + Plots, keybind-only for QuestLog, block-only for ShopBrowser +and BountyBoard". But that's a 30-second call you make tomorrow. + +### 3. FTB Library UI swap timing + +Right now the placeholder screens extend vanilla `Screen`. The +architecture doc commits to `dev.ftb.mods.ftblibrary.ui.BaseScreen` for +visual consistency with FTB Quests / Chunks. The swap is one line per +screen — happens in M1 alongside the first real screen layout. + +Reason it's deferred: the FTB maven coords need to be wired into +`build.gradle`, and I don't want to pin the wrong artifact name. Will +verify against the pack's installed FTB Library version (2101.1.31) before +the M1 build. + +### 4. HUD overlay layout + +The architecture doc shows a small panel "tier-icon | tier-name | spurs" +at top-left. Drop me a sketch when you have time and I'll lay it out for +M4. Current placeholder draws nothing — won't appear in game at all yet. + +### 5. Network smoke-test packet + +`RequestTierStatePacket` / `TierStateUpdatePacket` are the only wire +pair I shipped. They prove the codec + handler pattern. M1 fills in the +server-side handler that reads `player.persistentData.bnsTier` (the +KubeJS-owned NBT) and replies. **No client code yet sends the request** — +the round trip is dormant in M0. + +### 6. Mod settings screen + +Not addressed. Will be a small screen in M4 with toggles for the HUD, +keybind reminders, and (eventually) a colour-blind mode for tier ranks. +Low priority unless you've got a specific UX concern. + +--- + +## Files added/changed (PR for v0.34.0) + +``` +pack/overrides/mods/bnstoolkit-0.1.0.jar NEW (15.6 KB) +pack/pack.lock.json version 0.33.0 -> 0.34.0 +docs/bnstoolkit-discussion-points-2026-06-07.md NEW (this file) +``` + +The bnstoolkit source itself lives at `http://10.16.5.102:3000/minecraft/bnstoolkit` +— one initial commit on `main` with the full M0 scaffold. Build: + +``` +cd /home/matt/dev/bnstoolkit +./gradlew build +``` + +## What you'll see in-game when you log in + +**Nothing yet.** That's the point of M0 — it loads cleanly with zero +visible surface. Verification path: + +1. Server log: grep for `[bnstoolkit] mod entry constructed` and + `common setup complete (M0 scaffold — no surface yet)` +2. Client log on connect: `registered 3 key bindings under key.category.bnstoolkit` +3. Controls menu → "Brass and Sigil" category → 3 unbound-looking lines + (Open Tier Ladder, Open Bounty Board, Open Plot Map) on T/B/P + +If you bind one of those keys and press it in-game, **nothing happens**. +That's correct — the handlers are M1 work. + +## Milestones — concrete next deliverables + +| Milestone | Scope | Estimated work | +|---|---|---| +| M1 | TierUpgradeScreen + KubeJS bridge (tier/balance) + FTB Library swap | 1 evening | +| M2 | QuestLogScreen + ShopBrowserScreen | 1 evening | +| M3 | BountyBoardScreen + PlotPurchaseScreen | 1 evening | +| M4 | SpurHud, mod settings screen, polish | 1 evening | + +Each milestone ends with a deployable jar + a screen you can poke in +game. None of them require server downtime — drop the new jar in +`pack/overrides/mods/`, the wrapper sync handles the rest. + +## Quick recovery + +If the mod misbehaves and bricks the world: + +``` +# 1. Stop the server +sudo systemctl stop brass-sigil-server.service + +# 2. Pull the jar out of the live mods dir +sudo rm /srv/fast/brass-sigil-server/server/mods/bnstoolkit-0.1.0.jar + +# 3. Restart +sudo systemctl start brass-sigil-server.service +``` + +That leaves `pack/overrides/mods/bnstoolkit-0.1.0.jar` in the pack repo +so the next sync would put it back — to fully revert, also `git revert` +the v0.34.0 commit on the pack. diff --git a/pack/overrides/mods/bnstoolkit-0.1.0.jar b/pack/overrides/mods/bnstoolkit-0.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..8e2dbd7773eb885ae92f334f7b6f37e1614f7c9c GIT binary patch literal 15633 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 literal 0 HcmV?d00001 diff --git a/pack/pack.lock.json b/pack/pack.lock.json index f50c867..8f3f120 100644 --- a/pack/pack.lock.json +++ b/pack/pack.lock.json @@ -1,13 +1,13 @@ { "$schema": "Brass-and-Sigil pack.lock.json - generated, do not edit by hand unless you know what you are doing", "name": "Brass and Sigil", - "version": "0.33.0", + "version": "0.34.0", "minecraft": "1.21.1", "loader": { "type": "neoforge", "version": "21.1.228" }, - "lockedAt": "2026-06-06T23:34:21Z", + "lockedAt": "2026-06-07T00:12:15Z", "mods": [ { "source": "modrinth",