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); + } +}