From 808710e3140ad790f921b2b312a83607f58a6f4e Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 8 May 2021 21:08:14 +0300 Subject: [PATCH] CCloseWindowPacket --- protocol/src/main/java/mc/protocol/State.java | 1 + .../packets/client/CCloseWindowPacket.java | 46 +++++++++++++++++++ .../packets/server/OpenWindowPacket.java | 2 + 3 files changed, 49 insertions(+) create mode 100644 protocol/src/main/java/mc/protocol/packets/client/CCloseWindowPacket.java diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index 924bbcc..3032957 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -46,6 +46,7 @@ public enum State { Map.of( 0x00, TeleportConfirmPacket.class, 0x04, ClientSettingsPacket.class, + 0x08, CCloseWindowPacket.class, 0x09, PluginMessagePacket.class, 0x0B, PingPacket.class, 0x0D, PlayerPositionPacket.class, diff --git a/protocol/src/main/java/mc/protocol/packets/client/CCloseWindowPacket.java b/protocol/src/main/java/mc/protocol/packets/client/CCloseWindowPacket.java new file mode 100644 index 0000000..2227b47 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/client/CCloseWindowPacket.java @@ -0,0 +1,46 @@ +package mc.protocol.packets.client; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import mc.protocol.io.NetByteBuf; +import mc.protocol.packets.ClientSidePacket; +import mc.protocol.packets.server.OpenWindowPacket; + +/** + * Close window packet. + * + *

Структура пакета

+ *
+ * | FIELD     | TYPE          | NOTES                     |
+ * |-----------|---------------|---------------------------|
+ * | Window ID | Unsigned Byte | ID окна, которое закрыли. |
+ * 
+ * + *

+ * Vanilla клиент отправляет данный пакет с "Window ID" = 0, при закрытии инвентаря игрока. + * Даже в тех случаях, когда для открытия инвентаря не посылался пакет {@link OpenWindowPacket} + *

+ * + * @see Close Window (serverbound) + * @see OpenWindowPacket + */ +@NoArgsConstructor +@Getter +@EqualsAndHashCode +@ToString +public class CCloseWindowPacket implements ClientSidePacket { + + private int windowId; + + @Override + public void readSelf(NetByteBuf netByteBuf) { + this.windowId = netByteBuf.readUnsignedByte(); + } + + @Override + public void passivate() { + this.windowId = 0; + } +} diff --git a/protocol/src/main/java/mc/protocol/packets/server/OpenWindowPacket.java b/protocol/src/main/java/mc/protocol/packets/server/OpenWindowPacket.java index f05c059..2c9502a 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/OpenWindowPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/server/OpenWindowPacket.java @@ -4,6 +4,7 @@ import lombok.Data; import mc.protocol.io.NetByteBuf; import mc.protocol.model.text.Text; import mc.protocol.packets.ServerSidePacket; +import mc.protocol.packets.client.CCloseWindowPacket; import mc.protocol.serializer.TextSerializer; /** @@ -24,6 +25,7 @@ import mc.protocol.serializer.TextSerializer; * * @see Open Window * @see Inventory + * @see CCloseWindowPacket */ @Data public class OpenWindowPacket implements ServerSidePacket {