Chat message
This commit is contained in:
@@ -23,6 +23,11 @@ public class BroadcastNetChannel implements NetChannel {
|
|||||||
playerStream.forEach(player -> player.getChannel().sendTimeUpdate(value));
|
playerStream.forEach(player -> player.getChannel().sendTimeUpdate(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendChatMessage(final String message) {
|
||||||
|
playerStream.forEach(player -> player.getChannel().sendChatMessage(message));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeAndFlush(final SCPacket pkt) {
|
public void writeAndFlush(final SCPacket pkt) {
|
||||||
playerStream.forEach(player -> player.getChannel().writeAndFlush(pkt));
|
playerStream.forEach(player -> player.getChannel().writeAndFlush(pkt));
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package mc.core.network;
|
|||||||
public interface NetChannel {
|
public interface NetChannel {
|
||||||
void sendKeepAlive();
|
void sendKeepAlive();
|
||||||
void sendTimeUpdate(long value);
|
void sendTimeUpdate(long value);
|
||||||
|
void sendChatMessage(String message);
|
||||||
|
|
||||||
void writeAndFlush(SCPacket pkt);
|
void writeAndFlush(SCPacket pkt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,13 +8,13 @@ import com.google.common.collect.BiMap;
|
|||||||
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
import mc.core.network.CSPacket;
|
import mc.core.network.CSPacket;
|
||||||
import mc.core.network.SCPacket;
|
import mc.core.network.SCPacket;
|
||||||
import mc.core.network.proto_125.packets.*;
|
|
||||||
|
|
||||||
public class PacketManager {
|
public class PacketManager {
|
||||||
private static final BiMap<Integer, Class<?>> packetMap = ImmutableBiMap.<Integer, Class<?>>builder()
|
private static final BiMap<Integer, Class<?>> packetMap = ImmutableBiMap.<Integer, Class<?>>builder()
|
||||||
.put(0x00, KeepAlivePacket.class)
|
.put(0x00, KeepAlivePacket.class)
|
||||||
.put(0x01, LoginPacket.class)
|
.put(0x01, LoginPacket.class)
|
||||||
.put(0x02, HandshakePacket.class)
|
.put(0x02, HandshakePacket.class)
|
||||||
|
.put(0x03, ChatMessagePacket.class)
|
||||||
.put(0x04, TimeUpdatePacket.class)
|
.put(0x04, TimeUpdatePacket.class)
|
||||||
.put(0x06, SpawnPositionPacket.class)
|
.put(0x06, SpawnPositionPacket.class)
|
||||||
.put(0x0B, PlayerPositionPacket.class)
|
.put(0x0B, PlayerPositionPacket.class)
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ import mc.core.*;
|
|||||||
import mc.core.network.CSPacket;
|
import mc.core.network.CSPacket;
|
||||||
import mc.core.network.proto_125.netty.wrappers.WrapperNetChannel;
|
import mc.core.network.proto_125.netty.wrappers.WrapperNetChannel;
|
||||||
import mc.core.network.proto_125.packets.*;
|
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 org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -24,6 +27,7 @@ import java.util.Optional;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
||||||
private static final AttributeKey<Player> ATTR_PLAYER = AttributeKey.newInstance("ATTR_PLAYER");
|
private static final AttributeKey<Player> ATTR_PLAYER = AttributeKey.newInstance("ATTR_PLAYER");
|
||||||
|
private static final Marker CHAT_MARKER = new BasicMarkerFactory().getMarker("Chat");
|
||||||
@Autowired
|
@Autowired
|
||||||
private Config config;
|
private Config config;
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -167,4 +171,9 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
|||||||
Player player = channel.attr(ATTR_PLAYER).get();
|
Player player = channel.attr(ATTR_PLAYER).get();
|
||||||
player.setFlying(packet.isFlying());
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import io.netty.channel.Channel;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import mc.core.network.NetChannel;
|
import mc.core.network.NetChannel;
|
||||||
import mc.core.network.SCPacket;
|
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.KeepAlivePacket;
|
||||||
import mc.core.network.proto_125.packets.PingPacket;
|
|
||||||
import mc.core.network.proto_125.packets.TimeUpdatePacket;
|
import mc.core.network.proto_125.packets.TimeUpdatePacket;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -26,6 +26,11 @@ public class WrapperNetChannel implements NetChannel {
|
|||||||
channel.writeAndFlush(new TimeUpdatePacket(value));
|
channel.writeAndFlush(new TimeUpdatePacket(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendChatMessage(String message) {
|
||||||
|
channel.writeAndFlush(new ChatMessagePacket(message));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeAndFlush(SCPacket pkt) {
|
public void writeAndFlush(SCPacket pkt) {
|
||||||
channel.writeAndFlush(pkt);
|
channel.writeAndFlush(pkt);
|
||||||
|
|||||||
Reference in New Issue
Block a user