3 Commits

Author SHA1 Message Date
Matt Sijbers 372b5090cd Build-Tweaks: validate every jar before declaring success
Adds three structural assertions that run after the zip is built:

1. No backslash separators in any entry name. NeoForge needs
   "META-INF/neoforge.mods.toml" to be at exactly that forward-slash
   path; PowerShell 5.1's [ZipFile]::CreateFromDirectory() puts
   "META-INF\neoforge.mods.toml" instead, which the loader silently
   rejects. The current build code uses CreateEntry with explicit
   forward slashes, but this guard fires if anyone reverts to the
   simpler-looking CreateFromDirectory.

2. META-INF/neoforge.mods.toml exists at the canonical path. Without
   it, NeoForge skips the jar with a bland "not a valid mod file"
   warning that's easy to miss in a 500-line game log.

3. The modId declared in the embedded TOML matches the source folder's
   modId. Catches the case where a tweak folder is renamed but its
   neoforge.mods.toml isn't updated, which would otherwise ship a jar
   whose declared identity differs from its filename.

Each tweak jar's build line now tags "[validated]" so a casual reader
of the log sees that the post-build checks ran. Failure raises a
specific exception with the offending entries listed, so the build
fails loudly at the source instead of producing a pack that mysteriously
doesn't apply its tweaks at runtime.
2026-05-09 22:33:52 +01:00
Matt Sijbers bbba58d1dd fix: tweak jars use forward-slash entry names; bump pack to 0.9.3
NeoForge's mod scanner rejected brassandsigil_tweaks-1.0.0.jar because
PowerShell 5.1's [ZipFile]::CreateFromDirectory() writes Windows-native
path separators into ZIP entry names on Windows. Entries came out as
"META-INF\neoforge.mods.toml" instead of the spec-required forward-slash
form, so the loader couldn't find the manifest and silently dropped the
jar with "not a valid mod file".

Build-Tweaks.ps1 now opens the archive in 'Create' mode and writes each
file as an explicit ZipArchiveEntry whose name is built from the relative
path with backslashes replaced by forward slashes. Verified the rebuilt
jar lists "META-INF/neoforge.mods.toml" etc.

Pack version 0.9.2 -> 0.9.3 so launchers cached at 0.9.2 see "pack
changed" and re-sync the new tweak jar (their bytes differ; SHA-1 in the
manifest will reflect that).
2026-05-09 22:30:49 +01:00
Matt Sijbers a1331212cb Initial commit: Brass & Sigil monorepo
Self-hosted Minecraft modpack distribution + administration system.

- launcher/  Avalonia 12 desktop client; single-file win-x64 publish.
             Microsoft auth via XboxAuthNet, manifest+SHA-1 mod sync,
             portable install path, sidecar settings.
- server/    brass-sigil-server daemon (.NET 8, linux-x64). Wraps the
             MC subprocess, embedded Kestrel admin panel with cookie
             auth + rate limiting, RCON bridge, scheduled backups,
             BlueMap CLI integration with player markers + skin proxy,
             friend-side whitelist request flow, world wipe with seed
             selection (keep current / random / custom).
- pack/      pack.lock.json (Modrinth + manual CurseForge entries),
             data-only tweak source under tweaks/, build outputs in
             overrides/ (gitignored).
- scripts/   Build-Pack / Build-Tweaks / Update-Pack / Check-Updates
             plus Deploy-Brass.ps1 unified one-shot deploy with
             version-bump pre-flight and daemon-state detection.
2026-05-05 00:19:05 +01:00