File Details
NeoOrigins v2.1.5 (MC 26.1.x)
- R
- May 27, 2026
- 2.05 MB
- 7
- 26.1.2+2
- NeoForge
File Name
neoorigins-2.1.5+26.1.jar
Supported Versions
- 26.1.2
- 26.1.1
- 26.1
Curse Maven Snippet
Bug Fixes
Cook crafted/smelted food spiraled to absurd saturation values.
rebuildFoodwas callingFoodProperties.Builder#saturationModifier(float)with what it thought was an absolute saturation value, but that setter stores a multiplier —build()then ran it throughFoodConstants.saturationByModifier(nutrition, modifier)which returnsnutrition * modifier * 2.0. Each Cook (and Smoking Expert) pass fed the previous already-blown-up saturation back through the multiplier; Mollan reported cooked steak coming out with 2639 saturation. The helper now constructs theFoodPropertiesrecord directly so thesaturationparameter remains a literal absolute value, matching Apoli/Origins semantics. On 26.1 the rebuild also dropseatSeconds/usingConvertsTo/effectsoverrides — those moved out ofFoodPropertiesto theConsumabledata component in 26.1, and leaving the originalConsumableuntouched on the stack is the correct preservation path. Resolves GitHub #95.Voidwalker (and other Route B resource bars) vanished on relog, blocking abilities that gate on
cur > 0.f1c492fealready fixedonLoginso it no longer reset the stored value back tostart_value— but two residual problems remained: (1) On 1.21.1 theRESOURCE_STATEattachment was missing.copyOnDeath(), so any respawn wiped the saved value entirely (master had it; 2.1 didn't). (2)onLoginre-registered the resource meta but didn't seed the state entry when none existed, sosyncResourcesToClientiteratesstate.getAll()and skipped the bar entirely — symptom was "energy bar disappeared, abilities won't fire because cur=0". Added.copyOnDeath()to the 1.21.1 attachment and a state-seed step inResourcePower#onLoginthat writesstart_valueonly when no entry is present (existing values are preserved). Resolves GitHub #90.tamed_animal_boostgranted a permanent attribute modifier that outlived the source mob. The boost modifier was applied once on tame and never cleaned up, so once a player tamed enough mobs they effectively kept the stacked bonus forever — even after every tamed mob died or despawned. The modifier is now recomputed each tick against the current owned-mob count and removed when that count drops to zero.persistent_effectshow_icon/show_particles/ambientwere ignored when set at the power root. Pack authors writing the convenience top-level form{ "type": "neoorigins:persistent_effect", "effect": "...", "show_icon": false }got the HUD icon anyway, because those fields were only read off eachEffectSpecand the root-level values were dropped. Top-levelshow_icon,show_particles, andambientnow cascade as defaults onto every nestedEffectSpecthat doesn't declare its own value.tame_mobcouldn't tame non-hostile mobs. The target check requiredEnemy, so packs that wanted a generalized "tame any creature" power (animals, golems, villagers) had no JSON knob. Addedhostile_only(defaulttrue, preserving the existing Monster Tamer feel); sethostile_only: falseto allow taming any non-playerMob. Boss rejection viacanUsePortalis unchanged.breath_in_fluid's only drain knob (drain_rate) read as "speed" but was actually "ticks between decrements", confusing pack authors. Added two more intuitive aliases:air_loss_per_second(higher = faster drain, internally converted to20 / valueticks) anddrain_interval_ticks(the literal meaning of the original field). Resolution priority isair_loss_per_second>drain_interval_ticks>drain_rate> default20. Existing packs usingdrain_ratekeep working unchanged.

