Reach

[X] Definitive
Lag-compensated reach — catches attackers hitting victims from beyond vanilla melee reach. Ported from Nemesis RangeA + Grim Reach. Since v1.4.0 a motionless-pair branch also catches ghost reach: when neither attacker nor victim has moved, interpolation error is zero, so the check drops the ray and compares the vanilla metric (eye to closest point of the unexpanded hitbox) at a 3.2 ceiling — Koid-style 3.6 and LiquidBounce-style 4.2 ghost modules alert instead of passing as jitter.
id: reach  ·  class: ReachCheck  ·  group: Combat

What it detects

Lag-compensated reach — catches attackers hitting victims from beyond vanilla melee reach. Ported from Nemesis RangeA + Grim Reach. Since v1.4.0 a motionless-pair branch also catches ghost reach: when neither attacker nor victim has moved, interpolation error is zero, so the check drops the ray and compares the vanilla metric (eye to closest point of the unexpanded hitbox) at a 3.2 ceiling — Koid-style 3.6 and LiquidBounce-style 4.2 ghost modules alert instead of passing as jitter.

Observer signature

On each AttackEvent, measures the minimum attacker-eye to victim-hitbox ray intercept over 3 candidate looks (current yaw/pitch, lastYaw+pitch, lastYaw+lastPitch) x candidate victim positions (current + last ~3 ticks from the ring buffer). Flags when the minimum intercept distance exceeds maxReach + 0.8. The motionless-pair branch drops the ray and flags past maxReach + 0.2. VL level = ceil((dist - maxReach) * 2.0).

False-positive guards

  • Attacker-in-vehicle exempt
  • Victim-dead exempt
  • Attacker just-teleported-this-tick exempt
  • Pose-aware victim hitbox (sneak/prone/gliding)
  • 1.8 protocol widens hitbox margin by +0.1
  • No-intercept only flagged when the nearest face genuinely exceeds reach (close-range misses dropped as inconclusive)
  • Motionless-pair branch requires both attacker and victim stationary; a moving pair is judged by the ray path only
  • AttackEvent misattribution guard: a hurt is attributed only to the player the server named, and on a protocol that names damage causes an unnamed hurt is attributed to nobody at all; the knockback impulse is credited only when the damage behind it was never observed (see AttackInference)

Configuration

Defaults (editable in-game via the YACL config screen or /ius config):

FieldDefault
enabledtrue
setbackVL10.0
decay0.25
threshold3.0
flag margin+0.8 beyond maxReach (+0.2 on the motionless-pair branch)
ring window3 ticks
hitbox margin0.1 (+0.1 on 1.8)

Source

src/main/kotlin/dev/iustitia/checks/combat/ReachCheck.kt  ↗