Links
Tags
Creators
Details
2.0.0+neoforge-1.21.1
Compatibility
Changes
The rule-adaptation layer becomes an open extension point, terrain shape gets a copy-free hook mechanism, and the library ships as a proper Gradle dependency.
Datapacks are unaffected. Every 1.x datapack loads unchanged: the isekai:
dispatch prefix is accepted as a deprecated alias (logs one warning per id), and all
existing payload schemas are byte-for-byte compatible. The breaking changes are on the
Java API only (see below) — this is a major bump because the SPI interfaces changed
shape, not because datapacks broke.
Breaking (Java API)
The five in-house dispatch interfaces — SpatialPredicate, RemapStrategy, BiomeZone,
SurfaceAnchor, TransitionRule — are now registry-backed extension points instead of
sealed codec unions:
sealedis removed from all five. Exhaustiveswitchstatements over their variants no longer compile — handle them through their behavior methods or adefaultbranch.String typeId()is removed from all five. To recover a variant's registered id, ask the registry:registry.getKey(variant.codec()). The registry keys live inapi/registry/IsekaiRegistries.- New abstract methods carry each interface's evaluation contract:
SpatialPredicate.test(EvaluationContext),RemapStrategy.remap(VerticalRange, RemapContext),SurfaceAnchor.resolveY(PlacementContext, BlockPos). Custom Java implementations must supply them.
Datapack authors and consumers who only use the built-in variants from JSON are unaffected.
Added
- Open SPI. Third parties register their own variant of any of the five interfaces from
their own mod id by adding a
MapCodecto the matching registry inapi/registry/IsekaiRegistries— no fork, no PR. See docs/DATAPACK_REFERENCE.md → "Extending the SPI". api/predicate/EvaluationContextandapi/remap/RemapContext— the world-access and math seams that varianttest/remapimplementations receive.isekai_api:hooked_overworldpreset +hook/final_densitydensity function. A new dimension references the preset and overrides one small hook file to change terrain shape — no 2500-linenoise_settingscopy. A whole floating-island world is two files. (README)- Terrain-relative ore remap —
isekai_api:column_local(RemapStrategy),isekai_api:world_floor(SurfaceAnchor) andisekai_api:column_relative(placement modifier). Every other remap strategy produces one absolute Y band per feature, which can only ever be right for terrain at one altitude;column_localnormalizes a feature's vanilla Y to a depth and resolves it against each column's own surface and underside as the feature is placed. Floating islands, orbiting planets and sky continents get the same internal ore layout whatever height they sit at.RemapStrategygained aremapToColumn(VerticalRange, RemapContext)default method returningOptional.empty(), so every existing strategy — built-in or third-party — keeps the absolute behaviour unchanged. isekai_api:vanilla_overworld_surface— a delegateSurfaceRules.RuleSourcethat reproduces the vanilla overworld surface rule, so overworld-replacement datapacks skip the 30 KB surface-rule copy.- Distribution as a Gradle dependency:
sourcesandjavadocjars, and a maven repo. See docs/COMPATIBILITY.md.
Changed
- Dispatch prefix unified to
isekai_api:. All"type"values normalise to theisekai_apinamespace; docs and examples use it throughout. - Inline
apply_worldshape/apply_worldshape_structuresmodifier forms are superseded by the_refforms.
Fixed
isekai_api:worldshape_surface_topself-gates to the surface layer. Prepended bare into asurface_rulesequence it replaces only the topmost surface block; the blocks beneath keep the underlying surface rule's output. Nominecraft:stone_depthwrapper is required, and wrapping it in one is harmless.
Deprecated
- The bare
isekai:dispatch prefix — accepted with a one-time warning, removed in the next major. Rewrite"type": "isekai:*"to"type": "isekai_api:*". - Inline modifier forms — use the
_refforms. Same one-major grace.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:oOnyg3AS:JnhdU5qQ"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:oOnyg3AS:JnhdU5qQ"
}

