promotional bannermobile promotional banner

NeoOrigins

A modern port of Origins
Back to Files

NeoOrigins v2.2.24 (MC 26.2)

File nameneoorigins-2.2.24+26.2.jar
Uploader
CyberDayCyberDay
Uploaded
Aug 13, 2026
Downloads
45
Size
11.5 MB
Mod Loaders
NeoForge
File ID
8637948
Type
R
Release
Supported game versions
  • 26.2

Curse Maven Snippet

NeoForge

implementation "curse.maven:neoorigins-1495375:8637948"

Learn more about Curse Maven

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_enchantment had 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.08 on minecraft:gravity as an add_value, conditioned on being fully submerged. That lands the attribute on exactly 0.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_effect defaults toggleable to 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 force toggleable: false to 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_glide and neoorigins:flight simply had no way to ask for wings. Both now take the same render_elytra and texture_location pair elytra_flight already carried, so a pack can put wings on either and point them at its own texture. They default to false rather than elytra_flight's true, 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_passive keyed the same way, persistent_effect keyed off its effect ids so two tiers of one buff collided, and seven more types including stealth, flight and phantom_form keyed 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.toml written before 2.2.22 has its air drain rate corrected on the next start. [ocean_origins] drain_rate_ticks shipped as 10 up to 2.2.21 and became 1 in 2.2.22, but the config system only rewrites a key that is missing or out of range, and 10 sits 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, since 10 is a legitimate setting. gameplay.toml now carries a config_version, and an unstamped file holding exactly 10 is moved to 1, stamped and logged. Any other value survives, and once stamped the setting is yours again: put it back to 10 and 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_nutrition never 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_flight and neoorigins:active_dash had no condition field 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, slots and hands, 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, height and offset; item conditions accept thirteen where the list named seven, gaining all_of, amount, any_of, custom_data, food and name. 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 carry all_of and any_of, so a block condition written that way works in game while the editors mark the file invalid — write and and or there instead.

  • origins:remove_enchantment works, 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 singular enchantment string while real packs commonly write a plural enchantments array and both are valid upstream. reset_repair_cost is read either on the action or on the enclosing equipped_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.

  • levels weakens 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. levels now 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 — 0 subtracts 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:biome accepts a nested condition with its own small grammar, where in_tag means the biome is in a biome tag rather than anything about entity types. Only temperature had ever been implemented, so every other verb failed closed and a power written that way never activated in any biome at all, in_tag being much the most common of them. Now parsed: in_tag, precipitation, high_humidity, constant, not, a nested biome form for or-lists of exact ids, and all_of / any_of as the Apoli 2.9 spellings of and / or, each honouring inverted. Two details if you write them: precipitation answers for your block rather than the biome as a whole, and high_humidity keeps Apoli's 0.85 verbatim. 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_level and durability are all implemented now. Two are worth knowing precisely: armor_value is what one stack confers rather than the wearer's total, and meat resolves 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_anywhere and the narrow neoorigins:block check all read as "match anything", while on_block discarded the filter outright and turned "standing on X" into "standing on anything". inverted was 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 while light_level, exposed_to_sky, movement_blocking and fluid sat 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 calling in_block_anywhere an alias of in_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 NeoOrigins and NeoOriginsEvents globals, all fifteen events, registerCallback with the neoorigins:kubejs_callback action behind it, and the two JavaScript-backed power types neoorigins:js_custom and neoorigins: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.1 registerPower needs Rhino 2101.2.8-build.91 or 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 power type is dropped whole, so a js_custom power 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_ticks is ticks per single air point, and the HUD draws 300 air as 10 bubbles, so one bubble is 30 points: at 1 a bubble lasts 1.5 seconds and the full bar 15; at 10, 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 of 10, 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