Skip to content

3ako/NoEntitySupportingBlock

Repository files navigation

NoEntitySupportingBlock

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

The problem

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.

The solution

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.

Anticheat / Grim compatibility

Designed to coexist with packet-based anticheats such as GrimAC:

  • The spoof only flips onGround of 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's onGround is 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' reEncodeByDefault setting.

Requirements

  • A Paper/Spigot server with ViaVersion and PacketEvents installed.
  • 1.21.11+ clients are the ones affected; older clients are left untouched.

Configuration

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

Commands

Command Description
/nesb reload Reload the configuration.

Permissions

Permission Description Default
nesb.reload Allows using /nesb reload. op

Building

./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.

About

Disable entity block debug

Resources

Stars

5 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages