forked from SteamWar/SteamWar
Add remaining packets with toss handler for now
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
package de.steamwar.techhider;
|
package de.steamwar.techhider;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
@@ -14,13 +14,9 @@ import org.bukkit.plugin.Plugin;
|
|||||||
import com.comphenix.tinyprotocol.TinyProtocol;
|
import com.comphenix.tinyprotocol.TinyProtocol;
|
||||||
|
|
||||||
import de.steamwar.Reflection;
|
import de.steamwar.Reflection;
|
||||||
import de.steamwar.techhider.ChunkHider.SectionHider;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import io.netty.buffer.Unpooled;
|
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.SectionPos;
|
import net.minecraft.core.SectionPos;
|
||||||
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.ClientboundClearDialogPacket;
|
import net.minecraft.network.protocol.common.ClientboundClearDialogPacket;
|
||||||
@@ -35,19 +31,26 @@ import net.minecraft.network.protocol.common.ClientboundServerLinksPacket;
|
|||||||
import net.minecraft.network.protocol.common.ClientboundShowDialogPacket;
|
import net.minecraft.network.protocol.common.ClientboundShowDialogPacket;
|
||||||
import net.minecraft.network.protocol.common.ClientboundStoreCookiePacket;
|
import net.minecraft.network.protocol.common.ClientboundStoreCookiePacket;
|
||||||
import net.minecraft.network.protocol.common.ClientboundTransferPacket;
|
import net.minecraft.network.protocol.common.ClientboundTransferPacket;
|
||||||
|
import net.minecraft.network.protocol.common.ClientboundUpdateTagsPacket;
|
||||||
import net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket;
|
import net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket;
|
||||||
import net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket;
|
import net.minecraft.network.protocol.configuration.ClientboundRegistryDataPacket;
|
||||||
import net.minecraft.network.protocol.configuration.ClientboundUpdateEnabledFeaturesPacket;
|
import net.minecraft.network.protocol.configuration.ClientboundUpdateEnabledFeaturesPacket;
|
||||||
import net.minecraft.network.protocol.cookie.ClientboundCookieRequestPacket;
|
import net.minecraft.network.protocol.cookie.ClientboundCookieRequestPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundAnimatePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundAwardStatsPacket;
|
import net.minecraft.network.protocol.game.ClientboundAwardStatsPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundBlockChangedAckPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundBlockDestructionPacket;
|
||||||
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;
|
||||||
import net.minecraft.network.protocol.game.ClientboundBossEventPacket;
|
import net.minecraft.network.protocol.game.ClientboundBossEventPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundBundleDelimiterPacket;
|
import net.minecraft.network.protocol.game.ClientboundBundleDelimiterPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundBundlePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket;
|
import net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundChunkBatchFinishedPacket;
|
import net.minecraft.network.protocol.game.ClientboundChunkBatchFinishedPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket;
|
import net.minecraft.network.protocol.game.ClientboundChunkBatchStartPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundChunksBiomesPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundClearTitlesPacket;
|
import net.minecraft.network.protocol.game.ClientboundClearTitlesPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket;
|
import net.minecraft.network.protocol.game.ClientboundCommandSuggestionsPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundCommandsPacket;
|
import net.minecraft.network.protocol.game.ClientboundCommandsPacket;
|
||||||
@@ -57,27 +60,54 @@ import net.minecraft.network.protocol.game.ClientboundContainerSetDataPacket;
|
|||||||
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
|
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundCooldownPacket;
|
import net.minecraft.network.protocol.game.ClientboundCooldownPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundCustomChatCompletionsPacket;
|
import net.minecraft.network.protocol.game.ClientboundCustomChatCompletionsPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundDamageEventPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundDebugSamplePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundDeleteChatPacket;
|
import net.minecraft.network.protocol.game.ClientboundDeleteChatPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket;
|
import net.minecraft.network.protocol.game.ClientboundDisguisedChatPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundEntityEventPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundEntityPositionSyncPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundExplodePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundForgetLevelChunkPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
|
import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundHorseScreenOpenPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
|
import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket;
|
import net.minecraft.network.protocol.game.ClientboundLevelChunkWithLightPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundLevelEventPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
|
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundMerchantOffersPacket;
|
import net.minecraft.network.protocol.game.ClientboundMerchantOffersPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Pos;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.PosRot;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveEntityPacket.Rot;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveMinecartPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundMoveVehiclePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundOpenBookPacket;
|
import net.minecraft.network.protocol.game.ClientboundOpenBookPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
|
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket;
|
import net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket;
|
||||||
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;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerCombatEndPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerCombatEnterPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerCombatEnterPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerLookAtPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerRotationPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerRotationPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundProjectilePowerPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundRecipeBookAddPacket;
|
import net.minecraft.network.protocol.game.ClientboundRecipeBookAddPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundRecipeBookRemovePacket;
|
import net.minecraft.network.protocol.game.ClientboundRecipeBookRemovePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundRecipeBookSettingsPacket;
|
import net.minecraft.network.protocol.game.ClientboundRecipeBookSettingsPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundRemoveMobEffectPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundResetScorePacket;
|
import net.minecraft.network.protocol.game.ClientboundResetScorePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundRotateHeadPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket;
|
import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSelectAdvancementsTabPacket;
|
import net.minecraft.network.protocol.game.ClientboundSelectAdvancementsTabPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetActionBarTextPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetActionBarTextPacket;
|
||||||
@@ -86,29 +116,45 @@ import net.minecraft.network.protocol.game.ClientboundSetBorderLerpSizePacket;
|
|||||||
import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetBorderSizePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDelayPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetBorderWarningDistancePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetCameraPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundServerDataPacket;
|
import net.minecraft.network.protocol.game.ClientboundServerDataPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetDisplayObjectivePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetDisplayObjectivePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetEntityLinkPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetExperiencePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetExperiencePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetHeldSlotPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetHeldSlotPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetHealthPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetHealthPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetObjectivePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetObjectivePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetPassengersPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetPlayerInventoryPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetPlayerInventoryPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetPlayerTeamPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetScorePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetScorePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetTimePacket;
|
import net.minecraft.network.protocol.game.ClientboundSetTimePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket;
|
import net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSoundEntityPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSoundPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundStartConfigurationPacket;
|
import net.minecraft.network.protocol.game.ClientboundStartConfigurationPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundSystemChatPacket;
|
import net.minecraft.network.protocol.game.ClientboundSystemChatPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundTabListPacket;
|
import net.minecraft.network.protocol.game.ClientboundTabListPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundTagQueryPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundTickingStatePacket;
|
import net.minecraft.network.protocol.game.ClientboundTickingStatePacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundTickingStepPacket;
|
import net.minecraft.network.protocol.game.ClientboundTickingStepPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundTrackedWaypointPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket;
|
import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundUpdateAttributesPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket;
|
import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket;
|
||||||
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;
|
||||||
@@ -243,32 +289,134 @@ public class TechHider {
|
|||||||
));
|
));
|
||||||
|
|
||||||
BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>> tossPacket = (p, packet) -> null;
|
BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>> tossPacket = (p, packet) -> null;
|
||||||
|
Map<Class<? extends Packet<? extends PacketListener>>, BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>>> processors = new HashMap<>();
|
||||||
|
|
||||||
this.packetProcessors = Map.of(
|
// 7.1.x Bundle Packet: packet container; blocked until nested packets are safely unbundled/processed.
|
||||||
ClientboundBlockEventPacket.class,
|
processors.put(ClientboundBundlePacket.class, tossPacket);
|
||||||
(p, packet) -> processBlockEventPacket(p, (ClientboundBlockEventPacket) packet),
|
|
||||||
ClientboundBlockUpdatePacket.class,
|
// 7.1.2 Spawn Entity: entity type and position can reveal hidden contraptions.
|
||||||
(p, packet) -> processBlockUpdatePacket(p, (ClientboundBlockUpdatePacket) packet),
|
processors.put(ClientboundAddEntityPacket.class, tossPacket);
|
||||||
ClientboundBlockEntityDataPacket.class,
|
// 7.1.3 Entity Animation: entity id based signal, keep blocked until entity visibility is modeled.
|
||||||
(p, packet) -> processBlockEntityDataPacket(p, (ClientboundBlockEntityDataPacket) packet),
|
processors.put(ClientboundAnimatePacket.class, tossPacket);
|
||||||
ClientboundSectionBlocksUpdatePacket.class,
|
// 7.1.5 Acknowledge Block Change: block interaction side channel; blocked pending review.
|
||||||
(p, packet) -> processSectionUpdate(p, (ClientboundSectionBlocksUpdatePacket) packet),
|
processors.put(ClientboundBlockChangedAckPacket.class, tossPacket);
|
||||||
ClientboundLevelChunkWithLightPacket.class,
|
// 7.1.6 Set Block Destroy Stage: block position and mining progress can reveal activity.
|
||||||
(p, packet) -> processChunkWithLight(p, (ClientboundLevelChunkWithLightPacket) packet)
|
processors.put(ClientboundBlockDestructionPacket.class, tossPacket);
|
||||||
);
|
// 7.1.7 Block Entity Data: currently filtered by block position and allowed tile-entity actions.
|
||||||
|
processors.put(ClientboundBlockEntityDataPacket.class, (p, packet) -> processBlockEntityDataPacket(p, (ClientboundBlockEntityDataPacket) packet));
|
||||||
|
// 7.1.8 Block Action: currently filtered by block position.
|
||||||
|
processors.put(ClientboundBlockEventPacket.class, (p, packet) -> processBlockEventPacket(p, (ClientboundBlockEventPacket) packet));
|
||||||
|
// 7.1.9 Block Update: currently filtered/obfuscated by block position and block id.
|
||||||
|
processors.put(ClientboundBlockUpdatePacket.class, (p, packet) -> processBlockUpdatePacket(p, (ClientboundBlockUpdatePacket) packet));
|
||||||
|
// 7.1.14 Chunk Biomes: chunk/world data side channel.
|
||||||
|
processors.put(ClientboundChunksBiomesPacket.class, tossPacket);
|
||||||
|
// 7.1.26 Damage Event: entity ids and damage source location can leak hidden activity.
|
||||||
|
processors.put(ClientboundDamageEventPacket.class, tossPacket);
|
||||||
|
// 7.1.31 Debug Sample: debug telemetry; blocked by default.
|
||||||
|
processors.put(ClientboundDebugSamplePacket.class, tossPacket);
|
||||||
|
// 7.1.35 Entity Event: entity id based signal.
|
||||||
|
processors.put(ClientboundEntityEventPacket.class, tossPacket);
|
||||||
|
// 7.1.36 Teleport Entity: entity id and absolute position.
|
||||||
|
processors.put(ClientboundTeleportEntityPacket.class, tossPacket);
|
||||||
|
// 7.1.37 Explosion: position, affected blocks, and knockback can reveal TNT/tech.
|
||||||
|
processors.put(ClientboundExplodePacket.class, tossPacket);
|
||||||
|
// 7.1.38 Unload Chunk: chunk visibility side channel.
|
||||||
|
processors.put(ClientboundForgetLevelChunkPacket.class, tossPacket);
|
||||||
|
// 7.1.41 Open Horse Screen: entity id based container.
|
||||||
|
processors.put(ClientboundHorseScreenOpenPacket.class, tossPacket);
|
||||||
|
// 7.1.42 Hurt Animation: entity id based signal.
|
||||||
|
processors.put(ClientboundHurtAnimationPacket.class, tossPacket);
|
||||||
|
// 7.1.45 Chunk Data and Update Light: currently filtered/obfuscated by chunk data processor.
|
||||||
|
processors.put(ClientboundLevelChunkWithLightPacket.class, (p, packet) -> processChunkWithLight(p, (ClientboundLevelChunkWithLightPacket) packet));
|
||||||
|
// 7.1.46 World Event: block position/event id can leak activity.
|
||||||
|
processors.put(ClientboundLevelEventPacket.class, tossPacket);
|
||||||
|
// 7.1.47 Particle: particle type and position can reveal hidden machinery.
|
||||||
|
processors.put(ClientboundLevelParticlesPacket.class, tossPacket);
|
||||||
|
// 7.1.48 Update Light: lighting can reveal hidden blocks/operations.
|
||||||
|
processors.put(ClientboundLightUpdatePacket.class, tossPacket);
|
||||||
|
// 7.1.50 Map Data: map pixels/icons can reveal player/world state.
|
||||||
|
processors.put(ClientboundMapItemDataPacket.class, tossPacket);
|
||||||
|
// 7.1.52/53/55 Update Entity Position/Rotation: entity id and movement signal.
|
||||||
|
processors.put(ClientboundMoveEntityPacket.class, tossPacket);
|
||||||
|
processors.put(Pos.class, tossPacket);
|
||||||
|
processors.put(PosRot.class, tossPacket);
|
||||||
|
processors.put(Rot.class, tossPacket);
|
||||||
|
// 7.1.54 Move Minecart Along Track: entity path and position signal.
|
||||||
|
processors.put(ClientboundMoveMinecartPacket.class, tossPacket);
|
||||||
|
// 7.1.56 Move Vehicle (clientbound): vehicle position signal.
|
||||||
|
processors.put(ClientboundMoveVehiclePacket.class, tossPacket);
|
||||||
|
// 7.1.59 Open Sign Editor: block position.
|
||||||
|
processors.put(ClientboundOpenSignEditorPacket.class, tossPacket);
|
||||||
|
// 7.1.67 Combat Death: entity/player ids and death message context.
|
||||||
|
processors.put(ClientboundPlayerCombatKillPacket.class, tossPacket);
|
||||||
|
// 7.1.68 Player Info Remove: other-player identity/state.
|
||||||
|
processors.put(ClientboundPlayerInfoRemovePacket.class, tossPacket);
|
||||||
|
// 7.1.69 Player Info Update: other-player identity/state.
|
||||||
|
processors.put(ClientboundPlayerInfoUpdatePacket.class, tossPacket);
|
||||||
|
// 7.1.70 Look At: target position/entity.
|
||||||
|
processors.put(ClientboundPlayerLookAtPacket.class, tossPacket);
|
||||||
|
// 7.1.76 Remove Entities: entity id visibility side channel.
|
||||||
|
processors.put(ClientboundRemoveEntitiesPacket.class, tossPacket);
|
||||||
|
// 7.1.77 Remove Entity Effect: entity id and effect state.
|
||||||
|
processors.put(ClientboundRemoveMobEffectPacket.class, tossPacket);
|
||||||
|
// 7.1.82 Set Head Rotation: entity id and rotation.
|
||||||
|
processors.put(ClientboundRotateHeadPacket.class, tossPacket);
|
||||||
|
// 7.1.83 Update Section Blocks: currently filtered/obfuscated by section block processor.
|
||||||
|
processors.put(ClientboundSectionBlocksUpdatePacket.class, (p, packet) -> processSectionUpdate(p, (ClientboundSectionBlocksUpdatePacket) packet));
|
||||||
|
// 7.1.92 Set Camera: entity id.
|
||||||
|
processors.put(ClientboundSetCameraPacket.class, tossPacket);
|
||||||
|
// 7.1.98 Set Entity Metadata: entity state can reveal blocks/items/displays.
|
||||||
|
processors.put(ClientboundSetEntityDataPacket.class, tossPacket);
|
||||||
|
// 7.1.99 Link Entities: entity relationship signal.
|
||||||
|
processors.put(ClientboundSetEntityLinkPacket.class, tossPacket);
|
||||||
|
// 7.1.100 Set Entity Velocity: entity id and movement.
|
||||||
|
processors.put(ClientboundSetEntityMotionPacket.class, tossPacket);
|
||||||
|
// 7.1.101 Set Equipment: entity equipment can reveal wargear.
|
||||||
|
processors.put(ClientboundSetEquipmentPacket.class, tossPacket);
|
||||||
|
// 7.1.106 Set Passengers: entity relationship signal.
|
||||||
|
processors.put(ClientboundSetPassengersPacket.class, tossPacket);
|
||||||
|
// 7.1.108 Update Teams: player/team membership can be used as intel.
|
||||||
|
processors.put(ClientboundSetPlayerTeamPacket.class, tossPacket);
|
||||||
|
// 7.1.115 Entity Sound Effect: entity id and sound.
|
||||||
|
processors.put(ClientboundSoundEntityPacket.class, tossPacket);
|
||||||
|
// 7.1.116 Sound Effect: sound type and position.
|
||||||
|
processors.put(ClientboundSoundPacket.class, tossPacket);
|
||||||
|
// 7.1.118 Stop Sound: sound state side channel.
|
||||||
|
processors.put(ClientboundStopSoundPacket.class, tossPacket);
|
||||||
|
// 7.1.122 Tag Query Response: block-entity query result.
|
||||||
|
processors.put(ClientboundTagQueryPacket.class, tossPacket);
|
||||||
|
// 7.1.123 Pickup Item: item/entity ids and pickup activity.
|
||||||
|
processors.put(ClientboundTakeItemEntityPacket.class, tossPacket);
|
||||||
|
// 7.1.124 Synchronize Vehicle Position: entity/vehicle position.
|
||||||
|
processors.put(ClientboundEntityPositionSyncPacket.class, tossPacket);
|
||||||
|
// 7.1.130 Update Attributes: entity id and attribute state.
|
||||||
|
processors.put(ClientboundUpdateAttributesPacket.class, tossPacket);
|
||||||
|
// 7.1.131 Entity Effect: entity id and effect state.
|
||||||
|
processors.put(ClientboundUpdateMobEffectPacket.class, tossPacket);
|
||||||
|
// 7.1.133 Update Tags (play): registry/tag data can be added back after review.
|
||||||
|
processors.put(ClientboundUpdateTagsPacket.class, tossPacket);
|
||||||
|
// 7.1.134 Projectile Power: projectile/entity signal.
|
||||||
|
processors.put(ClientboundProjectilePowerPacket.class, tossPacket);
|
||||||
|
// 7.1.137 Waypoint: world/entity tracking signal.
|
||||||
|
processors.put(ClientboundTrackedWaypointPacket.class, tossPacket);
|
||||||
|
|
||||||
|
this.packetProcessors = processors;
|
||||||
|
|
||||||
this.interceptor = new TinyProtocol(plugin) {
|
this.interceptor = new TinyProtocol(plugin) {
|
||||||
@Override
|
@Override
|
||||||
public Object onPacketOutAsync(Player receiver, Channel channel, Object packet) {
|
public Object onPacketOutAsync(Player receiver, Channel channel, Object packet) {
|
||||||
if (bypassingPackets.stream().anyMatch(clazz -> clazz.isInstance(packet))) {
|
try {
|
||||||
return packet;
|
if (bypassingPackets.contains(packet.getClass())) {
|
||||||
} else if (packetProcessors.containsKey(packet.getClass())) {
|
return packet;
|
||||||
return packetProcessors.get(packet.getClass()).apply(receiver, (Packet<? extends PacketListener>) packet);
|
}
|
||||||
} else {
|
|
||||||
|
BiFunction<Player, Packet<? extends PacketListener>, Packet<? extends PacketListener>> processor = packetProcessors.get(packet.getClass());
|
||||||
|
return processor == null ? null : processor.apply(receiver, (Packet<? extends PacketListener>) packet);
|
||||||
|
} catch(Error e) {
|
||||||
|
// Errors during packet processing leeding to packet being tossed
|
||||||
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user