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.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# 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.
|
||||
|
||||
---
|
||||
|
||||
## Adding a new tweak (one big jar, recommended)
|
||||
|
||||
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:
|
||||
|
||||
```powershell
|
||||
# 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.
|
||||
@@ -0,0 +1,42 @@
|
||||
modLoader = "lowcodefml"
|
||||
loaderVersion = "[1,)"
|
||||
license = "All Rights Reserved"
|
||||
issueTrackerURL = "https://sijbers.uk/pack/"
|
||||
|
||||
[[mods]]
|
||||
modId = "brassandsigil_tweaks"
|
||||
version = "1.0.0"
|
||||
displayName = "Brass & Sigil Tweaks"
|
||||
description = '''
|
||||
Server-and-client worldgen and balance tweaks for the Brass & Sigil modpack.
|
||||
Ships custom configured features, placed features, and Lithostitched worldgen
|
||||
modifiers that retune third-party content for this pack.
|
||||
'''
|
||||
|
||||
[[dependencies.brassandsigil_tweaks]]
|
||||
modId = "neoforge"
|
||||
type = "required"
|
||||
versionRange = "[21.1,)"
|
||||
ordering = "NONE"
|
||||
side = "BOTH"
|
||||
|
||||
[[dependencies.brassandsigil_tweaks]]
|
||||
modId = "minecraft"
|
||||
type = "required"
|
||||
versionRange = "[1.21.1,1.22)"
|
||||
ordering = "NONE"
|
||||
side = "BOTH"
|
||||
|
||||
[[dependencies.brassandsigil_tweaks]]
|
||||
modId = "lithostitched"
|
||||
type = "required"
|
||||
versionRange = "[1.7,)"
|
||||
ordering = "NONE"
|
||||
side = "BOTH"
|
||||
|
||||
[[dependencies.brassandsigil_tweaks]]
|
||||
modId = "terralith"
|
||||
type = "required"
|
||||
versionRange = "[2.5,)"
|
||||
ordering = "AFTER"
|
||||
side = "BOTH"
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"type": "lithostitched:add_features",
|
||||
"biomes": "#terralith:skylands",
|
||||
"features": "brassandsigil_tweaks:skylands_end_stone_ore",
|
||||
"step": "underground_ores"
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"type": "minecraft:ore",
|
||||
"config": {
|
||||
"discard_chance_on_air_exposure": 0.0,
|
||||
"size": 6,
|
||||
"targets": [
|
||||
{
|
||||
"target": {
|
||||
"predicate_type": "minecraft:tag_match",
|
||||
"tag": "minecraft:stone_ore_replaceables"
|
||||
},
|
||||
"state": {
|
||||
"Name": "minecraft:end_stone"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"feature": "brassandsigil_tweaks:skylands_end_stone_ore",
|
||||
"placement": [
|
||||
{ "type": "minecraft:count", "count": 3 },
|
||||
{ "type": "minecraft:in_square" },
|
||||
{
|
||||
"type": "minecraft:height_range",
|
||||
"height": {
|
||||
"type": "minecraft:uniform",
|
||||
"min_inclusive": { "absolute": 200 },
|
||||
"max_inclusive": { "absolute": 250 }
|
||||
}
|
||||
},
|
||||
{ "type": "minecraft:biome" }
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 48,
|
||||
"description": "Brass & Sigil pack tweaks"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user