0x30 S30PacketWindowItems
Sends the full contents of an inventory window — all slots at once. Used for initial container opening and rejected transaction recovery.
Fields
| Field | Type | Description |
|---|---|---|
| windowId | unsigned byte | Window ID (0 = player inventory) |
| items | ItemStack[] | Array of all ItemStacks in the window, slot by slot |
Wire Encoding
| Field | Type | Notes |
|---|---|---|
| Window ID | Unsigned Byte | |
| Count | short | Number of slots |
| Slot Data | Array of Slot | All ItemStacks |
MCP References
MCP
NetHandlerPlayClient.handleWindowItems()Handler Interface
HND
INetHandlerPlayClientNotes
For windowId=0, this updates the entire player inventory (45 slots: 9 hotbar + 36 main). For chests, this is sent immediately after S2DPacketOpenWindow. When a C0E click is rejected (S32 accepted=false), the server re-sends S30 to force the client to revert its inventory.
implementation Implementation Cases
ChestStealer
(Tenacity 6.0, Gugustus)
Full inventory sync — trigger auto-steal on chest contents.
InvManager
(Tenacity 6.0, Gugustus)
Full inventory sync — trigger auto-steal on chest contents.
AutoArmor
(Tenacity 6.0, Gugustus)
Full inventory sync — trigger auto-steal on chest contents.