NeoOrigins v2.2.24 (MC 26.2)
Curse Maven Snippet
What's new
A corrective release. The ocean origins hold their depth instead of sinking the moment they stop swimming, four flying origins that glided bare-backed get wings, Sword Immortal can no longer fly empty-handed, and night-vision powers finally say which key toggles them. Most of the rest were failing quietly rather than visibly, which is why none had been reported: the Herbalist's bone meal growth never reached the client and never spent the bone meal, AppleSkin previewed vanilla's food values on every diet origin, two powers of one type shared a single toggle, ten tier night-vision powers each held an ability slot they had no business holding, and
origins:remove_enchantmenthad never been implemented at all. On the compatibility side, two opposite failure shapes are closed: biome conditions that failed closed and could never fire anywhere, and item and block conditions that failed open and matched everything handed to them. Legacy packs load with their origins unchanged. KubeJS scripting also reaches the Minecraft 26.1 build, with scripts moving across unchanged.Supports: Minecraft 26.1.x (Java 25) · Minecraft 26.2 (Java 25) · Minecraft 1.21.1 (Java 21)
Ocean origins hold their depth instead of sinking when they stop swimming. Holding station used to mean swimming to hold it. A new shared power, Neutral Buoyancy, goes to Merling, Siren, Kraken and Abyssal:
-0.08onminecraft:gravityas anadd_value, conditioned on being fully submerged. That lands the attribute on exactly0.0, and vanilla skips its in-water descent entirely at zero base gravity, so depth holds cleanly rather than trading a sink for a slow float up. Swimming down is unaffected, and puddles and shallows do not trigger it. Conditioned modifiers re-evaluate every five ticks, so expect up to a quarter-second lag at the surface. See COOKBOOK.md.Night-vision powers say how to switch them off. Night vision deliberately has no entry in the HUD ability cluster, because it is not one of the six numbered skills, so nothing in game ever pointed at the key that toggles it and players reasonably concluded there was no toggle at all. Twenty-two power descriptions now end with "Toggle with the Night Vision key (default K)." — worded for the binding rather than the letter, since it is rebindable. Worth knowing alongside it: the setting is remembered per player rather than per origin, so switching it off on one origin and later picking another that has night vision starts you with it already off.
Ten tier night-vision powers stop taking up a numbered ability slot.
persistent_effectdefaultstoggleableto true, and these ten never declared it, so each claimed one of the six skill slots and answered to a stray skill-key press — the exact failure the base night-vision powers forcetoggleable: falseto avoid, and one that reads to a player as night vision switching itself off for no reason. One tier power each on Wraith, Arachnid, Caveborn, Darkness Mage, Feline, Necromancer, Sculkborn, Sporeling, Sylvan and Umbral now sets it explicitly, matching the four conduit powers that always had. They are passive tier buffs, and the Night Vision key remains their off-switch.Elytrian, Phantom, Hiveling and Draconic fly with visible wings. True of every built-in origin that flies without an elytra in its chest slot. The renderer was never at fault:
neoorigins:natural_glideandneoorigins:flightsimply had no way to ask for wings. Both now take the samerender_elytraandtexture_locationpairelytra_flightalready carried, so a pack can put wings on either and point them at its own texture. They default tofalserather thanelytra_flight'strue, deliberately — these types have shipped wingless their whole life, and defaulting them on would put an elytra on the back of every existing pack that uses them. Windwalker's Sky Dancer stays bare on purpose. POWER_TYPES.md documents both.The Herbalist's extra bone meal growth shows up straight away instead of after a rejoin. Bone mealing grass placed one plant and the rest appeared only after a relog. The handler grew the blocks and let vanilla carry on, but vanilla re-checked the target against the live world, found the space filled and returned PASS — and NeoForge replays an item's block changes only on success, so the blocks were there the whole time with no client told. That same PASS also skipped the bone meal being spent, giving a Herbalist unlimited bone meal on grass. The handler now cancels the event, does the work and claims success, keeping vanilla's success roll so the power is exactly as strong as before.
Two powers of the same type on one origin stop sharing a single toggle. Pressing either keybind switched both on. Toggle state was keyed off the power's config rather than the power itself, so two powers that happened to agree collapsed into one flag. The reach was wider than the report:
condition_passivekeyed the same way,persistent_effectkeyed off its effect ids so two tiers of one buff collided, and seven more types includingstealth,flightandphantom_formkeyed off the class name alone and so collided unconditionally. Keys are now the power's own resource id. Flags already saved in a world are still read, so a power you had switched off stays off.A
gameplay.tomlwritten before 2.2.22 has its air drain rate corrected on the next start.[ocean_origins] drain_rate_ticksshipped as10up to 2.2.21 and became1in 2.2.22, but the config system only rewrites a key that is missing or out of range, and10sits well inside the declared 1 to 1200 — so every install that had ever run 2.2.21 kept it. The correction reasons from the file rather than the value, since10is a legitimate setting.gameplay.tomlnow carries aconfig_version, and an unstamped file holding exactly10is moved to1, stamped and logged. Any other value survives, and once stamped the setting is yours again: put it back to10and it stays.AppleSkin previews a diet origin's real food values rather than vanilla's. True of every origin that changes what food is worth.
modify_food_nutritionnever rewrites the item's food data — it corrects hunger and saturation server-side at the moment of eating — so there was nothing on the stack for AppleSkin to read, and an aquatic origin holding a cod was shown vanilla's 2 and 0.4. A new bridge answers AppleSkin's event with the origin-adjusted values, leaving the vanilla figure in place for its usual struck-through comparison. The nutrition-to-saturation scaling now lives in one place called by both the real eat and the preview, so the number shown and the number received cannot drift apart. AppleSkin remains optional.Sword Immortal's flight and Flickering Slash need the sword in hand. A Sword Immortal could fly empty-handed, which the origin's own description rules out. Seven of its ten powers already carried the requirement, and Immortal Body carries none precisely because it is the fall-immune mortal left when you are disarmed; the other two could not, because
neoorigins:creative_flightandneoorigins:active_dashhad noconditionfield for one to go in. Both take one now. On the flight it is re-checked every tick rather than at takeoff, so sheathing mid-air strips the ability there and then and the drop is real — pair a conditional flight with fall-damage immunity if it should be survivable. A blocked dash spends no cooldown. Defaults to absent, so existing powers of both types are unchanged. POWER_TYPES.md documents the field on both.The in-game editor gives list fields a row of real entry boxes instead of a single raw JSON box. Adding one entity type meant typing the brackets and quotes yourself. Thirty-four fields were affected across the schema-driven forms: a power's
items,tags,entity_types,damage_types,slotsandhands, plus the id lists on actions, conditions and item actions. The add-and-remove widget was already in the mod but unreachable, because the layer that reads schemas into the editor's field model never carried across the element pattern the check looks for. The model now carries it, reaching all thirty-four at once. The origin creator is hand-built and the web editor reads the schema directly, so neither was ever affected.The schemas stop advertising fewer verbs than the parsers accept. Working verbs looked unsupported unless you already knew they existed. Block conditions accept ten where the list named four, gaining
adjacent,block_state,heightandoffset; item conditions accept thirteen where the list named seven, gainingall_of,amount,any_of,custom_data,foodandname. All of them already worked if you wrote them, so nothing you have written changes behaviour. Both the list and its validating pattern now come from the editors' own catalogue rather than being maintained by hand beside it. One gap stays open, better said here than found in an editor: the block condition catalogue does not carryall_ofandany_of, so a block condition written that way works in game while the editors mark the file invalid — writeandandorthere instead.origins:remove_enchantmentworks, so a legacy Remove Curse power removes curses. The verb had never been implemented, so the item action parser fell through to its no-op default and the power loaded, gated and ticked while doing nothing, with no error to say so. Both field shapes are accepted, since the docs describe a singularenchantmentstring while real packs commonly write a pluralenchantmentsarray and both are valid upstream.reset_repair_costis read either on the action or on the enclosingequipped_item_action, true in either position winning. An unregistered id matches nothing, and a malformed one warns and is skipped rather than taking the power down. Enchanted books go through vanilla's own dispatch.levelsweakens an enchantment instead of stripping it outright. The first implementation covered three of upstream's four fields and dropped the fourth silently, which is worse than not supporting the verb at all: a pack asking to knock one level off Sharpness V got the whole enchantment torn off while everything looked correct from the pack side.levelsnow reduces each named enchantment by that many and deletes it only at zero or below, matching upstream. Omitting the field still removes outright, since that is what older packs rely on. Nothing is clamped —0subtracts nothing and a negative raises the level, both of which are what upstream's plain subtraction does.A biome-gated power fires in the biome it names.
origins:biomeaccepts a nestedconditionwith its own small grammar, wherein_tagmeans the biome is in a biome tag rather than anything about entity types. Onlytemperaturehad ever been implemented, so every other verb failed closed and a power written that way never activated in any biome at all,in_tagbeing much the most common of them. Now parsed:in_tag,precipitation,high_humidity,constant,not, a nestedbiomeform for or-lists of exact ids, andall_of/any_ofas the Apoli 2.9 spellings ofand/or, each honouringinverted. Two details if you write them:precipitationanswers for your block rather than the biome as a whole, andhigh_humiditykeeps Apoli's0.85verbatim. An unknown sub-type still fails closed, which stays right here.Five item conditions that were passing every stack instead of checking it. An unimplemented item condition returned true — it accepted every stack rather than refusing it — so a herbivore restriction written against a verb we lack permitted meat while the power loaded, gated and ticked in apparent good order. That is the quieter failure of the two, and why these went unreported for so long.
armor_value,meat,constant,harvest_levelanddurabilityare all implemented now. Two are worth knowing precisely:armor_valueis what one stack confers rather than the wearer's total, andmeatresolves through the NeoForge common food tags, so modded meats count. The honest limit: a verb still outside the list goes on passing, since flipping that default would make every unimplemented condition block everything across packs that work today.Four block conditions that were matching every block, and the fallback that hid them. An unimplemented verb compiled to nothing, which
in_block,in_block_anywhereand the narrowneoorigins:blockcheck all read as "match anything", whileon_blockdiscarded the filter outright and turned "standing on X" into "standing on anything".invertedwas no protection, since inversion applies only to a condition that compiled, and it logged at debug with no warning — so a pack reload came back clean whilelight_level,exposed_to_sky,movement_blockingandfluidsat silently always-true: a sun-sensitive origin's slowness and blindness fired in the dark exactly as in the sun. All four verbs are implemented, since closing the fail-open alone would have swung those powers from always on to never on, and an unknown verb now matches nothing. The docs also stop callingin_block_anywherean alias ofin_block: the first samples one block, the second counts every position the hitbox overlaps. See CONDITIONS.md.KubeJS scripting reaches the Minecraft 26.1 build. It was 1.21.1 only because KubeJS had published nothing for 26.1, not because anything was tied to that version. The whole surface is on both builds now: the
NeoOriginsandNeoOriginsEventsglobals, all fifteen events,registerCallbackwith theneoorigins:kubejs_callbackaction behind it, and the two JavaScript-backed power typesneoorigins:js_customandneoorigins:js_active. Scripts move across without porting. Two install notes that are KubeJS's requirements rather than ours: the 26.1 build wants NeoForge 26.1.2.84 or newer before KubeJS will load at all, and on 1.21.1registerPowerneeds Rhino2101.2.8-build.91or newer. The 26.2 build does not get this and cannot yet, since KubeJS has published nothing past Minecraft 26.1.2 to build against — and an unrecognised powertypeis dropped whole, so ajs_custompower copied into a 26.2 pack never appears on the origin and nothing in game says why. KUBEJS.md documents the whole surface.Air drain is counted per air point, not per bubble.
drain_rate_ticksis ticks per single air point, and the HUD draws 300 air as 10 bubbles, so one bubble is 30 points: at1a bubble lasts 1.5 seconds and the full bar 15; at10, 15 seconds and 150. Reading it as ticks per bubble puts you out by a factor of thirty, which is where both reports came from. If your bar genuinely empties slower than the table says, an install predating 2.2.22 still holds the old default of10, which this release moves for you on the next start. POWER_TYPES.md carries the arithmetic beside the table.
This mod has no additional files

