From 81a880d3cd929c8995c69194bb8c1a93225ae85e Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 9 Aug 2019 07:24:26 +0200 Subject: [PATCH] Update --- .../handler/ClientPlayPacketsHandler.java | 4 +++ .../packet/client/login/LoginStartPacket.java | 17 +++++++--- .../ClientPlayerPositionAndLookPacket.java | 27 +++++++++++++++ .../play/ClientTeleportConfirmPacket.java | 21 ++++++++++++ .../packet/server/play/ChunkDataPacket.java | 33 +++++++++++++++---- .../play/PlayerPositionAndLookPacket.java | 30 +++++++++++++++++ .../server/play/SpawnPositionPacket.java | 2 +- 7 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 src/main/java/fr/themode/minestom/net/packet/client/play/ClientPlayerPositionAndLookPacket.java create mode 100644 src/main/java/fr/themode/minestom/net/packet/client/play/ClientTeleportConfirmPacket.java create mode 100644 src/main/java/fr/themode/minestom/net/packet/server/play/PlayerPositionAndLookPacket.java diff --git a/src/main/java/fr/themode/minestom/net/packet/client/handler/ClientPlayPacketsHandler.java b/src/main/java/fr/themode/minestom/net/packet/client/handler/ClientPlayPacketsHandler.java index 0238a5f83..8060245a6 100644 --- a/src/main/java/fr/themode/minestom/net/packet/client/handler/ClientPlayPacketsHandler.java +++ b/src/main/java/fr/themode/minestom/net/packet/client/handler/ClientPlayPacketsHandler.java @@ -1,13 +1,17 @@ package fr.themode.minestom.net.packet.client.handler; +import fr.themode.minestom.net.packet.client.play.ClientPlayerPositionAndLookPacket; import fr.themode.minestom.net.packet.client.play.ClientPluginMessagePacket; import fr.themode.minestom.net.packet.client.play.ClientSettingsPacket; +import fr.themode.minestom.net.packet.client.play.ClientTeleportConfirmPacket; public class ClientPlayPacketsHandler extends ClientPacketsHandler { public ClientPlayPacketsHandler() { register(0x05, ClientSettingsPacket.class); register(0x0B, ClientPluginMessagePacket.class); + register(0x12, ClientPlayerPositionAndLookPacket.class); + register(0x00, ClientTeleportConfirmPacket.class); } } diff --git a/src/main/java/fr/themode/minestom/net/packet/client/login/LoginStartPacket.java b/src/main/java/fr/themode/minestom/net/packet/client/login/LoginStartPacket.java index 757cdfbc9..91ff21503 100644 --- a/src/main/java/fr/themode/minestom/net/packet/client/login/LoginStartPacket.java +++ b/src/main/java/fr/themode/minestom/net/packet/client/login/LoginStartPacket.java @@ -8,6 +8,7 @@ import fr.themode.minestom.net.packet.client.ClientPreplayPacket; import fr.themode.minestom.net.packet.server.login.JoinGamePacket; import fr.themode.minestom.net.packet.server.login.LoginSuccessPacket; import fr.themode.minestom.net.packet.server.play.ChunkDataPacket; +import fr.themode.minestom.net.packet.server.play.PlayerPositionAndLookPacket; import fr.themode.minestom.net.packet.server.play.SpawnPositionPacket; import fr.themode.minestom.net.player.PlayerConnection; import fr.themode.minestom.utils.Utils; @@ -47,7 +48,7 @@ public class LoginStartPacket implements ClientPreplayPacket { for (int z = 0; z < 8; z++) { ChunkDataPacket.ChunkSection chunkSection = new ChunkDataPacket.ChunkSection(); chunkSection.bitsPerBlock = 13; - chunkSection.data = new long[]{0x1001880C0060020L, 0x200D0068004C020L, 0L}; + chunkSection.data = new long[]{0x1001880C0060020L, 0x200D0068004C020L, 1111L}; ChunkDataPacket chunkDataPacket = new ChunkDataPacket(); chunkDataPacket.columnX = x; @@ -66,11 +67,19 @@ public class LoginStartPacket implements ClientPreplayPacket { SpawnPositionPacket spawnPositionPacket = new SpawnPositionPacket(); spawnPositionPacket.x = 50; - spawnPositionPacket.y = 50; + spawnPositionPacket.y = 5; spawnPositionPacket.z = 50; + connection.sendPacket(spawnPositionPacket); - // connection.sendPacket(spawnPositionPacket); - + PlayerPositionAndLookPacket playerPositionAndLookPacket = new PlayerPositionAndLookPacket(); + playerPositionAndLookPacket.x = 50; + playerPositionAndLookPacket.y = 5; + playerPositionAndLookPacket.z = 50; + playerPositionAndLookPacket.yaw = 0; + playerPositionAndLookPacket.pitch = 0; + playerPositionAndLookPacket.flags = 0; + playerPositionAndLookPacket.teleportId = 42; + connection.sendPacket(playerPositionAndLookPacket); } @Override diff --git a/src/main/java/fr/themode/minestom/net/packet/client/play/ClientPlayerPositionAndLookPacket.java b/src/main/java/fr/themode/minestom/net/packet/client/play/ClientPlayerPositionAndLookPacket.java new file mode 100644 index 000000000..ce45126b7 --- /dev/null +++ b/src/main/java/fr/themode/minestom/net/packet/client/play/ClientPlayerPositionAndLookPacket.java @@ -0,0 +1,27 @@ +package fr.themode.minestom.net.packet.client.play; + +import fr.adamaq01.ozao.net.Buffer; +import fr.themode.minestom.entity.Player; +import fr.themode.minestom.net.packet.client.ClientPlayPacket; + +public class ClientPlayerPositionAndLookPacket implements ClientPlayPacket { + + public double x, y, z; + public float yaw, pitch; + public boolean onGround; + + @Override + public void process(Player player) { + + } + + @Override + public void read(Buffer buffer) { + this.x = buffer.getDouble(); + this.y = buffer.getDouble(); + this.z = buffer.getDouble(); + this.yaw = buffer.getFloat(); + this.pitch = buffer.getFloat(); + this.onGround = buffer.getBoolean(); + } +} diff --git a/src/main/java/fr/themode/minestom/net/packet/client/play/ClientTeleportConfirmPacket.java b/src/main/java/fr/themode/minestom/net/packet/client/play/ClientTeleportConfirmPacket.java new file mode 100644 index 000000000..0f3093118 --- /dev/null +++ b/src/main/java/fr/themode/minestom/net/packet/client/play/ClientTeleportConfirmPacket.java @@ -0,0 +1,21 @@ +package fr.themode.minestom.net.packet.client.play; + +import fr.adamaq01.ozao.net.Buffer; +import fr.themode.minestom.entity.Player; +import fr.themode.minestom.net.packet.client.ClientPlayPacket; +import fr.themode.minestom.utils.Utils; + +public class ClientTeleportConfirmPacket implements ClientPlayPacket { + + public int teleportId; + + @Override + public void process(Player player) { + + } + + @Override + public void read(Buffer buffer) { + this.teleportId = Utils.readVarInt(buffer); + } +} diff --git a/src/main/java/fr/themode/minestom/net/packet/server/play/ChunkDataPacket.java b/src/main/java/fr/themode/minestom/net/packet/server/play/ChunkDataPacket.java index c3a7c49d1..a492a2a31 100644 --- a/src/main/java/fr/themode/minestom/net/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/fr/themode/minestom/net/packet/server/play/ChunkDataPacket.java @@ -4,6 +4,8 @@ import fr.adamaq01.ozao.net.Buffer; import fr.themode.minestom.net.packet.server.ServerPacket; import fr.themode.minestom.utils.Utils; +import java.io.UnsupportedEncodingException; + public class ChunkDataPacket implements ServerPacket { public int columnX; @@ -20,7 +22,28 @@ public class ChunkDataPacket implements ServerPacket { buffer.putInt(columnZ); buffer.putBoolean(fullChunk); Utils.writeVarInt(buffer, mask); - System.out.println("test: " + getDataSize()); + + // Nbt + buffer.putByte((byte) 10); + buffer.putShort((short) "MOTION_BLOCKING".length()); + try { + buffer.putBytes("MOTION_BLOCKING".getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + buffer.putByte((byte) 12); + buffer.putShort((short) "MOTION_BLOCKING".length()); + try { + buffer.putBytes("MOTION_BLOCKING".getBytes("UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + buffer.putInt(256); + for (int i = 0; i < 256; i++) { + buffer.putLong(Long.MAX_VALUE); + } + buffer.putByte((byte) 0); // End nbt + Utils.writeVarInt(buffer, getDataSize()); writeData(buffer); Utils.writeVarInt(buffer, tileEntitesSize); @@ -56,10 +79,9 @@ public class ChunkDataPacket implements ServerPacket { public int paletteLength; // Optional public int[] palette; // Optional public long[] data; - public byte[] blockLight; - public byte[] skyLight; public void write(Buffer buffer) { + buffer.putShort((short) 3); buffer.putByte(bitsPerBlock); if (bitsPerBlock < 9) { @@ -73,12 +95,11 @@ public class ChunkDataPacket implements ServerPacket { for (long d : data) { buffer.putLong(d); } - //buffer.putBytes(blockLight); - //buffer.putBytes(skyLight); } public int getSize() { int size = 0; + size += Short.BYTES; size++; //bitsPerBlock if (bitsPerBlock < 9) { size += Utils.lengthVarInt(paletteLength); @@ -89,8 +110,6 @@ public class ChunkDataPacket implements ServerPacket { size += Utils.lengthVarInt(data.length); size += Long.BYTES * data.length; - //size += blockLight.length; - //size += skyLight.length; return size; } diff --git a/src/main/java/fr/themode/minestom/net/packet/server/play/PlayerPositionAndLookPacket.java b/src/main/java/fr/themode/minestom/net/packet/server/play/PlayerPositionAndLookPacket.java new file mode 100644 index 000000000..2731391f3 --- /dev/null +++ b/src/main/java/fr/themode/minestom/net/packet/server/play/PlayerPositionAndLookPacket.java @@ -0,0 +1,30 @@ +package fr.themode.minestom.net.packet.server.play; + +import fr.adamaq01.ozao.net.Buffer; +import fr.themode.minestom.net.packet.server.ServerPacket; +import fr.themode.minestom.utils.Utils; + +public class PlayerPositionAndLookPacket implements ServerPacket { + + public double x, y, z; + public float yaw, pitch; + public byte flags; + public int teleportId; + + + @Override + public void write(Buffer buffer) { + buffer.putDouble(x); + buffer.putDouble(y); + buffer.putDouble(z); + buffer.putFloat(yaw); + buffer.putFloat(pitch); + buffer.putBytes(flags); + Utils.writeVarInt(buffer, teleportId); + } + + @Override + public int getId() { + return 0x35; + } +} \ No newline at end of file diff --git a/src/main/java/fr/themode/minestom/net/packet/server/play/SpawnPositionPacket.java b/src/main/java/fr/themode/minestom/net/packet/server/play/SpawnPositionPacket.java index 4fa53a05c..f4e81b78f 100644 --- a/src/main/java/fr/themode/minestom/net/packet/server/play/SpawnPositionPacket.java +++ b/src/main/java/fr/themode/minestom/net/packet/server/play/SpawnPositionPacket.java @@ -15,6 +15,6 @@ public class SpawnPositionPacket implements ServerPacket { @Override public int getId() { - return 0x49; + return 0x4D; } }