From 38843dedde71349bdd4fe115e8f56e42469eba3c Mon Sep 17 00:00:00 2001 From: bixilon Date: Wed, 3 Jun 2020 14:41:43 +0200 Subject: [PATCH] time update, keep alive packet --- .../clientbound/play/PacketKeepAlive.java | 36 +++++++++++++++++++ .../clientbound/play/PacketTimeUpdate.java | 35 ++++++++++++++++++ .../play/PacketKeepAliveResponse.java | 34 ++++++++++++++++++ .../protocol/protocol/PacketHandler.java | 10 ++++++ .../minosoft/protocol/protocol/Protocol.java | 4 +++ 5 files changed, 119 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketKeepAlive.java create mode 100644 src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTimeUpdate.java create mode 100644 src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketKeepAlive.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketKeepAlive.java new file mode 100644 index 000000000..d61c3066f --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketKeepAlive.java @@ -0,0 +1,36 @@ +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 PacketKeepAlive implements ClientboundPacket { + int id; + + + @Override + public void read(InPacketBuffer buffer, ProtocolVersion v) { + switch (v) { + case VERSION_1_7_10: + id = buffer.readInteger(); + break; + } + log(); + } + + @Override + public void log() { + Log.protocol(String.format("Keep alive packet received (%s)", id)); + } + + @Override + public void handle(PacketHandler h) { + h.handle(this); + } + + public int getId() { + return id; + } +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTimeUpdate.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTimeUpdate.java new file mode 100644 index 000000000..b3173517b --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketTimeUpdate.java @@ -0,0 +1,35 @@ +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 PacketTimeUpdate implements ClientboundPacket { + long worldAge; + long timeOfDay; + + + @Override + public void read(InPacketBuffer buffer, ProtocolVersion v) { + switch (v) { + case VERSION_1_7_10: + worldAge = buffer.readLong(); + timeOfDay = buffer.readLong(); + break; + } + log(); + } + + @Override + public void log() { + Log.protocol(String.format("Time Update packet received. Time is now %st (total %st)", timeOfDay, worldAge)); + } + + @Override + public void handle(PacketHandler h) { + h.handle(this); + } + +} diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java new file mode 100644 index 000000000..9bd0ec4e3 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketKeepAliveResponse.java @@ -0,0 +1,34 @@ +package de.bixilon.minosoft.protocol.packets.serverbound.play; + +import de.bixilon.minosoft.logging.Log; +import de.bixilon.minosoft.protocol.packets.ServerboundPacket; +import de.bixilon.minosoft.protocol.protocol.OutPacketBuffer; +import de.bixilon.minosoft.protocol.protocol.Packets; +import de.bixilon.minosoft.protocol.protocol.ProtocolVersion; + +public class PacketKeepAliveResponse implements ServerboundPacket { + + private final int id; + + public PacketKeepAliveResponse(int id) { + this.id = id; + } + + + @Override + public OutPacketBuffer write(ProtocolVersion v) { + log(); + OutPacketBuffer buffer = new OutPacketBuffer(v.getPacketCommand(Packets.Serverbound.LOGIN_LOGIN_START)); + switch (v) { + case VERSION_1_7_10: + buffer.writeInteger(id); + break; + } + return buffer; + } + + @Override + public void log() { + Log.protocol(String.format("Sending keep alive back (%s)", id)); + } +} 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 1b7a0160f..d5a6dc72b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -6,10 +6,13 @@ import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketEncryptionKe 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.PacketKeepAlive; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketPlayerInfo; +import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketTimeUpdate; 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; +import de.bixilon.minosoft.protocol.packets.serverbound.play.PacketKeepAliveResponse; import javax.crypto.SecretKey; import java.math.BigInteger; @@ -58,4 +61,11 @@ public class PacketHandler { public void handle(PacketPlayerInfo pkg) { } + + public void handle(PacketTimeUpdate pkg) { + } + + public void handle(PacketKeepAlive pkg) { + connection.sendPacket(new PacketKeepAliveResponse(pkg.getId())); + } } 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 906774ea8..6afcc7347 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/Protocol.java @@ -5,7 +5,9 @@ import de.bixilon.minosoft.protocol.packets.clientbound.login.PacketEncryptionKe 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.PacketKeepAlive; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketPlayerInfo; +import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketTimeUpdate; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusPong; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusResponse; @@ -37,5 +39,7 @@ public interface Protocol { packetClassMapping.put(Packets.Clientbound.PLAY_JOIN_GAME, PacketJoinGame.class); packetClassMapping.put(Packets.Clientbound.PLAY_PLAYER_INFO, PacketPlayerInfo.class); + packetClassMapping.put(Packets.Clientbound.PLAY_TIME_UPDATE, PacketTimeUpdate.class); + packetClassMapping.put(Packets.Clientbound.PLAY_KEEP_ALIVE, PacketKeepAlive.class); } } \ No newline at end of file