5.9 KiB
Live block-instability profiling (0.5.8.11–0.5.8.17)
Mystcraft Legacy measures the abundance of watched blocks in generated chunks,
compares that abundance with a baseline, and adds only positive excess to the
Age's instability. Its InstabilityBlockManager and ChunkProfiler are
available in the user's local 0.13.7.06 archive. Legacy's Age-side threshold
is more than 400 profiled chunks; its default tolerance is 1.05. The Legacy watched
blocks include coal, lapis, iron, emerald, redstone, gold and diamond ores,
quartz ore, glowstone, and crystal blocks. Diamond blocks are not on that
default list, but are included here at the player's request.
Rivencraft samples up to 1,024 distinct loaded chunks per dimension,
at most four per server tick. While a player is in an Age, it also gradually
generates unsampled chunks around that Age's spawn and the Overworld spawn,
at most one chunk per second across both dimensions, until their minimum
sample counts are reached.
The Overworld is sampled as the baseline; an Age needs 401 samples and the
baseline needs 500 before the live block component contributes points. Counts and sampled chunk
positions persist per dimension, preventing reloads from double-counting.
For each watched block, Rivencraft compares average blocks per sampled chunk
and charges max(0, Age average − 1.05 × Overworld average) × weight, rounded
to the nearest point. The block component is capped at 100,000 points.
Legacy weights are used for its watched blocks: coal/lapis 5, iron 60, emerald 200, redstone 250, gold 750, diamond 4,000, quartz/crystal 20, and glowstone 50. Deepslate variants inherit their ore's weight. Modern/high-value extensions include diamond, emerald, gold, iron, raw gold, raw iron and netherite storage blocks, plus ancient debris. Netherite blocks cost 8,000 per excess block per sampled chunk; ancient debris costs 4,000.
Other mods remain optional. When an installed mod registers common-tagged ores
or storage blocks, recognizable *_ore blocks, or source-fluid blocks,
Rivencraft automatically includes those blocks in live profiling. The source
fluid weight is 1.25; common mineral names such as tin,
lead, zinc, silver, uranium, platinum, and iridium have explicit tiers, while
other tagged ores use 60 and other tagged storage blocks use 120. The optional
instability_modded_materials.block_weight_overrides list accepts a full-block
modid:block_id=points entry to cover a block without common tags or replace
its inferred weight; zero excludes it. Block entities and non-source fluid
plants are excluded. Rivencraft never requires any particular content mod.
Profiles written before 0.5.8.17 did not retain all modded material counts, so their block sample data resets and is collected again after upgrade. The saved Age definition and authored score are not changed. Later config changes can rescore materials already captured in the profile; a newly added override for a block that was not previously recognized needs fresh samples.
The authored score and provider plan remain saved as the Age's immutable base.
Only Ages created with instability schema v2 participate; existing v1 Ages
retain their previously frozen scores/plans, including neutral pre-scoring
Ages. This avoids silently rescoring existing worlds.
The live block component creates a deterministic effective score and
provider plan from that base plus the persisted profile; new cards can become
active as sampled abundance rises. The command /rivencraft age instability
shows both the saved base and the currently profiled block component. An
unloaded Age has no active profile view until its dimension is loaded again.
Turning an effect off does not delete counts or reroll the same effective plan.
This is not byte-for-byte Legacy profiling. Legacy has a spatial accessibility map and two factors per block, actively builds a dummy-world baseline, and can recompute after subsequent chunk profiling. Rivencraft uses a simpler per-chunk abundance metric, a real-world Overworld baseline, a sample/work cap, and a saved authored base so modern servers remain bounded and restart-safe. The greater-than-400-chunk activation delay is retained. Already-explored chunks count when reloaded, but the bounded spawn-area pass can generate additional terrain. A mod that mutates blocks after the chunk-load event may not be reflected in the first sample.
Manual check handed to the player
The first focused GameTest run after adding the chunk-load listener stalled in its initial 50-test batch and was stopped. It is not a passing test result. Do not retry that stalled scenario automatically. In a disposable world:
- Create one Age with an authored Diamond Block + Rocks (or Floating Islands)
combination and a comparison Age using Stone for the same feature. Explore
enough distinct chunks in each Age for
/rivencraft age instabilityto show a profiled-block contribution. Explore the Overworld too if its baseline has not reached 400 chunks. The diamond Age should score higher and can gain provider cards; the stone Age should not get a diamond-block contribution. - Leave and restart the world. Re-enter both Ages and compare their scores and provider IDs/levels. Reloading old chunks must not increase the sample count or score by itself. Generating more diamond-rich chunks may change the effective score and provider set; disabling instability must suppress their effects without erasing the profile.
- Check a naturally generated diamond-ore Age without authored diamond-block features. If its ore abundance is near the Overworld baseline, it should receive little or no ore contribution. Check that profiling does not make chunk loading noticeably stall, and report any exception or server hang.
Do not use a valued save for this check. The player reported an in-game pass for the 0.5.8.18 candidate on 2026-10-12. The three detailed scenarios above remain useful for future regression runs; the report does not establish that each was exercised individually.