ModsJava
GrimViaExempt — fix "reappearing blocks" for ViaVersion players on GrimAC
Auto-exempts old-version clients from GrimAC so Via-translated insta-breaks stop flickering back
⬇ Download on SpigotGrimViaExempt
Fixes the "reappearing blocks" / fast-break desync for old-version (ViaVersion) clients on GrimAC servers.
A tiny Skript that auto-grants a temporary grim.exempt to players joining on client versions older than your server's native version — mirroring Grim's own built-in exemption of all Bedrock/Floodgate players.
The problem
If your server runs GrimAC + ViaVersion/ViaBackwards, players on older clients get "ghost breaks": with fast tools (Efficiency V + Haste II insta-breaks), the block they just broke flickers back ~40 ms later. Grim's break-time prediction misjudges Via-translated insta-breaks and silently cancels them.
This is a known, wontfix issue upstream:
Moving Via to your Velocity/Bungee proxy does not work — Grim detects it and kicks every translated client with "sending ViaVersion proxy data". There is no config toggle for it.
Measured results
Automated dig probe (30 insta-break digs per run, Efficiency V netherite + Haste II), on Paper 1.21.11:
Client grim.exempt Reverted breaks
1.21.4 (via ViaBackwards) no 7/30
1.21.11 (native) no 0/30
1.21.4, normal-speed breaks no 0/30
1.21.4 (same as row 1) YES 0/30
How it works
On join, the script reads the player's client version from the PlaceholderAPI ViaVersion expansion. If it's older than your configured native version, it runs lp settemp grim.exempt true 30d replace for that player. Newer-than-server clients and unparseable values fall through safely with no grant. Every grant is logged to plugins/Skript/logs/viaexempt.log.
Temp perms (not permanent ones) are used deliberately: Grim caches permissions at join, so the grant takes effect from the player's next session, and the 30-day expiry means no permanent permission residue if you remove the script.
The trade-off — read before installing
Exempted players are excluded from all Grim checks (fly, speed, killaura, …), exactly like Bedrock players already are on every Grim server. A cheater could deliberately join on an old client to dodge Grim. If that trade doesn't fit your server's policy, don't install this — or narrow the version window in the script's options.
Requirements
Install
Rollback
Delete the script. Temp perms expire on their own within 30 days, or remove immediately per player: lp user <uuid> permission unset grim.exempt.
Source, issues and updates: github.com/cometsmp/GrimViaExempt (MIT)
Built and battle-tested on CometSMP.
Fixes the "reappearing blocks" / fast-break desync for old-version (ViaVersion) clients on GrimAC servers.
A tiny Skript that auto-grants a temporary grim.exempt to players joining on client versions older than your server's native version — mirroring Grim's own built-in exemption of all Bedrock/Floodgate players.
The problem
If your server runs GrimAC + ViaVersion/ViaBackwards, players on older clients get "ghost breaks": with fast tools (Efficiency V + Haste II insta-breaks), the block they just broke flickers back ~40 ms later. Grim's break-time prediction misjudges Via-translated insta-breaks and silently cancels them.
This is a known, wontfix issue upstream:
- GrimAnticheat/Grim#2651 — closed, not planned
- ViaVersion/ViaVersion#4326 — closed, invalid
Moving Via to your Velocity/Bungee proxy does not work — Grim detects it and kicks every translated client with "sending ViaVersion proxy data". There is no config toggle for it.
Measured results
Automated dig probe (30 insta-break digs per run, Efficiency V netherite + Haste II), on Paper 1.21.11:
Code (Text):
Client grim.exempt Reverted breaks
1.21.4 (via ViaBackwards) no 7/30
1.21.11 (native) no 0/30
1.21.4, normal-speed breaks no 0/30
1.21.4 (same as row 1) YES 0/30
On join, the script reads the player's client version from the PlaceholderAPI ViaVersion expansion. If it's older than your configured native version, it runs lp settemp grim.exempt true 30d replace for that player. Newer-than-server clients and unparseable values fall through safely with no grant. Every grant is logged to plugins/Skript/logs/viaexempt.log.
Temp perms (not permanent ones) are used deliberately: Grim caches permissions at join, so the grant takes effect from the player's next session, and the 30-day expiry means no permanent permission residue if you remove the script.
The trade-off — read before installing
Exempted players are excluded from all Grim checks (fly, speed, killaura, …), exactly like Bedrock players already are on every Grim server. A cheater could deliberately join on an old client to dodge Grim. If that trade doesn't fit your server's policy, don't install this — or narrow the version window in the script's options.
Requirements
- Skript + skript-placeholders
- PlaceholderAPI with the ViaVersion expansion
- LuckPerms
- GrimAC + ViaVersion/ViaBackwards
Install
- Console: papi ecloud download ViaVersion, then papi reload. Verify with papi parse <anyplayer> %viaversion_player_protocol_version% — you should get a version name like 1.21.4.
- Open viaexempt.sk and set native-version in the options: block to whatever the placeholder reports for a native client on your server.
- Drop viaexempt.sk into plugins/Skript/scripts/.
- Console: sk reload viaexempt — and read the reload output for warnings.
- Verify: join on an old client, check the log and lp user <name> permission info. The fix applies from that player's second session onward (Grim's join-time permission cache).
Rollback
Delete the script. Temp perms expire on their own within 30 days, or remove immediately per player: lp user <uuid> permission unset grim.exempt.
Source, issues and updates: github.com/cometsmp/GrimViaExempt (MIT)
Built and battle-tested on CometSMP.
GrimViaExempt — fix "reappearing blocks" for ViaVersion players on GrimAC is a free Minecraft Java mod. Compatible with Minecraft 1.21. Downloaded 15 times (via Spigot). Download it and open it directly in the game.