Matt ae183f27de pack: v0.39.0 — Counting House refactor + remove Create: Encased
Major economy / spawn-design pivot.

## Removed: Create: Encased
The mod's `chorium_ingot` → `creative_casing` chain unlocked 60+
infinite-output creative-tier blocks via fully renewable inputs (rose
quartz + chorus fruit + lava). Single creative_mechanical_drill in a
player base would have produced enough diamonds to trivialize the
civic ladder. Removing the mod was simpler than KubeJS recipe overrides
since none of the mod's other content (wood-variant encased shafts,
coloured casings) was load-bearing for our pack.

Parallel audit of 14 other Create-family mods confirmed none have
similar exploits — only Create: Encased was the breaker.

## Counting House refactor
What used to be "Bazaar" became "Counting House" — a wealth exchange,
not a general shop. Conceptual model:
- Players accumulate diamonds / netherite / ancient debris through
  adventure and mining (the wealth-store axis)
- Counting House converts these to spurs, credited directly to the
  player's Numismatics bank account
- Iron / gold / coal / lapis / redstone are no longer here — those
  belong on player-run Numismatics Vendor blocks at market prices

SellCatalogue cut from 9 items to 4 (diamond, diamond_block,
netherite_ingot, ancient_debris). Diminishing-returns floor tightened
50% -> 30%.

## Numismatics integration
NumismaticsBridge (reflection — no hard dep) wires up:
- ensureAccount on PlayerLoggedInEvent (every player gets a personal
  account on first login)
- balanceOf / deposit / deduct for bank operations
- SpurBalance.totalSpurs = inventory coins + own bank balance, no card
  lookups required
- HUD overlay now shows three lines: tier / cash on hand / bank
  balance — total wealth visible regardless of cards

## /bns commands migrated to Java
`/bns sell` and `/bns wallet` are now Java-handled
(CountingHouseCommands.java). Bank credit happens atomically with
inventory pull. KubeJS `02_sell_shop.js` retired (.retired suffix
preserved in the repo as documentation).

## Hub status-only
Removed the Civic Tier / Bazaar / Bounty / Plot routing buttons.
Transactional screens are now only reachable via NPC dialogue
(`/bns open <screen>` from an Easy NPC COMMAND action). The hub
shows tier + cash + bank + total + slot caps; footer reads "Visit
spawn NPCs for trades, bounties, plots, tier upgrades."

This locks the spawn-as-civic-centre design: players have to travel.

## bnstoolkit jar
0.5.1 -> 0.6.0 (network version 0.4 -> 0.5; TierStateUpdatePacket
now carries cashOnHand + bankBalance separately).

## Pack manifest
102 -> 104 mods after Encased removal. Manifest republished on glados
(publish-pack.py) before restart so the wrapper's sync sees the right
target state. Without that step, the sync was reverting our changes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 15:34:25 +00:00
2026-05-05 00:19:05 +01:00

Brass & Sigil

Self-hosted Minecraft modpack distribution + administration system. Three components, one repo:

brass-and-sigil/
├── launcher/   ← Avalonia desktop client (Windows .NET 8)
│                  Auths with Microsoft, syncs the modpack, launches the game.
├── server/     ← brass-sigil-server daemon (Linux .NET 8)
│                  Wraps the MC subprocess, exposes the admin web panel,
│                  syncs mods, runs backups + BlueMap, handles whitelist.
├── pack/       ← Modpack content
│   ├── pack.lock.json    Source of truth for mod versions / URLs / hashes
│   ├── tweaks/           Hand-written data-only tweak source
│   └── overrides/        Build output / hand-placed local files (gitignored)
├── scripts/    ← Build + deploy entry points (run from repo root)
│   ├── Update-Pack.ps1     Refresh pack.lock.json from Modrinth/CurseForge
│   ├── Check-Updates.ps1   Non-mutating "what's new?" report
│   ├── Build-Tweaks.ps1    Compile tweaks/ into pack/overrides/mods/*.jar
│   ├── Build-Pack.ps1      Generate manifest.json from the lockfile
│   └── Deploy-Brass.ps1    One-shot build + deploy everything
└── docs/       ← Operational notes, deploy runbook, schema docs

Quick start

# Pull dependencies, copy and edit the deploy profile
git clone <remote> brass-and-sigil
cd brass-and-sigil
Copy-Item scripts\deploy.config.template.ps1 scripts\deploy.config.ps1
notepad scripts\deploy.config.ps1   # fill in deploy share, SSH host, etc.

# Build + deploy everything in one go
.\scripts\Deploy-Brass.ps1

deploy.config.ps1 is gitignored -- local values never get committed.

Component reference

Component What it does Technology
launcher/ Friend-distributed client. Auths with Microsoft via WebView2 + XboxAuthNet, downloads mods, launches Minecraft. Single self-contained .exe published from publish/. Avalonia 12 + CmlLib.Core
server/ Daemon running alongside the MC process on Linux. Hosts a Kestrel web panel for admin (cookie-auth, rate-limited), bridges RCON, runs scheduled backups + BlueMap renders, handles whitelist requests. ASP.NET Core minimal APIs
pack/ Lockfile-driven modpack content. pack.lock.json resolves mod slug → URL+SHA-1; Build-Pack.ps1 walks it and produces manifest.json for the launcher and the server-tool to consume. PowerShell tooling

Workflow

  1. Bump mod versions: .\scripts\Update-Pack.ps1 (queries Modrinth + manual CurseForge entries).
  2. Sanity-check: .\scripts\Check-Updates.ps1 for a non-mutating availability report.
  3. Edit tweaks under pack/tweaks/<name>/ if you're changing recipes / loot / etc.
  4. Deploy: .\scripts\Deploy-Brass.ps1 -- builds launcher + server, regenerates manifest, mirrors everything to the deploy share, scp's the server binary.

Secrets / config files

File Tracked? Notes
launcher/launcher-config.template.json Empty placeholders, public-safe
launcher/launcher-config.json Local override; merged into the published exe at build time if present
server/deploy/server-config.example.json Template; rename to server-config.json on the server with real values
server/deploy/server-config.json Production config; lives on the server only
scripts/deploy.config.ps1 Local deploy profile (paths, SSH host, share location)

License

See LICENSE.

S
Description
Migrated from Bitbucket BS/brass-and-sigil
Readme MIT 5.6 MiB
Languages
C# 53.1%
JavaScript 23.9%
PowerShell 12.9%
HTML 5.3%
CSS 2.9%
Other 1.9%