Commit Graph
14 Commits
Author SHA1 Message Date
logan d80f85b3f6 feat(config): moderate spawn tuning for Alex's Mobs, Fowl Play, Critters
Every visible entity multiplies the client render cost (vanilla, EMF/FA,
GeckoLib, ETF, dynamic lights) and the server tick. These cuts target only the
species that are heavy by weight x group size. Rare mobs keep their defaults.

- Alex's Mobs: halve 9 common weights (gazelle and capuchin herds, straddler,
  rocky roller, underminer, elephant, blobfish, mudskipper, caiman).
- Fowl Play: lower duck/goose/gull/sparrow weights and max group sizes
  (upstream #214, ~400 ducks on rivers, is still open in 1.2.3).
- Critters and Companions: about 40% off sea bunnies and the forest/lush bug
  rules. It does have a spawn config; configVersion 2 skips its v1->v2
  migration.

All three are partial files. NeoForge (TOML) and YACL 3.8.2 (JSON5) keep
defaults for missing keys. Shipped enforced from config/ because the server
reads them from this repo. Details and the B14 measurement plan:
analysis/client-perf/SPAWN-TUNING.md.
2026-10-14 18:14:50 -04:00
logan 5919955548 chore(analysis): archive finished reviews, drop stale duplicates
Move the completed 2026-09 candidate review (MODLIST-REVIEW/-GROUPS,
CANDIDATE-APPENDIX, PACK-CONTEXT), FINDINGS.md and the shipped FTB Chunks swap
write-up into analysis/archive/, with a README mapping their old paths. The
review's build pieces, subagent intermediates and Modrinth API dumps are
deleted: the assembled reports carry their content. MODLIST-GROUPS.md was a
byte-for-byte duplicate of analysis/groups-table.md.

Also: drop the now-pointless FINDINGS/MODLIST packwizignore lines (analysis/
covers the archive), and gitignore *.tar.gz so the 650 MB map-migration world
tarball can't be committed by accident.
2026-10-14 18:08:48 -04:00
logan a01bc3b2f1 feat(perf): ship client perf defaults via Default Options, add perf mods
Pack-side half of the client performance work (analysis/client-perf/).

- Add Default Options 21.1.8 (client). It copies config/defaultoptions/
  options.txt and extra/** into place only when the target is absent, so
  player changes are never clobbered. It is also client-only. packwiz
  `preserve` would also land these files in this repo's server config, which
  matters for DistantHorizons.toml [server]/[common] and SSRD's COMMON config.
- Seed provisional mid-tier defaults generated by
  analysis/client-perf/proposed-configs/build.py --ship: render distance 8,
  DH LOD radius 128 / SSAO off / 2 threads, EMF animation LOD 12, Flywheel
  TRI_LINEAR lighting, LambDynamicLights fast, SSRD 16 chunks, Sound Physics
  16 rays / 2 bounces plus per-tick caps on noisy Create sounds. All values
  are unmeasured; Phase 2 (BENCH-MATRIX.md) replaces them. ModernFix
  dynamic_resources is held back until bench block B6 passes.
- Add Sodium Extra 0.9.4, Reese's Sodium Options 2.2.4, BadOptimizations
  2.4.1 and Particle Core 0.3.3 (all client-side). Their declared ranges match
  the pins (Sodium 0.8.13, fzzy_config, Kotlin for Forge).
- Bump Puzzles Lib 21.1.62 -> 21.1.64 as a bugfix: 21.1.63 restores dropped
  access transformers. The event-cache change in 21.1.64 is Fabric-only.
2026-10-14 18:05:45 -04:00
logan fc649b4ecd fix(pack): add Paxi datapack resolving cross-mod recipe collisions
A static audit of every jar found recipes that shadow each other, so one
output becomes uncraftable depending on load order. Paxi (whose only
dependency, YUNG's API, is already in the pack) loads a global datapack
above mod data to fix them:

- Potato: extradelight, moredelight and rusticdelight all cut a potato with
  a knife. Chain them instead (potato -> rustic slices -> extradelight
  sliced, slices -> moredelight diced) so each keeps its yield.
- Drop rustic potato slices from c:crops/potato (re-cut/stew dupe loop) and
  raw rustic coffee beans from c:crops/coffee/cooked.
- Bread slices, Twilight Forest knives, poisonous potato / rotten tomato /
  apple / cucumber / coffee crates: keep one recipe each.
- Handcrafted sheets shadowed Comforts sleeping bags, and its wood plate
  shadowed every Twilight Forest drying rack: give them distinct patterns.
- Fisherman's Haven worms can had two outputs: keep one, add conversions.
- Pin rustic's beef stew (extradelight disables it: load-order roulette)
  and gate Twilight Delight's Neapolitan-only ice creams.

The datapack is generated by analysis/audit/gen_fixes.py (not shipped).
.packwizignore re-includes it directory by directory because packwiz skips
ignored directories outright.
2026-10-06 23:42:42 -04:00
logan e7d6691466 feat(pack): ship offline usernamecache to clients for Jade
Jade resolves tamed-animal owner names client-side; its Mojang profile
lookup can't resolve offline-mode UUIDs and it falls back to NeoForge's
UsernameCache, which the client loads from <game>/usernamecache.json.
Ship that file (side = "client", installed at the game root) so migrated
owners stop showing as "???".

Maintain the mapping with tools/sync-usernamecache.py after new logins.
2026-10-06 23:28:00 -04:00
logan 0adfb6c656 feat(pack): add Icy's Better Horses and its Modonomicon dependency
Icy's Better Horses declares client_side/server_side as required, so it ships
to both sides. It hard-requires Modonomicon [1.120.4,) on BOTH sides, which the
pack was missing; GeckoLib [4.7.5,) is already present at 4.9.3, and
cloth-config (optional) is already present too.

Pinned to the NeoForge 1.21.1 builds: Modrinth lists two different files both
numbered 2.1.0.1 (Forge/1.20.1 and NeoForge/1.21.1), and resolving by version
number alone silently picks the wrong one.

Also ignore shaderpacks/*.zip and xaero-migration-kit/ in .packwizignore. The
former duplicated the existing .pw.toml metafiles and the latter is local
migration scratch that the file already says must never ship, but packwiz
refresh was indexing both into the pack.
2026-10-06 19:43:10 -04:00
logan e36bff8a4d chore(pack): pin Akashic Tome's whitelist to this pack's guidebooks
Enumerated every guidebook-type item across all 209 mods (30 items) and pinned
them explicitly in config/akashictome-common.toml.

Finding: no config was strictly required. Akashic Tome's "Whitelisted Names"
substring-matches the item's registry PATH (verified from AttachementRecipe
bytecode: getPath + toLowerCase + contains, with getHoverName and
getDescriptionId absent), and the shipped 15-entry default list already covers
every book in this pack. The explicit id list is what keeps the tome working
if that name list is ever trimmed.

All Patchouli books share the single item id patchouli:guide_book and cannot
be listed individually. They still morph under their real owning mod, because
Patchouli's ItemModBook overrides getCreatorModId to return the book's owner.

Also drops the shipped defaults' whitelist ids and mod aliases, which all
reference mods that are not installed.
2026-10-06 19:12:36 -04:00
logan 387ee1ef9b chore(pack): make config files opt-in and ship a PetProtect default
.packwizignore ignored config/ and defaultconfigs/ wholesale. They are now
ignored per-entry (config/*) with deliberately authored files re-included at
the bottom of the file, so one config can ship without any risk of pulling
every runtime-generated config into the index - which matters because this
repo doubles as a server directory.

Ships config/petprotect.json disabling BOTH pet damage and death protection.
PetProtect's isInvulnerableTo mixin gates on prevent_pet_damage alone, so
disabling prevent_pet_death by itself leaves pets invulnerable to nearly all
damage and Pet Cemetery's death -> collar -> respawn loop still never fires.
prevent_pet_attack remains true, so pets are not provoked into fights.

Without this file the two mods cancel each other: PetProtect's defaults keep
pets immortal, so Pet Cemetery is dead weight.

The config installs on clients as well as the server; that is harmless since
petprotect itself is side = "server", but packwiz has no per-file side flag
for non-metafile entries.
2026-10-06 18:27:42 -04:00
logan 1d02bf1cf6 feat(pack): replace FTB Chunks with Open Parties and Claims and Xaero's maps
FTB Chunks is the only mod in the FTB suite that nothing else depends on --
FTB Quests requires FTB Library and FTB Teams only, and ships no claim-chunk
task type -- so it can leave without touching quests. Open Parties and Claims
takes over claims and force-loading, and the Xaero's suite restores the
minimap, world map and waypoints that b0542f9 removed.

The three Xaero's entries are byte-identical to the ones b0542f9 deleted, so
this reverts the map half of that commit rather than integrating anything new.
Xaero's + OPAC is also the pairing both projects document: the world map
displays OPAC claims and lets you claim and forceload from the map screen.

Drops config/ftbchunks-client.snbt and the .packwizignore negation that
shipped it, since the FTB Chunks minimap it enabled no longer exists. Also
keeps authoring/review material and migration scratch out of the pack index.

Server-side follow-up (not shippable, lives in the world save): set
maxPlayerClaimForceloads to 25, point primaryPartySystem at FTB Teams, and
decide claims.forceload.offlineForceload.
2026-09-30 22:04:56 -04:00
logan 25b3f78cdc chore(pack): untrack C2ME runtime cache
The previous commit accidentally captured cache/c2me-dfc (regenerated at runtime) and packwiz indexed it. Ignore cache/ and drop it from the index.
2026-09-29 03:00:50 -04:00
logan b0542f982e feat(pack): replace Xaero's map mods with the FTB Chunks minimap
Removes the Xaero mapping suite -- Xaero's World Map, Xaero's Minimap,
Xaero Train Map and the Waystones compatibility -- and enables the FTB
Chunks minimap, so FTB Chunks provides all mapping.

Xaero Train Map and the Waystones compat had to go with the maps: the
former declares a required dependency on xaeroworldmap, and the latter
references only xaero/common and xaero/minimap classes. Nothing in the
pack declared a dependency on xaeros-minimap.

The minimap needs an explicit config because FTB Chunks computes
minimap.enabled once as !hasOtherMinimapMod() and then persists the
result. With Xaero's Minimap installed that resolved to false and was
written into players' configs, where it sticks, so removing the other
minimap mod alone would not re-enable it. config/ftbchunks-client.snbt is
the location the mod itself documents for modpack defaults, and unlike
defaultconfigs/ it also overrides configs that already exist.

.packwizignore moves from excluding config/ wholesale to config/* plus a
negation, so this one modpack-default config ships while server config
stays untracked.
2026-09-28 18:50:14 -04:00
logan 59cef9e2f2 chore(pack): exclude server tooling from packwiz index
tools/ holds the RCON helper and graceful-restart script used to operate the
server; they are not pack content and must not be indexed for clients.
2026-09-24 17:09:51 -04:00
logan df2a4f4fcd fix(pack): exclude server config and runtime files from packwiz index
A packwiz refresh run in the server directory would have indexed
config/, kubejs/ and other runtime files into the pack index.
2026-09-24 15:33:13 -04:00
logan f99e3bee3e chore(pack): add .packwizignore for server-generated files
Keeps the NeoForge libraries, world data, jars and other runtime files
out of the pack index when running packwiz refresh in a server dir.
2026-09-23 16:39:56 -04:00