diff --git a/core/src/main/java/mc/core/network/BroadcastNetChannel.java b/core/src/main/java/mc/core/network/BroadcastNetChannel.java index 4c6f8a4..d261a2b 100644 --- a/core/src/main/java/mc/core/network/BroadcastNetChannel.java +++ b/core/src/main/java/mc/core/network/BroadcastNetChannel.java @@ -23,6 +23,11 @@ public class BroadcastNetChannel implements NetChannel { playerStream.forEach(player -> player.getChannel().sendTimeUpdate(value)); } + @Override + public void sendChatMessage(final String message) { + playerStream.forEach(player -> player.getChannel().sendChatMessage(message)); + } + @Override public void writeAndFlush(final SCPacket pkt) { playerStream.forEach(player -> player.getChannel().writeAndFlush(pkt)); diff --git a/core/src/main/java/mc/core/network/NetChannel.java b/core/src/main/java/mc/core/network/NetChannel.java index c3adbd2..61cf3c9 100644 --- a/core/src/main/java/mc/core/network/NetChannel.java +++ b/core/src/main/java/mc/core/network/NetChannel.java @@ -7,6 +7,7 @@ package mc.core.network; public interface NetChannel { void sendKeepAlive(); void sendTimeUpdate(long value); + void sendChatMessage(String message); void writeAndFlush(SCPacket pkt); } diff --git a/proto125/src/main/java/mc/core/network/proto_125/packets/ChatMessagePacket.java b/proto125/src/main/java/mc/core/network/proto_125/packets/ChatMessagePacket.java new file mode 100644 index 0000000..7ae72e8 --- /dev/null +++ b/proto125/src/main/java/mc/core/network/proto_125/packets/ChatMessagePacket.java @@ -0,0 +1,32 @@ +/* + * DmitriyMX + * 2018-04-30 + */ +package mc.core.network.proto_125.packets; + +import lombok.*; +import mc.core.network.CSPacket; +import mc.core.network.NetStream; +import mc.core.network.SCPacket; +import mc.core.network.proto_125.ByteArrayOutputNetStream; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@ToString +public class ChatMessagePacket implements SCPacket, CSPacket { + private String message; + + @Override + public void readSelf(NetStream netStream) { + message = netStream.readString(); + } + + @Override + public byte[] toByteArray() { + ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream(); + netStream.writeString(message); + return netStream.toByteArray(); + } +} diff --git a/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java b/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java index 6b0bae5..999005d 100644 --- a/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java +++ b/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java @@ -8,13 +8,13 @@ import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; import mc.core.network.CSPacket; import mc.core.network.SCPacket; -import mc.core.network.proto_125.packets.*; public class PacketManager { private static final BiMap> packetMap = ImmutableBiMap.>builder() .put(0x00, KeepAlivePacket.class) .put(0x01, LoginPacket.class) .put(0x02, HandshakePacket.class) + .put(0x03, ChatMessagePacket.class) .put(0x04, TimeUpdatePacket.class) .put(0x06, SpawnPositionPacket.class) .put(0x0B, PlayerPositionPacket.class) diff --git a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java index b812ad4..67537c7 100644 --- a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java +++ b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java @@ -15,6 +15,9 @@ import mc.core.*; import mc.core.network.CSPacket; import mc.core.network.proto_125.netty.wrappers.WrapperNetChannel; import mc.core.network.proto_125.packets.*; +import org.slf4j.Marker; +import org.slf4j.helpers.BasicMarker; +import org.slf4j.helpers.BasicMarkerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Method; @@ -24,6 +27,7 @@ import java.util.Optional; @Slf4j public class PacketHandler extends SimpleChannelInboundHandler { private static final AttributeKey ATTR_PLAYER = AttributeKey.newInstance("ATTR_PLAYER"); + private static final Marker CHAT_MARKER = new BasicMarkerFactory().getMarker("Chat"); @Autowired private Config config; @Autowired @@ -167,4 +171,9 @@ public class PacketHandler extends SimpleChannelInboundHandler { Player player = channel.attr(ATTR_PLAYER).get(); player.setFlying(packet.isFlying()); } + + public void onChatMessagePacket(Channel channel, ChatMessagePacket packet) { + log.info(CHAT_MARKER, "<{}>: {}", channel.attr(ATTR_PLAYER).get().getName(), packet.getMessage()); + playerManager.getBroadcastChannel().writeAndFlush(packet); + } } diff --git a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetChannel.java b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetChannel.java index 0f52b96..b7f5bb8 100644 --- a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetChannel.java +++ b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetChannel.java @@ -8,8 +8,8 @@ import io.netty.channel.Channel; import lombok.RequiredArgsConstructor; import mc.core.network.NetChannel; import mc.core.network.SCPacket; +import mc.core.network.proto_125.packets.ChatMessagePacket; import mc.core.network.proto_125.packets.KeepAlivePacket; -import mc.core.network.proto_125.packets.PingPacket; import mc.core.network.proto_125.packets.TimeUpdatePacket; @RequiredArgsConstructor @@ -26,6 +26,11 @@ public class WrapperNetChannel implements NetChannel { channel.writeAndFlush(new TimeUpdatePacket(value)); } + @Override + public void sendChatMessage(String message) { + channel.writeAndFlush(new ChatMessagePacket(message)); + } + @Override public void writeAndFlush(SCPacket pkt) { channel.writeAndFlush(pkt);