promotional bannermobile promotional banner

Epic Fight Guard Fix

Mixin fixes for Epic Fight's shield/weapon guard system (base GuardSkill, Weapons of Miracles' Perfect Bulwark, and Epic Fight Nightfall's parry) plus unarmed combat and other core bugs.
Back to Files

guardfix-1.0.120.jar

File nameguardfix-1.0.120.jar
Uploader
epic_loverepic_lover
Uploaded
Nov 1, 2026
Downloads
124
Size
164.4 KB
Mod Loaders
Forge
File ID
9392643
Type
R
Release
Supported game versions
  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:epic-fight-guard-fix-1653717:9392643")

Learn more about Curse Maven

What's new

CHANGE

From 1.0.110

Crash on launch together with "Epic Fight: BK's Poise & Stance" (1.0.115)

  • Reported on CurseForge: with Poise installed the game crashed at launch. Both mods change the same two places in Epic Fight, and Mixin cannot apply two changes to the same call:
    • ControlEngine#maybeGuard (the check that decides whether a shield in a hand cancels the guard cast request): guardfix redirected the two Class#isAssignableFrom calls, Poise redirects the very same two calls;
    • GuardSkill#guard (the stamina cost of a block): guardfix redirected consumeForSkill, Poise modifies the same call's stamina amount.
  • When Poise is installed guardfix now detects it (one INFO line in latest.log: "BK's Poise and Stance detected -> using the poise-compatible variants") and uses a variant of those two changes that does not touch the calls:
    • the guard cast request is corrected on the finished decision instead of on the calls (the same rule as before; whatever Poise decided is respected);
    • the stamina of the shield combo is set to 0 on the call's argument (after Poise's own cost change), so the shield combo stays free and everything else keeps Poise's cost. Without Poise nothing changes. Tested with Poise 4.2.7 installed and removed.

Shield guard dropped after every single block and had to be raised again (1.0.118)

  • Symptom: blocking a hit with a weapon + shield released the guard; holding the guard key did not raise it again, you had to release and press once more.
  • Cause: with shieldDamagePerBlock every successful block takes 1 durability off the shield. A durability change is an "equipment change" for vanilla, and Epic Fight answers every equipment change of a held item with its "held item changed" handling, which ends a held guard. It was the same for any durability loss of a held item (every hit with a weapon, tool use...).
  • New ignoreDurabilityOnlyEquipmentChange (default on): an equipment change that is nothing but the item's Damage value (same item, same count, same other NBT) is no longer passed to Epic Fight's held-item handling. Any other change (different item, count, enchantments, other NBT) is handled exactly as before. Confirmed in game: 24 blocks in a row without the guard dropping.

Shield animations for the weapon + shield combo (1.0.120)

  • Until now blocking with the weapon + shield combo showed the weapon's own guard animations, because the guard itself is the weapon's. New shieldMotionForWeaponGuard (default on): for the weapons that pass guardfix's shield-combo check (a one-handed weapon with a shield in the off hand):
    • the held guard pose is the shield's off-hand block pose;
    • every block, parry and active-guard reaction is Epic Fight's own shield hit animation (biped/combat/hit_shield, off-hand variant);
    • guard breaks keep the weapon's animation (the combo never breaks, there is no shield equivalent).
  • Works with the base guard, Epic Fight's parry, Epic Fight Nightfall's parry and Weapons of Miracles' Perfect Bulwark. Purely visual: damage, stamina, timing windows and parry rules are unchanged. Set it to false to get the weapon's animations back.

Weapon hold pose flashed to the plain idle after an attack (1.0.114)

  • Symptom: after an attack with an Epic Fight Extra weapon whose hold pose is a "selective" animation (the greatsword), the arms showed the hold pose, then the plain idle, then the hold pose again.
  • Cause (Epic Fight): the variables of an animation are stored per animation name, not per running instance. When the old hold pose finished fading out after the attack, its end wiped the state of the newly restarted one; the new one then restarted its pose a second time while it was still being blended in, which left the layer with nothing queued and switched it off until a safety net switched it back on.
  • The state-wipe case is now handled at the source: if the state is missing but the right sub-animation is already playing on its layer, only the state is restored and the replay is skipped. The old safety net (1.0.71) is now limited to Epic Fight Extra's holds; before it also replayed Epic Fight's own digging pose (more than 90 times in one session). Confirmed in game.

Vanilla attack swinging in the middle of a combo -- caused by "EF x Punchy Compat" (1.0.112)

  • Spamming attack with an Epic Fight weapon (seen with Weapons of Miracles' Moonless, also in mid-air), every so often a plain vanilla arm swing and attack ran between the combo hits.
  • Cause: Epic Fight only cancels the vanilla attack while its own canPlayAttackAnimation() allows an Epic Fight attack. The third-party mod EF x Punchy Compat (efpunchycompat 1.0.4) forces that check to false for one second whenever the crosshair has touched any block and now points at air (meant to stop a Punchy first-person shake while mining), without looking at the Epic Fight mode or the held item.
  • New fixEfPunchyCompatBlockingEpicFightAttack (default on): in battle mode with one of Epic Fight's combat-preferred items (the combat_preferred_items client option) that suppression is skipped. Mining mode and mining tools keep EF x Punchy Compat's behaviour. Only applies when EF x Punchy Compat is installed.

New command and clean-up (1.0.109)

  • /guardfix eventaudit [speed] [extraTransition] lists every installed animation whose early timed events Epic Fight would skip at a given play speed (summary in chat, full list in guardfix-eventaudit.txt).
  • Performance clean-up without behaviour change: log texts of the per-tick guard checks are only built while debugLoggingEnabled is on, the weapon blacklist and the pickaxe/shovel/hoe check are cached per item, and the bare-fist combo list is cached once settled.

Notes

  • Every debugging switch (debugLoggingEnabled, animatorTraceLogging, dashAttackTraceLogging) defaults to false.
  • Your existing guardfix-common.toml keeps its saved values; the new keys (fixEfPunchyCompatBlockingEpicFightAttack, ignoreDurabilityOnlyEquipmentChange, shieldMotionForWeaponGuard) are added with their defaults on first start.

This mod has no additional files