- Watches every packet the client sends and receives.
- Keeps a list of every packet class it has seen.
- Right shift opens a screen where you search that list and tick the ones you care about.
- Hold F9 and any ticked packet gets written to the log, with its fields.
- There is a toggle in the screen to dump continuously instead of holding the key.
Both keys can be rebound in Options, Controls.
[PacketDump][INBOUND] ClientboundSetHealthPacket
health=20.0
food=20
saturation=5.0
Fields come from reflection, so records and normal classes both work. It walks nested objects up to 4 deep, stops on reference loops, shows the first 25 entries of a collection and cuts strings off at 300 characters.
| Minecraft | Jar |
|---|---|
| 1.21.8 | packetdump-<ver>+1.21.8.jar |
| 1.21.9 | packetdump-<ver>+1.21.9.jar |
| 1.21.10 | packetdump-<ver>+1.21.10.jar |
| 1.21.11 | packetdump-<ver>+1.21.11.jar |
| 26.1, 26.1.1, 26.1.2 | packetdump-<ver>+26.1.jar |
| 26.2 | packetdump-<ver>+26.2.jar |
Needs Fabric Loader and Fabric API. Client side only.
Below 26.1 a released mod runs against intermediary names, so a packet shows up as
class_2749 instead of ClientboundSetHealthPacket. The build fixes that by
joining two public mapping sets on the obfuscated name they share:
- the intermediary jar, obfuscated to intermediary
- Mojang's published mappings, Mojang to obfuscated
which gives intermediary to Mojang names. That table is gzipped into the jar and read at startup. 26.1 dropped obfuscation, so those jars skip the table entirely and the names are already right.
Needs JDK 21, plus JDK 25 if you want the 26.x versions. Gradle picks up the rest.
./gradlew buildAll
Jars land in build/libs/<mod version>/, one per Minecraft version.
To build a single version:
./gradlew :1.21.8:build
Versions are handled with Stonecutter, so there
is one source tree and the version specific bits sit behind //? comments. To work
on a different version, run the Set active project to <version> Gradle task, and
run Reset active project before committing.
Everything compiles against Mojang mappings, including below 26.1, so class names are the same on every version and only the real API changes need a comment.
src/main/java/com/packetdump/
PacketDump.java entry point, keybinds, dump trigger
PacketDumpScreen.java the picker screen
PacketRegistry.java what has been seen, what is ticked
ReflectionDumper.java turns a packet into text
MappingRegistry.java intermediary to readable names, below 26.1
PacketDirection.java
mixin/ConnectionMixin.java the send and receive hooks
Copyright (C) 2026 Shvap
Licensed under the GNU Lesser General Public License, version 3 or later. See LICENSE, and LICENSE.GPL which it refers to.
The name table bundled in builds below 26.1 is built from Mojang's published Minecraft mappings and FabricMC's intermediary mappings, and is not covered by that grant. See NOTICE.
