Iustitia v1.4.0
Curse Maven Snippet
What's new
Iustitia v1.4.0
Clips and replay reworked, starting with the save button. Clips will now include entire scenes, save instantly, and survive a teleport. Your own body shows up in your replays now, and the mod ships five ready-made profiles instead of one. Detection gets a pass that catches closer-range cheats, and ten documented false positives are gone.
🎬 Clips & replay
No more freezing on clip save. The world surrounding a /ius clip command was once collected in its entirety when the command was issued, freezing the client while it collected hundreds of chunks' snapshots. The new process is done in the background (16 chunks/tick, first-nearest priority), while the scene is still active, allowing /ius clip to return instantly. The only exception would be a time period during which the background process has no data to roll up yet, namely a brand new session, or the moment the toggle has just been enabled.
Segment per place. A clip window containing a teleport used to record only the last place visited. It now records every single place, each with its own world snapshot, and the replay contains both.
Clips record everything in the scene. Other mobs, animals, boats and minecarts are recorded within the clip and rendered using their vanilla entity models, so a clip of a fight will show exactly what the players were fighting. The capture is capped at 64 non-player entities per tick, which keeps a crowded scene cheap to record. All block placements/destructions made during the window are recorded as well.
You are in your own replays now. The rolling buffer recorded everyone else, so a freecam replay of a fight showed all the other players and an empty patch of ground where you had been standing. Your own body is captured like any other one, drawn at its recorded position, and your live body is hidden for the duration so you appear once instead of twice, in freecam, pov, follow and free alike. No format bump for this: your body is stored as an ordinary player, so it survives the clip round trip untouched and works under both Modern and Legacy playclip. An older clip carries no body of yours, and there the live one stays visible exactly as it did before.
Format of a clip, v13. World per segment, block edit delta, entity capture, yaw for body/head. Any old clip works here: v2 through v12, as well as SnapClip clips. The pre-v13 layouts are coded from the format's shape rather than tested against real files, since this repo has no old clips to check them with, so treat that path as best-effort. A file that does not match is refused outright, not half-loaded, and the reader reports a truncated or unrecognized clip instead of quietly showing you a partial one. Old version of Iustitia cannot parse a v13 clip, therefore you should re-export the clip if you have to open it in the old version.
New configuration options in /ius config: Clips capture entities, Entity capture cap (default 64, the per-tick limit on non-player entities), Rolling world budget, and New-segment distance. Rolling world budget restricts the amount of memory used for live capture (default value is 24 000 sections, roughly 20 to 95 MB of captured world; a fully captured 17×17 segment is about 3 500 sections, or 14 MB, so about seven of them fit the default); you may reduce the value if you have not enough memory, or increase it if /ius record loses some initial part of the world.
⚒ Detection
Ghost reach. Reach suffered from a near-distance loophole in the form of client interpolation error during movement (roughly 0.8 blocks), making a 3.6-block hit from an almost static attacker appear as jitter. The test will now be based on the direct vanilla metric in case the attacker and victim have not moved, where the interpolation error is zero, with a 3.2 cap. Koid 3.6 and LiquidBounce 4.2 modules previously passed clean; all of them trigger now.
Sustained-episode gating. A dozen checks in combat relied on a flawed economy: they had a violation level limited by the rate of attacks and decayed per tick faster than that rate allowed, so a sustained cheat could rack up flags continuously without ever crossing the setback. Now event-based checks trigger once an episode at a level that clears the setback, and re-enable themselves on a new pattern.
That gate had a bug of its own. Two of the checks using it, hitsWithoutSwing and killAura's combat-ward drift, could never re-arm after their first episode, which made them effectively one-shot for a whole session. Both are fixed, and each carries a regression scenario that drives a second episode and demands a second alert.
Through-walls now actually detects walls. The line-of-sight ray was handed a null entity, and World.raycast throws on one; the throw was caught in a fail-open manner and read as "clear," which left the detection unable to observe an occluded hit at all. Fixed. The occlusion test also reads the victim's whole body now (eye, torso, feet) instead of a single eye-to-eye ray, and flags on a rolling match rate, not on the first blocked hit, so one fragile verdict neither alerts on a legit player nor deflates the rate. (Also a good example of why the fail-open approach must be coupled with the live test harness: a bad detector and a circumvention strategy appear the same way from the outside.)
Attack attribution follows the server. reach, multiTarget and every other check that reads a correlated attack used to accept a hurt from whoever happened to be swinging nearby, because the correlation was proximity and timing alone. A hurt is now credited only to the player the server names, and on a server that names damage causes at all, a hurt that names nobody goes to no one. Mining, or simply standing, next to a teammate who takes an arrow, a fall or a mob hit no longer lands on whoever swung nearby. The knockback that follows such a hit is credited only when the damage behind it was never observed, which keeps older servers, where nothing gets named, working exactly as before.
NoFall revamp, both ways. Three false positives gone at once:
- Wind-charge jumping is detected correctly. A wind charge prevents fall damage up to its own launch height, so the check recalculates the fall damage accumulator on the impulse and only counts descent below that floor. A TNT cannon launch re-bases it the same way.
- No more phantom fall damage during bunny hopping. A hopper re-launches on the very tick it lands, so the touchdown was never recognized, and a chain of individually harmless hops summed until an ordinary one crossed the bar. The touchdown now also reads as feet reaching a surface with downward velocity, so each hop closes its own fall instead of stacking onto the next.
- A mace smash no longer flags. A confirmed descending smash re-bases the accumulator the way vanilla resets fall height, so the hurtless landing after one is judged on the short descent below the smash, not the whole drop. This one came out of a live-log audit where NoFall was 34% of all events across 43 players.
A fall caught on water, slime, hay or cobweb reduces damage the vanilla way and accumulates nothing. None of the three fixes above comes free: an impulse fired on the way down sits above the player, so it can only raise the floor and never lower it, and nothing clears the accumulator either. A cheating mechanism that fakes the burst signature is correctly flagged, because a faked burst on a 28-block descent still flags at touchdown.
🎛 Profiles
Five profiles, one detector. The mod used to ship a single built-in profile. There are five now, and the only detection number that differs between them is the violation level at which an alert fires, so a scaled profile is the same detector with a different trip point, not a different detector. Nothing here recalibrates a default, so your settings carry over.
standardis the everyday profile and the recommended one: stock sensitivity, alerts from the orange band up, the lag indicator as its only visual.lenientdoubles the trip point and reports the red band only, so a chat line needs roughly six times the stock deviation. It catches blatant combat modules and lets ghost cheats pass.strictturns every check on and halves the trip point, with compact one-line alerts.moderationscales the trip point by 0.75, reports every severity band as its own line, plays audio cues, opens the transcript panel, and shortens the join grace to 100 ticks and the alert throttle to 20.debugsets every boolean in the config true, turns every check on, halves the trip point and zeroes both suppression timers. It is a diagnostic profile, and the setup wizard does not offer it; apply it with/ius preset debug.
standard also changed what it detects, in the one place an everyday player would notice. It now ships seven checks off: hitsWithoutSwing, speedEnvelope, flyEnvelope, noFallDamage, phaseClip, longJump and teleport. Every one of them reads a behaviour a minigame server is free to implement itself, so on a server with dash pads, lobby flight, damage-free arenas or warps they fire on honest players, and the moderator reading the alert has no evidence to weigh it against. The checks stay implemented, they stay switchable in /ius config, and strict and debug turn them all on.
An apply writes every check's enabled flag, which is what makes a preset a profile rather than a patch: applying strict turns a check back on even if you had switched it off by hand. Your mute list, your moderator notes and your persistence setting are not preset content and survive an apply untouched. /ius presets describes each built-in now, so you can read what a profile costs before applying it, and the setup wizard's four buttons apply the presets themselves: Standard, Lenient, Strict and Moderation.
🧪 False positives
Ten documented false positives are gone, and none remain that the suite can produce. The last two:
- Ladder climbs were flagged as
flyEnvelope, since the exception only existed for the ascent side of it. You climb a ladder up or down. - Water walking (swimming at the surface) was flagged as
waterWalkdepending on timing. This has now been taken into account.
Eight more came out of the release-audit pass, each one a legitimate shape a detector misread as a cheat:
- a slab or stairs ramp no longer trips
flyEnvelope, where a step-up is a single-tick jump in position and the old streak counter spanned the level ground between two steps; - a strafe across a held crosshair no longer trips
triggerbot, since a crosshair-to-hitbox edge can be created by either party moving; - an already-airborne victim no longer trips
noKnockback, whose upward-knockback comparison was never defined for a victim who was not on the ground at the hit; - a vanilla sword sweep no longer trips
multiTarget, whose pair gate counted attack events rather than ticks, so one sweep's packets satisfied a gate whose whole point is repetition; - digging a block that cannot break no longer trips
clickStatistics: holding left click on bedrock swings the arm every tick, and the server relays that animation on its own fixed clock, so the interval stream is exactly constant, which is the fingerprint of a fixed-delay autoclicker; - mining near a damaged teammate, standing near damage that names nobody, and swinging near a teammate taking non-player damage no longer trip
reachorhitsWithoutSwing, since a hurt the server blames on no one was being attributed locally by proximity alone.
The two dig-driven ones share a root cause, and it is the interesting part: while a dig is live, the swings a client observes are the server's, not the player's. Both fixes read a new dig-state observation and exempt it, and both are bounded so the exemption cannot be used to hide. Swings relayed on the server's dig clock are excluded from the cadence windows only at an interval of 2 ticks or more, as fast as a relay runs in vanilla, so a fast clicker is still evaluated. A hurt that names its attacker can only be claimed by that attacker, and a named hit clears the dig state for that attacker, so a client that fakes a dig loses the exemption the moment it lands a hit the observer can see.
Every fix ships with the legitimate shape as a permanent harness regression, and the cheat scenarios that reach the narrowed detector are re-run in the same pass, so a fix narrows the false positive without opening a bypass. Any future modification fails the test suite rather than your chat.
🧰 For contributors
Iustitia is now an open collaboration project and the vast majority of content in this release has been contributed via its own verification workflow:
- Live self-testing:
python scripts/live_selftest.pystarts up a genuine client, runs a valid bot and a cheating bot through all checks and replay tests, and identifies false positives (pass 1) and bypasses (pass 2), then covers the observer tooling (pass 3). The legit pass plays like a vanilla player and asserts silence; the cheat pass reproduces modules from 9 reference cheat clients and 4 reference anticheats and asserts alerts. 92 scenarios without any user intervention, and every scenario names the client or anticheat it mirrors. All detection claims made above are validated using this tool. - Contributor infrastructure: CONTRIBUTING / SECURITY / SUPPORT / Code of Conduct, templates for issues and pull requests, CI workflows, and an AI-agent contributor skill, because many contributors collaborate with agents in 2026.
Every number in this post comes from the tree the suite passes on: 33 JVM tests with no failures, the static contributor verifier green, and the full three-pass live suite at 92 scenarios with 0 false positives and 0 bypasses. The five profiles are asserted against the live config too, which the harness could not see before, because it turns every check on and overwrites the alert and display fields before each scenario.
Install: drop iustitia-1.4.0.jar into your mods folder. You need Fabric Loader, Fabric API, Fabric Language Kotlin, and Minecraft 1.21.11. Settings and clips carry straight over from 1.3.x, and the config schema version is not bumped.
Source | Issues | Documentation
Not affiliated with or endorsed by Mojang or Microsoft. Minecraft is a trademark of Mojang Synergies AB.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include
This mod has no related projects
