Files
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
..

Pack tweaks

This folder is the source for any data-only NeoForge mods we ship with the modpack. Each subfolder becomes one jar at build time.

The build pipeline:

pack/tweaks/<name>/  --(Build-Tweaks.ps1)-->  pack/overrides/mods/<name>-<ver>.jar
                                                  |
                                                  v
                                         (Build-Pack.ps1 picks it up)
                                                  |
                                                  v
                                         manifest.json -> launcher install

Because the output is a real mod jar (with META-INF/neoforge.mods.toml), the data inside auto-loads in single-player and on the server -- no /datapack enable needed, no per-world setup.


The simplest workflow is to keep extending brassandsigil-tweaks with more worldgen / loot / recipe overrides. Just drop more JSON under brassandsigil-tweaks/data/brassandsigil_tweaks/....

Common targets:

What Path
Custom configured feature (ore) data/brassandsigil_tweaks/worldgen/configured_feature/<name>.json
Custom placed feature data/brassandsigil_tweaks/worldgen/placed_feature/<name>.json
Lithostitched modifier data/brassandsigil_tweaks/lithostitched/worldgen_modifier/<name>.json
Override another mod's loot table data/<their_modid>/loot_table/blocks/<name>.json
Override another mod's recipe data/<their_modid>/recipe/<name>.json
Override / extend a vanilla tag data/minecraft/tags/<registry>/<name>.json

After editing, bump the version in brassandsigil-tweaks/META-INF/neoforge.mods.toml so launcher clients see it as a new file and re-download.

Adding a separate tweak mod

Make a sibling folder. The structure must be:

tweaks/
  <my-tweak>/
    META-INF/
      neoforge.mods.toml      # modId + version are required
    pack.mcmeta               # pack_format: 48 for 1.21.1
    data/
      <my_namespace>/
        ...

Build-Tweaks.ps1 reads modId and version from the toml and produces pack/overrides/mods/<modId>-<version>.jar. Old jars for the same modId are auto-cleaned, so version bumps don't leave stale files behind.


What's in brassandsigil-tweaks today

  • skylands_end_stone_ore -- adds small End Stone veins to Terralith's Skylands biomes (#terralith:skylands). Targets stone_ore_replaceables so it only replaces the stone interior of the floating islands. Powers the Aeronautics Levitite-blend recipe without forcing players to visit The End. Tuning lives in data/brassandsigil_tweaks/worldgen/placed_feature/skylands_end_stone_ore.json (count = veins per chunk; size in the configured_feature controls vein size).

Building

From the repo root:

# Builds tweak jars + manifest in one shot:
.\scripts\Build-Pack.ps1 -OutputPath .\scripts\manifest.json

# Just rebuild tweak jars:
.\scripts\Build-Tweaks.ps1

Then deploy: .\scripts\Deploy-Brass.ps1 mirrors pack/overrides/ to the public share's files/ subdir and pushes the regenerated manifest alongside.