Update bypass list with full set of configuration and login packets

This commit is contained in:
Manuel Frohn
2026-05-14 20:21:36 +02:00
parent 51ff0e1a9f
commit 13bddbe359
@@ -23,8 +23,19 @@ import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.PacketListener; import net.minecraft.network.PacketListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket;
import net.minecraft.network.protocol.common.ClientboundCustomReportDetailsPacket;
import net.minecraft.network.protocol.common.ClientboundDisconnectPacket;
import net.minecraft.network.protocol.common.ClientboundKeepAlivePacket; import net.minecraft.network.protocol.common.ClientboundKeepAlivePacket;
import net.minecraft.network.protocol.common.ClientboundPingPacket; import net.minecraft.network.protocol.common.ClientboundPingPacket;
import net.minecraft.network.protocol.common.ClientboundResourcePackPopPacket;
import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket;
import net.minecraft.network.protocol.common.ClientboundServerLinksPacket;
import net.minecraft.network.protocol.common.ClientboundStoreCookiePacket;
import net.minecraft.network.protocol.common.ClientboundTransferPacket;
import net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket;
import net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket;
import net.minecraft.network.protocol.configuration.ClientboundUpdateEnabledFeaturesPacket;
import net.minecraft.network.protocol.cookie.ClientboundCookieRequestPacket;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.network.protocol.game.ClientboundBlockEventPacket; import net.minecraft.network.protocol.game.ClientboundBlockEventPacket;
import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
@@ -34,7 +45,6 @@ import net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket;
import net.minecraft.network.protocol.game.ClientboundCommandsPacket; import net.minecraft.network.protocol.game.ClientboundCommandsPacket;
import net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket; import net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket;
import net.minecraft.network.protocol.game.ClientboundGameEventPacket; import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData;
import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket; import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket;
import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket; import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket;
import net.minecraft.network.protocol.game.ClientboundPlayerChatPacket; import net.minecraft.network.protocol.game.ClientboundPlayerChatPacket;
@@ -53,6 +63,7 @@ import net.minecraft.network.protocol.game.ClientboundUpdateAttributesPacket;
import net.minecraft.network.protocol.login.ClientboundCustomQueryPacket; import net.minecraft.network.protocol.login.ClientboundCustomQueryPacket;
import net.minecraft.network.protocol.login.ClientboundHelloPacket; import net.minecraft.network.protocol.login.ClientboundHelloPacket;
import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket; import net.minecraft.network.protocol.login.ClientboundLoginCompressionPacket;
import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket;
import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket; import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@@ -62,7 +73,7 @@ import net.minecraft.world.level.block.state.BlockState;
* any packet must be explicitly whitelisted or processed in a * any packet must be explicitly whitelisted or processed in a
* way that is also compliant with the principle of default-deny. * way that is also compliant with the principle of default-deny.
*/ */
public class TechHiderUpdated { public class TechHider {
private final Set<Class<? extends Packet<? extends PacketListener>>> bypassingPackets; private final Set<Class<? extends Packet<? extends PacketListener>>> bypassingPackets;
private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors; private final Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> packetProcessors;
private final TinyProtocol interceptor; private final TinyProtocol interceptor;
@@ -70,48 +81,34 @@ public class TechHiderUpdated {
private final Set<String> blockEntitiesToHide; private final Set<String> blockEntitiesToHide;
private final BlockState blockToObfuscateTo; private final BlockState blockToObfuscateTo;
public TechHiderUpdated(Plugin plugin, Set<Integer> blockIdsToObfuscate, BlockState blockToObfuscateTo, Set<String> blockEntitiesToHide) { public TechHider(Plugin plugin, Set<Integer> blockIdsToObfuscate, BlockState blockToObfuscateTo, Set<String> blockEntitiesToHide) {
this.blockIdsToObfuscate = blockIdsToObfuscate; this.blockIdsToObfuscate = blockIdsToObfuscate;
this.blockToObfuscateTo = blockToObfuscateTo; this.blockToObfuscateTo = blockToObfuscateTo;
this.blockEntitiesToHide = blockEntitiesToHide; this.blockEntitiesToHide = blockEntitiesToHide;
this.bypassingPackets = Set.of( this.bypassingPackets = Set.of(
// --- Handshake & Login Protocol --- // --- 5.1.x Login Protocol ---
// These must be whitelisted to allow the player to actually reach the 'Play' ClientboundLoginDisconnectPacket.class, // 5.1.1 Disconnect
// state ClientboundHelloPacket.class, // 5.1.2 Encryption Request
ClientboundHelloPacket.class, // Encryption request ClientboundLoginFinishedPacket.class, // 5.1.3 Login Success
ClientboundLoginFinishedPacket.class, // Login Success ClientboundLoginCompressionPacket.class, // 5.1.4 Set Compression
ClientboundLoginCompressionPacket.class, // Set Compression ClientboundCustomQueryPacket.class, // 5.1.5 Login Plugin Request
ClientboundCustomQueryPacket.class, // Velocity/Bungee/Mod identity checks ClientboundCookieRequestPacket.class, // 5.1.6 Cookie Request
// --- Protocol & Connection --- // --- 6.1.x Configuration Protocol ---
ClientboundKeepAlivePacket.class, ClientboundCustomPayloadPacket.class, // 6.1.2 Clientbound Plugin Message
ClientboundPingPacket.class, ClientboundFinishConfigurationPacket.class, // 6.1.4 Finish Configuration
ClientboundCustomPayloadPacket.class, ClientboundKeepAlivePacket.class, // 6.1.5 Clientbound Keep Alive
ClientboundServerDataPacket.class, ClientboundPingPacket.class, // 6.1.6 Ping
ClientboundRegistryDataPacket.class, // 6.1.8 Registry Data
// --- UI & Communication --- ClientboundResourcePackPopPacket.class, // 6.1.9 Remove Resource Pack
ClientboundSystemChatPacket.class, ClientboundResourcePackPushPacket.class, // 6.1.10 Add Resource Pack
ClientboundDisguisedChatPacket.class, ClientboundStoreCookiePacket.class, // 6.1.11 Store Cookie
ClientboundBossEventPacket.class, ClientboundTransferPacket.class, // 6.1.12 Transfer
ClientboundTabListPacket.class, ClientboundUpdateEnabledFeaturesPacket.class, // 6.1.13 Feature Flags
ClientboundSetTitleTextPacket.class, ClientboundCustomReportDetailsPacket.class, // 6.1.16 Custom Report Details
ClientboundSetSubtitleTextPacket.class, ClientboundServerLinksPacket.class, // 6.1.17 Server Links
ClientboundSetTitlesAnimationPacket.class, ClientboundSystemChatPacket.class, // 6.1.18/19 Dialogs are often handled via System Chat or Custom Payloads
ClientboundClearTitlesPacket.class, ClientboundServerDataPacket.class // 6.1.20 Code of Conduct is usually in Server Data
ClientboundPlayerChatPacket.class,
// --- Player Stats & Logic ---
ClientboundSetExperiencePacket.class,
ClientboundSetHealthPacket.class,
ClientboundPlayerAbilitiesPacket.class,
ClientboundUpdateAttributesPacket.class,
ClientboundCommandSuggestionsPacket.class,
// --- World Metadata (Non-Structural) ---
ClientboundSetTimePacket.class,
ClientboundSetDefaultSpawnPositionPacket.class,
ClientboundGameEventPacket.class, // Weather, Gamemode changes, etc.
ClientboundCommandsPacket.class // Command tree for tab-complete
); );
BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>> tossPacket = (p, packet) -> null; BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>> tossPacket = (p, packet) -> null;