From 824fdf956943b5c49b68451dbc49760b08e0a16c Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 2 May 2021 20:45:10 +0300 Subject: [PATCH] CPlayerPositionAndLookPacket --- protocol/src/main/java/mc/protocol/State.java | 5 +- .../client/CPlayerPositionAndLookPacket.java | 58 +++++++++++++++++++ .../packets/client/TeleportConfirmPacket.java | 6 +- ...java => SPlayerPositionAndLookPacket.java} | 4 +- .../main/java/mc/server/PacketHandler.java | 2 +- 5 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java rename protocol/src/main/java/mc/protocol/packets/server/{PlayerPositionAndLookPacket.java => SPlayerPositionAndLookPacket.java} (97%) diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index 1d20194..39d1dca 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -46,14 +46,15 @@ public enum State { Map.of( 0x00, TeleportConfirmPacket.class, 0x04, ClientSettingsPacket.class, - 0x09, PluginMessagePacket.class + 0x09, PluginMessagePacket.class, + 0x0E, CPlayerPositionAndLookPacket.class ), // client bound Map.of( JoinGamePacket.class, 0x23, SpawnPositionPacket.class, 0x46, PlayerAbilitiesPacket.class,0x2C, - PlayerPositionAndLookPacket.class, 0x2F + SPlayerPositionAndLookPacket.class, 0x2F ) ); diff --git a/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java b/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java new file mode 100644 index 0000000..d0f5036 --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java @@ -0,0 +1,58 @@ +package mc.protocol.packets.client; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import mc.protocol.io.NetByteBuf; +import mc.protocol.model.Location; +import mc.protocol.model.Look; +import mc.protocol.packets.ClientSidePacket; + +/** + * Клиент сообщает о движении Игрока. + * + *

Структура пакета

+ *
+ * | FIELD     | TYPE    | NOTES                                                      |
+ * |-----------|---------|------------------------------------------------------------|
+ * | X         | Double  | Абсолютная позиция по X                                    |
+ * | Y         | Double  | Абсолютная позиция по Y.                                   |
+ * |           |         | Имеется ввиду позиция ног. Голова находиться выше на 1.62f |
+ * | Z         | Double  | Абсолютная позиция по Z                                    |
+ * | Yaw       | Float   | Абсолютный поворот головы по OX, в градусах                |
+ * | Pitch     | Float   | Абсолютный поворот головы по OY, в градусах                |
+ * | On Ground | Boolean | true, если Игрок находится на земле                        |
+ * 
+ * + * @see Player Position And Look (serverbound) + */ +@NoArgsConstructor +@Getter +@EqualsAndHashCode +@ToString +public class CPlayerPositionAndLookPacket implements ClientSidePacket { + + private Location position; + private Look look; + @SuppressWarnings("java:S116") + private boolean onGround; + + @Override + public void readSelf(NetByteBuf netByteBuf) { + double x = netByteBuf.readDouble(); + double y = netByteBuf.readDouble(); + double z = netByteBuf.readDouble(); + this.position = new Location(x, y, z); + + float yaw = netByteBuf.readFloat(); + float pitch = netByteBuf.readFloat(); + this.look = new Look(yaw, pitch); + + this.onGround = netByteBuf.readBoolean(); + } + + public double getYPositionHead() { + return this.position.getY() + 1.62f; + } +} diff --git a/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java b/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java index 1b0c849..eee3df4 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java @@ -6,7 +6,7 @@ import lombok.NoArgsConstructor; import lombok.ToString; import mc.protocol.io.NetByteBuf; import mc.protocol.packets.ClientSidePacket; -import mc.protocol.packets.server.PlayerPositionAndLookPacket; +import mc.protocol.packets.server.SPlayerPositionAndLookPacket; /** * Teleport сonfirm packet. @@ -15,11 +15,11 @@ import mc.protocol.packets.server.PlayerPositionAndLookPacket; *
  * | FIELD       | TYPE   | NOTES                                                     |
  * |-------------|--------|-----------------------------------------------------------|
- * | Teleport ID | VarInt | ID, который был выдан пакетом {@link PlayerPositionAndLookPacket} |
+ * | Teleport ID | VarInt | ID, который был выдан пакетом {@link SPlayerPositionAndLookPacket} |
  * 
* * @see Login start - * @see PlayerPositionAndLookPacket + * @see SPlayerPositionAndLookPacket */ @NoArgsConstructor @Getter diff --git a/protocol/src/main/java/mc/protocol/packets/server/PlayerPositionAndLookPacket.java b/protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java similarity index 97% rename from protocol/src/main/java/mc/protocol/packets/server/PlayerPositionAndLookPacket.java rename to protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java index ba503f8..d9ceac4 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/PlayerPositionAndLookPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java @@ -37,11 +37,11 @@ import mc.protocol.packets.client.TeleportConfirmPacket; *

Примечание от Dinnerbone про "Flags":

* "It's a bitfield, X/Y/Z/Y_ROT/X_ROT. If X is set, the x value is relative and not absolute." * - * @see Player Position And Look + * @see Player Position And Look (clientbound) * @see TeleportConfirmPacket */ @Data -public class PlayerPositionAndLookPacket implements ServerSidePacket { +public class SPlayerPositionAndLookPacket implements ServerSidePacket { private Location position; private Look look; diff --git a/server/src/main/java/mc/server/PacketHandler.java b/server/src/main/java/mc/server/PacketHandler.java index 7135487..bc2f85c 100644 --- a/server/src/main/java/mc/server/PacketHandler.java +++ b/server/src/main/java/mc/server/PacketHandler.java @@ -99,7 +99,7 @@ public class PacketHandler { channel.getCtx().flush(); - var playerPositionAndLookPacket = new PlayerPositionAndLookPacket(); + var playerPositionAndLookPacket = new SPlayerPositionAndLookPacket(); playerPositionAndLookPacket.setPosition(spawnLocation); playerPositionAndLookPacket.setLook(new Look(0f, 0f)); playerPositionAndLookPacket.setTeleportId(random.nextInt());