File Details
NeoOrigins v2.1.3 (MC 1.21.1)
- R
- May 25, 2026
- 2.06 MB
- 305
- 1.21.1
- NeoForge
File Name
neoorigins-2.1.3+1.21.1.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
NeoOrigins v2.1.3
Built for Minecraft 26.1 / 26.1.1 / 26.1.2 and 1.21.1 with NeoForge.
v2.1.3
Bug Fixes
origins:set_resourceaction was a silent no-op. The legacy compat layer rewroteorigins:set_resourcetoneoorigins:set_resourcebut the action dispatcher had no arm for it, so packs porting from Origins++ saw the action listed as "unknown" with no effect. Wired the dispatch arm to readresource+value(or fallbackchange) and write throughCompatAttachments.resourceState(). Same commit aliasesxp_levelsto the existingxp_levelcondition (Apoli's plural form) and adds a newsaturation_levelentity condition readingFoodData.getSaturationLevel().origins:flame_particlesfailed codec validation. Route B's WELL_KNOWN synth emitted a fieldlessneoorigins:particlestub andParticlePower.CODECrejected the entry withparticle: missing or unknown 'particle' field, dropping the whole power. Synth now passesminecraft:flameas the default particle id so legacyflame_particlesreferences load.- Legacy
forge:attribute ids resolved to nothing on NeoForge. Packs authored against Forge-era Origins++ pinned attributes likeforge:generic.entity_reach, which NeoForge re-registered underneoforge:entity_reach.AttributeModifierPower.resolveAttributenow retries any unresolvedforge:*id under theneoforge:namespace withgeneric./player.prefix permutations, so existing packs don't need to be rewritten. - Origin layer screens displayed the raw layer id instead of
the layer JSON's
namefield.OriginInfoScreen.getLayerDisplayNameandOriginEditorScreen.drawLayerLabelsboth fell back to the translation key / capitalized path even when the layer had a populatedname. Both screens now readlayer.name()first, only falling back to the translation key / prettified path if blank. - Warding Presence ignored its toggle. The spawn-cancel
handler used
forEachOfType, which doesn't consultAbstractTogglePower.isToggledOff— turning the power off in the HUD still suppressed mob spawns. NewforEachOfTypeActivehelper onActiveOriginServicegates toggleable powers; event handlers reading toggle-style powers must use it. (OnlyonTickhonors the toggle automatically.) - Warding Presence was a no-op for monsters at the default
radius. The power's radius default was 24, at or below
vanilla's
MobCategory.MONSTER24-block player-distance spawn rule — so monsters were already blocked by vanilla and the power did nothing for the case authors actually wanted. Stoneguard's JSON now sets radius 36 explicitly; the code default stays at 24 to force pack authors to opt in to a meaningful radius. longer_potionsdidn't extend the first dose.MobEffectEvent.Addedfires before vanillaLivingEntity#addEffectinserts the instance intoactiveEffects. The old handler re-calledsp.addEffect(extended)from inside the event; the nested put ran first, then the outer vanilla put overwrote with the original un-extended instance. Net result: first dose looked normal, subsequent doses extended correctly via the merge path. Now mutates the incomingMobEffectInstanceviaupdate()so vanilla's subsequent put sees the already-extended values.- Cook food bonus stripped
eatSeconds, consume effects, andusingConvertsTo(1.21.1 only). The bonus rebuiltFoodPropertiesthroughFoodProperties.Builder, which only exposes nutrition / saturation /canAlwaysEat— so suspicious stew lost its random potion effect when boosted, golden apple lost regen, bowls/bottles no longer returned an empty container. NewrebuildFood()helper goes through the builder for the bonus fields then constructs the record directly to copy the remaining fields through unchanged. Wayfarer's smoker bonus (MoreSmokerXpPower) gets the same treatment, and re-reads the FOOD component before rebuilding so it stacks cleanly on top of Cook's earlier rebuild when a player has both. The bug is 1.21.1-specific: 26.1'sFoodPropertiesrecord no longer carrieseatSeconds/usingConvertsTo/effects(Mojang moved them toDataComponents.CONSUMABLEandDataComponents.USE_REMAINDER), so the boost path never touches them and the original symptom can't reproduce. MobsIgnorePlayerhad no way to disable retaliation. By default the power lets vanilla'sgetLastHurtByMob()window apply — once the player hits an "ignoring" mob, the mob is allowed to target back briefly so combat feedback loops still work. Pack authors who wanted true peace (Bonewalker, druidic neutrality, etc.) had no knob to turn that off. Newpassive: trueconfig flag bypasses the retaliation window so the mob never targets the player even if attacked first. Defaultfalsekeeps existing pack behavior intact.[CompatB]parser warnings deduped per reload. Pack-port sessions were dumping hundreds ofWARNlines during datapack load — one per occurrence of every unsupported action/condition/modifier op. One porting log had 268 such lines (22% of bootup output) that collapsed into 6 unique action types + 4 unique condition types. NewCompatWarningCollectorbatches parser-side warnings (unsupported actions / conditions / item-actions / item-conditions, modifier defaults, parse errors, malformed SNBT, per-power compile failures) during a session held open byOriginsCompatPowerLoader.apply(), then emits one sorted summary block at the end. Outside a session eachrecord*call falls back to immediateLOGGER.warn. Wrapped in try/finally so a mid-reload throw can't leak the session.- Dropped orphaned lang keys (
skeleton_apex_hp,skeleton_rattling,merling_no_drowning) with no power JSON or origin reference, and broadened the stamina power description across all 10 pools from "Physical energy for powerful attacks." to "Physical reserves spent on active abilities." (The old line lied for Stoneguard (utility-only) and Shulk (CC + mobility) and was misleadingly narrow for the rest.) - Caveborn / Skeleton edible-power JSONs ate without hunger
gating. The six
EdibleItemPowerconfigs for stone, iron, gold, diamond, netherite, and bone meal shipped withalways_edible: true, so the hunger check atInteractionPowerEvents.java:115short-circuited and the right-click animation fired even at a full food bar — players could spam-eat the mineral indefinitely. Flipped tofalseon all six. The codec default inEdibleItemPower.javastaystrueso external packs that omit the field keep their current behavior. - Caveborn mineral effects (haste / speed / luck / strength +
resistance) never applied after eating off-tier minerals.
The 4
caveborn_*_bonuspowers listened onevent: item_use_finish, butfood_item_in_tagreads the dispatch context as aFoodContext. PerInteractionPowerEvents.java:172–177,ITEM_USE_FINISHdispatches the rawItemStack; onlyFOOD_FINISHEDwraps it inFoodContext. The cast failed silently so theif_elseaction took the noop branch and no status indicator appeared. Switched all 4 tofood_finished, matching the workingaquatic_fish_diet_bonustemplate.
Documentation
- New
docs/ORIGINS.md— per-origin reference covering every default origin and its evolution tree. Each entry has impact rating, icon, spawn behavior (where applicable), base-power list with one-line glosses, and a tier-delta table for the evolution path. Catalogues all 49 non-class origins. docs/POWER_TYPES.mdandfield_docs.jsonaligned with the newno_mob_spawns_nearby24-block code default. The old docs advertised 48 and used a 48-block example; now reflect the 24 default, call out the vanilla 24-block cutoff, and use a 36-block example matching Stoneguard's own JSON.MobsIgnorePlayerfield docs updated to add thepassiverow- an example combining
#tagsyntax withpassive, and to clarify thatentity_typesalready accepts#tagreferences and that an empty list matches every mob (both were true before but undocumented).
- an example combining
Installation
Download the JAR matching your Minecraft version and drop it into your mods/ folder.
neoorigins-2.1.3+26.1.jar— for MC 26.1, 26.1.1, and 26.1.2neoorigins-2.1.1+1.21.1.jar— for MC 1.21.1
Origins Compatibility
Drop Origins mod content packs (.jar, .zip, or folder) into the originpacks/ folder in your game directory.

