Files
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

672 lines
40 KiB
Markdown

# Onion MC - Configuration, Compatibility & Performance Review
**Pack:** Onion MC 0.1.0 - Minecraft 1.21.1 / NeoForge 21.1.251 - 146 mods (packwiz; 141 Modrinth + 5 CurseForge)
**Scope:** options and settings that improve inter-mod behaviour, performance, or are useful to the
players and the server administrator.
> **Snapshot note.** The mod-list statistics in section 1 were measured against an earlier pack
> revision (140 entries). The pack has since changed: **FTB Chunks was replaced by Open Parties and
> Claims + Xaero's World Map/Minimap**, the rest of the FTB suite that depended on it (**FTB Quests,
> FTB Teams, FTB XMod Compat**) was removed, Iris/shaders landed upstream, and Clumps/C2ME/Noisium were
> added. Sections 3.3 and 7.1 have been updated for these; section 1's counts have not been re-run.
---
## How to read this document
Every claim is tagged with a confidence level, because "a Reddit comment said so" and "I read the
mod's config source" are not the same thing.
| Tag | Meaning |
| --- | --- |
| **VERIFIED** | Read from the mod's own jar metadata, upstream source code, or bundled default config. |
| **DOCUMENTED** | Stated in official project docs (Modrinth/GitHub/wiki/NeoForge docs). |
| **COMMUNITY** | User reports (Reddit, forums). Directionally useful, not authoritative. |
| **INFERENCE** | My reasoning from the above. |
Methods used: Modrinth API (project + version metadata for all 131 Modrinth-tracked mods), extraction
of all 131 mod jars (reading `META-INF/neoforge.mods.toml` for dependencies, sides and declared
incompatibilities), upstream source/config files on GitHub/GitLab, and official documentation.
> **Section 8 lists what is still unverified.** Nothing there should be acted on as fact.
---
## 1. Pack state - it is in good shape
This matters because it means the work here is **tuning, not repair**. There is no fire to put out.
### 1.1 Integrity - VERIFIED
| Check | Result |
| --- | --- |
| Version validity (every pinned version supports 1.21.1 + NeoForge/Forge) | **129 / 131 OK** |
| Unsatisfied required dependencies | **0** |
| `side` flags that disagree with Modrinth's authoritative client/server support | **0** |
| Mods that would be wrongly installed on a dedicated server | **0** |
- The two non-"release" pins are **Incendium** and **Sound Physics Remastered**, both tagged
`alpha` on Modrinth. For Incendium that is normal (Stardust Labs datapacks); for Sound Physics
Remastered 1.5.1 it is currently the *only* 1.21.1 NeoForge build.
- Libs that look "missing" are correctly bundled via jar-in-jar: `apollib` (inside Tectonic and
Lithostitched), `flywheel` + `ponder` (inside Create), `atmosphere` (Slice & Dice),
`sablecompanion` (Sable), `mezz_config` (JEI), `Registrate` (Create/Ars Delight/Twilight Delight).
- The 16 client-only mods carry `side = "client"`, so `packwiz-installer -s server` will exclude them.
**The server mod list is already correct - do not hand-prune it.**
### 1.2 Version currency - VERIFIED
108 / 131 pins are the newest 1.21.1 NeoForge build. The 23 that are behind are mostly trivial patch
bumps, with three worth a decision:
| Mod | Pinned | Newest 1.21.1 | Note |
| --- | --- | --- | --- |
| Terralith | 2.5.8 | **2.6.2** | Minor bump. **New worlds only** - see section 2.4. |
| Apotheosis | 8.8.0 | 8.9.0 | Feature release. |
| Sophisticated Storage | 1.5.91 | 1.6.0 | Minor bump. |
Also available: **NeoForge 21.1.252** (pack pins .251). The 21.1.x line is the 1.21.1 LTS branch and
still receives fixes, so a patch bump is low-risk if you want bugfixes.
### 1.3 Declared incompatibilities - VERIFIED
These are asserted by the mods' own metadata. They are not opinions.
| Mod | Declares incompatible | In pack? |
| --- | --- | --- |
| `create` | `radium`, `palladium` | No [OK] - **never add Radium** |
| `sodium` | `embeddium` (any version) | No [OK] - **never add Embeddium** |
| `sable` | `scalablelux`, `sablecompanion` > 1.6.0 | No [OK] |
| `distanthorizons` | `ssrd` <= **1.8.6** | 1.8.7 [OK] - **one release clear of a hard break** |
| `geckolib` | `geckoanimfix` | No [OK] |
| `cristel-lib` | `t_and_t` <= 1.13.3 | 1.13.11 [OK] |
### 1.4 Hard version constraints - do not break these
**VERIFIED** from mod metadata. These are the version pins that are load-bearing:
1. **Sodium must stay >= `0.8.12-alpha.2+mc1.21.1`.** `sable` declares every Sodium below that
incompatible. Current 0.8.13 is fine. *Downgrading Sodium breaks Create Aeronautics.*
2. **SSRD must stay >= 1.8.7.** Distant Horizons declares SSRD <= 1.8.6 incompatible.
3. **`create-enchantment-industry` requires Create >= 6.0.10** and `create_dragons_plus` >= 1.11.9.
The pack sits *exactly* on both minimums, so Create cannot be downgraded.
4. **`ssrd` requires `sable` and `sodium`** (`sodium` at `side=CLIENT`, so the dedicated server is
unaffected).
5. **Towns and Towers must stay > 1.13.3** (cristel-lib constraint).
---
## 2. Where the server load actually comes from
Four cost centres dominate, in rough order of impact. Everything in section 3 maps to one of these.
1. **Worldgen & structure density** - this pack stacks Terralith + Tectonic + Incendium + Nullscape +
Towns and Towers + When Dungeons Arise + nine YUNG's mods + Explorify. Structure-heavy worldgen is
the classic cause of chunk-generation spikes and stutter while players explore.
2. **Apotheosis spawners and entities** - Apotheosis spawners can manufacture mob counts far beyond
vanilla, and spawner-spawned mobs are *deliberately prevented from despawning*.
3. **Create + Sable physics** - Create Aeronautics runs a physics pipeline. Sable's own README calls
itself "an incredibly intrusive mod" that "makes extensive use of mixins" and is "prone to many
compatibility issues". This is the highest-risk component in the pack.
4. **OPAC claim force-loading + offline chunk loading** - per-player force-loaded chunks that tick
even when nobody is online.
---
## 3. Server tuning
### 3.1 Structure density - the single biggest lever
**Sparse Structures is already in the pack and already active.** - DOCUMENTED/VERIFIED
- Config file: **`config/sparsestructures.json5`** (confirmed in `Constants.java`:
`Path.of("config", "sparsestructures.json5")`).
- **`spreadFactor` - default `2`.** This multiplies structure spacing globally: >1 = rarer,
1 = untouched, <1 = more common. So the pack is *already* halving structure frequency versus
default. Good default; raising it is the cheapest TPS win available.
- **`customSpreadFactors`** - array of `{ "structure": "namespace:name", "factor": n }`. The value
may be a **structure set** or a **structure name**; using a structure name modifies the whole set
it belongs to.
- `/dumpstructuresets` dumps every structure set to a file - use this to get real names instead of
guessing.
- **Changes require a full game restart.**
- Source: <https://github.com/MaxenceDC/sparsestructures> (`sparse-structures-default-config.json5`)
Suggested next step - push the expensive/oversized structure sets harder than the global 2x:
```json5
{
"spreadFactor": 2,
"customSpreadFactors": [
{ "structure": "minecraft:mansion", "factor": 2 }
// run /dumpstructuresets, then add entries for the dungeons_arise:*
// and t_and_t:* sets with factor 3-4
]
}
```
> **Caveat (INFERENCE):** I have not verified the exact `dungeons_arise` / `t_and_t` structure-set
> names. Use `/dumpstructuresets` on the server to obtain them rather than copying names from the web.
**Chunky** (in pack) is the other half: pregenerate so players don't force live generation.
DOCUMENTED - commands are `/chunky radius <n>`, `/chunky world <dim>`, `/chunky center`, `/chunky start`,
`/chunky pause`, `/chunky continue`. See section 3.4 for the Chunky <-> Distant Horizons interaction, which
matters here.
### 3.2 Apotheosis - entity accumulation
**VERIFIED** by reading the config source of Apothic Spawners 1.21 branch.
Config file: **`config/apothic_spawners.cfg`** - section `[general]`:
| Key | Default | Notes |
| --- | --- | --- |
| **`Entity Despawn Delay`** | **600** | Ticks that spawner-spawned mobs are *prevented from despawning* after spawning. Range 0-24000. |
| `Spawners Drop Empty` | false | Clears stored entity when broken. |
| `Capturing Drop Chance` | 0.005 | Per-level spawn-egg drop chance. |
| `Spawner Silk Level` | 1 | Silk touch level needed; -1 disables. |
| `Spawner Silk Damage` | 100 | Durability damage per spawner harvested. |
`Entity Despawn Delay` is the lever most people miss. At the default 600 ticks, every spawner keeps
its output alive for 30 seconds regardless of mobcap pressure. On a server with several upgraded
spawners this is a steady entity tax. **Lowering it to 0-100 is a direct, low-risk TPS improvement**
and is unlikely to be noticed by players (vanilla spawners have no such protection).
> Note: this config surface is *small*. In Apotheosis 8.x the spawner **modifiers** (spawn range,
> delay, count, ...) are **datapack-driven**, not config-driven. So you cannot cap spawner throughput
> from the config file alone - `Entity Despawn Delay` plus the loot-table/datapack layer is what you
> have.
Config file: **`config/apotheosis/apotheosis.cfg`** - sections and keys (defaults in parentheses), all **VERIFIED**:
> **Note the directory.** Apotheosis's module configs are *not* in the config root: `configDir` is
defined as `<config>/apotheosis` (`ApothicAttributes.java`, line 58), and `getConfigFile(p)` returns
`<config>/apotheosis/<p>.cfg`. The one exception is Apothic Spawners, which uses Placebo's
`Configuration(String)` constructor and therefore lands at the config root as
`config/apothic_spawners.cfg`. Do not go looking for `config/apotheosis.cfg` - it does not exist.
| Section | Key | Default |
| --- | --- | --- |
| `bosses` | `Boss Spawn Cooldown` | 3600 ticks (3 min) |
| `bosses` | `Boss Announcement Range` | vanilla spawn distance + 12 blocks |
| `bosses` | `Curse Boss Items` / `Boss Auto-Aggro` / `Boss Glowing On Spawn` | false / false / true |
| `worldgen` | **`Generation Dimension Whitelist`** | `["overworld"]` |
| `spawners` | `Spawner Value Chance` | 0.11 |
| `affixes` | `Cleave Players`, `Disable Quark Tooltips for Affix Items`, `Torch Placement Item` | false / true / `minecraft:torch` |
| `augmenting` | `Upgrade Sigil Cost` / `Upgrade Level Cost` / `Reroll Sigil Cost` / `Reroll Level Cost` | 2 / 225 / 1 / 175 |
| `potion_charms` | `Restrict Charms to Curios` | false |
| `quality_of_life` | `Enable Item Linking`, `Item Linking Cooldown`, `Enable Equipment Comparisons` | true / 100 / true |
| `flair` | `Enable Affix Item Effects` | true (clientside) |
| `world_tiers` | `Enable Manual World Tier Changes` | true |
Two worth acting on:
- **`Boss Spawn Cooldown`** (3600): invading bosses are among the most expensive things Apotheosis
spawns. Raising this is a legitimate, cheap difficulty/load dial.
- **`Generation Dimension Whitelist`** = `["overworld"]`: Apotheosis worldgen currently only runs in
the Overworld. This pack has Twilight Forest, plus Incendium's Nether and Nullscape's End. If you
want rogue spawners/boss dungeons there you must add the dimension IDs - and understand that doing
so *increases* worldgen cost.
Related configs, same pattern (`config/apotheosis/apothic_attributes.cfg`,
`config/apotheosis/apothic_enchanting.cfg`, and `config/apotheosis/name_generation.cfg`):
- `apothic_attributes.cfg` -> `[combat_rules]` holds the damage formulas as **editable expressions**
(`Protection Formula`, `A-Value Formula`, `Armor Formula`, `Armor Toughness Formula`,
`Negative Armor Factor`=0.015). These are how you retune Apotheosis combat *without* a mod - useful
because Apotheosis's armour model is the thing players most often call "broken" in a pack with
Better Combat. `[general] Hidden Attributes` controls what shows in the attributes GUI (supports
namespace wildcards and `!` negation entries).
- `apothic_enchanting.cfg` -> `[client]` `Sculkshelf Noise Chance` = **200** (1-in-200 chance per
*client tick* to play a sculk shelf sound; `0` disables). Minor client perf/noise lever.
### 3.3 Open Parties and Claims - force-loading and ticking
**Replaces FTB Chunks** (removed 2026-09-30 in favour of Open Parties and Claims + Xaero's
World Map/Minimap; see `analysis/FTB-CHUNKS-SWAP.md`). Everything below is the OPAC equivalent of the
tuning this section used to document for FTB Chunks.
**DOCUMENTED** - OPAC's main config lives **inside the world save**, not the pack:
| File | Purpose |
| --- | --- |
| `world/serverconfig/openpartiesandclaims-server.toml` | Main server config (limits, protection, forceloading, party backend). |
| `world/serverconfig/openpartiesandclaims-*` | Global "player configs" (default player config, server-claim, expired-claim, wilderness). |
| `<server dir>/config/openpartiesandclaims-server.toml` | Reported location on Fabric/Quilt only. |
**Warning - stop the server before editing.** The README is explicit: the server may overwrite your
changes otherwise. Do **not** assume the file the server generated matches any list here; read the
generated file, which carries inline `# Default:` comments for every key.
**Easiest route for an admin:** in-game, the mod UI is bound to `'` by default. Claim/party commands
are `/oclaims`, `/oparties`, `/opac` and `/opm` (party chat). Server-wide options are still edited in
the file, not the UI.
**`defaultconfigs/` and packwiz cannot help here** - the file is in the world save, so it cannot be
shipped at all. See section 7.1.
Keys and defaults - **DOCUMENTED where the project's own issue quotes or README state them**, else
flagged:
| Key | Default | Why it matters |
| --- | --- | --- |
| `maxPlayerClaims` | 500 | Per-player claim cap. Same as FTB Chunks' `max_claimed_chunks`, so no capacity loss on the swap. Overridable via the `xaero.pac_max_claims` permission. |
| `maxPlayerClaimForceloads` | low/0 - **verify** | Per-player forceload cap. **This pack sets it to 25** (matching FTB Chunks' old `max_force_loaded_chunks`); the stock default is not 25, so leaving it unset silently removes forceloading. Overridable via `xaero.pac_max_forceloads`. |
| `claims.forceload.offlineForceload` | **verify** (documented as "true" in a 2021 issue, so possibly stale) | Force-loaded chunks stay loaded while the owner is **offline**. This is the OPAC equivalent of FTB Chunks' `chunk_load_offline`, and the same farms-vs-TPS trade applies: 25 forceloads x ~10 players is potentially 250 chunks ticking around the clock. |
| `primaryPartySystem` | built-in | **Left at OPAC's built-in default** - FTB Teams was removed along with FTB Quests, so the built-in system is now the only one. Pointing this at `ftbteams` would be a no-op that logs missing-mod noise. |
| `staticFakePlayers` | - | Position-bound fake players for automation (miners, auto-clickers). The analogue of FTB Chunks' `fake_players`. |
| `playerConfigurablePlayerConfigOptions` / `opConfigurablePlayerConfigOptions` | - | Which options players (and OPs) may change in their own config. Adding a key to these arrays is what exposes it - e.g. `claims.forceload.offlineForceload` is not player-changeable until listed. |
| protection exception lists | - | `forcedBlockProtectionExceptionList`, `forcedEntityProtectionExceptionList`, `itemUseProtectionExceptionList`, plus the optional per-claim groups. This is OPAC's answer to FTB Chunks' protection; modded blocks/entities that misbehave go here. |
**Recommended starting point for a ~10-player server:** keep `maxPlayerClaims = 500`,
`maxPlayerClaimForceloads = 25` (decided 2026-09-30), leave `primaryPartySystem` at the built-in
default, and take a deliberate decision on `claims.forceload.offlineForceload` - it is the same straight
farms-vs-TPS trade FTB Chunks' `chunk_load_offline` was, with a larger blast radius now that each player
may forceload 25 chunks.
**Reliability caveat - COMMUNITY (open upstream issues).** OPAC force-loading has a recurring "marked
the chunk but it does not actually stay loaded" failure mode with issues open at the time of writing
(#855, #927, plus #237/#528 further back). Because this pack's farm design leans on offline
force-loading, verify per-player forceloading on a staging world *before* trusting it, and re-test
after each OPAC bump.
Sources: <https://github.com/thexaero/open-parties-and-claims> (README: config locations, permission
nodes, `primaryPartySystem`, `staticFakePlayers`), <https://modrinth.com/mod/open-parties-and-claims>
(commands, keybind, FAQ; also states the mod is in beta),
<https://github.com/thexaero/open-parties-and-claims/issues/228> and
<https://github.com/thexaero/open-parties-and-claims/issues/731> (default keys and the
`offlineForceload` description), <https://github.com/thexaero/open-parties-and-claims/issues/855>
(force-loading reliability).
### 3.4 Distant Horizons - decide deliberately, and mind Chunky
**DOCUMENTED** - Distant Horizons has real server-side support and it is opt-in. From the official
"Server Owners" wiki:
- **DH >= 2.3 is required on a server**; older builds crash. The pack's 3.3.2 is fine.
- **"Using the same version / build on both the server and the client is strongly preferred."**
- Server support only engages if **"Distant Generation" is enabled on both server and client**;
the same applies to every toggle with a server-side counterpart.
- DH is **optional on both sides** - vanilla clients can still connect. So marking it optional in the
pack is correct and safe.
- Default settings need **>= 500 KB/s (4 Mbit/s)** per client. If players see "Timed out" kicks, lower
their client bandwidth settings.
- **"Pre-generating LODs is highly recommended to avoid performance issues."**
- **Warning: Chunky interaction:** *"Running Chunky will also generate & update LODs, but it's not
recommended to rely on this behavior for pre-generation. LODs and chunks are independent, and by
loading a lot of chunks quickly you risk overloading DH and ending up with a lot of holes. Either
use DH's pre-generation, or temporarily disable the mod entirely."*
**This pack has both Chunky and DH.** If you pregenerate with Chunky, expect DH LOD holes. Use
`/dh pregen` instead, or disable DH while Chunky runs.
Server-side config keys (use `/dh config <key>`; the command prints the current value, description and
the config file path, which is the reliable way to find the file):
| Setting | Purpose |
| --- | --- |
| `common.threadPreset` | CPU load preset for DH's worker threads. |
| `common.maxDataTransferSpeed` | Per-player bandwidth cap. |
| `generation.mode` | Set to `INTERNAL_SERVER` to generate chunks alongside LODs. |
| `generation.requestRateLimit` | Requests/second cap. |
| `generation.maxRequestDistance` | Per-player generation radius. |
| `generation.nSized` | Experimental: generate LODs directly at the required size. |
| `generation.bounds.x` / `.z` / `.radius` | Global generation area restriction (disabled while `radius` is 0). |
| `realTimeUpdates.playerDistance` | How far chunk updates are converted to LOD pushes. |
| `syncOnLoad.rateLimit` / `syncOnLoad.maxRequestDistance` | Login-time sync throttling. |
| `levelKeyPrefix` | **Required if several servers share a proxy** - set a unique string. |
Also: pregenerate **beyond the world border** if you use one, or clients will show LOD holes at the edge.
**Avoid running `/dh pregen` on a server people are actively playing on.**
Source: <https://gitlab.com/distant-horizons-team/distant-horizons/-/wikis/1-user-guide/1-frequently-asked-questions/5-server-owners/Server-Owners>
### 3.5 Diagnosing lag: spark is already installed
**DOCUMENTED** - `spark` 1.10.124 is in the pack, so no setup is needed. Per spark's own docs, ~30
seconds of profiling is enough for useful results.
Admin workflow:
- `/spark tps` - accurate TPS.
- `/spark health` - TPS, tick durations (min/avg/max), CPU usage, GC activity. **Start here.**
- `/spark profiler start --timeout 60` - sample the server; then `/spark profiler stop`.
Target specific threads with `--thread`, and record only slow periods to cut noise.
- Use GC figures from `/spark health` to decide heap/GC flags rather than guessing.
- On Linux x86_64 spark uses async-profiler via `perf_events`, which gives better results than the
fallback `ThreadMXBean` engine - worth knowing when comparing reports.
Docs: <https://spark.lucko.me/docs>
---
## 4. Client tuning and cross-mod conflicts
### 4.1 The SSRD -> Distant Horizons -> Sodium chain
**VERIFIED/DOCUMENTED.** SSRD ("Separate Sable Render Distance") is a *client rendering* addon that
exists to decouple Sable's sub-level render distance from the normal one.
- SSRD's own README: **"Distant Horizons or voxy AND Sodium MUST be installed on the Client!"**
- **Versions 1.8 and up REQUIRE Sodium 0.8.** The pack has Sodium 0.8.13 [OK] and SSRD 1.8.7 [OK].
- **But Distant Horizons is marked `optional = true, default = false` in the pack.**
**INFERENCE:** any player who leaves DH disabled gets a non-functional SSRD. Either ship DH by
default, or mark SSRD optional alongside DH so the two travel together.
- SSRD has **server-side gamerules**:
- `/gamerule ssrdMaxRenderDistance` - default **128** chunks (server-wide cap).
- `/gamerule ssrdForceloadLimit` - default **2** per player for `/ssrd forceload`.
- `/ssrd forceload` does not require op but respects that cap.
- SSRD README also warns: *"Certain Iris shader packs cause rendering issues."*
### 4.2 EntityCulling will break Ars Nouveau's spell visuals
**DOCUMENTED** - EntityCulling's README: *"Client-side entities, commonly used by magic mods for
animations, may not behave as expected. Whitelist the relevant entities via the config screen for tick
culling and/or entity culling."*
**INFERENCE:** this pack has Ars Nouveau, which uses client-side entities for spell/projectile visuals,
plus Create Aeronautics (Sable) and several mob mods with custom animations. EntityCulling has a wide
whitelist surface and its config screen supports per-entity toggles - expect to need it. EntityCulling
is a solid win in general (it is one of the biggest client FPS wins on busy servers), so whitelist
rather than remove.
### 4.3 Should you add shaders? Probably not yet
**DOCUMENTED**, two independent blockers:
1. **Create Aeronautics 1.1.3 README:** *"Aeronautics currently has visual issues when used with
**Iris Shaders**."*
2. **SSRD README:** certain Iris shader packs cause rendering issues.
Combined with the fact that the pack contains **no shader mod at all** (no Iris/Oculus) and that DH +
Sodium + Sable already form a tight, version-sensitive trio, adding shaders introduces a new
compatibility axis in exactly the most fragile part of the pack. **INFERENCE: leave shaders out** unless
you are willing to own that debugging surface.
### 4.4 Tectonic - optional terrain knobs
**VERIFIED** from Tectonic v3 config source. File: **`config/tectonic.json`** (DOCUMENTED via the
official changelog: "Added a proper config to the mod version at config/tectonic.json"). Keys and
defaults:
| Group | Key | Default |
| --- | --- | --- |
| `general` | `mod_enabled` / `snow_start_offset` | true / 128 |
| `global_terrain` | `vertical_scale` / `increased_height` / `lava_tunnels` | 1.125 / **false** / true |
| `continents` | `ocean_offset` / `continents_scale` / `erosion_scale` / `ridge_scale` | -0.8 / 0.13 / 0.25 / 0.25 |
| `continents` | `underground_rivers` / `river_lanterns` / `flat_terrain_skew` / `rolling_hills` / `jungle_pillars` | true / true / 0.1 / true / true |
| `islands` | `enabled` / `noise_scale` | true / 0.11 |
| `oceans` | `ocean_depth` / `deep_ocean_depth` / `monument_offset` / `remove_frozen_ocean_ice` | -0.22 / -0.45 / -30 / false |
| `biomes` | `temperature_multiplier` / `temperature_scale` / ... | 1.0 / 0.25 / ... |
Note `increased_height` is already `false` - good. It raises the build/generation ceiling to **y640**,
which is a meaningful worldgen and memory cost. **Do not enable it on a server.**
The Tectonic wiki (<https://github.com/Apollounknowndev/tectonic/wiki/Config>) explains every option;
the in-game mod-menu config screen shows them with tooltips.
---
## 5. Terralith + Tectonic - the combination is correct
**DOCUMENTED**, and this is a commonly-messed-up setup, so it's worth confirming it's right:
- Terralith's README: *"Terralith is **fully compatible with the mod version of Tectonic**."*
- Tectonic's README: *"Tectonic has a special version with Terralith compatibility. **This version is
shipped in the mod version of Tectonic**, but it is available as a standalone datapack
[Terratonic]."*
- Terralith's README: *"If you are using the **datapack** versions, you must use **Terratonic
instead** of Tectonic."*
The pack has **both as mods**, so the Terralith-compat layer is already active.
**Do not add Terratonic** - it is for the datapack route and would conflict.
### 5.1 Terralith updates require a new world
**DOCUMENTED** - Terralith's README: *"It is **not recommended to add Terralith to an existing world**
- reset yours first, or use a new world."*
Also relevant: *"In 2.6.0, the **mod** version of Terralith relies on **Lithostitched** as a required
dependency."* The pack has Terralith **2.5.8** and **already ships Lithostitched 1.8.0**, so the
eventual 2.6.x update is dependency-safe. **But it is a worldgen change - new worlds only.**
**INFERENCE / worth checking:** if the live server world predates the addition of Terralith (the pack
added it recently), terrain seams and abrupt biome transitions are expected and are not a bug.
---
## 6. Cross-mod notes worth knowing
### 6.1 Apothic Combat silently disables the attack-range affix
**DOCUMENTED** - from the Apothic Combat README (the "Better Combat x Apotheosis Compat" mod):
The problem it solves: Apotheosis adds a "Heavy Weapon" category (loosely like Better Combat's
two-handed weapons, but unrelated), and **Apotheosis/Forge treat attack range as an entity attribute**
that grows with gems and affixes, while **Better Combat defines attack range as an immutable weapon
property** in its own JSON format - so they cannot both work.
What the compat mod does:
- Registers all two-handed Better Combat weapons automatically as `HEAVY_WEAPON` for Apotheosis.
- **"Removes the Entity Reach Attribute from all weapons, and makes the attack range affix
nonfunctional."**
**Player-facing consequence:** any gem/affix investment in attack range does nothing in this pack.
That is a legitimate thing to tell players, and if you want, the README notes that *disabling the
Apotheosis Attack Range affix from appearing at all* is possible via datapack.
Source: <https://modrinth.com/mod/apothic-combat>
### 6.2 Apotheosis enchanting vs other enchanting overhauls
**COMMUNITY.** The well-known Apotheosis enchanting-table conflict is with **Quark**, which is *not* in
this pack, so that specific issue does not apply. No verified conflict with Ars Nouveau's enchanting
was found. Flagging only that both touch the enchanting system; if you see an enchanting-table UI
problem, test with Apothic Enchanting disabled first.
### 6.3 Lootr - exact keys, and one gotcha
**DOCUMENTED** - file **`config/lootr-common.toml`**. Lootr **must be installed on both client and
server** (its FAQ is explicit). Selected keys and defaults:
| Key | Default | Notes |
| --- | --- | --- |
| `disable_break` | false | Prevents breaking Lootr containers except sneaking in **creative**. |
| `blast_resistant` | false | Makes Lootr containers explosion-proof. |
| `decay_all` | false | **All** chests decay after first open (overrides the per-list options). |
| `decay_value` | 6000 | Ticks for a decaying container to decay (5 min). |
| `decay_dimensions` / `decay_modids` / `decay_loot_tables` | `[]` | Targeted decay. |
| `refresh_all` | false | **All** chests refresh after first open. |
| `refresh_value` | 24000 | Ticks to refresh (20 min). |
| `refresh_dimensions` / `refresh_modids` / `refresh_loot_tables` | `[]` | Targeted refresh. |
| `convert_wooden_chests` / `convert_trapped_chests` / `convert_mineshafts` | true | Conversion scope. |
| `convert_quark` | true | Quark isn't in this pack; harmless. |
| `skip_unloaded` | true | Skip containers in unloaded chunks (queued for later). |
| `maximum_age` | 3600 | How long a container may sit in the conversion queue (180x20 ticks). |
| `loot_modid_blacklist` / `loot_table_blacklist` / `dimension_blacklist` / `dimension_whitelist` | `[]` | Exclusions. |
| `power_comparators` | true | Comparators output 1 - **important for trap-based structures**; `false` makes traps fire on load. |
| `report_unresolved_tables` | false | Log unresolved loot tables. |
| `randomise_seed` | true | Warning: see caveat below. |
| `vanilla_textures` | false | Client-side; hides Lootr textures. |
Two things to flag:
- **Warning: `randomise_seed`'s documentation is contradictory** in the official wiki - the Forge section
and the Fabric section describe opposite behaviours. **Do not change this key on the strength of the
wiki alone**; test on a scratch world first.
- **Warning: Structure blacklists do not work on 1.21.1.** The wiki states plainly: *"structure blacklists
are not functional outside of 1.16.5 due to tagging and holder changes."* So `decay_structures` and
`loot_structure_blacklist` are dead keys here. Don't waste time on them.
Lootr interacts with the pack's structure mods (When Dungeons Arise, the nine YUNG's mods) and with
Apotheosis loot tables by converting their chests. If a specific structure's loot behaves oddly, the
`loot_table_blacklist` / `loot_modid_blacklist` route is the supported fix - not the structure keys.
### 6.4 Known compatibility risks to keep on the radar
- **Sable / Create Aeronautics** - self-described as highly intrusive and mixin-heavy. If you get a
weird crash or a visual bug you can't explain, **test with Sable removed first**. The five Sable
compat addons in the pack (`sablecompat`, `aeronauticscompat`, `gravestone_sable_compat`,
`waystonessable`, `sablejade`) exist precisely because it needed patching.
- **Create declares `radium` and `palladium` incompatible** - this rules out the most obvious
"add more server performance mods" candidates. See section 7.
---
## 7. Config mechanics - how to actually apply any of this
This is the part that decides whether the rest of the document is usable.
**DOCUMENTED** (NeoForge config docs) - three locations, and they behave differently:
| Location | Scope | Synced to clients? |
| --- | --- | --- |
| `config/` | Global, both sides | Depends on config type |
| `world/serverconfig/` | **Per-world override** of `SERVER`-type configs | Yes - server wins |
| `defaultconfigs/` | Seeds new worlds | n/a |
- `SERVER`-type configs are **synced from server to client** and can be overridden per world in
`world/serverconfig/`. `STARTUP` / `COMMON` / `CLIENT` are **not synced**.
- Server configs are only editable via the in-game screen on a local world; they are greyed out on a
multiplayer server - so on a real server you edit the files.
- **The Apotheosis stack is the exception:** those are Placebo `.cfg` files under
`config/apotheosis/` (+ `config/apothic_spawners.cfg`) and are **not** NeoForge `SERVER`-type
configs, so they are not synced and not per-world. They're plain global files you edit directly.
**This also means `defaultconfigs/` will not seed them** - see 7.1.
### 7.1 The pack currently cannot ship server configs
**VERIFIED** - `.packwizignore` contains:
```
config/
defaultconfigs/
```
So **every** config is excluded from the pack index. Consequences:
- None of the tuning in section 3 can be delivered to players or to a fresh server via the pack as it stands.
- A fresh server generates stock defaults for everything.
This is a cleaner end state than before: the only config the pack used to ship was the FTB Chunks
minimap client file, and it left with FTB Chunks (section 3.3).
**Recommendation (INFERENCE):** if you want these settings to be part of the pack rather than tribal
knowledge, un-ignore the specific files you care about (a `!config/<path>` rule alongside the `config/`
ignore) and/or use `defaultconfigs/` for per-world `SERVER`-type defaults.
**Caveat - the systems this document tunes are mostly unreachable from packwiz.**
- **OPAC** keeps its main config in `world/serverconfig/`, inside the world save. Not shippable, ever.
- the **Apotheosis stack** uses Placebo `.cfg` files, which `defaultconfigs/` does not seed.
The one exception now worth knowing: **Xaero's** server-side settings live in `<server dir>/config/xaero/`
(`world-map`, `minimap`), so a `!config/xaero/*` rule *would* let the pack ship enforced map profiles
if that is ever wanted. Those configs also register the status effects that block non-modded clients,
so shipping them has a real consequence - see the Xaero's pages before doing it.
Note the `.packwizignore` also excludes `*.json` globally, which would also exclude
`config/tectonic.json` even if `config/*` were relaxed. It needs an explicit `!` rule.
### 7.2 Installing on the server
**DOCUMENTED** - use the server side flag so client-only mods are skipped:
```
java -jar packwiz-installer-bootstrap.jar -g -s server <pack-url>
```
`-g` disables the optional-mods GUI, `-s server` downloads only server-side mods. Because every
`side = "client"` flag in this pack is already correct (section 1.1), this produces a correct server mod list
automatically.
---
## 8. Prioritised recommendations
Ordered by value / risk. **P0 items are the ones I'd do first.**
| # | Pri | Change | Where | Evidence |
| --- | --- | --- | --- | --- |
| 1 | **P0** | Set `Entity Despawn Delay` to `0`-`100` (from 600) | `config/apothic_spawners.cfg` -> `[general]` | VERIFIED source |
| 2 | **P0** | Decide `claims.forceload.offlineForceload` (true = farms run while owners are offline, costs TPS); set `maxPlayerClaimForceloads` to 25 | OPAC server config, `world/serverconfig/openpartiesandclaims-server.toml` | DOCUMENTED |
| 3 | **P0** | Leave `primaryPartySystem` at the built-in default (FTB Teams is gone; pointing it at `ftbteams` is a no-op) | OPAC server config | VERIFIED |
| 4 | **P0** | Fix SSRD/DH mismatch: ship DH by default, or mark SSRD optional with it | `mods/*.pw.toml` | VERIFIED + DOCUMENTED |
| 5 | **P0** | Whitelist Ars Nouveau (and Sable/Create) entities in EntityCulling | client config screen | DOCUMENTED |
| 6 | P1 | Raise `spreadFactor` for the expensive structure sets via `customSpreadFactors` (use `/dumpstructuresets`) | `config/sparsestructures.json5` | VERIFIED source |
| 7 | P1 | Cap SSRD via `/gamerule ssrdMaxRenderDistance` (default 128 chunks) | server command | DOCUMENTED |
| 8 | P1 | Pregenerate with `/dh pregen`, **not** Chunky, or disable DH while Chunky runs | server | DOCUMENTED |
| 9 | P1 | Raise `Boss Spawn Cooldown` above 3600 if invader load is heavy | `config/apotheosis/apotheosis.cfg` -> `[bosses]` | VERIFIED source |
| 10 | P1 | Establish a `/spark health` -> `/spark profiler` baseline before and after changes | server | DOCUMENTED |
| 11 | P1 | Un-ignore the specific configs you want shipped (or adopt `defaultconfigs/`) | `.packwizignore` | VERIFIED |
| 12 | P2 | Consider NeoForge 21.1.251 -> 21.1.252 | `pack.toml` | VERIFIED |
| 13 | P2 | Tell players the attack-range affix is inert (Apothic Combat) | player comms | DOCUMENTED |
| 14 | P2 | Decide on the 23 outdated pins (Terralith 2.6.2 is **new-world only**) | `mods/*.pw.toml` | VERIFIED |
| 15 | P2 | Leave `increased_height: false` in Tectonic; never add Embeddium/Radium/shaders | various | VERIFIED/DOCUMENTED |
| 16 | P2 | Set `levelKeyPrefix` if you ever run multiple servers behind a proxy | DH server config | DOCUMENTED |
---
## 9. Not verified / open questions
Listed so nobody mistakes absence of evidence for evidence of absence.
1. **Client-side performance options not yet reviewed in depth** - Distant Horizons' client quality/
thread presets, ImmediatelyFast, Dynamic FPS, EMF/ETF, Fusion/Athena, Legendary Tooltips, Prism.
These are very likely fine at defaults; DH's client quality preset is the one worth player guidance.
2. **Missing server-side performance mods not yet assessed** - ServerCore, Noisium, Clumps,
Connectivity, Packet Fixer, ThreadTweak on NeoForge 1.21.1, and whether each overlaps with the
already-installed Lithium/ModernFix/FerriteCore/AllTheLeaks. **Note Create's declared
incompatibility with Radium and Palladium**, which removes two candidates. Do not add anything here
without checking for overlap with Lithium and ModernFix first.
3. **Create / Sable / Aeronautics config surface** - not yet read from source. SSRD and the Sable
gamerules in section 4.1 are the only Sable-family settings verified so far.
4. **FTB Backups 3** config keys (interval, retention, compression) - not yet verified. Relevant to
disk/IO on the server.
5. **Waystones, GraveStone, Sophisticated Storage/Backpacks, Curios, Artifacts** config keys - not yet
verified.
6. **JVM flags / heap sizing** for this pack size - not yet researched. Use `/spark health` GC data
(section 3.5) to decide empirically rather than copying generic flags.
7. **`server.properties` / gamerule tuning** (view-distance vs simulation-distance, entity cramming,
mobcaps, `network-compression-threshold` for large modded packets) - not yet verified.
8. **Exact `dungeons_arise` / `t_and_t` structure-set names** - use `/dumpstructuresets`.
9. **Lootr `randomise_seed` semantics** - the official wiki contradicts itself; test before changing.
10. **The 5 CurseForge-sourced mods** (FTB Backups 3, FTB Library, AllTheLeaks, Collapsible Groups,
Twilight Forest) could not be version-checked by packwiz for currency without a CurseForge API key.
The FTB Chunks swap plus the later FTB suite removal cut this blind spot from nine mods to five.
---
## Appendix A - Verified config file paths
| Mod | File | Format |
| --- | --- | --- |
| Tectonic | `config/tectonic.json` | JSON |
| Sparse Structures | `config/sparsestructures.json5` | JSON5 |
| Apotheosis (adventure) | `config/apotheosis/apotheosis.cfg` | Placebo CFG |
| Apothic Attributes | `config/apotheosis/apothic_attributes.cfg` | Placebo CFG |
| Apothic Spawners | `config/apothic_spawners.cfg` (config root - see note in section 3.2) | Placebo CFG |
| Apothic Enchanting | `config/apotheosis/apothic_enchanting.cfg` | Placebo CFG |
| Apotheosis name generation | `config/apotheosis/name_generation.cfg` | Placebo CFG |
| Open Parties and Claims | `world/serverconfig/openpartiesandclaims-server.toml` (main server config - inside the world save) plus `openpartiesandclaims-*` player configs alongside it | TOML |
| Xaero's World Map / Minimap | server-side: `config/xaero/world-map`, `config/xaero/minimap`; client map + waypoint data under the instance `xaero/` directory | TXT / binary |
| Lootr | `config/lootr-common.toml` | TOML |
| Distant Horizons | use `/dh config <key>` to print the path | TOML |
## Appendix B - Sources
- Modrinth API v2 (`/project/{id}`, `/version/{id}`, `/project/{id}/version?game_versions=["1.21.1"]`) - pack inventory, sides, incompatibilities, version currency.
- All 131 mod jars - `META-INF/neoforge.mods.toml` (dependencies, sides, declared incompatibilities).
- Apotheosis stack config source: `Shadows-of-Fire/Apotheosis@1.21`, `Apothic-Spawners@1.21`, `Apothic-Attributes@1.21`, `Apothic-Enchanting@1.21`, `Placebo@1.21`.
- Sparse Structures: `MaxenceDC/sparsestructures@1.21` (`Constants.java`, `sparse-structures-default-config.json5`).
- Tectonic: `Apollounknowndev/tectonic@v3` (`config/state/ConfigState.java`), Tectonic wiki `/wiki/Config`, official changelog for `config/tectonic.json`.
- NeoForge config docs: <https://docs.neoforged.net/docs/misc/config/>
- Distant Horizons server owners wiki: <https://gitlab.com/distant-horizons-team/distant-horizons/-/wikis/1-user-guide/1-frequently-asked-questions/5-server-owners/Server-Owners>
- OPAC README and Modrinth page (config locations, permission nodes, `primaryPartySystem`, `staticFakePlayers`, commands, beta status): <https://github.com/thexaero/open-parties-and-claims>, <https://modrinth.com/mod/open-parties-and-claims>
- OPAC default keys and `offlineForceload` semantics (issue quotes): <https://github.com/thexaero/open-parties-and-claims/issues/228>, <https://github.com/thexaero/open-parties-and-claims/issues/731>
- OPAC force-loading reliability reports: <https://github.com/thexaero/open-parties-and-claims/issues/855>, <https://github.com/thexaero/open-parties-and-claims/issues/927>
- Xaero's World Map / Minimap server-side config locations and modpack terms: <https://modrinth.com/mod/xaeros-world-map>, <https://modrinth.com/mod/xaeros-minimap>
- Lootr wiki: <https://github.com/LootrMinecraft/Lootr/wiki/Lootr-Configuration>
- spark docs: <https://spark.lucko.me/docs>
- Modrinth/CurseForge project pages and READMEs for Sable, Create Aeronautics, SSRD, Terralith, EntityCulling, Apothic Combat, FerriteCore, Lithium, Chunky.