Language: English | Русский
A lightweight Paper/Spigot plugin that stops modern Minecraft clients from revealing invisible players through the client-side supporting block debug renderer.
Demo: https://youtu.be/bywBEUWli78
Since Minecraft 1.21.11, the client tracks each entity's supporting block — the block an entity is standing on — and a client debug renderer can draw it. It only works while the entity is standing on a block.
For an invisible player this is a leak: the player model is hidden, but the highlighted block under their feet gives their exact position away.
For a remote entity, onGround only drives cosmetic/debug behaviour on the client. In vanilla
Entity.checkSupportingBlock(onGround, …), when onGround is false the client sets
mainSupportingBlockPos = Optional.empty() — so the debug renderer has nothing to draw.
This plugin intercepts the outbound entity-movement packets sent to clients on 1.21.11+ and
forces onGround = false for entities that are invisible players without armor. The invisible
player then has no supporting block on the client and can no longer be revealed by the debug
renderer. Only the flag changes — movement itself is untouched.
Designed to coexist with packet-based anticheats such as GrimAC:
- The spoof only flips
onGroundof other entities and never touches their positions, so it does not corrupt the entity data an anticheat's lag-compensated world relies on. A remote entity'sonGroundis not an input to reach/hitbox/movement checks, so it cannot cause false positives. - The flag is edited directly in the packet buffer instead of through a re-encoded wrapper. The
plugin never becomes the "last writer" of the packet, so it does not overwrite modifications
made by other packet plugins (e.g. Grim), and it does not depend on PacketEvents'
reEncodeByDefaultsetting.
- A Paper/Spigot server with ViaVersion and PacketEvents installed.
- 1.21.11+ clients are the ones affected; older clients are left untouched.
config.yml:
# Only spoof invisible players. false = spoof all tracked players.
check-invisibility: true
# Only spoof players without armor (armored invisibles are already visible via their armor).
check-armor: true| Command | Description |
|---|---|
/nesb reload |
Reload the configuration. |
| Permission | Description | Default |
|---|---|---|
nesb.reload |
Allows using /nesb reload. |
op |
./gradlew build
The jar is produced in build/libs/. Compiled to Java 17 bytecode so it loads under Paper 1.16.5's
class transformer while still running on newer JVMs.