diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index ea15576..4940521 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -47,6 +47,7 @@ public enum State { 0x00, TeleportConfirmPacket.class, 0x04, ClientSettingsPacket.class, 0x09, PluginMessagePacket.class, + 0x0D, PlayerPositionPacket.class, 0x0E, CPlayerPositionAndLookPacket.class ), // client bound diff --git a/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java b/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java index d0f5036..ed5c002 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java @@ -10,7 +10,7 @@ import mc.protocol.model.Look; import mc.protocol.packets.ClientSidePacket; /** - * Клиент сообщает о движении Игрока. + * Клиент сообщает о движении и повороте головы Игрока. * *
Структура пакета
*
@@ -35,7 +35,6 @@ public class CPlayerPositionAndLookPacket implements ClientSidePacket {
private Location position;
private Look look;
- @SuppressWarnings("java:S116")
private boolean onGround;
@Override
diff --git a/protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java b/protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java
new file mode 100644
index 0000000..abbc609
--- /dev/null
+++ b/protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java
@@ -0,0 +1,49 @@
+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.packets.ClientSidePacket;
+
+/**
+ * Клиент сообщает о движении Игрока.
+ *
+ * Структура пакета
+ *
+ * | FIELD | TYPE | NOTES |
+ * |-----------|---------|-------------------------------------|
+ * | X | Double | Абсолютная позиция по X |
+ * | Feet Y | Double | Абсолютная позиция ног по Y. |
+ * | | | Голова находиться выше на 1.62f |
+ * | Z | Double | Абсолютная позиция по Z |
+ * | On Ground | Boolean | true, если Игрок находится на земле |
+ *
+ *
+ * @see Player Position
+ */
+@NoArgsConstructor
+@Getter
+@EqualsAndHashCode
+@ToString
+public class PlayerPositionPacket implements ClientSidePacket {
+
+ private Location position;
+ 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);
+
+ this.onGround = netByteBuf.readBoolean();
+ }
+
+ public double getYPositionHead() {
+ return this.position.getY() + 1.62f;
+ }
+}