NeoOrigins v2.2.30 (MC 1.21.1)
Curse Maven Snippet
What's new
A small release for the resource bar HUD and for pack commands. Resource bars now stack in a fixed, predictable order instead of one that followed an internal hash, with no empty slot left behind a bar that is hidden or dragged to its own position, and no bar's text printed over another bar's. The bars also get a new look: the built-in ones now draw in a framed style with value ticks, most with a scrolling fill themed to their origin, and packs can use the same eight styles, tint the plain one any colour, and run a bar from one colour into another. For pack authors, a command that does not parse is now written to the log along with the power that ran it, where before it failed in complete silence, and a valid
execute ... runchain is no longer mistaken for a broken command by the legacy translation layer.Supports: Minecraft 26.1.x (Java 25) · Minecraft 26.2 (Java 25) · Minecraft 1.21.1 (Java 21)
Changes
Resource bars stack in resource id order, lowest id nearest the hotbar. The client kept its bars in a hash map, so the vertical order of the stack followed the resource keys' string hashes: stable for a given set of bars, but nothing a pack could predict, describe to a player, or control, and adding one resource dropped its bar wherever its hash happened to fall. A full sync now stores the bars sorted by resource key, which is the power id, and value updates leave each bar where it is. This rearranges existing stacks: any two or more bars sitting at their default positions, whose hash order differed from their id order, will have moved. Bars given a saved position in the HUD editor are unaffected. POWER_TYPES.md describes the order and which bars take a slot.
The built-in resource bars use the new bar styles. Every origin that shows a resource bar now draws it in a framed style with value ticks: a scrolling themed fill where the origin has a clear element, such as fire for the Blazeling, water for the Kraken, void for the Enderian and sculk for the Warden, and otherwise the plain grey fill tinted to the bar's existing colour. The Frostborn bar is the one exception: it was orange and is now an ice gradient, blue at the empty end shading to frost white at the full end. Only the look changed: no resource values, regeneration or costs moved.
Bug Fixes
A hidden or repositioned resource bar no longer leaves a gap in the stack. The HUD advanced its stacking counter for every bar it knew about, whether or not that bar was drawn in the stack, so a bar hidden by hide when full, or one moved to a saved position in the HUD editor, still reserved its slot and the bars above it did not close up. The draw decision is now made for every bar first, and slots are handed only to the bars that will actually draw at a default position. The HUD editor assigns its slots the same way, so the gap that used to sit behind a dragged bar there is gone as well.
Stacked resource bars no longer print their text over each other. Every bar draws its name above it and its value below it, but the stack climbed a fixed sixteen pixels per bar, which is less than a bar and its two lines of text need. Each bar's value landed on the name of the bar below it, so in a stack of several bars everything between the top name and the bottom value was an unreadable pile. Each slot is now as tall as what its bar actually draws: the bar, the name line, the value line and a small gap, which puts the built-in framed bars 29 pixels apart. A bar whose
labelis empty draws no name line and takes a shorter slot, though never shorter than the old sixteen. The HUD editor measures its bars the same way, so its default stack uses the same spacing as the HUD. POWER_TYPES.md describes the slot sizes.A resource bar colour of the wrong length falls back to the default.
color,tintandtint_endinhud_renderread any run of hex digits as a number, so the shorthand#FFFwas read as#00000FFFrather than white, which draws an invisible fill or a blue tint, and a seven- or nine-digit typo gave some other wrong colour. Anything other than six or eight hex digits now falls back to#55AAFF, as a value that is not hex already did, and the log names the power and the value it rejected. An emptytintortint_endcounts as not set, as the field descriptions say, rather than as a bad value. Abar_fxpreset whosetrack_colororlevel_colorhas the wrong length is skipped with a warning, the same as any other malformed preset.
Pack Author Features
A pack command that does not parse is written to the log, naming the power that ran it. Powers run their commands on a source with output suppressed, which is what keeps command spam out of chat. The game reports a command it cannot parse through that same suppressed channel, runs nothing, and raises no error doing so, so a typo such as
tellraw @s {"Triggered"}produced no chat message, no log line and no effect: the power simply appeared to do nothing. Such a command is now logged once for each combination of power, site and command text, carrying the game's own reason for refusing it. Commands are still handed to the game exactly as before, so nothing that used to run stops running, and a legacy command the compatibility layer repairs on its way through is not reported. ACTIONS.md and ADMIN_CONFIG.md both record what is logged.Eight resource bar styles to choose from.
hud_render.animatednow has built-in styles:neoorigins:fire,water,wind,earth,soul,voidandsculkdraw a scrolling themed fill inside a grey frame, andneoorigins:tinteddraws a plain grey fill that does not move. Every style draws value ticks over the fill, a faint one every 5 points and a brighter one every 25, the same steps the old bar used, and ticks that would sit closer than 2 pixels apart are still left out. The scroll follows game time, so it moves smoothly between game ticks and stops while the game is paused. A player whose resource packs do not have the style sees the flatcolorfill instead, and a pack already usingneoorigins:firegets the new art and frame. Presets also gainedframe(sized byframe_widthandframe_height),loop_width,tint_from_colorand astaticmode, for packs that ship their own styles; a preset with noframestill draws the old box. POWER_TYPES.md lists the styles, PACK_FORMAT.md describes thehud_renderfields, and animated_bar_artist_spec.md covers drawing the textures.neoorigins:tintedtakes any colour. The fill is grey, andtintmultiplies it channel by channel: its lightest pixels come out as the colour itself and its darker greys as deeper shades of it, so the fill keeps its shading, and a bright, saturated colour gives the clearest bar. Whentintis not set the bar uses itscolor, so a bar that already has one only needs"animated": "neoorigins:tinted"added.tinttakes#RRGGBBor#AARRGGBB, with the alpha ignored since the fill is always opaque. It works on the themed styles too, but those are drawn in colour already. POWER_TYPES.md has worked examples.hud_render.tint_endshades a bar from one colour into another. On a framed style that does not scroll, such asneoorigins:tinted, the fill runs fromtintat the left end of the bar totint_endat the right, starting fromcolorinstead whentintis not set and the style takes its colour, asneoorigins:tinteddoes. The gradient spans the whole bar rather than the filled part, so each point of the bar keeps its colour as the value rises and falls. Withouttint_endthe bar is one flat colour, as before. The Frostborn bar is built this way, and is the gradient example in POWER_TYPES.md.Both power editors know the new bar fields. In the in-game creator,
animatedhas a pick button listing the eight built-in styles and any style a loaded resource pack adds, and it still takes any id typed in. The web editor suggests the eight styles as you type and shows a preview of the bar above thehud_renderfields, with its style, tint and gradient applied. Both editors now flag acolor,tintortint_endthat is not six or eight hex digits, which the loader would replace with#55AAFF, and ananimatedid with no namespace, which can never match a style.
Compatibility (Apoli / Origins)
- A valid
execute ... runcommand is no longer treated as unparseable by the legacy rewriter. The check that decides whether a legacy pack's command may be rewritten asked whether the top level of the parse carried a command to run. A redirect such asexecute as @s rundoes not: it leaves the top level empty and puts the command in a child context, so every valid execute chain in every pack read as broken. That was the reverse of what the check exists for, since an execute chain also matching a legacy pattern was handed to the rewriter even though the game would have run it exactly as written. The check now judges a parse the way the game itself does when it finishes parsing, taking the game's own parse error first, then asking whether the chain of contexts flattens into something runnable.
Documentation
- The commands page shows a text component. Every example under
neoorigins:execute_commandused a command with no JSON payload, so the one thing most likely to go wrong in a pack command had no worked example on the page that documents pack commands: a text component is itself JSON, and its quotes have to be escaped inside thecommandstring. The escapedtellrawform now sits beside the existing example, with{"Triggered"}named as the shape that does not parse and the reason it does not. The paragraph describing what a command that does not parse writes to the log now notes that up to 2.2.29 nothing was written at all, so a reader still on that version does not go hunting for a line that is not there. See ACTIONS.md.
This mod has no additional files