From abac6e8491b29a50e45630e061075cea70265057 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 8 May 2021 21:22:49 +0300 Subject: [PATCH] OpenSignEditorPacket --- protocol/src/main/java/mc/protocol/State.java | 1 + .../packets/server/OpenSignEditorPacket.java | 31 +++++++++++++++++++ .../packets/server/SpawnPositionPacket.java | 14 ++------- .../serializer/LocationSerializer.java | 19 ++++++++++++ .../main/java/mc/server/PacketHandler.java | 7 +++++ 5 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 protocol/src/main/java/mc/protocol/packets/server/OpenSignEditorPacket.java create mode 100644 protocol/src/main/java/mc/protocol/serializer/LocationSerializer.java diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java index 70cfb0f..038de6c 100644 --- a/protocol/src/main/java/mc/protocol/State.java +++ b/protocol/src/main/java/mc/protocol/State.java @@ -58,6 +58,7 @@ public enum State { PingPacket.class, 0x1F, ChunkDataPacket.class, 0x20, JoinGamePacket.class, 0x23, + OpenSignEditorPacket.class, 0x2A, PlayerAbilitiesPacket.class,0x2C, SPlayerPositionAndLookPacket.class, 0x2F, SpawnPositionPacket.class, 0x46 diff --git a/protocol/src/main/java/mc/protocol/packets/server/OpenSignEditorPacket.java b/protocol/src/main/java/mc/protocol/packets/server/OpenSignEditorPacket.java new file mode 100644 index 0000000..7c06dbc --- /dev/null +++ b/protocol/src/main/java/mc/protocol/packets/server/OpenSignEditorPacket.java @@ -0,0 +1,31 @@ +package mc.protocol.packets.server; + +import lombok.Data; +import mc.protocol.io.NetByteBuf; +import mc.protocol.model.Location; +import mc.protocol.packets.ServerSidePacket; +import mc.protocol.serializer.LocationSerializer; + +/** + * Открыть окно редактирования таблички. + * + *

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

+ *
+ * | FIELD    | TYPE     | NOTES |
+ * |----------|----------|-------|
+ * | Location | Location |       |
+ * 
+ * + * @see Open Sign Editor + */ +@Data +public class OpenSignEditorPacket implements ServerSidePacket { + + private Location location; + + @Override + public void writeSelf(NetByteBuf netByteBuf) { + long value = LocationSerializer.toLongValue(this.location); + netByteBuf.writeLong(value); + } +} diff --git a/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java b/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java index 41a3d10..319336a 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java @@ -4,6 +4,7 @@ import lombok.Data; import mc.protocol.io.NetByteBuf; import mc.protocol.model.Location; import mc.protocol.packets.ServerSidePacket; +import mc.protocol.serializer.LocationSerializer; /** * Спавн позиция игрока. @@ -14,7 +15,7 @@ import mc.protocol.packets.ServerSidePacket; *
  * | FIELD    | TYPE     | NOTES                 |
  * |----------|----------|-----------------------|
- * | Location | Position | Локация спавна игрока |
+ * | Location | Location | Локация спавна игрока |
  * 
* * @see Spawn Position @@ -26,16 +27,7 @@ public class SpawnPositionPacket implements ServerSidePacket { @Override public void writeSelf(NetByteBuf netByteBuf) { - long spawnSerialized = - ((long) (floorDouble(spawn.getX()) & 0x3FFFFFF) << 38) - | ((long) (floorDouble(spawn.getY()) & 0xFFF) << 26) - | (floorDouble(spawn.getZ()) & 0x3FFFFFF); + long spawnSerialized = LocationSerializer.toLongValue(this.spawn); netByteBuf.writeLong(spawnSerialized); } - - private static int floorDouble(double value) { - int i = (int) value; - return value < (double) i ? i - 1 : i; - } - } diff --git a/protocol/src/main/java/mc/protocol/serializer/LocationSerializer.java b/protocol/src/main/java/mc/protocol/serializer/LocationSerializer.java new file mode 100644 index 0000000..bae859a --- /dev/null +++ b/protocol/src/main/java/mc/protocol/serializer/LocationSerializer.java @@ -0,0 +1,19 @@ +package mc.protocol.serializer; + +import lombok.experimental.UtilityClass; +import mc.protocol.model.Location; + +@UtilityClass +public class LocationSerializer { + + public long toLongValue(Location location) { + return ((long) (floorDouble(location.getX()) & 0x3FFFFFF) << 38) + | ((long) (floorDouble(location.getY()) & 0xFFF) << 26) + | (floorDouble(location.getZ()) & 0x3FFFFFF); + } + + private static int floorDouble(double value) { + int i = (int) value; + return value < (double) i ? i - 1 : i; + } +} diff --git a/server/src/main/java/mc/server/PacketHandler.java b/server/src/main/java/mc/server/PacketHandler.java index fad97df..6e6c501 100644 --- a/server/src/main/java/mc/server/PacketHandler.java +++ b/server/src/main/java/mc/server/PacketHandler.java @@ -122,6 +122,13 @@ public class PacketHandler { context.send(pingPacket); context.flushSending(); + + // -- Эксперименты -- // + + var openSignEditorPacket = new OpenSignEditorPacket(); + openSignEditorPacket.setLocation(spawnLocation); + + context.sendNow(openSignEditorPacket); } private static String faviconToBase64(Path iconPath) {