triage-fabric-1.21.1-2.2.0.jar
Curse Maven Snippet
What's new
Triage 2.2.0
Minecraft 1.21.1 and 1.20.1 - NeoForge, Forge and Fabric
A body model should not decide for the player how much of the body is simulated.
This release is mostly answers to people who asked for the same thing in different words: let me turn this off, let me make this rarer, let me use the mod with the other mod I already have. Where the answer was a number, the number is now a config key rather than a constant. Where the answer was a compatibility problem, the mod now asks the other mod what it is doing instead of guessing.
Regeneration can be switched off
Asked by Foresight18, and the answer was no for eleven versions because natural healing is not one feature in this mod - it is a path that everything else quietly leans on.
[health] regeneration is now a switch, on by default. Turn it off and every source of
vanilla healing is refused before it can touch the body: food, potions, golden apples,
beacons, modded regeneration, all of it. What still works is anything a person does with
their hands - bandages, medkits, splints, surgery, saline, blood - because those call the
body directly and never pass through vanilla's heal at all. That distinction is the whole
point of the switch: passive recovery stops, treatment does not.
A world that turns it off keeps the healing scale and the chest penalty for the things that still heal. Existing worlds keep the old behaviour until the key is changed, which is what a default is for.
The clot clock
Reported by user_k2tteatq18xh9905: cramps, clots and pulmonary embolism arrived fast enough - inside five in-game minutes of ordinary walking - that they read as a tax on movement rather than a consequence of injury.
The old rule asked only for stillness, and the stillness meter outlived the sitting. A player who stood up and walked away kept a full meter for a while, and a clot could form in that window with nothing else wrong with them. That is not a clot; that is a dice roll with a medical name.
Three things changed:
- A clot now needs a reason. A tourniquet, a splint, a fracture or crack, at least five percent of the blood gone, being on the floor, or being under anaesthetic. A healthy body that has merely stopped moving does not make one, however long it stands there.
- It needs ninety seconds of real stillness (
[clots] stillSeconds). The meter still has to fill, but it now empties while the player moves, and a clot that is already sitting in a limb has a much shorter life: four minutes by default (clotClearSeconds, down from seven). - The base chance is down from 0.0016 to 0.00008 per second, and while the body is moving it is multiplied by 0.1 for as long as the meter is winding down. Embolism chance is down from 0.035 to 0.002.
The design is unchanged: a clot is what a limb does when it has been left alone, and the danger is standing up. It is no longer what a limb does while its owner walks to the next village.
Iris
Reported by user_k2tteatq18xh9905: with a shader pack on, the semi-transparent whole-body wash turned the player and every other casualty see-through.
That wash is one translucent layer drawn over the entire model, and Iris composites that layer differently from vanilla in several packs. The mod now asks Iris whether a shader pack is in use, once every couple of seconds, through reflection - Iris is not a dependency and a client without it never loads a class that mentions it.
Under a shader pack the full-body pale and blue tints are skipped. Everything local stays: burns, bones, dead limbs, dressings and steel. Those are small pieces drawn on the part they belong to, and they survive the compositing that the full-body wash does not. The result is that a shader player loses a distance cue and keeps their arms.
Guns
Asked by bomb_man, and the request had four parts: TACZ support, bullet penetration, thorax and heart hits, and a heart that can stop.
TACZ armour-piercing rounds carry vanilla's bypasses_armor tag. To vanilla that means
"do not subtract armour points"; to this mod it meant "there is no point of impact", and
every rifle round was spread evenly across seven body parts instead of landing where it
went in. Damage routing now recognises a TACZ projectile by its entity package and its
damage-type message id, and sends it down the physical path even when the tag says
otherwise. The round still penetrates armour - it just does so at the place it hit.
That gives the rest of the request for free: a physical hit has an impact point, so a round that lands on the chest can reach the organs, and a round that lands on the heart can tear it. No TACZ class is compiled against; a future build with the same package and message id is still a bullet.
Bullets stay in
A round can now lodge. About one in four that hits stays in the body - more often than an arrow, because a round that has already gone through somebody has spent most of what it had and stops in the meat.
The wound is the arrow's problem with a different way out. A shaft stands out of the skin and comes back along the hole it made; a bullet is under the skin, so there is nothing to take hold of. The wound has to be opened and the round picked out with forceps - the same job as fragments, played with the same instrument, and priced separately: a bad cut-out tears more than a bad pull, because the jaws are working inside tissue that has already been torn once.
The game itself now looks and reads like that job. The pieces in the wound are rounds - rounded nose, copper driving band, lying along the track they came in by - and the screen says Pick out the bullet rather than Pick out fragments.
Until it is out the part will not clot, will not mend and cannot be dressed. The chart
calls it a bullet rather than an arrow, the film shows it, and /triage bullet puts one
in a limb for testing. Three new keys live under [effects.guns]: bulletsStick,
bulletStickChance (0.25) and bulletTear (3.0).
No TACZ class is named here either; the round is recognised the same way the damage routing recognises one. TACZ has no Fabric build, so the mechanic is live on NeoForge and Forge and dormant on Fabric.
Every round has its own calibre
A lodged round used to be one blunt cylinder with one name, no matter what had been fired, even though TACZ ships twenty-five kinds of ammunition from 9×19mm pistol rounds to an RPG-7 rocket. A pistol round and a rifle round do not look alike under the skin, and the screen that asks somebody to fish one out should not draw the same stub for both.
Each TACZ round is now kept in the wound by its own id: 9mm, 12g, 762x39, 50bmg,
rpg_rocket and the other twenty. Every kind has its own nose profile (round, spitzer,
flat, hollow, pellet, rocket), length, width, jacket colour and driving band. The operation
title and the X-ray name the calibre, /triage bullet <part> <count> [type] stages a
specific round, and the tab suggestions list all twenty-five. The old command without a
type still parses and still means the generic round.
Old worlds and configs load without migration: a part with a count but no names is read as generic rounds and filled in as new ones arrive. A calibre from another gun pack keeps its own id and borrows the nearest shape by name instead of becoming a ninth 9mm. TACZ stays optional - the id is read by reflection and no TACZ class is compiled against - and on Fabric, which has no TACZ build, rounds still do not lodge.
The heart stops
A torn heart used to be a very fast internal bleed and nothing more. It is now also a
chance - 35 percent by default, [effects] heartStopChance - that the heart stops
rather than merely emptying into the chest. When it does, the player goes down into
arrest through the same path as any other cardiac arrest: CPR, compressions, adrenaline
and a surgeon are the answers, and the normal arrest clock applies.
The chance is only rolled when downed states, CPR and a non-zero arrest time are all enabled. A server that has turned CPR off gets the old behaviour - a torn heart is still an internal bleed, which is still usually fatal, just not scripted.
Ragdolls, plural
Asked by Meltagrounds and cbjpok: Ragdollified support.
The ragdoll backend was written around one mod. It now asks for Sable first and
Ragdollified second, both by reflection, both behind the same [effects] ragdoll switch.
If neither is installed, nothing changes: the pose still changes and nothing falls over.
If both are, Sable wins because that is the one the existing fall-damage measurement was
built against. A downed player on Ragdollified is dropped, lies where they land, and gets
up through the same code path as before.
Longer blood trails
Asked by user_k2tteatq18xh9905. A stain used to dry in ninety seconds
([blood] stainSeconds), which is shorter than the walk back to the body. The default is
now five minutes, and the cap on live stains has gone from 500 to 2000 so a real fight
leaves a real trail instead of a budget. Both are still config keys; a server that wants
the old look can have it.
Schizophrenia stays on
Asked by user_k2tteatq18xh9905 to stop inflicting it on worlds that did not ask, an earlier draft of this release made it off by default and dropped the rate to two percent. That was the wrong reading of the request: what was asked for was a switch, not a different default. This release adds every switch and changes no defaults.
[effects] schizophrenia is on, and the share of bodies that have it is ten percent, as
it has been since the condition was added. A group that does not want it turns it off; a
group that does keeps the world it already had.
Settings in the game
The three hundred-odd keys could only be read by finding a file. On NeoForge the mod now
registers ConfigurationScreen through IConfigScreenFactory, so the settings button on
Triage in the mod list opens the whole spec: every section, every setting, its comment as
the tooltip, and the range it accepts. Nothing new is stored and nothing is overwritten -
the screen edits the same triage-server.toml, and a value already in it is shown rather
than replaced.
The screen is client code and is registered in a client-only mod class, so a dedicated server never loads it. Forge 1.20.1 and both Fabric trees still need the file.
Every setting has an English label; the section names and the gun keys have Russian ones, and the rest falls back to English.
What this is not
There is no 1.21.10 build in this release. 1.21.10 changes enough of the client rendering path that it is a new port rather than a version bump: the layer, model and shader APIs this mod draws through all moved, and the 1.20.1/1.21.1 trees share a rendering half that would have to be rewritten twice. Publishing a jar that had not been run would be worse than saying so. The four current files - NeoForge 1.21.1, Forge 1.20.1, Fabric 1.21.1 and Fabric 1.20.1 - are built from the same sources and carry every fix above.
The settings screen is NeoForge-only for now: the other loaders have no built-in screen, and a hand-written one for three different GUIs is a separate job rather than a line in this release. Lodged bullets need a gun mod, and TACZ has no Fabric build, so that mechanic is live on NeoForge and Forge and dormant on Fabric.
This mod has no additional files

