Added dimension takeover

- IrisDimension borrowedDimensionType reuses an existing registered dimension type instead of generating one
- Pack validation rejects borrowedDimensionType values that are not namespaced registry keys
- Generation contracts record the borrowed type key and capture it as an external registry definition
- Borrowed types bind when the pack min equals the type min_y and the pack top fits, with both ranges in the refusal
- Studio hotload rejects borrowed type changes and the world check validates borrowed ranges
- Forced datapack skips generated types and presets for borrowed dimensions and accepts retained borrowed epochs
- modded.json dimensionTakeovers writes a LevelStem per level key using the irisworldgen:iris generator
- Takeover changes quarantine the level chunk, entity, POI, and Iris data before load and track applied state per world
- Fresh levels adopt generation history with content-addressed biomes instead of legacy aliases
- /iris world takeover <dimension> <pack[:dimension]|off> with help and translations in every locale
This commit is contained in:
Brian Neumann-Fopiano committed 2026-10-14 20:16:36 -04:00
1 parent 8afb445b1d
commit 5633eec009
52 files changed
+1365 -95

No files matched your search

@@ -41,8 +41,8 @@ final class HeadlessGenerationHistorySession {
String fingerprint = GenerationPackFingerprint.compute(pack, GenerationPackFingerprint.CURRENT_VERSION);
GenerationRegistryContract registryContract = GenerationRegistryContractFactory.create(
data, dimension, fingerprint, fixer, registries, generationRegistry);
String dimensionTypeKey = generationRegistry.dimensionTypeResourceKey(
data.getDataFolder().getName(), dimension.getLoadKey(), dimension.getDimensionTypeKey());
String dimensionTypeKey = dimension.dimensionTypeResourceKey(
generationRegistry, data.getDataFolder().getName());
GenerationEpoch.DimensionContract dimensionContract = GenerationEpochContractFactory.create(
dimension, dimension.getLoadKey(), dimensionTypeKey);
return new GenerationHistory.FreshCreation(request.worldRoot(), pack, fingerprint, request.seed(),