diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index 3f7db7b..00c3a2e 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -6,10 +6,7 @@ import mc.protocol.packets.ClientSidePacket; import mc.protocol.packets.Packet; import mc.protocol.packets.PingPacket; import mc.protocol.packets.ServerSidePacket; -import mc.protocol.packets.client.ClientSettingsPacket; -import mc.protocol.packets.client.HandshakePacket; -import mc.protocol.packets.client.LoginStartPacket; -import mc.protocol.packets.client.StatusServerRequestPacket; +import mc.protocol.packets.client.*; import mc.protocol.packets.server.DisconnectPacket; import mc.protocol.packets.server.JoinGamePacket; import mc.protocol.packets.server.LoginSuccessPacket; @@ -49,7 +46,10 @@ public enum State { ), PLAY(3, // server bound - Map.of(0x04, ClientSettingsPacket.class), + Map.of( + 0x04, ClientSettingsPacket.class, + 0x09, PluginMessagePacket.class + ), // client bound Map.of(JoinGamePacket.class, 0x23) ); diff --git a/protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java b/protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java new file mode 100644 index 0000000..622bd4e --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java @@ -0,0 +1,42 @@ +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; + +/** + * Plugin Message packet. + * + *

Канал связи для модов и плагинов.

+ * + *

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

+ *
+ * | FIELD        | TYPE        | NOTES            |
+ * |--------------|-------------|------------------|
+ * | Channel name | String (20) | Название канала  |
+ * | Data         | Byte array  | Любые данные     |
+ * 
+ * + * @see Plugin Message (serverbound) + * @see Plugin channels + * @see Minecraft Plugin Channels + Messaging + */ +@NoArgsConstructor +@Getter +@EqualsAndHashCode +@ToString +public class PluginMessagePacket implements ClientSidePacket { + + private String channelName; + private byte[] rawData; + + @Override + public void readSelf(NetByteBuf netByteBuf) { + this.channelName = netByteBuf.readString(20); + this.rawData = new byte[netByteBuf.readableBytes()]; + netByteBuf.readBytes(this.rawData); + } +}