promotional bannermobile promotional banner

Overgrown's Origins

Choose your species. Every origin, layer, and power is data-pack JSON underneath.
Back to Files

Origins (1.23.1)

File nameorigins-1.23.1.jar
Uploader
OvergrownMCOvergrownMC
Uploaded
Aug 23, 2026
Downloads
28
Size
553.0 KB
Mod Loaders
Fabric
File ID
8710733
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:o-origins-1636345:8710733"

Learn more about Curse Maven

What's new

Fixed

  • Transferring an origin out of a swap pool did nothing, silently. origins:transfer_origin only ever read the origin a player had chosen on the layer it was pointed at, and a swappable layer records no chosen origin — it holds a pool of granted ones. Aiming a transfer at such a layer therefore found nothing to move, ran its follow-up actions and reported success. It now reads the pool when the layer is swappable, and reads whichever origin the player is currently wearing when asked to. Taking an origin also removes it from wherever it genuinely came from, so a move out of a pool revokes that one entry instead of clearing the whole layer.

Added

  • A way to say which origin is being transferred, for players who hold several. origins:transfer_origin and origins:copy_origin gained a selection field with four values. main is the layer's chosen origin and remains the default for an ordinary layer. active is whatever the player is actually playing as, which is the swapped-in origin if they are swapped and the chosen one otherwise. pool is the origins sitting in their swap pool, and is the default when the layer being read is itself swappable. all takes the chosen origin and the entire pool together, transferring every one of them. Where a selection turns up more than one candidate the first is taken, or a random one if random is set, and a new origin field skips the search entirely by naming exactly which origin to move regardless of where the donor keeps it.

  • origins:grant_origin and origins:revoke_origin, two new entity actions for handing an origin to a player and taking it back. Granting on an ordinary layer makes the origin that player's pick; granting on a swappable layer adds it to their swap pool; and to_pool on an ordinary layer adds it to the pool feeding that layer instead of replacing what they have, which is the "unlock another form they can swap into" case. Revoking takes one named origin back from wherever it sits, or clears the layer and its whole pool when no origin is named, and a player currently swapped into a revoked origin is dropped back to their own. Until now the only way to give a specific origin from data was a two-step detour through origins:store_origin and origins:apply_stored_origin, and there was no way to take one back at all.

  • The origins:origin condition can look somewhere other than the chosen origin. A new selection field takes the same four values as the transfer action. This matters because the default — and the only previous behaviour — is to check what the player chose, which means a swapped-in origin read as absent. active asks what they are actually playing as, pool asks what they could swap to, and all asks whether they have it in any sense at all.

  • /origin revoke <targets> <layer> [origin], the operator-side counterpart to /origin set. With an origin named it takes that one out of the player's pool, or clears the layer if that origin was their pick; without one it removes everything on that layer, pick and pool together.

  • Origins are readable from expressions. Two variables, origin_count for how many layers the player has a non-empty origin on and is_swapped for whether any layer is currently swapped, plus five functions that take an id: has_origin and target_has_origin for whether a player has a given origin anywhere, counting an active swap; in_origin_pool for whether it is sitting in their pool; has_origin_on for whether a given layer holds anything; and origin_impact, which reports a layer's active origin's impact as a number from 0 to 3. All of them answer correctly on the client as well as the server, which is what lets them drive the client-side things Apoli evaluates during rendering.

Changed

  • /origin set no longer refuses an origin that is not in a swappable layer's own list. Pool grants were never checked against that list — the whole point of a swappable layer is that it can ship empty and be filled at run time — so the command was rejecting something the underlying system was perfectly happy to do.
Type
Name
Game Versions
Mod Loaders
Size
Downloads
Uploaded