diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/Network.java b/src/main/java/de/bixilon/minosoft/protocol/network/Network.java index 63f9a6039..6b9de44e9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/Network.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/Network.java @@ -149,7 +149,7 @@ public class Network { Class clazz = Protocol.getPacketByPacket(p); if (clazz == null) { - Log.warn(String.format("[IN] Unknown packet with command %x (%s)", inPacketBuffer.getCommand(), ((p != null) ? p.name() : "UNKNOWN"))); + Log.warn(String.format("[IN] Unknown packet with command 0x%x (%s)", inPacketBuffer.getCommand(), ((p != null) ? p.name() : "UNKNOWN"))); binQueueIn.remove(0); continue; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketLoginDisconnect.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketLoginDisconnect.java new file mode 100644 index 000000000..01e85ea86 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/login/PacketLoginDisconnect.java @@ -0,0 +1,32 @@ +package de.bixilon.minosoft.protocol.packets.clientbound.login; + +import de.bixilon.minosoft.logging.Log; +import de.bixilon.minosoft.protocol.packets.ClientboundPacket; +import de.bixilon.minosoft.protocol.protocol.InPacketBuffer; +import de.bixilon.minosoft.protocol.protocol.PacketHandler; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; +import org.json.JSONObject; + +public class PacketLoginDisconnect implements ClientboundPacket { + JSONObject reason; + + @Override + public void read(InPacketBuffer buffer, ProtocolVersion v) { + reason = buffer.readJson(); + log(); + } + + @Override + public void log() { + Log.protocol("Receiving login disconnect packet"); + } + + @Override + public void handle(PacketHandler h) { + h.handle(this); + } + + public JSONObject getReason() { + return reason; + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerInfo.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerInfo.java new file mode 100644 index 000000000..cf799f38d --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerInfo.java @@ -0,0 +1,42 @@ +package de.bixilon.minosoft.protocol.packets.clientbound.play; + +import de.bixilon.minosoft.logging.Log; +import de.bixilon.minosoft.protocol.packets.ClientboundPacket; +import de.bixilon.minosoft.protocol.protocol.InPacketBuffer; +import de.bixilon.minosoft.protocol.protocol.PacketHandler; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class PacketPlayerInfo implements ClientboundPacket { + String name; + PlayerJoinState state; + short ping; + + + @Override + public void read(InPacketBuffer buffer, ProtocolVersion v) { + switch (v) { + case VERSION_1_7_10: + name = buffer.readString(); + state = (buffer.readBoolean() ? PlayerJoinState.JOINED : PlayerJoinState.DISCONNECTED); + ping = buffer.readShort(); + + break; + } + log(); + } + + @Override + public void log() { + Log.game(String.format("%s %s", name, (state == PlayerJoinState.JOINED ? "joined" : "disconnected"))); + } + + @Override + public void handle(PacketHandler h) { + h.handle(this); + } + + public enum PlayerJoinState { + JOINED, + DISCONNECTED + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java index ab7fd7c36..1b7a0160f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -3,8 +3,10 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketEncryptionKeyRequest; +import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketLoginDisconnect; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketLoginSuccess; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketJoinGame; +import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketPlayerInfo; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusPong; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusResponse; import de.bixilon.minosoft.protocol.packets.serverbound.login.PacketEncryptionResponse; @@ -48,4 +50,12 @@ public class PacketHandler { public void handle(PacketJoinGame pkg) { } + + public void handle(PacketLoginDisconnect pkg) { + Log.info(String.format("Disconnecting from server(%s)", pkg.getReason().toString())); + connection.setConnectionState(ConnectionState.DISCONNECTING); + } + + public void handle(PacketPlayerInfo pkg) { + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java index 584e9774f..906774ea8 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java @@ -2,8 +2,10 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketEncryptionKeyRequest; +import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketLoginDisconnect; import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketLoginSuccess; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketJoinGame; +import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketPlayerInfo; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusPong; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusResponse; @@ -31,7 +33,9 @@ public interface Protocol { packetClassMapping.put(Packets.Clientbound.STATUS_PONG, PacketStatusPong.class); packetClassMapping.put(Packets.Clientbound.LOGIN_ENCRYPTION_REQUEST, PacketEncryptionKeyRequest.class); packetClassMapping.put(Packets.Clientbound.LOGIN_LOGIN_SUCCESS, PacketLoginSuccess.class); + packetClassMapping.put(Packets.Clientbound.LOGIN_DISCONNECT, PacketLoginDisconnect.class); packetClassMapping.put(Packets.Clientbound.PLAY_JOIN_GAME, PacketJoinGame.class); + packetClassMapping.put(Packets.Clientbound.PLAY_PLAYER_INFO, PacketPlayerInfo.class); } } \ No newline at end of file