guardfix-1.0.109.jar
Curse Maven Snippet
What's new
"Every attack is a dash attack until I sprint myself" -- the real cause is fixed (1.0.73 - 1.0.83)
- Replaces the movement-based workaround from 1.0.45 - 1.0.48. That workaround only hid the symptom (and delayed legitimate dash attacks by a fraction of a second), so it is gone: the options
preventStuckDashAttack,dashAttackMoveGraceTicksanddashAttackMinSpeedno longer exist and a dash attack is Epic Fight's own again, with zero delay. - Cause: Epic Fight picks the dash attack purely from the server-side sprint flag, and the vanilla client only tells the server about its sprint state when it changes. ParCool's Fast Run forces the sprint flag on the server every tick while its server-side copy of the action is running, and never undoes it when it ends. If your own client flag was already off at that moment (Epic Fight clears it during every attack; mods that keep Fast Run alive after wall jumps / vaults also leave it off), the server flag stays on forever and every attack reads as a dash -- until you sprint and stop yourself, which finally sends the missing "stop sprinting".
- New
fixStaleServerSprint(default on): the server remembers the last sprint command your client actually sent, and when its own flag has disagreed forstaleSprintResetTicksticks (default3, 20 ticks = 1 second) it puts the flag back. If ParCool's Fast Run is what keeps forcing it, that stuck server-side action is ended too. If some other mod forces the flag on purpose, guardfix backs off for 5 seconds instead of fighting it. ParCool is an optional dependency -- nothing changes when it is not installed. - New
reconcileParCoolActions(default on) /reconcileParCoolTicks(default40): the same "server copy of a ParCool action got stuck" problem also showed up as a rare crouch glitch (lowered eye height, pose flickering between crouch and standing, Shift doing nothing, only a relog helping -- Crawl / Slide keep forcing the swimming pose). The client now reports which of its ParCool actions are running (a tiny packet, only when that set changes plus a heartbeat every 2 seconds) and the server ends any action it has running that the client has reported as not running for 40 ticks in a row. Needs guardfix on both the client and the server (a client or server without guardfix still connects fine; the repair simply stays idle) and ParCool installed. - New diagnostic switch
dashAttackTraceLogging(default off): writesguardfix-dashtrace.login the instance folder with sprint flag transitions, stuck-sprint episodes, every repair guardfix makes and every attack animation started on the server together with the code path that started it.
Epic Fight - Super Golem: idle/walk flicker while walking (1.0.72, 1.0.84)
- The mod's golem switched between its idle and walk animation over and over while walking, and sat in idle for a moment after it started moving.
- Cause: it chooses walk or idle with one high threshold (walk animation speed above 0.2). Vanilla smooths that speed, so any short pause (path recalculation, goal switch) drops it under the threshold and flips the animation, and a slow start needs several ticks to climb to 0.2.
- Starting to walk now needs
superGolemWalkStartSpeed(default0.05), and a golem that is already walking only returns to idle belowsuperGolemWalkStopSpeed(default0.03). Switch:superGolemWalkHysteresis(default on). Only applies when Super Golem is installed.
Game freeze while fighting with Murasama / other Epic Fight Avalon effects (1.0.87)
- Intermittent client freeze (the render thread spinning forever) caused by Epic Fight Avalon's particle-trail events: they step through the animation with
for (f = prev; f <= elapsed; f += step)wherestepcan be zero, negative or vanishingly small on an unlucky tick -- an endless loop. The step is now clamped to a sane minimum; the first few hits are logged asguardfix: Avalon trail event had step=.... Only applies when Epic Fight Avalon is installed.
Crash: Epic Fight Nightfall x Entity Culling (1.0.89, 1.0.90)
NoClassDefFoundError: dev/tr7zw/entityculling/versionless/access/Cullablethrown on the server thread while fighting withefn:yamato(summoned swords). Epic Fight Nightfall 3.4.2 casts entities to the old package of Entity Culling'sCullableinterface; Entity Culling 1.11.x moved it todev.tr7zw.entityculling.access.- Nightfall's five culling helpers are now routed to the interface that really exists (same five methods, only the package differs), so culling bookkeeping works exactly as Nightfall intended; if neither interface exists they become harmless no-ops. Nothing changes with an Entity Culling version that still has the old package. Only applies when Epic Fight Nightfall is installed.
Crash guard: skill data written to a key the player does not have (1.0.85)
- Epic Fight throws
SkillDataKey ... is unregisteredwhen a skill's animation event writes a data key that the player's skill container does not hold -- seen with Nightfall's Murasama sheath event right after dying and respawning with a Murasama, which crash-looped the world because the event runs inside the player tick. Such a write is a no-op as far as gameplay goes, so it is now skipped (logged once per key as a warning) instead of killing the tick.
Log noise and a spam source (1.0.91)
- Cataclysm Spellbooks 1.2.9 registers its laser-beam effect entities as monsters, which made vanilla log "Entity ... has no attributes" more than 1,300 times per start and made Just Enough Resources fail on them. They are now registered under the non-living
MISCcategory. Only applies when Cataclysm Spellbooks is installed. - New
silenceAnimationNoConstructorWarnings(default on) withanimationNoConstructorNamespaces: Epic Fight logs "Datapack animation reading failed: No constructor information has provided" for every animation a mod defines in Java and only ships motion data for (about 140 lines per start in a big pack), which buries real datapack mistakes. The listed namespaces are registered with Epic Fight's own "no warning" list; nothing about the animations changes.
Warriors of World add-on (w_o_w_armors_and_weapons) items (1.0.92 - 1.0.104)
- Items the mod registered but never put in a creative tab (
garras,gran_katana_curva_fuego) are added to itsarmastab: newextraCreativeTabItems("tab_id|item_id"entries; entries for missing items or tabs are ignored). garraswas registered with a maximum stack size of 0, so it could be picked up but not placed into an inventory slot. NewitemMaxStackSizeOverrides("item_id|size", defaultw_o_w_armors_and_weapons:garras|1) fixes the stack size.- Items registered without any attack stats can be given some: new
itemAttackAttributes("item_id|attack_damage|attack_speed", numbers as a vanilla tooltip shows them). Default:garras= damage8.0, attack speed2.0(netherite-sword damage, faster swing) -- change the numbers to taste. garrasis held upside-down and away from the hand by the mod's own display settings. guardfix now ships a small built-in resource pack that corrects the third-person and first-person display transforms (both hands, scale1.2). It is only registered whenw_o_w_armors_and_weaponsis loaded and sits above other packs, so it also overrides a Paxi / resource-pack copy of the same model file.- Note: the
arco_lu_bubow of that mod is a sword item, not a bow; making it shoot was tried and dropped, so it gets no special treatment.
Weapon animation events that never ran at high attack speed -- Moonless dash always came out as the same attack (1.0.108)
- Weapons of Miracles' Moonless alternates its dash attack between
moonless_bypass(verso) andmoonless_reversed_bypass(recto); with a high attack speed only the recto one ever came out. - Cause (Epic Fight, found with log diagnostics and confirmed in the bytecode): when an attack animation starts, Epic Fight blends from the previous pose over a short link whose length it rounds up to whole ticks, and then starts the real animation at the rounded-off offset (
0.05 * (playSpeed - 1)seconds for a 0.05 s link, so 0.052 s at play speed 2.04). Every timed animation event earlier than that offset can then never fall into any tick window and is silently skipped. Moonless flips its verso/recto flag from an event at exactly 0.05 s, so above play speed 2 the flag never flipped. This is not specific to Moonless -- any clip with an event in its first fraction of a second loses it at high play speed. - New
replaySkippedEarlyAnimationEvents(default on): right after the link hands over to the animation, the timed events inside the skipped window are fired once, exactly as the first tick would have; nothing fires twice. Players only.
New command /guardfix eventaudit [speed] [extraTransition] (1.0.109)
- Finds every installed animation that is hit by the skipped-early-event problem above at a given animation play speed, so you do not have to wait for a weapon to misbehave. It applies Epic Fight's own link-rounding rule to all registered animations and lists the ones that would lose timed events.
- The chat shows a summary (affected animations per mod namespace, plus how many are affected at 1.5x / 2x / 2.5x / 3x / 4x); the full list with the exact event times is written to
guardfix-eventaudit.txtin the instance folder.speeddefaults to your main-hand attack speed (a good approximation of the play speed of attack animations);extraTransitionis the extra link time the starting code adds (normally0). Read-only, usable by everyone. Players are already covered byreplaySkippedEarlyAnimationEvents; other entities are not.
Performance clean-up, no behaviour change (1.0.109)
- Every guard / parry / shield check that runs each tick used to build its debug-log text (string concatenation, item names) even with logging switched off; the text is now only built while
debugLoggingEnabledis on. - The weapon blacklist and the pickaxe/shovel/hoe check (a string build plus a regex, once per player per tick) are answered once per item and remembered; editing
weaponBlackliststill applies after a config reload. The passive shield buff skips its whole check when there is no shield in the offhand. The bare-fist combo list is no longer rebuilt with reflection on every call once it is settled, and the per-player memory of the bare-fist fix is released on logout. - The three log writers (
guardfix-debug.log,guardfix-dashtrace.log,guardfix-animtrace.log) share one implementation and only start their background thread when the first line is written.
Debug logging can no longer crash the game (1.0.86)
- With
debugLoggingEnabledon, a client crash report showed aNullPointerExceptioninside the log throttle (ConcurrentHashMap.putVal) on the render thread. Logging now never hands a null to the throttle and swallows any unexpected error from it -- a diagnostic can no longer take the game down.debugLoggingEnabledstill defaults tofalse.
Notes
- Every debugging switch (
debugLoggingEnabled,animatorTraceLogging,dashAttackTraceLogging) defaults tofalse. - Your existing
guardfix-common.tomlkeeps its saved values; new keys are added with their defaults on first start, and the removed dash-gate keys (preventStuckDashAttack,dashAttackMoveGraceTicks,dashAttackMinSpeed) are simply ignored.
This mod has no additional files

