From 20791ed88138dc2c598be6b7f9d6b98796fe1dde Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 9 May 2021 18:43:57 +0300 Subject: [PATCH] VoidWorld, VoidChunk --- .../packets/server/ChunkDataPacket.java | 41 ++++++++++++++++++- .../main/java/mc/server/world/VoidChunk.java | 13 ++++++ .../main/java/mc/server/world/VoidWorld.java | 26 ++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 server/src/main/java/mc/server/world/VoidChunk.java create mode 100644 server/src/main/java/mc/server/world/VoidWorld.java diff --git a/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java b/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java index ca0eba2..cfcac8d 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java @@ -28,13 +28,17 @@ import mc.protocol.packets.ServerSidePacket; @Data public class ChunkDataPacket implements ServerSidePacket { + private static NetByteBuf voidData; + private int x; private int z; + @SuppressWarnings("java:S125") @Override public void writeSelf(NetByteBuf netByteBuf) { netByteBuf.writeInt(x); netByteBuf.writeInt(z); + /* Временное отключение кода netByteBuf.writeBoolean(true); // Is Full chunk netByteBuf.writeVarInt(0b11111111); // Available Sections @@ -64,6 +68,41 @@ public class ChunkDataPacket implements ServerSidePacket { netByteBuf.writeVarInt(data.readableBytes()); // Size of Data netByteBuf.writeBytes(data); // Data netByteBuf.writeVarInt(0); // Number of block entities - /* write NBT's */ + // write NBT's + */ + + netByteBuf.writeBytes(voidData); + + voidData.resetReaderIndex(); + voidData.resetWriterIndex(); + } + + static { + voidData = new NetByteBuf(Unpooled.buffer()); + voidData.writeBoolean(true); // Is Full chunk + voidData.writeVarInt(0b11111111); // Available Sections + + NetByteBuf data = new NetByteBuf(Unpooled.buffer()); + for (int i = 0; i < 16; i++) { + NetByteBuf dataBuff = new NetByteBuf(Unpooled.wrappedBuffer(new byte[4096])); + NetByteBuf blockLight = new NetByteBuf(Unpooled.wrappedBuffer(new byte[2048])); + NetByteBuf skyLight = new NetByteBuf(Unpooled.wrappedBuffer(new byte[2048])); + NetByteBuf biomes = new NetByteBuf(Unpooled.wrappedBuffer(new byte[256])); + + data.writeUnsignedByte(13); + data.writeUnsignedByte(0); + data.writeVarInt(dataBuff.readableBytes()); + data.writeBytes(dataBuff); + data.writeBytes(blockLight); + data.writeBytes(skyLight); + data.writeBytes(biomes); + } + + voidData.writeVarInt(data.readableBytes()); + voidData.writeBytes(data); + voidData.writeVarInt(0); + + voidData.markReaderIndex(); + voidData.markWriterIndex(); } } diff --git a/server/src/main/java/mc/server/world/VoidChunk.java b/server/src/main/java/mc/server/world/VoidChunk.java new file mode 100644 index 0000000..3ee5cb6 --- /dev/null +++ b/server/src/main/java/mc/server/world/VoidChunk.java @@ -0,0 +1,13 @@ +package mc.server.world; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import mc.protocol.world.Chunk; + +@RequiredArgsConstructor +@Getter +public class VoidChunk implements Chunk { + + private final int x; + private final int z; +} diff --git a/server/src/main/java/mc/server/world/VoidWorld.java b/server/src/main/java/mc/server/world/VoidWorld.java new file mode 100644 index 0000000..a2df89b --- /dev/null +++ b/server/src/main/java/mc/server/world/VoidWorld.java @@ -0,0 +1,26 @@ +package mc.server.world; + +import mc.protocol.model.Location; +import mc.protocol.utils.LevelType; +import mc.protocol.world.Chunk; +import mc.protocol.world.World; + +public class VoidWorld implements World { + + private static final Location spawn = new Location(7d, 130d, 7d); + + @Override + public LevelType getLevelType() { + return LevelType.FLAT; + } + + @Override + public Location getSpawn() { + return VoidWorld.spawn; + } + + @Override + public Chunk getChunk(int x, int z) { + return new VoidChunk(x, z); + } +}