Tags
Creators
Details
Licensed MIT
Published 3 months ago
All versions
v2.1.4+1.21.1
Release
NeoOrigins v2.1.4 (MC 1.21.1)last month 608
Compatibility
Minecraft: Java Edition
1.21.1
Platform
NeoForge
Supported environments
Client and server
Changes
Bug Fixes
origins:exhaustdrained hunger ~268× the intended amount. The legacy compat translator routedorigins:exhaustto a Route A food modifier withop: "set", andModifyFoodRegistryre-applies that modifier on every food refill — so each bite of food re-stamped the exhaustion value instead of ticking it once per interval. Moved to Route B (parseExhaust): ticksplayer.causeFoodExhaustion(amount)on a hashed offset of the configuredintervalso the cost lands exactly once per period regardless of food intake.conditionblock honored. Accepts bothexhaustionandamountfor the field name.effect_immunityids without a namespace silently mismatched the effect registry. Pack authors writing"wither"(Apoli-style unqualified id) didn't equalMobEffect's registered"minecraft:wither", so the immunity check looked up the wrong key and the player still took the effect.translateEffectImmunitynow routes every id through acanonicalizeEffectIdhelper that prependsminecraft:when the namespace is missing.origins:self_action_when_hitignoredbientity_action,cooldown, andcondition. The Route B parser only parsedentity_action, so packs porting Apoli'sbientity_actionshape (where the action needs the attacker reference) silently lost their behavior, and the cooldown/condition gates were dropped. NewBiEntityAction+BiEntityActionParsercoversdamage,add_velocity,apply_mob_effect,set_on_fire, andinvert.parseSelfActionWhenHitnow wires cooldown + condition;CombatPowerEventspublishes the activeHitTakenContexttoActionContextHolderaround theonHitdispatch so the bi-entity lambda can resolvetarget = source.getEntity()without re-traversing the event.origins:modify_jump'sentity_actionwas parsed but never fired. The field was read into a local variable and immediately thrown away — so Apoli-style jump-velocity boosts, "explode on jump", or any other configured action silently no-op'd, leaving the power as a plain attribute modifier. NewJumpActionRegistrystores the parsed action on grant;JumpEventHandlerfires it fromLivingJumpEvent(server players only). Cleaned up on logout and on power revoke.origins:recipecouldn't carry an inline recipe body (1.21.1 only). Pack authors had to ship a separatedata/<ns>/recipe/...jsonfile even when the recipe was Origins-specific and only used by one power.parseRecipenow also accepts an inline JSON object in therecipefield;InlineRecipeRegistrycollects pending bodies during the datapack reload and injects them viaRecipeManager#replaceRecipesonOnDatapackSyncEvent. Caveat: the resulting recipe is globally craftable — the inline form only controls recipe-book visibility, not the craft gate. The 26.1 jar doesn't ship this:RecipeManageron 26.1 stores recipes in an immutableRecipeMapwith noreplaceRecipeshook, so inline bodies log a one-shot warning and are skipped there. String-id pointers in therecipefield continue to work on both branches.PreventActionPower's SWIM and ELYTRA enforcement was a no-op. Holder dispatch fires fromPlayerLifecycleEvents.onPlayerTickon the.Prephase, but vanilla'sLivingEntity#travel()and swim-flag update run after the .Pre tick the same frame and overwrite anything we reset — so Earth Mage's "can't swim" ability was settingswimming = falseonly to have vanilla immediately set it back to true. Moved SWIM/ELYTRA enforcement out ofonTickinto a newPreventActionPostTickHandlersubscribed toPlayerTickEvent.Post, which runs after vanilla physics. FIRE fire-tick clearing stays ononTicksince it's not state vanilla touches the same tick.- Compat raycast lacked
shape_typeand along-ray actions (1.21.1 only).parseRaycastonly supported a point-hitcommand/entity_action/block_actiontriple — packs that wanted to scan voxel space (e.g. fire-along-ray, glow-trace) had no way to express it. Addedshape_type(collider/visual/outline) to control the clip mode, pluscommand_along_ray+command_stepthat walks the ray incommand_step-block increments executing the command at each step, breaking on the first command exception. Master/26.1 doesn't haveparseRaycastat all and isn't a hotfix scope — the along-ray feature will land there as part of the next raycast backport.
Optional dependencies
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:RUtQ9kfe:RZ5b3s64"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:RUtQ9kfe:RZ5b3s64"
}


