Skip to content

Fix Soul Speed + Swift Sneak simulation false positive on 1.21+#2606

Open
Szabolcs05 wants to merge 1 commit into
GrimAnticheat:2.0from
Szabolcs05:fix/soul-speed-swift-sneak-false-positive
Open

Fix Soul Speed + Swift Sneak simulation false positive on 1.21+#2606
Szabolcs05 wants to merge 1 commit into
GrimAnticheat:2.0from
Szabolcs05:fix/soul-speed-swift-sneak-false-positive

Conversation

@Szabolcs05
Copy link
Copy Markdown

@Szabolcs05 Szabolcs05 commented Apr 19, 2026

Description

Fixes continuous simulation false positives when a player with Swift Sneak 3 leggings and Soul Speed 3 boots is sneaking and bridging over soul sand/soul soil on 1.21+ servers.

Root Cause

In vanilla 1.21+, Soul Speed is a location_changed enchantment effect (soul_speed.json). When the player steps on a soul speed block, the client applies the movement_efficiency = 1.0 modifier locally and immediately. However, the server sends the UPDATE_ATTRIBUTES packet asynchronously.

GrimAC's getBlockSpeedFactor for 1.21+ clients deferred to the MOVEMENT_EFFICIENCY attribute (via getModernVelocityMultiplier), relying on the server-sent value. During bridging where block position changes constantly the attribute updates lagged behind the client's local state, causing GrimAC to predict with movement_efficiency = 0 (soul sand slowdown) while the client used 1.0 (no slowdown).

Fix

Removed the V_1_21 version gate in getBlockSpeedFactor so Soul Speed is checked directly from the player's boots inventory for all 1.16.2+ clients, matching the client's local behavior and avoiding the attribute timing desync.

Testing

  • Player with Swift Sneak 3 + Soul Speed 3, sneaking and bridging over soul sand no longer flags simulation.

On 1.21+, Soul Speed uses a location_changed enchantment effect that sets movement_efficiency to 1.0 client-side immediately when stepping on soul speed blocks. GrimAC relied on the server-sent UPDATE_ATTRIBUTES packet for this value, which arrives with latency. During bridging (sneaking + placing blocks over soul sand), the constant block position changes caused the attribute updates to lag behind the client's local state, resulting in continuous simulation false positives.

The fix removes the 1.21 version gate in getBlockSpeedFactor so Soul Speed is checked directly from the player's boots inventory for all 1.16.2+ clients, matching the client's local behavior.
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Apr 19, 2026

CLA assistant check
All committers have signed the CLA.

@ManInMyVan
Copy link
Copy Markdown
Contributor

does this break if soul_speed.json is changed?

@SamB440
Copy link
Copy Markdown
Contributor

SamB440 commented Apr 19, 2026

This is incorrect. This behaviour has changed at some point.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants