From 1c3bb5b0ff2929648f669a68f7ad8dc9354e3747 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 12:57:13 +0200 Subject: [PATCH 01/41] First NIO attempt Signed-off-by: TheMode --- build.gradle | 6 - .../net/minestom/server/MinecraftServer.java | 105 ++------ .../builder/arguments/ArgumentString.java | 4 +- .../minestom/server/extras/lan/OpenToLAN.java | 2 +- .../server/extras/mojangAuth/CipherBase.java | 54 ---- .../server/extras/mojangAuth/Decrypter.java | 20 -- .../server/extras/mojangAuth/Encrypter.java | 19 -- .../minestom/server/extras/query/Query.java | 17 +- .../query/response/BasicQueryResponse.java | 4 +- .../extras/query/response/QueryKey.java | 4 +- .../server/extras/velocity/VelocityProxy.java | 10 +- .../net/minestom/server/instance/Chunk.java | 4 +- .../server/instance/DynamicChunk.java | 2 +- .../net/minestom/server/item/ItemMeta.java | 6 +- .../server/network/ConnectionManager.java | 13 +- .../server/network/PacketProcessor.java | 63 +---- .../server/network/netty/NettyServer.java | 202 -------------- .../network/netty/channel/ClientChannel.java | 90 ------- .../netty/codec/GroupedPacketHandler.java | 19 -- .../netty/codec/LegacyPingHandler.java | 184 ------------- .../network/netty/codec/PacketCompressor.java | 79 ------ .../network/netty/codec/PacketDecoder.java | 20 -- .../network/netty/codec/PacketEncoder.java | 16 -- .../network/netty/codec/PacketFramer.java | 74 ------ .../network/netty/packet/FramedPacket.java | 10 +- .../network/netty/packet/InboundPacket.java | 11 +- .../packet/server/play/ChunkDataPacket.java | 44 +--- .../packet/server/play/UpdateLightPacket.java | 35 +-- .../network/player/NettyPlayerConnection.java | 249 ++++++++++-------- .../network/player/PlayerConnection.java | 4 +- .../server/network/socket/Server.java | 97 +++++++ .../server/network/socket/Worker.java | 149 +++++++++++ .../server/ping/ServerListPingType.java | 6 +- .../net/minestom/server/utils/BufUtils.java | 13 - .../minestom/server/utils/PacketUtils.java | 116 ++------ .../java/net/minestom/server/utils/Utils.java | 66 ++--- .../server/utils/binary/BinaryReader.java | 63 ++--- .../server/utils/binary/BinaryWriter.java | 91 ++++--- .../server/utils/cache/CacheablePacket.java | 91 ------- .../server/utils/cache/TemporaryCache.java | 57 ---- .../utils/cache/TemporaryPacketCache.java | 18 -- .../server/utils/cache/TimedBuffer.java | 28 -- src/test/java/demo/Main.java | 1 + 43 files changed, 595 insertions(+), 1571 deletions(-) delete mode 100644 src/main/java/net/minestom/server/extras/mojangAuth/CipherBase.java delete mode 100644 src/main/java/net/minestom/server/extras/mojangAuth/Decrypter.java delete mode 100644 src/main/java/net/minestom/server/extras/mojangAuth/Encrypter.java delete mode 100644 src/main/java/net/minestom/server/network/netty/NettyServer.java delete mode 100644 src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/LegacyPingHandler.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/PacketCompressor.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/PacketDecoder.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/PacketEncoder.java delete mode 100644 src/main/java/net/minestom/server/network/netty/codec/PacketFramer.java create mode 100644 src/main/java/net/minestom/server/network/socket/Server.java create mode 100644 src/main/java/net/minestom/server/network/socket/Worker.java delete mode 100644 src/main/java/net/minestom/server/utils/BufUtils.java delete mode 100644 src/main/java/net/minestom/server/utils/cache/CacheablePacket.java delete mode 100644 src/main/java/net/minestom/server/utils/cache/TemporaryCache.java delete mode 100644 src/main/java/net/minestom/server/utils/cache/TemporaryPacketCache.java delete mode 100644 src/main/java/net/minestom/server/utils/cache/TimedBuffer.java diff --git a/build.gradle b/build.gradle index 986c6a9c4..1a019f754 100644 --- a/build.gradle +++ b/build.gradle @@ -107,12 +107,6 @@ dependencies { // Only here to ensure J9 module support for extensions and our classloaders testCompileOnly 'org.mockito:mockito-core:3.11.1' - // Netty - api 'io.netty:netty-handler:4.1.65.Final' - api 'io.netty:netty-codec:4.1.65.Final' - api 'io.netty:netty-transport-native-epoll:4.1.65.Final:linux-x86_64' - api 'io.netty:netty-transport-native-kqueue:4.1.65.Final:osx-x86_64' - // https://mvnrepository.com/artifact/it.unimi.dsi/fastutil api 'it.unimi.dsi:fastutil:8.5.4' diff --git a/src/main/java/net/minestom/server/MinecraftServer.java b/src/main/java/net/minestom/server/MinecraftServer.java index 4d1b2a742..84605aa0e 100644 --- a/src/main/java/net/minestom/server/MinecraftServer.java +++ b/src/main/java/net/minestom/server/MinecraftServer.java @@ -21,10 +21,10 @@ import net.minestom.server.listener.manager.PacketListenerManager; import net.minestom.server.monitoring.BenchmarkManager; import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.netty.NettyServer; import net.minestom.server.network.packet.server.play.PluginMessagePacket; import net.minestom.server.network.packet.server.play.ServerDifficultyPacket; import net.minestom.server.network.packet.server.play.UpdateViewDistancePacket; +import net.minestom.server.network.socket.Server; import net.minestom.server.ping.ResponseDataConsumer; import net.minestom.server.recipe.RecipeManager; import net.minestom.server.scoreboard.TeamManager; @@ -44,6 +44,9 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.net.InetSocketAddress; + /** * The main server class used to start the server and retrieve all the managers. *

@@ -85,9 +88,7 @@ public final class MinecraftServer { // Network private static PacketListenerManager packetListenerManager; private static PacketProcessor packetProcessor; - private static NettyServer nettyServer; - private static int nettyThreadCount = Runtime.getRuntime().availableProcessors(); - private static boolean processNettyErrors = true; + private static Server server; private static ExceptionManager exceptionManager; @@ -122,7 +123,6 @@ public final class MinecraftServer { private static int chunkViewDistance = 8; private static int entityViewDistance = 5; private static int compressionThreshold = 256; - private static boolean packetCaching = true; private static boolean groupedPacket = true; private static boolean terminalEnabled = System.getProperty("minestom.terminal.disabled") == null; private static ResponseDataConsumer responseDataConsumer; @@ -168,7 +168,11 @@ public final class MinecraftServer { tagManager = new TagManager(); - nettyServer = new NettyServer(packetProcessor); + try { + server = new Server(packetProcessor); + } catch (IOException e) { + e.printStackTrace(); + } initialized = true; @@ -277,16 +281,6 @@ public final class MinecraftServer { return packetListenerManager; } - /** - * Gets the netty server. - * - * @return the netty server - */ - public static NettyServer getNettyServer() { - checkInitStatus(nettyServer); - return nettyServer; - } - /** * Gets the manager handling all registered instances. * @@ -519,34 +513,6 @@ public final class MinecraftServer { MinecraftServer.compressionThreshold = compressionThreshold; } - /** - * Gets if the packet caching feature is enabled. - *

- * This feature allows some packets (implementing the {@link net.minestom.server.utils.cache.CacheablePacket} to be cached - * in order to do not have to be written and compressed over and over again), this is especially useful for chunk and light packets. - *

- * It is enabled by default and it is our recommendation, - * you should only disable it if you want to focus on low memory usage - * at the cost of many packet writing and compression. - * - * @return true if the packet caching feature is enabled, false otherwise - */ - public static boolean hasPacketCaching() { - return packetCaching; - } - - /** - * Enables or disable packet caching. - * - * @param packetCaching true to enable packet caching - * @throws IllegalStateException if this is called after the server started - * @see #hasPacketCaching() - */ - public static void setPacketCaching(boolean packetCaching) { - Check.stateCondition(started, "You cannot change the packet caching value after the server has been started."); - MinecraftServer.packetCaching = packetCaching; - } - /** * Gets if the packet caching feature is enabled. *

@@ -666,45 +632,9 @@ public final class MinecraftServer { return updateManager; } - /** - * Gets the number of threads used by Netty. - *

- * Is the number of vCPU by default. - * - * @return the number of netty threads - */ - public static int getNettyThreadCount() { - return nettyThreadCount; - } - - /** - * Changes the number of threads used by Netty. - * - * @param nettyThreadCount the number of threads - * @throws IllegalStateException if the server is already started - */ - public static void setNettyThreadCount(int nettyThreadCount) { - Check.stateCondition(started, "Netty thread count can only be changed before the server starts!"); - MinecraftServer.nettyThreadCount = nettyThreadCount; - } - - /** - * Gets if the server should process netty errors and other unnecessary netty events. - * - * @return should process netty errors - */ - public static boolean shouldProcessNettyErrors() { - return processNettyErrors; - } - - /** - * Sets if the server should process netty errors and other unnecessary netty events. - * false is faster - * - * @param processNettyErrors should process netty errors - */ - public static void setShouldProcessNettyErrors(boolean processNettyErrors) { - MinecraftServer.processNettyErrors = processNettyErrors; + public static Server getServer() { + checkInitStatus(server); + return server; } /** @@ -744,8 +674,11 @@ public final class MinecraftServer { updateManager.start(); // Init & start the TCP server - nettyServer.init(); - nettyServer.start(address, port); + try { + server.start(new InetSocketAddress(address, port)); + } catch (IOException e) { + e.printStackTrace(); + } if (extensionManager.shouldLoadOnStartup()) { final long loadStartTime = System.nanoTime(); @@ -779,7 +712,7 @@ public final class MinecraftServer { updateManager.stop(); schedulerManager.shutdown(); connectionManager.shutdown(); - nettyServer.stop(); + server.stop(); storageManager.getLoadedLocations().forEach(StorageLocation::close); LOGGER.info("Unloading all extensions."); extensionManager.shutdown(); diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java index 696760381..f8aaed23d 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentString.java @@ -1,6 +1,5 @@ package net.minestom.server.command.builder.arguments; -import io.netty.util.internal.StringUtil; import net.minestom.server.command.builder.NodeMaker; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.network.packet.server.play.DeclareCommandsPacket; @@ -48,11 +47,10 @@ public class ArgumentString extends Argument { */ @Deprecated public static String staticParse(@NotNull String input) throws ArgumentSyntaxException { - // Return if not quoted if (!input.contains(String.valueOf(DOUBLE_QUOTE)) && !input.contains(String.valueOf(QUOTE)) && - !input.contains(String.valueOf(StringUtil.SPACE))) { + !input.contains(StringUtils.SPACE)) { return input; } diff --git a/src/main/java/net/minestom/server/extras/lan/OpenToLAN.java b/src/main/java/net/minestom/server/extras/lan/OpenToLAN.java index 350b05b83..a4777587a 100644 --- a/src/main/java/net/minestom/server/extras/lan/OpenToLAN.java +++ b/src/main/java/net/minestom/server/extras/lan/OpenToLAN.java @@ -121,7 +121,7 @@ public class OpenToLAN { * Performs the ping. */ private static void ping() { - if (MinecraftServer.getNettyServer().getPort() != 0) { + if (MinecraftServer.getServer().getPort() != 0) { if (packet == null || eventCooldown.isReady(System.currentTimeMillis())) { final ServerListPingEvent event = new ServerListPingEvent(OPEN_TO_LAN); EventDispatcher.call(event); diff --git a/src/main/java/net/minestom/server/extras/mojangAuth/CipherBase.java b/src/main/java/net/minestom/server/extras/mojangAuth/CipherBase.java deleted file mode 100644 index 9c77a7e52..000000000 --- a/src/main/java/net/minestom/server/extras/mojangAuth/CipherBase.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.minestom.server.extras.mojangAuth; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import org.jetbrains.annotations.NotNull; - -import javax.crypto.Cipher; -import javax.crypto.ShortBufferException; - -public class CipherBase { - - private final Cipher cipher; - private byte[] inTempArray = new byte[0]; - private byte[] outTempArray = new byte[0]; - - protected CipherBase(@NotNull Cipher cipher) { - this.cipher = cipher; - } - - private byte[] bufToByte(ByteBuf buffer) { - int remainingBytes = buffer.readableBytes(); - - // Need to resize temp array - if (inTempArray.length < remainingBytes) { - inTempArray = new byte[remainingBytes]; - } - - buffer.readBytes(inTempArray, 0, remainingBytes); - return inTempArray; - } - - protected ByteBuf decrypt(ChannelHandlerContext channelHandlerContext, ByteBuf byteBufIn) throws ShortBufferException { - int remainingBytes = byteBufIn.readableBytes(); - byte[] bytes = bufToByte(byteBufIn); - - ByteBuf outputBuffer = channelHandlerContext.alloc().heapBuffer(cipher.getOutputSize(remainingBytes)); - outputBuffer.writerIndex(cipher.update(bytes, 0, remainingBytes, outputBuffer.array(), outputBuffer.arrayOffset())); - - return outputBuffer; - } - - protected void encrypt(ByteBuf byteBufIn, ByteBuf byteBufOut) throws ShortBufferException { - int remainingBytes = byteBufIn.readableBytes(); - byte[] bytes = bufToByte(byteBufIn); - int newSize = cipher.getOutputSize(remainingBytes); - - // Need to resize temp array - if (outTempArray.length < newSize) { - outTempArray = new byte[newSize]; - } - - byteBufOut.writeBytes(outTempArray, 0, cipher.update(bytes, 0, remainingBytes, outTempArray)); - } -} diff --git a/src/main/java/net/minestom/server/extras/mojangAuth/Decrypter.java b/src/main/java/net/minestom/server/extras/mojangAuth/Decrypter.java deleted file mode 100644 index 69c89ad6f..000000000 --- a/src/main/java/net/minestom/server/extras/mojangAuth/Decrypter.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.minestom.server.extras.mojangAuth; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageDecoder; - -import javax.crypto.Cipher; -import java.util.List; - -public class Decrypter extends MessageToMessageDecoder { - private final CipherBase cipher; - - public Decrypter(Cipher cipher) { - this.cipher = new CipherBase(cipher); - } - - protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List list) throws Exception { - list.add(this.cipher.decrypt(channelHandlerContext, byteBuf)); - } -} diff --git a/src/main/java/net/minestom/server/extras/mojangAuth/Encrypter.java b/src/main/java/net/minestom/server/extras/mojangAuth/Encrypter.java deleted file mode 100644 index 053ca36cb..000000000 --- a/src/main/java/net/minestom/server/extras/mojangAuth/Encrypter.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.minestom.server.extras.mojangAuth; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToByteEncoder; - -import javax.crypto.Cipher; - -public class Encrypter extends MessageToByteEncoder { - private final CipherBase cipher; - - public Encrypter(Cipher cipher) { - this.cipher = new CipherBase(cipher); - } - - protected void encode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBufIn, ByteBuf byteBufOut) throws Exception { - this.cipher.encrypt(byteBufIn, byteBufOut); - } -} diff --git a/src/main/java/net/minestom/server/extras/query/Query.java b/src/main/java/net/minestom/server/extras/query/Query.java index a99225607..f80e88fc5 100644 --- a/src/main/java/net/minestom/server/extras/query/Query.java +++ b/src/main/java/net/minestom/server/extras/query/Query.java @@ -1,7 +1,5 @@ package net.minestom.server.extras.query; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; @@ -23,6 +21,7 @@ import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketAddress; import java.net.SocketException; +import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Random; @@ -151,18 +150,18 @@ public class Query { } // get the contents - ByteBuf data = Unpooled.wrappedBuffer(packet.getData()); + ByteBuffer data = ByteBuffer.wrap(packet.getData()); // check the magic field - if (data.readUnsignedShort() != 0xFEFD) { + if ((data.getShort() & 0xFFFF) != 0xFEFD) { continue; } // now check the query type - byte type = data.readByte(); + byte type = data.get(); if (type == 9) { // handshake - int sessionID = data.readInt(); + int sessionID = data.getInt(); int challengeToken = RANDOM.nextInt(); CHALLENGE_TOKENS.put(challengeToken, packet.getSocketAddress()); @@ -184,12 +183,12 @@ public class Query { } } } else if (type == 0) { // stat - int sessionID = data.readInt(); - int challengeToken = data.readInt(); + int sessionID = data.getInt(); + int challengeToken = data.getInt(); SocketAddress sender = packet.getSocketAddress(); if (CHALLENGE_TOKENS.containsKey(challengeToken) && CHALLENGE_TOKENS.get(challengeToken).equals(sender)) { - int remaining = data.readableBytes(); + int remaining = data.remaining(); if (remaining == 0) { // basic BasicQueryEvent event = new BasicQueryEvent(sender, sessionID); diff --git a/src/main/java/net/minestom/server/extras/query/response/BasicQueryResponse.java b/src/main/java/net/minestom/server/extras/query/response/BasicQueryResponse.java index da502f2a0..144c30064 100644 --- a/src/main/java/net/minestom/server/extras/query/response/BasicQueryResponse.java +++ b/src/main/java/net/minestom/server/extras/query/response/BasicQueryResponse.java @@ -142,7 +142,7 @@ public class BasicQueryResponse implements Writeable { writer.writeNullTerminatedString(this.map, Query.CHARSET); writer.writeNullTerminatedString(this.numPlayers, Query.CHARSET); writer.writeNullTerminatedString(this.maxPlayers, Query.CHARSET); - writer.getBuffer().writeShortLE(MinecraftServer.getNettyServer().getPort()); - writer.writeNullTerminatedString(Objects.requireNonNullElse(MinecraftServer.getNettyServer().getAddress(), ""), Query.CHARSET); + writer.getBuffer().putShort((short) MinecraftServer.getServer().getPort()); // TODO little endian? + writer.writeNullTerminatedString(Objects.requireNonNullElse(MinecraftServer.getServer().getAddress(), ""), Query.CHARSET); } } diff --git a/src/main/java/net/minestom/server/extras/query/response/QueryKey.java b/src/main/java/net/minestom/server/extras/query/response/QueryKey.java index 066fb3f8a..0b5762e3b 100644 --- a/src/main/java/net/minestom/server/extras/query/response/QueryKey.java +++ b/src/main/java/net/minestom/server/extras/query/response/QueryKey.java @@ -20,8 +20,8 @@ public enum QueryKey { MAP(() -> "world"), NUM_PLAYERS("numplayers", () -> String.valueOf(MinecraftServer.getConnectionManager().getOnlinePlayers().size())), MAX_PLAYERS("maxplayers", () -> String.valueOf(MinecraftServer.getConnectionManager().getOnlinePlayers().size() + 1)), - HOST_PORT("hostport", () -> String.valueOf(MinecraftServer.getNettyServer().getPort())), - HOST_IP("hostip", () -> Objects.requireNonNullElse(MinecraftServer.getNettyServer().getAddress(), "localhost")); + HOST_PORT("hostport", () -> String.valueOf(MinecraftServer.getServer().getPort())), + HOST_IP("hostip", () -> Objects.requireNonNullElse(MinecraftServer.getServer().getAddress(), "localhost")); static QueryKey[] VALUES = QueryKey.values(); diff --git a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java index f4a133243..97e653109 100644 --- a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java +++ b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java @@ -1,6 +1,5 @@ package net.minestom.server.extras.velocity; -import io.netty.buffer.ByteBuf; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.PlayerSkin; import net.minestom.server.utils.binary.BinaryReader; @@ -10,6 +9,7 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.InetAddress; import java.net.UnknownHostException; +import java.nio.ByteBuffer; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -54,9 +54,11 @@ public final class VelocityProxy { final byte[] signature = reader.readBytes(32); - ByteBuf buf = reader.getBuffer(); - final byte[] data = new byte[buf.readableBytes()]; - buf.getBytes(buf.readerIndex(), data); + ByteBuffer buf = reader.getBuffer(); + buf.mark(); + final byte[] data = new byte[buf.remaining()]; + buf.get(data); + buf.reset(); try { final Mac mac = Mac.getInstance("HmacSHA256"); diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java index f82bbff35..dec32ac4d 100644 --- a/src/main/java/net/minestom/server/instance/Chunk.java +++ b/src/main/java/net/minestom/server/instance/Chunk.java @@ -256,7 +256,7 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka List skyLights = new ArrayList<>(); List blockLights = new ArrayList<>(); - UpdateLightPacket updateLightPacket = new UpdateLightPacket(getIdentifier(), getLastChangeTime()); + UpdateLightPacket updateLightPacket = new UpdateLightPacket(); updateLightPacket.chunkX = getChunkX(); updateLightPacket.chunkZ = getChunkZ(); @@ -392,7 +392,5 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka */ protected void unload() { this.loaded = false; - ChunkDataPacket.CACHE.invalidate(getIdentifier()); - UpdateLightPacket.CACHE.invalidate(getIdentifier()); } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index cdcd32edb..d44fe308a 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -124,7 +124,7 @@ public class DynamicChunk extends Chunk { if (packet != null && cachedPacketTime == getLastChangeTime()) { return packet; } - packet = new ChunkDataPacket(getIdentifier(), getLastChangeTime()); + packet = new ChunkDataPacket(); packet.biomes = biomes; packet.chunkX = chunkX; packet.chunkZ = chunkZ; diff --git a/src/main/java/net/minestom/server/item/ItemMeta.java b/src/main/java/net/minestom/server/item/ItemMeta.java index 9b6c5b211..a31518f88 100644 --- a/src/main/java/net/minestom/server/item/ItemMeta.java +++ b/src/main/java/net/minestom/server/item/ItemMeta.java @@ -1,6 +1,5 @@ package net.minestom.server.item; -import io.netty.buffer.ByteBuf; import net.kyori.adventure.text.Component; import net.minestom.server.instance.block.Block; import net.minestom.server.item.attribute.ItemAttribute; @@ -13,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jglrxavpok.hephaistos.nbt.NBTCompound; +import java.nio.ByteBuffer; import java.util.*; import java.util.function.Consumer; @@ -36,7 +36,7 @@ public class ItemMeta implements TagReadable, Writeable { private final NBTCompound nbt; private String cachedSNBT; - private ByteBuf cachedBuffer; + private ByteBuffer cachedBuffer; protected ItemMeta(@NotNull ItemMetaBuilder metaBuilder) { this.damage = metaBuilder.damage; @@ -154,6 +154,6 @@ public class ItemMeta implements TagReadable, Writeable { this.cachedBuffer = w.getBuffer(); } writer.write(cachedBuffer); - this.cachedBuffer.resetReaderIndex(); + this.cachedBuffer.position(0); } } diff --git a/src/main/java/net/minestom/server/network/ConnectionManager.java b/src/main/java/net/minestom/server/network/ConnectionManager.java index cd364866e..d6b8d1fef 100644 --- a/src/main/java/net/minestom/server/network/ConnectionManager.java +++ b/src/main/java/net/minestom/server/network/ConnectionManager.java @@ -1,6 +1,5 @@ package net.minestom.server.network; -import io.netty.channel.Channel; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.MinecraftServer; @@ -24,6 +23,7 @@ import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; @@ -294,7 +294,7 @@ public final class ConnectionManager { // Close the player channel if he has been disconnected (kick) if (!player.isOnline()) { if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).getChannel().flush(); + ((NettyPlayerConnection) playerConnection).flush(); } //playerConnection.disconnect(); return; @@ -350,9 +350,12 @@ public final class ConnectionManager { final PlayerConnection playerConnection = player.getPlayerConnection(); if (playerConnection instanceof NettyPlayerConnection) { final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) playerConnection; - final Channel channel = nettyPlayerConnection.getChannel(); - channel.writeAndFlush(disconnectPacket); - channel.close(); + nettyPlayerConnection.writeAndFlush(disconnectPacket); + try { + nettyPlayerConnection.getChannel().close(); + } catch (IOException e) { + e.printStackTrace(); + } } } this.players.clear(); diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index c33f256b0..f89799602 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -1,7 +1,5 @@ package net.minestom.server.network; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.socket.SocketChannel; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.network.netty.packet.InboundPacket; @@ -16,13 +14,9 @@ import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.Readable; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** * Responsible for processing client packets. *

@@ -34,11 +28,8 @@ import java.util.concurrent.ConcurrentHashMap; * the same meaning as it is a login or play packet). */ public final class PacketProcessor { - private final static Logger LOGGER = LoggerFactory.getLogger(PacketProcessor.class); - private final Map connectionPlayerConnectionMap = new ConcurrentHashMap<>(); - // Protocols state private final ClientStatusPacketsHandler statusPacketsHandler; private final ClientLoginPacketsHandler loginPacketsHandler; @@ -50,33 +41,15 @@ public final class PacketProcessor { this.playPacketsHandler = new ClientPlayPacketsHandler(); } - public void process(@NotNull ChannelHandlerContext context, @NotNull InboundPacket packet) { - final SocketChannel socketChannel = (SocketChannel) context.channel(); - - // Create the netty player connection object if not existing - PlayerConnection playerConnection = connectionPlayerConnectionMap.get(context); - if (playerConnection == null) { - // Should never happen - context.close(); - return; - } - - // Prevent the client from sending packets when disconnected (kick) - if (!playerConnection.isOnline() || !socketChannel.isActive()) { - playerConnection.disconnect(); - return; - } - + public void process(@NotNull NettyPlayerConnection playerConnection, @NotNull InboundPacket packet) { // Increment packet count (checked in PlayerConnection#update) if (MinecraftServer.getRateLimit() > 0) { playerConnection.getPacketCounter().incrementAndGet(); } - - final ConnectionState connectionState = playerConnection.getConnectionState(); - final int packetId = packet.getPacketId(); BinaryReader binaryReader = new BinaryReader(packet.getBody()); + final ConnectionState connectionState = playerConnection.getConnectionState(); if (connectionState == ConnectionState.UNKNOWN) { // Should be handshake packet if (packetId == 0) { @@ -86,7 +59,6 @@ public final class PacketProcessor { } return; } - switch (connectionState) { case PLAY: final Player player = playerConnection.getPlayer(); @@ -108,34 +80,13 @@ public final class PacketProcessor { } } - /** - * Retrieves a player connection from its channel. - * - * @param context the connection context - * @return the connection of this channel, null if not found - */ - @Nullable - public PlayerConnection getPlayerConnection(ChannelHandlerContext context) { - return connectionPlayerConnectionMap.get(context); - } - - public void createPlayerConnection(@NotNull ChannelHandlerContext context) { - final PlayerConnection playerConnection = new NettyPlayerConnection((SocketChannel) context.channel()); - connectionPlayerConnectionMap.put(context, playerConnection); - } - - public PlayerConnection removePlayerConnection(@NotNull ChannelHandlerContext context) { - return connectionPlayerConnectionMap.remove(context); - } - /** * Gets the handler for client status packets. * * @return the status packets handler * @see Status packets */ - @NotNull - public ClientStatusPacketsHandler getStatusPacketsHandler() { + public @NotNull ClientStatusPacketsHandler getStatusPacketsHandler() { return statusPacketsHandler; } @@ -145,8 +96,7 @@ public final class PacketProcessor { * @return the status login handler * @see Login packets */ - @NotNull - public ClientLoginPacketsHandler getLoginPacketsHandler() { + public @NotNull ClientLoginPacketsHandler getLoginPacketsHandler() { return loginPacketsHandler; } @@ -156,8 +106,7 @@ public final class PacketProcessor { * @return the play packets handler * @see Play packets */ - @NotNull - public ClientPlayPacketsHandler getPlayPacketsHandler() { + public @NotNull ClientPlayPacketsHandler getPlayPacketsHandler() { return playPacketsHandler; } @@ -170,12 +119,10 @@ public final class PacketProcessor { */ private void safeRead(@NotNull PlayerConnection connection, @NotNull Readable readable, @NotNull BinaryReader reader) { final int readableBytes = reader.available(); - // Check if there is anything to read if (readableBytes == 0) { return; } - try { readable.read(reader); } catch (Exception e) { diff --git a/src/main/java/net/minestom/server/network/netty/NettyServer.java b/src/main/java/net/minestom/server/network/netty/NettyServer.java deleted file mode 100644 index c9adc82b9..000000000 --- a/src/main/java/net/minestom/server/network/netty/NettyServer.java +++ /dev/null @@ -1,202 +0,0 @@ -package net.minestom.server.network.netty; - -import io.netty.bootstrap.ServerBootstrap; -import io.netty.buffer.ByteBufAllocator; -import io.netty.channel.*; -import io.netty.channel.epoll.Epoll; -import io.netty.channel.epoll.EpollEventLoopGroup; -import io.netty.channel.epoll.EpollServerSocketChannel; -import io.netty.channel.kqueue.KQueue; -import io.netty.channel.kqueue.KQueueEventLoopGroup; -import io.netty.channel.kqueue.KQueueServerSocketChannel; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.ServerSocketChannel; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import net.minestom.server.MinecraftServer; -import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.netty.channel.ClientChannel; -import net.minestom.server.network.netty.codec.*; -import net.minestom.server.utils.validate.Check; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.net.InetSocketAddress; - -@ApiStatus.Internal -public final class NettyServer { - - public static final Logger LOGGER = LoggerFactory.getLogger(NettyServer.class); - public static final int BUFFER_SIZE = Integer.getInteger("minestom.channel-buffer-size", 65535); - - private static final WriteBufferWaterMark SERVER_WRITE_MARK = new WriteBufferWaterMark(1 << 20, - 1 << 21); - - public static final String LEGACY_PING_HANDLER_NAME = "legacy-ping"; // Read - - public static final String ENCRYPT_HANDLER_NAME = "encrypt"; // Write - public static final String DECRYPT_HANDLER_NAME = "decrypt"; // Read - - public static final String GROUPED_PACKET_HANDLER_NAME = "grouped-packet"; // Write - public static final String FRAMER_HANDLER_NAME = "framer"; // Read/write - - public static final String COMPRESSOR_HANDLER_NAME = "compressor"; // Read/write - - public static final String DECODER_HANDLER_NAME = "decoder"; // Read - public static final String ENCODER_HANDLER_NAME = "encoder"; // Write - public static final String CLIENT_CHANNEL_NAME = "handler"; // Read - - private boolean initialized = false; - - private final PacketProcessor packetProcessor; - - private EventLoopGroup boss, worker; - private ServerBootstrap bootstrap; - - private ServerSocketChannel serverChannel; - - private String address; - private int port; - - public NettyServer(@NotNull PacketProcessor packetProcessor) { - this.packetProcessor = packetProcessor; - } - - /** - * Inits the server by choosing which transport layer to use, number of threads, pipeline order, etc... - *

- * Called just before {@link #start(String, int)}. - */ - public void init() { - Check.stateCondition(initialized, "Netty server has already been initialized!"); - this.initialized = true; - - Class channel; - final int workerThreadCount = MinecraftServer.getNettyThreadCount(); - - // Find boss/worker event group - { - if (Epoll.isAvailable()) { - boss = new EpollEventLoopGroup(2); - worker = new EpollEventLoopGroup(workerThreadCount); - - channel = EpollServerSocketChannel.class; - - LOGGER.info("Using epoll"); - } else if (KQueue.isAvailable()) { - boss = new KQueueEventLoopGroup(2); - worker = new KQueueEventLoopGroup(workerThreadCount); - - channel = KQueueServerSocketChannel.class; - - LOGGER.info("Using kqueue"); - } else { - boss = new NioEventLoopGroup(2); - worker = new NioEventLoopGroup(workerThreadCount); - - channel = NioServerSocketChannel.class; - - LOGGER.info("Using NIO"); - } - } - - bootstrap = new ServerBootstrap() - .group(boss, worker) - .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, SERVER_WRITE_MARK) - .channel(channel); - - - bootstrap.childHandler(new ChannelInitializer() { - protected void initChannel(@NotNull SocketChannel ch) { - ChannelConfig config = ch.config(); - config.setOption(ChannelOption.TCP_NODELAY, true); - config.setOption(ChannelOption.SO_KEEPALIVE, true); - config.setOption(ChannelOption.SO_SNDBUF, BUFFER_SIZE); - config.setAllocator(ByteBufAllocator.DEFAULT); - - ChannelPipeline pipeline = ch.pipeline(); - - // First check should verify if the packet is a legacy ping (from 1.6 version and earlier) - // Removed from the pipeline later in LegacyPingHandler if unnecessary (>1.6) - pipeline.addLast(LEGACY_PING_HANDLER_NAME, new LegacyPingHandler()); - - // Used to bypass all the previous handlers by directly sending a framed buffer - pipeline.addLast(GROUPED_PACKET_HANDLER_NAME, new GroupedPacketHandler()); - - // Adds packetLength at start | Reads framed buffer - pipeline.addLast(FRAMER_HANDLER_NAME, new PacketFramer(packetProcessor)); - - // Reads buffer and create inbound packet - pipeline.addLast(DECODER_HANDLER_NAME, new PacketDecoder()); - - // Writes packet to buffer - pipeline.addLast(ENCODER_HANDLER_NAME, new PacketEncoder()); - - pipeline.addLast(CLIENT_CHANNEL_NAME, new ClientChannel(packetProcessor)); - } - }); - } - - /** - * Binds the address to start the server. - * - * @param address the server address - * @param port the server port - */ - public void start(@NotNull String address, int port) { - this.address = address; - this.port = port; - - // Bind address - try { - ChannelFuture cf = bootstrap.bind(new InetSocketAddress(address, port)).sync(); - - if (!cf.isSuccess()) { - throw new IllegalStateException("Unable to bind server at " + address + ":" + port); - } - - this.serverChannel = (ServerSocketChannel) cf.channel(); - } catch (InterruptedException ex) { - MinecraftServer.getExceptionManager().handleException(ex); - } - } - - public ServerSocketChannel getServerChannel() { - return serverChannel; - } - - /** - * Gets the address of the server. - * - * @return the server address, null if the address isn't bound yet - */ - @Nullable - public String getAddress() { - return address; - } - - /** - * Gets the port used by the server. - * - * @return the server port, 0 if the address isn't bound yet - */ - public int getPort() { - return port; - } - - /** - * Stops the server. - */ - public void stop() { - try { - this.boss.shutdownGracefully().sync(); - this.worker.shutdownGracefully().sync(); - this.serverChannel.closeFuture().sync(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java b/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java deleted file mode 100644 index 48bc2e0e1..000000000 --- a/src/main/java/net/minestom/server/network/netty/channel/ClientChannel.java +++ /dev/null @@ -1,90 +0,0 @@ -package net.minestom.server.network.netty.channel; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import net.minestom.server.MinecraftServer; -import net.minestom.server.entity.Player; -import net.minestom.server.network.ConnectionManager; -import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.netty.packet.InboundPacket; -import net.minestom.server.network.player.NettyPlayerConnection; -import net.minestom.server.network.player.PlayerConnection; -import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ClientChannel extends SimpleChannelInboundHandler { - - private final static Logger LOGGER = LoggerFactory.getLogger(ClientChannel.class); - - private final static ConnectionManager CONNECTION_MANAGER = MinecraftServer.getConnectionManager(); - private final PacketProcessor packetProcessor; - - public ClientChannel(@NotNull PacketProcessor packetProcessor) { - this.packetProcessor = packetProcessor; - } - - @Override - public void channelActive(@NotNull ChannelHandlerContext ctx) { - //System.out.println("CONNECTION"); - packetProcessor.createPlayerConnection(ctx); - } - - @Override - public void channelRead0(ChannelHandlerContext ctx, InboundPacket packet) { - try { - packetProcessor.process(ctx, packet); - } catch (Exception e) { - MinecraftServer.getExceptionManager().handleException(e); - } finally { - // Check remaining - final ByteBuf body = packet.getBody(); - final int packetId = packet.getPacketId(); - - final int availableBytes = body.readableBytes(); - - if (availableBytes > 0) { - final PlayerConnection playerConnection = packetProcessor.getPlayerConnection(ctx); - - LOGGER.warn("WARNING: Packet 0x{} not fully read ({} bytes left), {}", - Integer.toHexString(packetId), - availableBytes, - playerConnection); - - body.skipBytes(availableBytes); - } - } - } - - @Override - public void channelInactive(@NotNull ChannelHandlerContext ctx) { - PlayerConnection playerConnection = packetProcessor.removePlayerConnection(ctx); - if (playerConnection != null) { - // Remove the connection - playerConnection.refreshOnline(false); - Player player = playerConnection.getPlayer(); - if (player != null) { - player.remove(); - CONNECTION_MANAGER.removePlayer(playerConnection); - } - - // Release tick buffer - if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).releaseTickBuffer(); - } - } - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - if (!ctx.channel().isActive()) { - return; - } - - if (MinecraftServer.shouldProcessNettyErrors()) { - MinecraftServer.getExceptionManager().handleException(cause); - } - ctx.close(); - } -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java b/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java deleted file mode 100644 index b11cfa118..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/GroupedPacketHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToByteEncoder; -import net.minestom.server.network.netty.packet.FramedPacket; - -public class GroupedPacketHandler extends MessageToByteEncoder { - - @Override - protected void encode(ChannelHandlerContext ctx, FramedPacket msg, ByteBuf out) { - } - - @Override - protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, FramedPacket msg, boolean preferDirect) { - return msg.getBody().retainedSlice(); - } - -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/LegacyPingHandler.java b/src/main/java/net/minestom/server/network/netty/codec/LegacyPingHandler.java deleted file mode 100644 index 9631d5487..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/LegacyPingHandler.java +++ /dev/null @@ -1,184 +0,0 @@ -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelFutureListener; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import net.minestom.server.event.EventDispatcher; -import net.minestom.server.event.server.ServerListPingEvent; -import net.minestom.server.ping.ServerListPingType; -import org.jetbrains.annotations.NotNull; - -import java.nio.charset.StandardCharsets; - -public class LegacyPingHandler extends ChannelInboundHandlerAdapter { - - private ByteBuf buf; - - @Override - public void channelRead(@NotNull ChannelHandlerContext ctx, @NotNull Object object) { - final ByteBuf buf = (ByteBuf) object; - - if (this.buf != null) { - try { - handle1_6(ctx, buf); - } finally { - buf.release(); - } - return; - } - - buf.markReaderIndex(); - - boolean flag = true; - - try { - if (buf.readUnsignedByte() == 0xFE) { - int length = buf.readableBytes(); - - switch (length) { - case 0: - if (trySendResponse(ServerListPingType.LEGACY_UNVERSIONED, ctx)) return; - break; - case 1: - if (buf.readUnsignedByte() != 1) return; - - if (trySendResponse(ServerListPingType.LEGACY_VERSIONED, ctx)) return; - break; - default: - if (buf.readUnsignedByte() != 0x01 || buf.readUnsignedByte() != 0xFA) return; - - handle1_6(ctx, buf); - break; - } - - buf.release(); - flag = false; - } - } finally { - if (flag) { - buf.resetReaderIndex(); - ctx.channel().pipeline().remove("legacy-ping"); - ctx.fireChannelRead(object); - } - } - } - - private void handle1_6(ChannelHandlerContext ctx, ByteBuf part) { - ByteBuf buf = this.buf; - - if (buf == null) { - this.buf = buf = ctx.alloc().buffer(); - buf.markReaderIndex(); - } else { - buf.resetReaderIndex(); - } - - buf.writeBytes(part); - - if (!buf.isReadable(Short.BYTES + Short.BYTES + Byte.BYTES + Short.BYTES + Integer.BYTES)) { - return; - } - - final String s = readLegacyString(buf); - - if (s == null) { - return; - } - - if (!s.equals("MC|PingHost")) { - removeHandler(ctx); - return; - } - - if (!buf.isReadable(Short.BYTES) || !buf.isReadable(buf.readShort())) { - return; - } - - int protocolVersion = buf.readByte(); - - if (readLegacyString(buf) == null) { - removeHandler(ctx); - return; - } - - buf.skipBytes(4); // port - - if (buf.isReadable()) { - removeHandler(ctx); - return; - } - - buf.release(); - - this.buf = null; - - trySendResponse(ServerListPingType.LEGACY_VERSIONED, ctx); - } - - private void removeHandler(ChannelHandlerContext ctx) { - ByteBuf buf = this.buf; - this.buf = null; - - buf.resetReaderIndex(); - ctx.pipeline().remove(this); - ctx.fireChannelRead(buf); - } - - @Override - public void handlerRemoved(ChannelHandlerContext ctx) { - if (this.buf != null) { - this.buf.release(); - this.buf = null; - } - } - - /** - * Calls a {@link ServerListPingEvent} and sends the response, if the event was not cancelled. - * - * @param version the version - * @param ctx the context - * @return {@code true} if the response was cancelled, {@code false} otherwise - */ - private static boolean trySendResponse(@NotNull ServerListPingType version, @NotNull ChannelHandlerContext ctx) { - final ServerListPingEvent event = new ServerListPingEvent(version); - EventDispatcher.call(event); - - if (event.isCancelled()) { - return true; - } else { - // get the response string - String s = version.getPingResponse(event.getResponseData()); - - // create the buffer - ByteBuf response = Unpooled.buffer(); - response.writeByte(255); - - final char[] chars = s.toCharArray(); - - response.writeShort(chars.length); - - for (char c : chars) { - response.writeChar(c); - } - - // write the buffer - ctx.pipeline().firstContext().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); - - return false; - } - } - - private static String readLegacyString(ByteBuf buf) { - int size = buf.readShort() * Character.BYTES; - if (!buf.isReadable(size)) { - return null; - } - - final String result = buf.toString(buf.readerIndex(), size, StandardCharsets.UTF_16BE); - buf.skipBytes(size); - - return result; - } -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/PacketCompressor.java b/src/main/java/net/minestom/server/network/netty/codec/PacketCompressor.java deleted file mode 100644 index 4ba5b0ef0..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/PacketCompressor.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (2020) [artem] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageCodec; -import io.netty.handler.codec.DecoderException; -import net.minestom.server.utils.PacketUtils; -import net.minestom.server.utils.Utils; - -import java.util.List; -import java.util.zip.Deflater; -import java.util.zip.Inflater; - -public class PacketCompressor extends ByteToMessageCodec { - - private final static int MAX_SIZE = 2097152; - - private final int threshold; - - private final Deflater deflater = new Deflater(); - private final Inflater inflater = new Inflater(); - - public PacketCompressor(int threshold) { - this.threshold = threshold; - } - - @Override - protected void encode(ChannelHandlerContext ctx, ByteBuf from, ByteBuf to) { - PacketUtils.compressBuffer(deflater, from, to); - } - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - if (in.readableBytes() != 0) { - final int claimedUncompressedSize = Utils.readVarInt(in); - - if (claimedUncompressedSize == 0) { - out.add(in.readRetainedSlice(in.readableBytes())); - } else { - if (claimedUncompressedSize < this.threshold) { - throw new DecoderException("Badly compressed packet - size of " + claimedUncompressedSize + " is below server threshold of " + this.threshold); - } - - if (claimedUncompressedSize > MAX_SIZE) { - throw new DecoderException("Badly compressed packet - size of " + claimedUncompressedSize + " is larger than protocol maximum of " + MAX_SIZE); - } - - // TODO optimize to do not initialize arrays each time - - byte[] input = new byte[in.readableBytes()]; - in.readBytes(input); - - inflater.setInput(input); - byte[] output = new byte[claimedUncompressedSize]; - inflater.inflate(output); - inflater.reset(); - - out.add(Unpooled.wrappedBuffer(output)); - } - } - } -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/PacketDecoder.java b/src/main/java/net/minestom/server/network/netty/codec/PacketDecoder.java deleted file mode 100644 index 3f5f669bc..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/PacketDecoder.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; -import net.minestom.server.network.netty.packet.InboundPacket; -import net.minestom.server.utils.Utils; - -import java.util.List; - -public class PacketDecoder extends ByteToMessageDecoder { - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List list) { - if (buf.readableBytes() > 0) { - final int packetId = Utils.readVarInt(buf); - list.add(new InboundPacket(packetId, buf)); - } - } -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/PacketEncoder.java b/src/main/java/net/minestom/server/network/netty/codec/PacketEncoder.java deleted file mode 100644 index 85781bc4d..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/PacketEncoder.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToByteEncoder; -import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.PacketUtils; - -public class PacketEncoder extends MessageToByteEncoder { - - @Override - protected void encode(ChannelHandlerContext ctx, ServerPacket packet, ByteBuf buf) { - PacketUtils.writePacket(buf, packet); - } - -} diff --git a/src/main/java/net/minestom/server/network/netty/codec/PacketFramer.java b/src/main/java/net/minestom/server/network/netty/codec/PacketFramer.java deleted file mode 100644 index d0470e7cf..000000000 --- a/src/main/java/net/minestom/server/network/netty/codec/PacketFramer.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.minestom.server.network.netty.codec; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageCodec; -import io.netty.handler.codec.CorruptedFrameException; -import net.minestom.server.MinecraftServer; -import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.PacketUtils; -import net.minestom.server.utils.Utils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -public class PacketFramer extends ByteToMessageCodec { - - public final static Logger LOGGER = LoggerFactory.getLogger(PacketFramer.class); - - private final PacketProcessor packetProcessor; - - public PacketFramer(PacketProcessor packetProcessor) { - this.packetProcessor = packetProcessor; - } - - @Override - protected void encode(ChannelHandlerContext ctx, ByteBuf from, ByteBuf to) { - PacketUtils.frameBuffer(from, to); - } - - @Override - protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List out) { - buf.markReaderIndex(); - - for (int i = 0; i < 3; ++i) { - if (!buf.isReadable()) { - buf.resetReaderIndex(); - return; - } - - final byte b = buf.readByte(); - - if (b >= 0) { - buf.resetReaderIndex(); - - final int packetSize = Utils.readVarInt(buf); - - // Max packet size check - if (packetSize >= MinecraftServer.getMaxPacketSize()) { - final PlayerConnection playerConnection = packetProcessor.getPlayerConnection(ctx); - if (playerConnection != null) { - final String identifier = playerConnection.getIdentifier(); - LOGGER.warn("An user ({}) sent a packet over the maximum size ({})", - identifier, packetSize); - } else { - LOGGER.warn("An unregistered user sent a packet over the maximum size ({})", packetSize); - } - ctx.close(); - } - - if (buf.readableBytes() < packetSize) { - buf.resetReaderIndex(); - return; - } - - out.add(buf.readRetainedSlice(packetSize)); - return; - } - } - - throw new CorruptedFrameException("length wider than 21-bit"); - } -} diff --git a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java b/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java index 8197301ff..17fe194a7 100644 --- a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java +++ b/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java @@ -1,22 +1,22 @@ package net.minestom.server.network.netty.packet; -import io.netty.buffer.ByteBuf; import org.jetbrains.annotations.NotNull; +import java.nio.ByteBuffer; + /** * Represents a packet which is already framed. (packet id+payload) + optional compression * Can be used if you want to send the exact same buffer to multiple clients without processing it more than once. */ public class FramedPacket { - private final ByteBuf body; + private final ByteBuffer body; - public FramedPacket(@NotNull ByteBuf body) { + public FramedPacket(@NotNull ByteBuffer body) { this.body = body; } - @NotNull - public ByteBuf getBody() { + public @NotNull ByteBuffer getBody() { return body; } } diff --git a/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java b/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java index 782c6731d..51ae25550 100644 --- a/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java +++ b/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java @@ -1,14 +1,14 @@ package net.minestom.server.network.netty.packet; -import io.netty.buffer.ByteBuf; import org.jetbrains.annotations.NotNull; +import java.nio.ByteBuffer; + public class InboundPacket { - private final int packetId; - private final ByteBuf body; + private final ByteBuffer body; - public InboundPacket(int id, @NotNull ByteBuf body) { + public InboundPacket(int id, @NotNull ByteBuffer body) { this.packetId = id; this.body = body; } @@ -17,8 +17,7 @@ public class InboundPacket { return packetId; } - @NotNull - public ByteBuf getBody() { + public @NotNull ByteBuffer getBody() { return body; } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java index 739c02f0a..5fc4b7e2f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java @@ -1,7 +1,5 @@ package net.minestom.server.network.packet.server.play; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.Int2LongRBTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minestom.server.MinecraftServer; @@ -15,22 +13,17 @@ import net.minestom.server.tag.Tag; import net.minestom.server.utils.Utils; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; -import net.minestom.server.utils.cache.CacheablePacket; -import net.minestom.server.utils.cache.TemporaryPacketCache; import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jglrxavpok.hephaistos.nbt.NBTCompound; import org.jglrxavpok.hephaistos.nbt.NBTException; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.*; -import java.util.concurrent.TimeUnit; -public class ChunkDataPacket implements ServerPacket, CacheablePacket { - - public static final TemporaryPacketCache CACHE = new TemporaryPacketCache(5, TimeUnit.MINUTES); +public class ChunkDataPacket implements ServerPacket { public Biome[] biomes; public int chunkX, chunkZ; @@ -42,22 +35,13 @@ public class ChunkDataPacket implements ServerPacket, CacheablePacket { private static final int MAX_BITS_PER_ENTRY = 16; private static final int MAX_BUFFER_SIZE = (Short.BYTES + Byte.BYTES + 5 * Byte.BYTES + (4096 * MAX_BITS_PER_ENTRY / Long.SIZE * Long.BYTES)) * CHUNK_SECTION_COUNT + 256 * Integer.BYTES; - // Cacheable data - private final UUID identifier; - private final long timestamp; /** * Heightmaps NBT, as read from raw packet data. * Only filled by #read, and unused at the moment. */ public NBTCompound heightmapsNBT; - private ChunkDataPacket() { - this(new UUID(0, 0), 0); - } - - public ChunkDataPacket(@Nullable UUID identifier, long timestamp) { - this.identifier = identifier; - this.timestamp = timestamp; + public ChunkDataPacket() { } @Override @@ -65,7 +49,7 @@ public class ChunkDataPacket implements ServerPacket, CacheablePacket { writer.writeInt(chunkX); writer.writeInt(chunkZ); - ByteBuf blocks = Unpooled.buffer(MAX_BUFFER_SIZE); + ByteBuffer blocks = ByteBuffer.allocate(MAX_BUFFER_SIZE); Int2LongRBTreeMap maskMap = new Int2LongRBTreeMap(); @@ -120,9 +104,8 @@ public class ChunkDataPacket implements ServerPacket, CacheablePacket { } // Data - writer.writeVarInt(blocks.writerIndex()); - writer.write(blocks); - blocks.release(); + writer.writeVarInt(blocks.position()); + writer.write(blocks.flip()); // Block entities if (entries == null || entries.isEmpty()) { @@ -244,19 +227,4 @@ public class ChunkDataPacket implements ServerPacket, CacheablePacket { public int getId() { return ServerPacketIdentifier.CHUNK_DATA; } - - @Override - public @NotNull TemporaryPacketCache getCache() { - return CACHE; - } - - @Override - public UUID getIdentifier() { - return identifier; - } - - @Override - public long getTimestamp() { - return timestamp; - } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java index b5ba54808..cdffdf9d9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java @@ -4,19 +4,12 @@ import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; -import net.minestom.server.utils.cache.CacheablePacket; -import net.minestom.server.utils.cache.TemporaryPacketCache; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -public class UpdateLightPacket implements ServerPacket, CacheablePacket { - - public static final TemporaryPacketCache CACHE = new TemporaryPacketCache(5, TimeUnit.MINUTES); +public class UpdateLightPacket implements ServerPacket { public int chunkX; public int chunkZ; @@ -32,21 +25,10 @@ public class UpdateLightPacket implements ServerPacket, CacheablePacket { public List skyLight = new ArrayList<>(); public List blockLight = new ArrayList<>(); - // Cacheable data - private final UUID identifier; - private final long timestamp; - /** * Default constructor, required for reflection operations. - * This one will make a packet that is not meant to be cached */ public UpdateLightPacket() { - this(UUID.randomUUID(), Long.MAX_VALUE); - } - - public UpdateLightPacket(@Nullable UUID identifier, long timestamp) { - this.identifier = identifier; - this.timestamp = timestamp; } @Override @@ -118,19 +100,4 @@ public class UpdateLightPacket implements ServerPacket, CacheablePacket { public int getId() { return ServerPacketIdentifier.UPDATE_LIGHT; } - - @Override - public @NotNull TemporaryPacketCache getCache() { - return CACHE; - } - - @Override - public UUID getIdentifier() { - return identifier; - } - - @Override - public long getTimestamp() { - return timestamp; - } } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 9963b84c8..9ecfc5544 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -1,36 +1,36 @@ package net.minestom.server.network.player; -import io.netty.buffer.ByteBuf; -import io.netty.channel.Channel; -import io.netty.channel.ChannelFuture; -import io.netty.channel.socket.SocketChannel; import net.kyori.adventure.translation.GlobalTranslator; import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.entity.PlayerSkin; -import net.minestom.server.extras.mojangAuth.Decrypter; -import net.minestom.server.extras.mojangAuth.Encrypter; -import net.minestom.server.extras.mojangAuth.MojangCrypt; import net.minestom.server.network.ConnectionState; -import net.minestom.server.network.netty.NettyServer; -import net.minestom.server.network.netty.codec.PacketCompressor; +import net.minestom.server.network.PacketProcessor; import net.minestom.server.network.netty.packet.FramedPacket; +import net.minestom.server.network.netty.packet.InboundPacket; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.login.SetCompressionPacket; -import net.minestom.server.utils.BufUtils; +import net.minestom.server.network.socket.Server; +import net.minestom.server.network.socket.Worker; import net.minestom.server.utils.PacketUtils; -import net.minestom.server.utils.cache.CacheablePacket; +import net.minestom.server.utils.Utils; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.crypto.SecretKey; +import java.io.IOException; import java.net.SocketAddress; +import java.nio.BufferOverflowException; +import java.nio.BufferUnderflowException; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.zip.DataFormatException; /** * Represents a networking connection with Netty. @@ -43,8 +43,8 @@ public class NettyPlayerConnection extends PlayerConnection { private SocketAddress remoteAddress; - private boolean encrypted = false; - private boolean compressed = false; + private volatile boolean encrypted = false; + private volatile boolean compressed = false; //Could be null. Only used for Mojang Auth private byte[] nonce = new byte[4]; @@ -64,12 +64,89 @@ public class NettyPlayerConnection extends PlayerConnection { private PlayerSkin bungeeSkin; private final Object tickBufferLock = new Object(); - private volatile ByteBuf tickBuffer = BufUtils.direct(); + private final ByteBuffer tickBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); + private ByteBuffer cacheBuffer; public NettyPlayerConnection(@NotNull SocketChannel channel) { super(); this.channel = channel; - this.remoteAddress = channel.remoteAddress(); + try { + this.remoteAddress = channel.getRemoteAddress(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void processPackets(Worker.Context workerContext, PacketProcessor packetProcessor) { + final var readBuffer = workerContext.readBuffer; + final int limit = readBuffer.limit(); + // Read all packets + while (readBuffer.remaining() > 0) { + readBuffer.mark(); // Mark the beginning of the packet + try { + // Read packet + final int packetLength = Utils.readVarInt(readBuffer); + final int packetEnd = readBuffer.position() + packetLength; + if (packetEnd > readBuffer.limit()) { + // Integrity fail + throw new BufferUnderflowException(); + } + + readBuffer.limit(packetEnd); // Ensure that the reader doesn't exceed packet bound + + // Read protocol + var content = workerContext.contentBuffer.clear(); + { + if (!compressed) { + // Compression disabled, payload is following + content = readBuffer; + } else { + final int dataLength = Utils.readVarInt(readBuffer); + if (dataLength == 0) { + // Data is too small to be compressed, payload is following + content = readBuffer; + } else { + // Decompress to content buffer + try { + final var inflater = workerContext.inflater; + inflater.setInput(readBuffer); + inflater.inflate(content); + inflater.reset(); + } catch (DataFormatException e) { + e.printStackTrace(); + } + content.flip(); + } + } + } + + // Process packet + final int packetId = Utils.readVarInt(content); + try { + packetProcessor.process(this, new InboundPacket(packetId, content)); + } catch (Exception e) { + // Error while reading the packet + e.printStackTrace(); + break; + } + + // Return to original state (before writing) + readBuffer.limit(limit).position(packetEnd); + } catch (BufferUnderflowException e) { + readBuffer.reset(); + this.cacheBuffer = ByteBuffer.allocateDirect(readBuffer.remaining()); + this.cacheBuffer.put(readBuffer).flip(); + break; + } + } + } + + public void consumeCache(ByteBuffer buffer) { + if (cacheBuffer == null) { + return; + } + buffer.put(cacheBuffer); + this.cacheBuffer = null; } /** @@ -81,10 +158,7 @@ public class NettyPlayerConnection extends PlayerConnection { public void setEncryptionKey(@NotNull SecretKey secretKey) { Check.stateCondition(encrypted, "Encryption is already enabled!"); this.encrypted = true; - channel.pipeline().addBefore(NettyServer.GROUPED_PACKET_HANDLER_NAME, NettyServer.DECRYPT_HANDLER_NAME, - new Decrypter(MojangCrypt.getCipher(2, secretKey))); - channel.pipeline().addBefore(NettyServer.GROUPED_PACKET_HANDLER_NAME, NettyServer.ENCRYPT_HANDLER_NAME, - new Encrypter(MojangCrypt.getCipher(1, secretKey))); + // TODO } /** @@ -96,11 +170,8 @@ public class NettyPlayerConnection extends PlayerConnection { Check.stateCondition(compressed, "Compression is already enabled!"); final int threshold = MinecraftServer.getCompressionThreshold(); Check.stateCondition(threshold == 0, "Compression cannot be enabled because the threshold is equal to 0"); - this.compressed = true; writeAndFlush(new SetCompressionPacket(threshold)); - channel.pipeline().addAfter(NettyServer.FRAMER_HANDLER_NAME, NettyServer.COMPRESSOR_HANDLER_NAME, - new PacketCompressor(threshold)); } /** @@ -112,21 +183,12 @@ public class NettyPlayerConnection extends PlayerConnection { */ @Override public void sendPacket(@NotNull ServerPacket serverPacket, boolean skipTranslating) { - if (!channel.isActive()) + if (!channel.isConnected()) return; - if (shouldSendPacket(serverPacket)) { if (getPlayer() != null) { // Flush happen during #update() - if (serverPacket instanceof CacheablePacket && MinecraftServer.hasPacketCaching()) { - synchronized (tickBufferLock) { - if (tickBuffer.refCnt() == 0) - return; - CacheablePacket.writeCache(tickBuffer, serverPacket); - } - } else { - write(serverPacket, skipTranslating); - } + write(serverPacket, skipTranslating); } else { // Player is probably not logged yet writeAndFlush(serverPacket); @@ -141,93 +203,65 @@ public class NettyPlayerConnection extends PlayerConnection { public void write(@NotNull Object message, boolean skipTranslating) { if (message instanceof FramedPacket) { final FramedPacket framedPacket = (FramedPacket) message; - synchronized (tickBufferLock) { - if (tickBuffer.refCnt() == 0) - return; - final ByteBuf body = framedPacket.getBody(); - tickBuffer.writeBytes(body, body.readerIndex(), body.readableBytes()); - } + attemptWrite(framedPacket.getBody()); return; } else if (message instanceof ServerPacket) { ServerPacket serverPacket = (ServerPacket) message; - if ((MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && getPlayer() != null && serverPacket instanceof ComponentHoldingServerPacket) { serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); } - synchronized (tickBufferLock) { - if (tickBuffer.refCnt() == 0) - return; PacketUtils.writeFramedPacket(tickBuffer, serverPacket); } return; - } else if (message instanceof ByteBuf) { - synchronized (tickBufferLock) { - if (tickBuffer.refCnt() == 0) - return; - tickBuffer.writeBytes((ByteBuf) message); - } + } else if (message instanceof ByteBuffer) { + attemptWrite((ByteBuffer) message); return; } throw new UnsupportedOperationException("type " + message.getClass() + " is not supported"); } - public void writeAndFlush(@NotNull Object message) { - writeWaitingPackets(); - ChannelFuture channelFuture = channel.writeAndFlush(message); - - if (MinecraftServer.shouldProcessNettyErrors()) { - channelFuture.addListener(future -> { - if (!future.isSuccess() && channel.isActive()) { - MinecraftServer.getExceptionManager().handleException(future.cause()); - } - }); - } + public void writeAndFlush(@NotNull ServerPacket packet) { + attemptWrite(PacketUtils.createFramedPacket(packet)); + flush(); } - public void writeWaitingPackets() { - if (tickBuffer.writerIndex() == 0) { - // Nothing to write - return; - } - - // Retrieve safe copy - final ByteBuf copy; + public void attemptWrite(ByteBuffer buffer) { synchronized (tickBufferLock) { - if (tickBuffer.refCnt() == 0) - return; - copy = tickBuffer; - tickBuffer = tickBuffer.alloc().buffer(tickBuffer.writerIndex()); - } - - // Write copied buffer to netty - ChannelFuture channelFuture = channel.write(new FramedPacket(copy)); - channelFuture.addListener(future -> copy.release()); - - // Netty debug - if (MinecraftServer.shouldProcessNettyErrors()) { - channelFuture.addListener(future -> { - if (!future.isSuccess() && channel.isActive()) { - MinecraftServer.getExceptionManager().handleException(future.cause()); + try { + this.tickBuffer.put(buffer); + } catch (BufferOverflowException e) { + try { + this.channel.write(tickBuffer); + this.channel.write(buffer); + } catch (IOException ex) { + MinecraftServer.getExceptionManager().handleException(ex); + } finally { + this.tickBuffer.clear(); } - }); - } - } - - public void flush() { - final int bufferSize = tickBuffer.writerIndex(); - if (bufferSize > 0) { - if (channel.isActive()) { - writeWaitingPackets(); - channel.flush(); } } } - @NotNull + public void flush() { + if (tickBuffer.remaining() == 0) { + // Nothing to write + return; + } + // Retrieve safe copy + synchronized (tickBufferLock) { + try { + channel.write(tickBuffer); + } catch (IOException e) { + MinecraftServer.getExceptionManager().handleException(e); + } + this.tickBuffer.clear(); + } + } + @Override - public SocketAddress getRemoteAddress() { + public @NotNull SocketAddress getRemoteAddress() { return remoteAddress; } @@ -246,11 +280,14 @@ public class NettyPlayerConnection extends PlayerConnection { @Override public void disconnect() { refreshOnline(false); - this.channel.close(); + try { + this.channel.close(); + } catch (IOException e) { + e.printStackTrace(); + } } - @NotNull - public Channel getChannel() { + public @NotNull SocketChannel getChannel() { return channel; } @@ -261,8 +298,7 @@ public class NettyPlayerConnection extends PlayerConnection { * * @return the username given by the client, unchecked */ - @Nullable - public String getLoginUsername() { + public @Nullable String getLoginUsername() { return loginUsername; } @@ -323,9 +359,7 @@ public class NettyPlayerConnection extends PlayerConnection { this.protocolVersion = protocolVersion; } - - @Nullable - public UUID getBungeeUuid() { + public @Nullable UUID getBungeeUuid() { return bungeeUuid; } @@ -333,8 +367,7 @@ public class NettyPlayerConnection extends PlayerConnection { this.bungeeUuid = bungeeUuid; } - @Nullable - public PlayerSkin getBungeeSkin() { + public @Nullable PlayerSkin getBungeeSkin() { return bungeeSkin; } @@ -367,8 +400,7 @@ public class NettyPlayerConnection extends PlayerConnection { * @param messageId the message id * @return the channel linked to the message id, null if not found */ - @Nullable - public String getPluginRequestChannel(int messageId) { + public @Nullable String getPluginRequestChannel(int messageId) { return pluginRequestMap.get(messageId); } @@ -382,9 +414,6 @@ public class NettyPlayerConnection extends PlayerConnection { } public void releaseTickBuffer() { - synchronized (tickBufferLock) { - tickBuffer.release(); - } } public byte[] getNonce() { diff --git a/src/main/java/net/minestom/server/network/player/PlayerConnection.java b/src/main/java/net/minestom/server/network/player/PlayerConnection.java index 6fc228b73..28feb23b5 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerConnection.java @@ -135,7 +135,7 @@ public abstract class PlayerConnection { * @return the server address used */ public @Nullable String getServerAddress() { - return MinecraftServer.getNettyServer().getAddress(); + return MinecraftServer.getServer().getAddress(); } @@ -147,7 +147,7 @@ public abstract class PlayerConnection { * @return the server port used */ public int getServerPort() { - return MinecraftServer.getNettyServer().getPort(); + return MinecraftServer.getServer().getPort(); } /** diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java new file mode 100644 index 000000000..b5c98dbf9 --- /dev/null +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -0,0 +1,97 @@ +package net.minestom.server.network.socket; + +import net.minestom.server.network.PacketProcessor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class Server { + public static final Logger LOGGER = LoggerFactory.getLogger(Server.class); + public static final int WORKER_COUNT = Integer.getInteger("minestom.workers", + Runtime.getRuntime().availableProcessors() * 2); + public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 262143); + public static final int MAX_PACKET_SIZE = 2097151; // 3 bytes var-int + public static final boolean NO_DELAY = true; + + private volatile boolean stop; + + private final List workers = new ArrayList<>(WORKER_COUNT); + private int index; + + private ServerSocketChannel serverSocket; + private String address; + private int port; + + public Server(PacketProcessor packetProcessor) throws IOException { + // Create all workers + for (int i = 0; i < WORKER_COUNT; i++) { + this.workers.add(new Worker(this, packetProcessor)); + } + } + + public void start(SocketAddress address) throws IOException { + Selector selector = Selector.open(); + this.serverSocket = ServerSocketChannel.open(); + serverSocket.bind(address); + serverSocket.configureBlocking(false); + serverSocket.register(selector, SelectionKey.OP_ACCEPT); + serverSocket.socket().setReceiveBufferSize(SOCKET_BUFFER_SIZE); + + LOGGER.info("Server starting, wait for connections"); + new Thread(() -> { + while (!stop) { + // Busy wait for connections + try { + serverTick(selector, serverSocket); + } catch (IOException e) { + e.printStackTrace(); + } + } + }).start(); + } + + public boolean isOpen() { + return !stop; + } + + public void stop() { + this.stop = true; + } + + public String getAddress() { + return address; + } + + public int getPort() { + return port; + } + + private void serverTick(Selector selector, ServerSocketChannel socketChannel) throws IOException { + selector.select(); + Set selectedKeys = selector.selectedKeys(); + for (SelectionKey key : selectedKeys) { + if (key.isAcceptable()) { + // Register socket and forward to thread + Worker thread = findWorker(); + final SocketChannel client = socketChannel.accept(); + thread.receiveConnection(client); + LOGGER.info("new connection: " + client); + } + } + selectedKeys.clear(); + } + + private Worker findWorker() { + this.index = ++index % WORKER_COUNT; + return workers.get(index); + } +} diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java new file mode 100644 index 000000000..9e89d5396 --- /dev/null +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -0,0 +1,149 @@ +package net.minestom.server.network.socket; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.entity.Player; +import net.minestom.server.network.PacketProcessor; +import net.minestom.server.network.player.NettyPlayerConnection; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.SocketChannel; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +public class Worker { + private final Map connectionMap = new ConcurrentHashMap<>(); + private final Selector selector = Selector.open(); + private final PacketProcessor packetProcessor; + + public Worker(Server server, PacketProcessor packetProcessor) throws IOException { + this.packetProcessor = packetProcessor; + Thread.start(server, this::threadTick); + } + + private void threadTick(Context workerContext) { + try { + selector.select(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + Set selectedKeys = selector.selectedKeys(); + for (SelectionKey key : selectedKeys) { + SocketChannel channel = (SocketChannel) key.channel(); + if (!channel.isOpen()) { + continue; + } + if (!key.isReadable()) { + // We only care about read + continue; + } + var connection = connectionMap.get(channel); + try { + ByteBuffer readBuffer = workerContext.readBuffer; + // Consume last incomplete packet + connection.consumeCache(readBuffer); + + // Read socket + if (channel.read(readBuffer) == -1) { + // EOS + throw new IOException("Disconnected"); + } + // Process data + readBuffer.flip(); + connection.processPackets(workerContext, packetProcessor); + } catch (IOException e) { + e.printStackTrace(); + try { + disconnect(connection, channel); + } catch (IOException ioException) { + ioException.printStackTrace(); + } + } finally { + workerContext.clearBuffers(); + } + } + selectedKeys.clear(); + } + + public void receiveConnection(SocketChannel channel) throws IOException { + var connection = new NettyPlayerConnection(channel); + this.connectionMap.put(channel, connection); + register(channel); + this.selector.wakeup(); + } + + private void register(SocketChannel channel) throws IOException { + channel.configureBlocking(false); + channel.register(selector, SelectionKey.OP_READ); + var socket = channel.socket(); + socket.setSendBufferSize(Server.SOCKET_BUFFER_SIZE); + socket.setReceiveBufferSize(Server.SOCKET_BUFFER_SIZE); + socket.setTcpNoDelay(Server.NO_DELAY); + } + + private void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { + // Client close + channel.close(); + connectionMap.remove(channel); + // Remove the connection + connection.refreshOnline(false); + Player player = connection.getPlayer(); + if (player != null) { + player.remove(); + MinecraftServer.getConnectionManager().removePlayer(connection); + } + } + + static class Thread extends java.lang.Thread { + private static final AtomicInteger COUNTER = new AtomicInteger(); + + private Thread(Runnable runnable) { + super(null, runnable, "worker-" + COUNTER.getAndIncrement()); + } + + protected static void start(Server server, Consumer runnable) { + new Thread(() -> { + Context workerContext = new Context(); + while (server.isOpen()) { + try { + runnable.accept(workerContext); + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + } + + /** + * Contains objects that we can be shared across all the connection of a {@link Worker worker}. + */ + public static final class Context { + public final ByteBuffer readBuffer = allocate(Server.SOCKET_BUFFER_SIZE); + public final ByteBuffer writeBuffer = allocate(Server.SOCKET_BUFFER_SIZE); + /** + * Stores a single packet payload to be read. + */ + public final ByteBuffer contentBuffer = allocate(Server.MAX_PACKET_SIZE); + public final Deflater deflater = new Deflater(); + public final Inflater inflater = new Inflater(); + + public void clearBuffers() { + this.readBuffer.clear(); + this.writeBuffer.clear(); + } + + private static ByteBuffer allocate(int size) { + return ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); + } + } +} diff --git a/src/main/java/net/minestom/server/ping/ServerListPingType.java b/src/main/java/net/minestom/server/ping/ServerListPingType.java index 3da6e89f0..1a9e943cf 100644 --- a/src/main/java/net/minestom/server/ping/ServerListPingType.java +++ b/src/main/java/net/minestom/server/ping/ServerListPingType.java @@ -75,13 +75,13 @@ public enum ServerListPingType { * @see OpenToLAN */ public static @NotNull String getOpenToLANPing(@NotNull ResponseData data) { - return String.format(LAN_PING_FORMAT, SECTION.serialize(data.getDescription()), MinecraftServer.getNettyServer().getPort()); + return String.format(LAN_PING_FORMAT, SECTION.serialize(data.getDescription()), MinecraftServer.getServer().getPort()); } /** * Creates a legacy ping response for client versions below the Netty rewrite (1.6-). * - * @param data the response data + * @param data the response data * @param supportsVersions if the client supports recieving the versions of the server * @return the response */ @@ -99,7 +99,7 @@ public enum ServerListPingType { /** * Creates a modern ping response for client versions above the Netty rewrite (1.7+). * - * @param data the response data + * @param data the response data * @param supportsFullRgb if the client supports full RGB * @return the response */ diff --git a/src/main/java/net/minestom/server/utils/BufUtils.java b/src/main/java/net/minestom/server/utils/BufUtils.java deleted file mode 100644 index d87734a1c..000000000 --- a/src/main/java/net/minestom/server/utils/BufUtils.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.minestom.server.utils; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.PooledByteBufAllocator; - -public class BufUtils { - - private static final PooledByteBufAllocator alloc = PooledByteBufAllocator.DEFAULT; - - public static ByteBuf direct() { - return alloc.ioBuffer(); - } -} diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index a0e4e7f5b..cd8dc753c 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -1,6 +1,5 @@ package net.minestom.server.utils; -import io.netty.buffer.ByteBuf; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.ForwardingAudience; import net.minestom.server.MinecraftServer; @@ -23,11 +22,10 @@ import java.util.Collection; import java.util.zip.Deflater; /** - * Utils class for packets. Including writing a {@link ServerPacket} into a {@link ByteBuf} + * Utils class for packets. Including writing a {@link ServerPacket} into a {@link ByteBuffer} * for network processing. */ public final class PacketUtils { - private static final PacketListenerManager PACKET_LISTENER_MANAGER = MinecraftServer.getPacketListenerManager(); private static final ThreadLocal COMPRESSOR = ThreadLocal.withInitial(Deflater::new); @@ -91,9 +89,8 @@ public final class PacketUtils { // Send grouped packet... final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); if (success) { - final ByteBuf finalBuffer = createFramedPacket(packet); + final ByteBuffer finalBuffer = createFramedPacket(packet); final FramedPacket framedPacket = new FramedPacket(finalBuffer); - // Send packet to all players for (Player player : players) { if (!player.isOnline()) @@ -110,7 +107,6 @@ public final class PacketUtils { playerConnection.sendPacket(packet); } } - finalBuffer.release(); // Release last reference } } else { // Write the same packet for each individual players @@ -118,7 +114,6 @@ public final class PacketUtils { // Verify if the player should receive the packet if (playerValidator != null && !playerValidator.isValid(player)) continue; - final PlayerConnection playerConnection = player.getPlayerConnection(); playerConnection.sendPacket(packet, false); } @@ -136,23 +131,14 @@ public final class PacketUtils { } /** - * Writes a {@link ServerPacket} into a {@link ByteBuf}. + * Writes a {@link ServerPacket} into a {@link ByteBuffer}. * * @param buf the recipient of {@code packet} * @param packet the packet to write into {@code buf} */ - public static void writePacket(@NotNull ByteBuf buf, @NotNull ServerPacket packet) { + public static void writePacket(@NotNull ByteBuffer buf, @NotNull ServerPacket packet) { Utils.writeVarInt(buf, packet.getId()); - writePacketPayload(buf, packet); - } - - /** - * Writes a packet payload. - * - * @param packet the packet to write - */ - private static void writePacketPayload(@NotNull ByteBuf buffer, @NotNull ServerPacket packet) { - BinaryWriter writer = new BinaryWriter(buffer); + BinaryWriter writer = new BinaryWriter(buf); try { packet.write(writer); } catch (Exception e) { @@ -160,96 +146,42 @@ public final class PacketUtils { } } - /** - * Frames a buffer for it to be understood by a Minecraft client. - *

- * The content of {@code packetBuffer} can be either a compressed or uncompressed packet buffer, - * it depends of it the client did receive a {@link net.minestom.server.network.packet.server.login.SetCompressionPacket} packet before. - * - * @param packetBuffer the buffer containing compressed or uncompressed packet data - * @param frameTarget the buffer which will receive the framed version of {@code from} - */ - public static void frameBuffer(@NotNull ByteBuf packetBuffer, @NotNull ByteBuf frameTarget) { - final int packetSize = packetBuffer.readableBytes(); - final int headerSize = Utils.getVarIntSize(packetSize); - if (headerSize > 3) { - throw new IllegalStateException("Unable to fit " + headerSize + " into 3"); - } - - frameTarget.ensureWritable(packetSize + headerSize); - - Utils.writeVarInt(frameTarget, packetSize); - frameTarget.writeBytes(packetBuffer, packetBuffer.readerIndex(), packetSize); - } - - /** - * Compress using zlib the content of a packet. - *

- * {@code packetBuffer} needs to be the packet content without any header (if you want to use it to write a Minecraft packet). - * - * @param deflater the deflater for zlib compression - * @param packetBuffer the buffer containing all the packet fields - * @param compressionTarget the buffer which will receive the compressed version of {@code packetBuffer} - */ - public static void compressBuffer(@NotNull Deflater deflater, @NotNull ByteBuf packetBuffer, @NotNull ByteBuf compressionTarget) { - final int packetLength = packetBuffer.readableBytes(); - final boolean compression = packetLength > MinecraftServer.getCompressionThreshold(); - Utils.writeVarInt(compressionTarget, compression ? packetLength : 0); - if (compression) { - compress(deflater, packetBuffer, compressionTarget); - } else { - compressionTarget.writeBytes(packetBuffer); - } - } - - private static void compress(@NotNull Deflater deflater, @NotNull ByteBuf uncompressed, @NotNull ByteBuf compressed) { - deflater.setInput(uncompressed.nioBuffer()); - deflater.finish(); - - while (!deflater.finished()) { - ByteBuffer nioBuffer = compressed.nioBuffer(compressed.writerIndex(), compressed.writableBytes()); - compressed.writerIndex(deflater.deflate(nioBuffer) + compressed.writerIndex()); - - if (compressed.writableBytes() == 0) { - compressed.ensureWritable(8192); - } - } - - deflater.reset(); - } - - public static void writeFramedPacket(@NotNull ByteBuf buffer, + public static void writeFramedPacket(@NotNull ByteBuffer buffer, @NotNull ServerPacket serverPacket) { final int compressionThreshold = MinecraftServer.getCompressionThreshold(); // Index of the var-int containing the complete packet length - final int packetLengthIndex = Utils.writeEmpty3BytesVarInt(buffer); - final int startIndex = buffer.writerIndex(); // Index where the content starts (after length) + final int packetLengthIndex = Utils.writeEmptyVarIntHeader(buffer); + final int startIndex = buffer.position(); // Index where the content starts (after length) if (compressionThreshold > 0) { // Index of the uncompressed payload length - final int dataLengthIndex = Utils.writeEmpty3BytesVarInt(buffer); + final int dataLengthIndex = Utils.writeEmptyVarIntHeader(buffer); // Write packet - final int contentIndex = buffer.writerIndex(); + final int contentIndex = buffer.position(); writePacket(buffer, serverPacket); - final int packetSize = buffer.writerIndex() - contentIndex; + final int packetSize = buffer.position() - contentIndex; final int uncompressedLength = packetSize >= compressionThreshold ? packetSize : 0; - Utils.write3BytesVarInt(buffer, dataLengthIndex, uncompressedLength); + Utils.writeVarIntHeader(buffer, dataLengthIndex, uncompressedLength); if (uncompressedLength > 0) { // Packet large enough, compress - ByteBuf uncompressedCopy = buffer.copy(contentIndex, packetSize); - buffer.writerIndex(contentIndex); - compress(COMPRESSOR.get(), uncompressedCopy, buffer); - uncompressedCopy.release(); + ByteBuffer uncompressedCopy = buffer.duplicate().position(contentIndex).limit(contentIndex + packetSize); + buffer.position(contentIndex); + + var deflater = COMPRESSOR.get(); + deflater.setInput(uncompressedCopy); + deflater.finish(); + deflater.deflate(buffer); + deflater.reset(); } } else { // No compression, write packet id + payload writePacket(buffer, serverPacket); } // Total length - final int totalPacketLength = buffer.writerIndex() - startIndex; - Utils.write3BytesVarInt(buffer, packetLengthIndex, totalPacketLength); + final int totalPacketLength = buffer.position() - startIndex; + Utils.writeVarIntHeader(buffer, packetLengthIndex, totalPacketLength); } /** @@ -259,8 +191,8 @@ public final class PacketUtils { * Can be used if you want to store a raw buffer and send it later without the additional writing cost. * Compression is applied if {@link MinecraftServer#getCompressionThreshold()} is greater than 0. */ - public static @NotNull ByteBuf createFramedPacket(@NotNull ServerPacket serverPacket) { - ByteBuf packetBuf = BufUtils.direct(); + public static @NotNull ByteBuffer createFramedPacket(@NotNull ServerPacket serverPacket) { + ByteBuffer packetBuf = ByteBuffer.allocate(2_000_000); writeFramedPacket(packetBuf, serverPacket); return packetBuf; } diff --git a/src/main/java/net/minestom/server/utils/Utils.java b/src/main/java/net/minestom/server/utils/Utils.java index 27549130a..7fb846b24 100644 --- a/src/main/java/net/minestom/server/utils/Utils.java +++ b/src/main/java/net/minestom/server/utils/Utils.java @@ -1,13 +1,15 @@ package net.minestom.server.utils; -import io.netty.buffer.ByteBuf; import it.unimi.dsi.fastutil.shorts.Short2ShortLinkedOpenHashMap; import net.minestom.server.instance.palette.Palette; import net.minestom.server.utils.binary.BinaryWriter; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import java.nio.ByteBuffer; import java.util.UUID; +@ApiStatus.Internal public final class Utils { private Utils() { @@ -21,43 +23,46 @@ public final class Utils { ? 4 : 5; } - public static void writeVarInt(@NotNull ByteBuf buf, int value) { - // Took from velocity + public static void writeVarInt(ByteBuffer buf, int value) { if ((value & (0xFFFFFFFF << 7)) == 0) { - buf.writeByte(value); + buf.put((byte) value); } else if ((value & (0xFFFFFFFF << 14)) == 0) { - int w = (value & 0x7F | 0x80) << 8 | (value >>> 7); - buf.writeShort(w); + buf.putShort((short) ((value & 0x7F | 0x80) << 8 | (value >>> 7))); } else if ((value & (0xFFFFFFFF << 21)) == 0) { - int w = (value & 0x7F | 0x80) << 16 | ((value >>> 7) & 0x7F | 0x80) << 8 | (value >>> 14); - buf.writeMedium(w); + buf.put((byte) (value & 0x7F | 0x80)); + buf.put((byte) ((value >>> 7) & 0x7F | 0x80)); + buf.put((byte) (value >>> 14)); + } else if ((value & (0xFFFFFFFF << 28)) == 0) { + buf.putInt((value & 0x7F | 0x80) << 24 | (((value >>> 7) & 0x7F | 0x80) << 16) + | ((value >>> 14) & 0x7F | 0x80) << 8 | (value >>> 21)); } else { - int w = (value & 0x7F | 0x80) << 24 | ((value >>> 7) & 0x7F | 0x80) << 16 - | ((value >>> 14) & 0x7F | 0x80) << 8 | ((value >>> 21) & 0x7F | 0x80); - buf.writeInt(w); - buf.writeByte(value >>> 28); + buf.putInt((value & 0x7F | 0x80) << 24 | ((value >>> 7) & 0x7F | 0x80) << 16 + | ((value >>> 14) & 0x7F | 0x80) << 8 | ((value >>> 21) & 0x7F | 0x80)); + buf.put((byte) (value >>> 28)); } } - public static void write3BytesVarInt(@NotNull ByteBuf buffer, int startIndex, int value) { - final int indexCache = buffer.writerIndex(); - buffer.writerIndex(startIndex); - final int w = (value & 0x7F | 0x80) << 16 | ((value >>> 7) & 0x7F | 0x80) << 8 | (value >>> 14); - buffer.writeMedium(w); - buffer.writerIndex(indexCache); + public static void writeVarIntHeader(@NotNull ByteBuffer buffer, int startIndex, int value) { + final int indexCache = buffer.position(); + buffer.position(startIndex); + buffer.put((byte) (value & 0x7F | 0x80)); + buffer.put((byte) ((value >>> 7) & 0x7F | 0x80)); + buffer.put((byte) (value >>> 14)); + buffer.position(indexCache); } - public static int writeEmpty3BytesVarInt(@NotNull ByteBuf buffer) { - final int index = buffer.writerIndex(); - buffer.writeMedium(0); + public static int writeEmptyVarIntHeader(@NotNull ByteBuffer buffer) { + final int index = buffer.position(); + buffer.putShort((short) 0); + buffer.put((byte) 0); return index; } - public static int readVarInt(ByteBuf buf) { + public static int readVarInt(ByteBuffer buf) { int i = 0; - final int maxRead = Math.min(5, buf.readableBytes()); + final int maxRead = Math.min(5, buf.remaining()); for (int j = 0; j < maxRead; j++) { - final int k = buf.readByte(); + final int k = buf.get(); i |= (k & 0x7F) << j * 7; if ((k & 0x80) != 128) { return i; @@ -66,12 +71,12 @@ public final class Utils { throw new RuntimeException("VarInt is too big"); } - public static long readVarLong(@NotNull ByteBuf buffer) { + public static long readVarLong(@NotNull ByteBuffer buffer) { int numRead = 0; long result = 0; byte read; do { - read = buffer.readByte(); + read = buffer.get(); long value = (read & 0b01111111); result |= (value << (7 * numRead)); @@ -117,13 +122,12 @@ public final class Utils { return new UUID(uuidMost, uuidLeast); } - public static void writePaletteBlocks(ByteBuf buffer, Palette palette) { - + public static void writePaletteBlocks(ByteBuffer buffer, Palette palette) { final short blockCount = palette.getBlockCount(); final int bitsPerEntry = palette.getBitsPerEntry(); - buffer.writeShort(blockCount); - buffer.writeByte((byte) bitsPerEntry); + buffer.putShort(blockCount); + buffer.put((byte) bitsPerEntry); // Palette if (bitsPerEntry < 9) { @@ -138,7 +142,7 @@ public final class Utils { final long[] blocks = palette.getBlocks(); writeVarInt(buffer, blocks.length); for (long datum : blocks) { - buffer.writeLong(datum); + buffer.putLong(datum); } } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java index 9ea0cfa5e..d529ae4e7 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java @@ -1,7 +1,5 @@ package net.minestom.server.utils.binary; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.coordinate.Point; @@ -17,6 +15,7 @@ import org.jglrxavpok.hephaistos.nbt.NBTReader; import java.io.IOException; import java.io.InputStream; +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.UUID; import java.util.function.Supplier; @@ -27,16 +26,15 @@ import java.util.function.Supplier; * WARNING: not thread-safe. */ public class BinaryReader extends InputStream { - - private final ByteBuf buffer; + private final ByteBuffer buffer; private final NBTReader nbtReader = new NBTReader(this, false); - public BinaryReader(@NotNull ByteBuf buffer) { + public BinaryReader(@NotNull ByteBuffer buffer) { this.buffer = buffer; } public BinaryReader(byte[] bytes) { - this(Unpooled.wrappedBuffer(bytes)); + this(ByteBuffer.wrap(bytes)); } public int readVarInt() { @@ -48,49 +46,49 @@ public class BinaryReader extends InputStream { } public boolean readBoolean() { - return buffer.readBoolean(); + return buffer.get() == 1; } public byte readByte() { - return buffer.readByte(); + return buffer.get(); } public short readShort() { - return buffer.readShort(); + return buffer.getShort(); } public char readChar() { - return buffer.readChar(); + return buffer.getChar(); } public int readUnsignedShort() { - return buffer.readUnsignedShort(); + return buffer.getShort() & 0xFFFF; } /** * Same as readInt */ public int readInteger() { - return buffer.readInt(); + return buffer.getInt(); } /** * Same as readInteger, created for parity with BinaryWriter */ public int readInt() { - return buffer.readInt(); + return buffer.getInt(); } public long readLong() { - return buffer.readLong(); + return buffer.getLong(); } public float readFloat() { - return buffer.readFloat(); + return buffer.getFloat(); } public double readDouble() { - return buffer.readDouble(); + return buffer.getDouble(); } /** @@ -105,12 +103,9 @@ public class BinaryReader extends InputStream { */ public String readSizedString(int maxLength) { final int length = readVarInt(); - Check.stateCondition(!buffer.isReadable(length), - "Trying to read a string that is too long (wanted {0}, only have {1})", - length, - buffer.readableBytes()); - final String str = buffer.toString(buffer.readerIndex(), length, StandardCharsets.UTF_8); - buffer.skipBytes(length); + byte[] bytes = new byte[length]; + buffer.get(bytes); + final String str = new String(bytes, StandardCharsets.UTF_8); Check.stateCondition(str.length() > maxLength, "String length ({0}) was higher than the max length of {1}", length, maxLength); return str; @@ -121,10 +116,8 @@ public class BinaryReader extends InputStream { } public byte[] readBytes(int length) { - ByteBuf buf = buffer.readBytes(length); - byte[] bytes = new byte[buf.readableBytes()]; - buf.readBytes(bytes); - buf.release(); + byte[] bytes = new byte[length]; + buffer.get(bytes); return bytes; } @@ -164,14 +157,11 @@ public class BinaryReader extends InputStream { } public Point readBlockPosition() { - final long value = buffer.readLong(); - return SerializerUtils.longToBlockPosition(value); + return SerializerUtils.longToBlockPosition(buffer.getLong()); } public UUID readUuid() { - final long most = readLong(); - final long least = readLong(); - return new UUID(most, least); + return new UUID(readLong(), readLong()); } /** @@ -225,7 +215,7 @@ public class BinaryReader extends InputStream { return (T[]) result; } - public ByteBuf getBuffer() { + public ByteBuffer getBuffer() { return buffer; } @@ -236,7 +226,7 @@ public class BinaryReader extends InputStream { @Override public int available() { - return buffer.readableBytes(); + return buffer.remaining(); } public NBT readTag() throws IOException, NBTException { @@ -251,11 +241,12 @@ public class BinaryReader extends InputStream { * @param extractor the extraction code, simply call the reader's read* methods here. */ public byte[] extractBytes(Runnable extractor) { - int startingPosition = getBuffer().readerIndex(); + int startingPosition = buffer.position(); extractor.run(); - int endingPosition = getBuffer().readerIndex(); + int endingPosition = getBuffer().position(); byte[] output = new byte[endingPosition - startingPosition]; - getBuffer().getBytes(startingPosition, output); + buffer.get(output, 0, output.length); + //buffer.get(startingPosition, output); return output; } } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java index fc20c0aad..ce800e491 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java @@ -1,8 +1,5 @@ package net.minestom.server.utils.binary; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.MinecraftServer; @@ -16,8 +13,11 @@ import org.jglrxavpok.hephaistos.nbt.NBTWriter; import java.io.IOException; import java.io.OutputStream; +import java.nio.Buffer; +import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.UUID; import java.util.function.Consumer; @@ -26,8 +26,7 @@ import java.util.function.Consumer; * WARNING: not thread-safe. */ public class BinaryWriter extends OutputStream { - - private ByteBuf buffer; + private ByteBuffer buffer; private NBTWriter nbtWriter; // Lazily initialized /** @@ -36,7 +35,7 @@ public class BinaryWriter extends OutputStream { * @param initialCapacity the initial capacity of the binary writer */ public BinaryWriter(int initialCapacity) { - this.buffer = Unpooled.buffer(initialCapacity); + this.buffer = ByteBuffer.allocate(initialCapacity); } /** @@ -44,24 +43,15 @@ public class BinaryWriter extends OutputStream { * * @param buffer the writer buffer */ - public BinaryWriter(@NotNull ByteBuf buffer) { + public BinaryWriter(@NotNull ByteBuffer buffer) { this.buffer = buffer; } - /** - * Creates a {@link BinaryWriter} from multiple buffers. - * - * @param buffers the buffers making this - */ - public BinaryWriter(@NotNull ByteBuf... buffers) { - this.buffer = Unpooled.wrappedBuffer(buffers); - } - /** * Creates a {@link BinaryWriter} with a "reasonably small initial capacity". */ public BinaryWriter() { - this.buffer = Unpooled.buffer(); + this(500); // TODO prevent OOB } /** @@ -79,7 +69,7 @@ public class BinaryWriter extends OutputStream { * @param b the boolean to write */ public void writeBoolean(boolean b) { - buffer.writeBoolean(b); + buffer.put((byte) (b ? 1 : 0)); } /** @@ -88,7 +78,7 @@ public class BinaryWriter extends OutputStream { * @param b the byte to write */ public void writeByte(byte b) { - buffer.writeByte(b); + buffer.put(b); } /** @@ -97,7 +87,7 @@ public class BinaryWriter extends OutputStream { * @param c the char to write */ public void writeChar(char c) { - buffer.writeChar(c); + buffer.putChar(c); } /** @@ -106,7 +96,7 @@ public class BinaryWriter extends OutputStream { * @param s the short to write */ public void writeShort(short s) { - buffer.writeShort(s); + buffer.putShort(s); } /** @@ -115,7 +105,7 @@ public class BinaryWriter extends OutputStream { * @param i the int to write */ public void writeInt(int i) { - buffer.writeInt(i); + buffer.putInt(i); } /** @@ -124,7 +114,7 @@ public class BinaryWriter extends OutputStream { * @param l the long to write */ public void writeLong(long l) { - buffer.writeLong(l); + buffer.putLong(l); } /** @@ -133,7 +123,7 @@ public class BinaryWriter extends OutputStream { * @param f the float to write */ public void writeFloat(float f) { - buffer.writeFloat(f); + buffer.putFloat(f); } /** @@ -142,7 +132,7 @@ public class BinaryWriter extends OutputStream { * @param d the double to write */ public void writeDouble(double d) { - buffer.writeDouble(d); + buffer.putDouble(d); } /** @@ -171,9 +161,9 @@ public class BinaryWriter extends OutputStream { * @param string the string to write */ public void writeSizedString(@NotNull String string) { - final int utf8Bytes = ByteBufUtil.utf8Bytes(string); - writeVarInt(utf8Bytes); - buffer.writeCharSequence(string, StandardCharsets.UTF_8); + final var bytes = string.getBytes(StandardCharsets.UTF_8); + writeVarInt(bytes.length); + writeBytes(bytes); } /** @@ -184,7 +174,8 @@ public class BinaryWriter extends OutputStream { * @param charset the charset to encode in */ public void writeNullTerminatedString(@NotNull String string, @NotNull Charset charset) { - buffer.writeCharSequence(string + '\0', charset); + final var bytes = (string + '\0').getBytes(charset); + writeBytes(bytes); } /** @@ -223,8 +214,8 @@ public class BinaryWriter extends OutputStream { * * @param bytes the byte array to write */ - public void writeBytes(@NotNull byte[] bytes) { - buffer.writeBytes(bytes); + public void writeBytes(byte @NotNull [] bytes) { + buffer.put(bytes); } /** @@ -296,12 +287,12 @@ public class BinaryWriter extends OutputStream { writeable.write(this); } - public void write(@NotNull BinaryWriter writer) { - this.buffer.writeBytes(writer.getBuffer()); + public void write(@NotNull ByteBuffer buffer) { + this.buffer.put(buffer); } - public void write(@NotNull ByteBuf buffer) { - this.buffer.writeBytes(buffer); + public void write(@NotNull BinaryWriter writer) { + write(writer.getBuffer()); } /** @@ -323,46 +314,51 @@ public class BinaryWriter extends OutputStream { * @return the byte array containing all the {@link BinaryWriter} data */ public byte[] toByteArray() { - byte[] bytes = new byte[buffer.readableBytes()]; - final int readerIndex = buffer.readerIndex(); - buffer.getBytes(readerIndex, bytes); + byte[] bytes = new byte[buffer.remaining()]; + buffer.get(bytes); return bytes; } /** - * Adds a {@link BinaryWriter}'s {@link ByteBuf} at the beginning of this writer. + * Adds a {@link BinaryWriter}'s {@link ByteBuffer} at the beginning of this writer. * * @param headerWriter the {@link BinaryWriter} to add at the beginning */ public void writeAtStart(@NotNull BinaryWriter headerWriter) { // Get the buffer of the header - final ByteBuf headerBuf = headerWriter.getBuffer(); + final var headerBuf = headerWriter.getBuffer(); // Merge both the headerBuf and this buffer - final ByteBuf finalBuffer = Unpooled.wrappedBuffer(headerBuf, buffer); + final var finalBuffer = concat(headerBuf, buffer); // Change the buffer used by this writer setBuffer(finalBuffer); } /** - * Adds a {@link BinaryWriter}'s {@link ByteBuf} at the end of this writer. + * Adds a {@link BinaryWriter}'s {@link ByteBuffer} at the end of this writer. * * @param footerWriter the {@link BinaryWriter} to add at the end */ public void writeAtEnd(@NotNull BinaryWriter footerWriter) { // Get the buffer of the footer - final ByteBuf footerBuf = footerWriter.getBuffer(); + final var footerBuf = footerWriter.getBuffer(); // Merge both this buffer and the footerBuf - final ByteBuf finalBuffer = Unpooled.wrappedBuffer(buffer, footerBuf); + final var finalBuffer = concat(buffer, footerBuf); // Change the buffer used by this writer setBuffer(finalBuffer); } + public static ByteBuffer concat(final ByteBuffer... buffers) { + final ByteBuffer combined = ByteBuffer.allocate(Arrays.stream(buffers).mapToInt(Buffer::remaining).sum()); + Arrays.stream(buffers).forEach(b -> combined.put(b.duplicate())); + return combined; + } + /** * Gets the raw buffer used by this binary writer. * * @return the raw buffer */ - public @NotNull ByteBuf getBuffer() { + public @NotNull ByteBuffer getBuffer() { return buffer; } @@ -371,7 +367,7 @@ public class BinaryWriter extends OutputStream { * * @param buffer the new buffer used by this binary writer */ - public void setBuffer(ByteBuf buffer) { + public void setBuffer(ByteBuffer buffer) { this.buffer = buffer; } @@ -381,7 +377,8 @@ public class BinaryWriter extends OutputStream { } public void writeUnsignedShort(int yourShort) { - buffer.writeShort(yourShort & 0xFFFF); + // FIXME unsigned + buffer.putShort((short) (yourShort & 0xFFFF)); } /** diff --git a/src/main/java/net/minestom/server/utils/cache/CacheablePacket.java b/src/main/java/net/minestom/server/utils/cache/CacheablePacket.java deleted file mode 100644 index 348bf7424..000000000 --- a/src/main/java/net/minestom/server/utils/cache/CacheablePacket.java +++ /dev/null @@ -1,91 +0,0 @@ -package net.minestom.server.utils.cache; - -import io.netty.buffer.ByteBuf; -import net.minestom.server.network.netty.packet.FramedPacket; -import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.PacketUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; - -/** - * Implemented by {@link ServerPacket server packets} which can be temporary cached in memory to be re-sent later - * without having to go through all the writing and compression. - *

- * {@link #getIdentifier()} is to differentiate this packet from the others of the same type. - */ -public interface CacheablePacket { - - /** - * Gets the cache linked to this packet. - *

- * WARNING: the cache needs to be shared between all the object instances, tips is to make it static. - * - * @return the temporary packet cache - */ - @NotNull TemporaryPacketCache getCache(); - - /** - * Gets the identifier of this packet. - *

- * Used to verify if this packet is already cached or not. - * - * @return this packet identifier, null to prevent caching - */ - @Nullable UUID getIdentifier(); - - /** - * Gets the last time this packet changed. - * - * @return the last packet update time in milliseconds - */ - long getTimestamp(); - - static @Nullable FramedPacket getCache(@NotNull ServerPacket serverPacket) { - if (!(serverPacket instanceof CacheablePacket)) - return null; - - final CacheablePacket cacheablePacket = (CacheablePacket) serverPacket; - final UUID identifier = cacheablePacket.getIdentifier(); - if (identifier == null) { - // This packet explicitly asks to do not retrieve the cache - return null; - } else { - final long timestamp = cacheablePacket.getTimestamp(); - // Try to retrieve the cached buffer - TemporaryCache temporaryCache = cacheablePacket.getCache(); - TimedBuffer timedBuffer = temporaryCache.retrieve(identifier); - - // Update the buffer if non-existent or outdated - final boolean shouldUpdate = timedBuffer == null || - timestamp > timedBuffer.getTimestamp(); - - if (shouldUpdate) { - // Buffer freed by guava cache #removalListener - final ByteBuf buffer = PacketUtils.createFramedPacket(serverPacket); - timedBuffer = new TimedBuffer(buffer, timestamp); - temporaryCache.cache(identifier, timedBuffer); - } - - return new FramedPacket(timedBuffer.getBuffer()); - } - } - - static void writeCache(@NotNull ByteBuf buffer, @NotNull ServerPacket serverPacket) { - FramedPacket framedPacket = CacheablePacket.getCache(serverPacket); - if (framedPacket == null) { - PacketUtils.writeFramedPacket(buffer, serverPacket); - return; - } - final ByteBuf body = framedPacket.getBody(); - synchronized (body) { - if (framedPacket.getBody().refCnt() != 0) { - buffer.writeBytes(body, body.readerIndex(), body.readableBytes()); - } else { - PacketUtils.writeFramedPacket(buffer, serverPacket); - } - } - } - -} diff --git a/src/main/java/net/minestom/server/utils/cache/TemporaryCache.java b/src/main/java/net/minestom/server/utils/cache/TemporaryCache.java deleted file mode 100644 index beb1bff2b..000000000 --- a/src/main/java/net/minestom/server/utils/cache/TemporaryCache.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.minestom.server.utils.cache; - -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.RemovalListener; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -/** - * Cache objects with a timeout. - * - * @param the object type to cache - */ -public class TemporaryCache { - - private final Cache cache; - - /** - * Creates a new temporary cache. - * - * @param duration the time before considering an object unused - */ - public TemporaryCache(long duration, TimeUnit timeUnit, RemovalListener removalListener) { - this.cache = Caffeine.newBuilder() - .expireAfterWrite(duration, timeUnit) - .removalListener(removalListener) - .build(); - } - - /** - * Caches an object. - * - * @param identifier the object identifier - * @param value the object to cache - */ - public void cache(@NotNull UUID identifier, T value) { - this.cache.put(identifier, value); - } - - public void invalidate(@NotNull UUID identifier) { - this.cache.invalidate(identifier); - } - - /** - * Retrieves an object from cache. - * - * @param identifier the object identifier - * @return the retrieved object or null if not found - */ - @Nullable - public T retrieve(@NotNull UUID identifier) { - return cache.getIfPresent(identifier); - } -} diff --git a/src/main/java/net/minestom/server/utils/cache/TemporaryPacketCache.java b/src/main/java/net/minestom/server/utils/cache/TemporaryPacketCache.java deleted file mode 100644 index 7d805e904..000000000 --- a/src/main/java/net/minestom/server/utils/cache/TemporaryPacketCache.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.minestom.server.utils.cache; - -import io.netty.buffer.ByteBuf; - -import java.util.concurrent.TimeUnit; - -public class TemporaryPacketCache extends TemporaryCache { - public TemporaryPacketCache(long duration, TimeUnit timeUnit) { - super(duration, timeUnit, (key, value, cause) -> { - if (value == null) - return; - final ByteBuf buffer = value.getBuffer(); - synchronized (buffer) { - buffer.release(); - } - }); - } -} \ No newline at end of file diff --git a/src/main/java/net/minestom/server/utils/cache/TimedBuffer.java b/src/main/java/net/minestom/server/utils/cache/TimedBuffer.java deleted file mode 100644 index a74c8f764..000000000 --- a/src/main/java/net/minestom/server/utils/cache/TimedBuffer.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.minestom.server.utils.cache; - -import io.netty.buffer.ByteBuf; -import org.jetbrains.annotations.NotNull; - -/** - * Object containing a {@link ByteBuf buffer} and its timestamp. - * Used for packet-caching to use the most recent. - */ -public class TimedBuffer { - - private final ByteBuf buffer; - private final long timestamp; - - public TimedBuffer(@NotNull ByteBuf buffer, long timestamp) { - this.buffer = buffer; - this.timestamp = timestamp; - } - - @NotNull - public ByteBuf getBuffer() { - return buffer; - } - - public long getTimestamp() { - return timestamp; - } -} diff --git a/src/test/java/demo/Main.java b/src/test/java/demo/Main.java index 1343f44e9..1ea170024 100644 --- a/src/test/java/demo/Main.java +++ b/src/test/java/demo/Main.java @@ -24,6 +24,7 @@ public class Main { public static void main(String[] args) { MinecraftServer minecraftServer = MinecraftServer.init(); + MinecraftServer.setCompressionThreshold(0); BlockManager blockManager = MinecraftServer.getBlockManager(); From b35954c05d86534150acb8d4d6dfc202e8ff121e Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 13:09:03 +0200 Subject: [PATCH 02/41] Fix ping Signed-off-by: TheMode --- .../client/handler/ClientStatusPacketsHandler.java | 2 -- .../packet/client/status/StatusRequestPacket.java | 8 ++------ .../packet/server/handshake/ResponsePacket.java | 6 +++++- .../network/player/NettyPlayerConnection.java | 13 +++++++------ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/minestom/server/network/packet/client/handler/ClientStatusPacketsHandler.java b/src/main/java/net/minestom/server/network/packet/client/handler/ClientStatusPacketsHandler.java index 27f9869d8..b216a8dad 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handler/ClientStatusPacketsHandler.java +++ b/src/main/java/net/minestom/server/network/packet/client/handler/ClientStatusPacketsHandler.java @@ -4,10 +4,8 @@ import net.minestom.server.network.packet.client.status.PingPacket; import net.minestom.server.network.packet.client.status.StatusRequestPacket; public class ClientStatusPacketsHandler extends ClientPacketsHandler { - public ClientStatusPacketsHandler() { register(0x00, StatusRequestPacket::new); register(0x01, PingPacket::new); } - } diff --git a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java index 94128833d..87361e984 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java @@ -16,12 +16,8 @@ public class StatusRequestPacket implements ClientPreplayPacket { public void process(@NotNull PlayerConnection connection) { final ServerListPingType pingVersion = ServerListPingType.fromModernProtocolVersion(connection.getProtocolVersion()); final ServerListPingEvent statusRequestEvent = new ServerListPingEvent(connection, pingVersion); - EventDispatcher.callCancellable(statusRequestEvent, () -> { - final ResponsePacket responsePacket = new ResponsePacket(); - responsePacket.jsonResponse = pingVersion.getPingResponse(statusRequestEvent.getResponseData()); - - connection.sendPacket(responsePacket); - }); + EventDispatcher.callCancellable(statusRequestEvent, () -> + connection.sendPacket(new ResponsePacket(pingVersion.getPingResponse(statusRequestEvent.getResponseData())))); } @Override diff --git a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java index 972ed8423..a654281c1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java @@ -7,7 +7,11 @@ import org.jetbrains.annotations.NotNull; public class ResponsePacket implements ServerPacket { - public String jsonResponse = ""; + public String jsonResponse; + + public ResponsePacket(String jsonResponse) { + this.jsonResponse = jsonResponse; + } @Override public void write(@NotNull BinaryWriter writer) { diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 9ecfc5544..8b0270c04 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -228,12 +228,13 @@ public class NettyPlayerConnection extends PlayerConnection { } public void attemptWrite(ByteBuffer buffer) { + buffer.flip(); synchronized (tickBufferLock) { try { this.tickBuffer.put(buffer); } catch (BufferOverflowException e) { try { - this.channel.write(tickBuffer); + this.channel.write(tickBuffer.flip()); this.channel.write(buffer); } catch (IOException ex) { MinecraftServer.getExceptionManager().handleException(ex); @@ -245,12 +246,12 @@ public class NettyPlayerConnection extends PlayerConnection { } public void flush() { - if (tickBuffer.remaining() == 0) { - // Nothing to write - return; - } - // Retrieve safe copy synchronized (tickBufferLock) { + this.tickBuffer.flip(); + if (tickBuffer.remaining() == 0) { + // Nothing to write + return; + } try { channel.write(tickBuffer); } catch (IOException e) { From e4a3a3dbae3ba71a43c2f866c114750bdf8dfa17 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 17:05:21 +0200 Subject: [PATCH 03/41] Removed unused buffer + deflater Signed-off-by: TheMode --- src/main/java/net/minestom/server/network/socket/Worker.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 9e89d5396..1c2a3dc05 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -16,7 +16,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; -import java.util.zip.Deflater; import java.util.zip.Inflater; public class Worker { @@ -129,17 +128,15 @@ public class Worker { */ public static final class Context { public final ByteBuffer readBuffer = allocate(Server.SOCKET_BUFFER_SIZE); - public final ByteBuffer writeBuffer = allocate(Server.SOCKET_BUFFER_SIZE); /** * Stores a single packet payload to be read. */ public final ByteBuffer contentBuffer = allocate(Server.MAX_PACKET_SIZE); - public final Deflater deflater = new Deflater(); public final Inflater inflater = new Inflater(); public void clearBuffers() { this.readBuffer.clear(); - this.writeBuffer.clear(); + this.contentBuffer.clear(); } private static ByteBuffer allocate(int size) { From fbf647913512113c04a31de324348a8388e40da7 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 19:44:10 +0200 Subject: [PATCH 04/41] Fix item meta writing Signed-off-by: TheMode --- src/main/java/net/minestom/server/item/ItemMeta.java | 3 +-- .../server/network/player/NettyPlayerConnection.java | 4 +--- .../java/net/minestom/server/network/socket/Worker.java | 3 +-- src/main/java/net/minestom/server/utils/Utils.java | 5 ++--- .../net/minestom/server/utils/binary/BinaryWriter.java | 7 +++++-- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minestom/server/item/ItemMeta.java b/src/main/java/net/minestom/server/item/ItemMeta.java index a31518f88..10c9381b0 100644 --- a/src/main/java/net/minestom/server/item/ItemMeta.java +++ b/src/main/java/net/minestom/server/item/ItemMeta.java @@ -153,7 +153,6 @@ public class ItemMeta implements TagReadable, Writeable { w.writeNBT("", nbt); this.cachedBuffer = w.getBuffer(); } - writer.write(cachedBuffer); - this.cachedBuffer.position(0); + writer.write(cachedBuffer.flip()); } } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 8b0270c04..0d32488bc 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -211,9 +211,7 @@ public class NettyPlayerConnection extends PlayerConnection { serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); } - synchronized (tickBufferLock) { - PacketUtils.writeFramedPacket(tickBuffer, serverPacket); - } + attemptWrite(PacketUtils.createFramedPacket(serverPacket)); return; } else if (message instanceof ByteBuffer) { attemptWrite((ByteBuffer) message); diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 1c2a3dc05..a2bac27ab 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -7,7 +7,6 @@ import net.minestom.server.network.player.NettyPlayerConnection; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; @@ -140,7 +139,7 @@ public class Worker { } private static ByteBuffer allocate(int size) { - return ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); + return ByteBuffer.allocateDirect(size); } } } diff --git a/src/main/java/net/minestom/server/utils/Utils.java b/src/main/java/net/minestom/server/utils/Utils.java index 7fb846b24..3a2ba5ac2 100644 --- a/src/main/java/net/minestom/server/utils/Utils.java +++ b/src/main/java/net/minestom/server/utils/Utils.java @@ -2,7 +2,6 @@ package net.minestom.server.utils; import it.unimi.dsi.fastutil.shorts.Short2ShortLinkedOpenHashMap; import net.minestom.server.instance.palette.Palette; -import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -89,14 +88,14 @@ public final class Utils { return result; } - public static void writeVarLong(BinaryWriter writer, long value) { + public static void writeVarLong(ByteBuffer buffer, long value) { do { byte temp = (byte) (value & 0b01111111); value >>>= 7; if (value != 0) { temp |= 0b10000000; } - writer.writeByte(temp); + buffer.put(temp); } while (value != 0); } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java index ce800e491..4ef846483 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java @@ -150,7 +150,7 @@ public class BinaryWriter extends OutputStream { * @param l the long to write */ public void writeVarLong(long l) { - Utils.writeVarLong(this, l); + Utils.writeVarLong(buffer, l); } /** @@ -292,7 +292,10 @@ public class BinaryWriter extends OutputStream { } public void write(@NotNull BinaryWriter writer) { - write(writer.getBuffer()); + var buffer = writer.buffer; + final int pos = buffer.position(); + write(buffer.position(0)); + buffer.position(pos); } /** From 9f1efb09326ae5167b97b5d06c6947c905b95d26 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 19:54:32 +0200 Subject: [PATCH 05/41] Fix writer to array conversion Signed-off-by: TheMode --- src/main/java/net/minestom/server/utils/binary/BinaryWriter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java index 4ef846483..c45f5ee8b 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java @@ -317,6 +317,7 @@ public class BinaryWriter extends OutputStream { * @return the byte array containing all the {@link BinaryWriter} data */ public byte[] toByteArray() { + buffer.flip(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); return bytes; From 6db55ce91f76ae8f7fc41ab03b87e75972c4d9e3 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 20:02:27 +0200 Subject: [PATCH 06/41] Always flip Signed-off-by: TheMode --- src/main/java/net/minestom/server/item/ItemMeta.java | 2 +- .../server/network/packet/server/play/ChunkDataPacket.java | 2 +- .../net/minestom/server/utils/binary/BinaryWriter.java | 7 ++----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minestom/server/item/ItemMeta.java b/src/main/java/net/minestom/server/item/ItemMeta.java index 10c9381b0..3e5d2ad55 100644 --- a/src/main/java/net/minestom/server/item/ItemMeta.java +++ b/src/main/java/net/minestom/server/item/ItemMeta.java @@ -153,6 +153,6 @@ public class ItemMeta implements TagReadable, Writeable { w.writeNBT("", nbt); this.cachedBuffer = w.getBuffer(); } - writer.write(cachedBuffer.flip()); + writer.write(cachedBuffer); } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java index 5fc4b7e2f..acd3f8b62 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java @@ -105,7 +105,7 @@ public class ChunkDataPacket implements ServerPacket { // Data writer.writeVarInt(blocks.position()); - writer.write(blocks.flip()); + writer.write(blocks); // Block entities if (entries == null || entries.isEmpty()) { diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java index c45f5ee8b..3196a2de2 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java @@ -288,14 +288,11 @@ public class BinaryWriter extends OutputStream { } public void write(@NotNull ByteBuffer buffer) { - this.buffer.put(buffer); + this.buffer.put(buffer.flip()); } public void write(@NotNull BinaryWriter writer) { - var buffer = writer.buffer; - final int pos = buffer.position(); - write(buffer.position(0)); - buffer.position(pos); + write(writer.buffer); } /** From 65df72fa82c9109a1226e64185fd39dbfe6b3fb9 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 20:18:38 +0200 Subject: [PATCH 07/41] Remove write branching Signed-off-by: TheMode --- .../network/player/NettyPlayerConnection.java | 31 ++++++------------- .../minestom/server/utils/PacketUtils.java | 2 +- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 0d32488bc..e5ef47e05 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -188,7 +188,11 @@ public class NettyPlayerConnection extends PlayerConnection { if (shouldSendPacket(serverPacket)) { if (getPlayer() != null) { // Flush happen during #update() - write(serverPacket, skipTranslating); + if ((MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && serverPacket instanceof ComponentHoldingServerPacket) { + serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> + GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); + } + attemptWrite(PacketUtils.createFramedPacket(serverPacket)); } else { // Player is probably not logged yet writeAndFlush(serverPacket); @@ -196,28 +200,12 @@ public class NettyPlayerConnection extends PlayerConnection { } } - public void write(@NotNull Object message) { - this.write(message, false); + public void write(@NotNull FramedPacket framedPacket) { + attemptWrite(framedPacket.getBody()); } - public void write(@NotNull Object message, boolean skipTranslating) { - if (message instanceof FramedPacket) { - final FramedPacket framedPacket = (FramedPacket) message; - attemptWrite(framedPacket.getBody()); - return; - } else if (message instanceof ServerPacket) { - ServerPacket serverPacket = (ServerPacket) message; - if ((MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && getPlayer() != null && serverPacket instanceof ComponentHoldingServerPacket) { - serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> - GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); - } - attemptWrite(PacketUtils.createFramedPacket(serverPacket)); - return; - } else if (message instanceof ByteBuffer) { - attemptWrite((ByteBuffer) message); - return; - } - throw new UnsupportedOperationException("type " + message.getClass() + " is not supported"); + public void write(@NotNull ByteBuffer buffer) { + attemptWrite(buffer); } public void writeAndFlush(@NotNull ServerPacket packet) { @@ -235,6 +223,7 @@ public class NettyPlayerConnection extends PlayerConnection { this.channel.write(tickBuffer.flip()); this.channel.write(buffer); } catch (IOException ex) { + disconnect(); MinecraftServer.getExceptionManager().handleException(ex); } finally { this.tickBuffer.clear(); diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index cd8dc753c..d3f000fbe 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -102,7 +102,7 @@ public final class PacketUtils { final PlayerConnection playerConnection = player.getPlayerConnection(); if (playerConnection instanceof NettyPlayerConnection) { final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) playerConnection; - nettyPlayerConnection.write(framedPacket, true); + nettyPlayerConnection.write(framedPacket); } else { playerConnection.sendPacket(packet); } From 548cee55e091a5fa5fb991e9b5635892a001d4e9 Mon Sep 17 00:00:00 2001 From: TheMode Date: Tue, 3 Aug 2021 21:16:24 +0200 Subject: [PATCH 08/41] Fix compression Signed-off-by: TheMode --- .../network/player/NettyPlayerConnection.java | 15 ++-- .../minestom/server/utils/PacketUtils.java | 89 ++++++++----------- 2 files changed, 46 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index e5ef47e05..0a329b7ef 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -63,7 +63,6 @@ public class NettyPlayerConnection extends PlayerConnection { private UUID bungeeUuid; private PlayerSkin bungeeSkin; - private final Object tickBufferLock = new Object(); private final ByteBuffer tickBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); private ByteBuffer cacheBuffer; @@ -170,8 +169,8 @@ public class NettyPlayerConnection extends PlayerConnection { Check.stateCondition(compressed, "Compression is already enabled!"); final int threshold = MinecraftServer.getCompressionThreshold(); Check.stateCondition(threshold == 0, "Compression cannot be enabled because the threshold is equal to 0"); - this.compressed = true; writeAndFlush(new SetCompressionPacket(threshold)); + this.compressed = true; } /** @@ -209,13 +208,15 @@ public class NettyPlayerConnection extends PlayerConnection { } public void writeAndFlush(@NotNull ServerPacket packet) { - attemptWrite(PacketUtils.createFramedPacket(packet)); - flush(); + synchronized (tickBuffer){ + PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); + flush(); + } } public void attemptWrite(ByteBuffer buffer) { buffer.flip(); - synchronized (tickBufferLock) { + synchronized (tickBuffer) { try { this.tickBuffer.put(buffer); } catch (BufferOverflowException e) { @@ -233,14 +234,14 @@ public class NettyPlayerConnection extends PlayerConnection { } public void flush() { - synchronized (tickBufferLock) { + synchronized (tickBuffer) { this.tickBuffer.flip(); if (tickBuffer.remaining() == 0) { // Nothing to write return; } try { - channel.write(tickBuffer); + this.channel.write(tickBuffer); } catch (IOException e) { MinecraftServer.getExceptionManager().handleException(e); } diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index d3f000fbe..720db87bb 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -130,58 +130,45 @@ public final class PacketUtils { sendGroupedPacket(players, packet, null); } - /** - * Writes a {@link ServerPacket} into a {@link ByteBuffer}. - * - * @param buf the recipient of {@code packet} - * @param packet the packet to write into {@code buf} - */ - public static void writePacket(@NotNull ByteBuffer buf, @NotNull ServerPacket packet) { - Utils.writeVarInt(buf, packet.getId()); - BinaryWriter writer = new BinaryWriter(buf); - try { - packet.write(writer); - } catch (Exception e) { - MinecraftServer.getExceptionManager().handleException(e); - } - } - public static void writeFramedPacket(@NotNull ByteBuffer buffer, - @NotNull ServerPacket serverPacket) { - final int compressionThreshold = MinecraftServer.getCompressionThreshold(); - - // Index of the var-int containing the complete packet length - final int packetLengthIndex = Utils.writeEmptyVarIntHeader(buffer); - final int startIndex = buffer.position(); // Index where the content starts (after length) - if (compressionThreshold > 0) { - // Index of the uncompressed payload length - final int dataLengthIndex = Utils.writeEmptyVarIntHeader(buffer); - - // Write packet - final int contentIndex = buffer.position(); - writePacket(buffer, serverPacket); - final int packetSize = buffer.position() - contentIndex; - - final int uncompressedLength = packetSize >= compressionThreshold ? packetSize : 0; - Utils.writeVarIntHeader(buffer, dataLengthIndex, uncompressedLength); - if (uncompressedLength > 0) { - // Packet large enough, compress - ByteBuffer uncompressedCopy = buffer.duplicate().position(contentIndex).limit(contentIndex + packetSize); - buffer.position(contentIndex); - - var deflater = COMPRESSOR.get(); - deflater.setInput(uncompressedCopy); - deflater.finish(); - deflater.deflate(buffer); - deflater.reset(); - } - } else { - // No compression, write packet id + payload - writePacket(buffer, serverPacket); + @NotNull ServerPacket packet, + boolean compression) { + if (!compression) { + // Length + payload + final int lengthIndex = Utils.writeEmptyVarIntHeader(buffer); + Utils.writeVarInt(buffer, packet.getId()); + packet.write(new BinaryWriter(buffer)); + final int finalSize = buffer.position() - (lengthIndex + 3); + Utils.writeVarIntHeader(buffer, lengthIndex, finalSize); + return; + } + // Compressed format + final int compressedIndex = Utils.writeEmptyVarIntHeader(buffer); + final int uncompressedIndex = Utils.writeEmptyVarIntHeader(buffer); + final int contentStart = buffer.position(); + + Utils.writeVarInt(buffer, packet.getId()); + packet.write(new BinaryWriter(buffer)); + final int packetSize = buffer.position() - contentStart; + if (packetSize >= MinecraftServer.getCompressionThreshold()) { + // Packet large enough, compress + final int limitCache = buffer.limit(); + buffer.position(contentStart).limit(contentStart + packetSize); + var uncompressedCopy = ByteBuffer.allocate(packetSize).put(buffer); + buffer.position(contentStart).limit(limitCache); + + var deflater = COMPRESSOR.get(); + deflater.setInput(uncompressedCopy.flip()); + deflater.finish(); + deflater.deflate(buffer); + deflater.reset(); + + Utils.writeVarIntHeader(buffer, compressedIndex, (buffer.position() - contentStart) + 3); + Utils.writeVarIntHeader(buffer, uncompressedIndex, packetSize); + } else { + Utils.writeVarIntHeader(buffer, compressedIndex, packetSize + 3); + Utils.writeVarIntHeader(buffer, uncompressedIndex, 0); } - // Total length - final int totalPacketLength = buffer.position() - startIndex; - Utils.writeVarIntHeader(buffer, packetLengthIndex, totalPacketLength); } /** @@ -193,7 +180,7 @@ public final class PacketUtils { */ public static @NotNull ByteBuffer createFramedPacket(@NotNull ServerPacket serverPacket) { ByteBuffer packetBuf = ByteBuffer.allocate(2_000_000); - writeFramedPacket(packetBuf, serverPacket); + writeFramedPacket(packetBuf, serverPacket, MinecraftServer.getCompressionThreshold() > 0); return packetBuf; } } From 66b567597a46d2a94c68d21ec148ebd599c31afc Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 00:37:17 +0200 Subject: [PATCH 09/41] Fix connection crash Signed-off-by: TheMode --- .../network/netty/packet/FramedPacket.java | 3 +- .../network/player/NettyPlayerConnection.java | 49 +++++++++++-------- .../server/network/socket/Worker.java | 5 +- .../minestom/server/utils/PacketUtils.java | 24 ++------- 4 files changed, 37 insertions(+), 44 deletions(-) diff --git a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java b/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java index 17fe194a7..96426ac66 100644 --- a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java +++ b/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java @@ -8,8 +8,7 @@ import java.nio.ByteBuffer; * Represents a packet which is already framed. (packet id+payload) + optional compression * Can be used if you want to send the exact same buffer to multiple clients without processing it more than once. */ -public class FramedPacket { - +public final class FramedPacket { private final ByteBuffer body; public FramedPacket(@NotNull ByteBuffer body) { diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 0a329b7ef..a8808614d 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -64,16 +64,12 @@ public class NettyPlayerConnection extends PlayerConnection { private PlayerSkin bungeeSkin; private final ByteBuffer tickBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); - private ByteBuffer cacheBuffer; + private volatile ByteBuffer cacheBuffer; - public NettyPlayerConnection(@NotNull SocketChannel channel) { + public NettyPlayerConnection(@NotNull SocketChannel channel, SocketAddress remoteAddress) { super(); this.channel = channel; - try { - this.remoteAddress = channel.getRemoteAddress(); - } catch (IOException e) { - e.printStackTrace(); - } + this.remoteAddress = remoteAddress; } public void processPackets(Worker.Context workerContext, PacketProcessor packetProcessor) { @@ -133,8 +129,8 @@ public class NettyPlayerConnection extends PlayerConnection { readBuffer.limit(limit).position(packetEnd); } catch (BufferUnderflowException e) { readBuffer.reset(); - this.cacheBuffer = ByteBuffer.allocateDirect(readBuffer.remaining()); - this.cacheBuffer.put(readBuffer).flip(); + this.cacheBuffer = ByteBuffer.allocateDirect(readBuffer.remaining()) + .put(readBuffer).flip(); break; } } @@ -191,7 +187,7 @@ public class NettyPlayerConnection extends PlayerConnection { serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); } - attemptWrite(PacketUtils.createFramedPacket(serverPacket)); + attemptWrite(serverPacket); } else { // Player is probably not logged yet writeAndFlush(serverPacket); @@ -208,17 +204,34 @@ public class NettyPlayerConnection extends PlayerConnection { } public void writeAndFlush(@NotNull ServerPacket packet) { - synchronized (tickBuffer){ - PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); + synchronized (tickBuffer) { + attemptWrite(packet); flush(); } } + public void attemptWrite(ServerPacket packet) { + synchronized (tickBuffer) { + final int position = tickBuffer.position(); + try { + PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); + } catch (BufferOverflowException e) { + try { + this.channel.write(tickBuffer.position(position).flip()); + this.tickBuffer.clear(); + PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); + } catch (IOException ex) { + disconnect(); + MinecraftServer.getExceptionManager().handleException(ex); + } + } + } + } + public void attemptWrite(ByteBuffer buffer) { - buffer.flip(); synchronized (tickBuffer) { try { - this.tickBuffer.put(buffer); + this.tickBuffer.put(buffer.flip()); } catch (BufferOverflowException e) { try { this.channel.write(tickBuffer.flip()); @@ -235,13 +248,12 @@ public class NettyPlayerConnection extends PlayerConnection { public void flush() { synchronized (tickBuffer) { - this.tickBuffer.flip(); - if (tickBuffer.remaining() == 0) { + if (tickBuffer.position() == 0) { // Nothing to write return; } try { - this.channel.write(tickBuffer); + this.channel.write(tickBuffer.flip()); } catch (IOException e) { MinecraftServer.getExceptionManager().handleException(e); } @@ -402,9 +414,6 @@ public class NettyPlayerConnection extends PlayerConnection { } } - public void releaseTickBuffer() { - } - public byte[] getNonce() { return nonce; } diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index a2bac27ab..685484ba2 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -73,8 +73,7 @@ public class Worker { } public void receiveConnection(SocketChannel channel) throws IOException { - var connection = new NettyPlayerConnection(channel); - this.connectionMap.put(channel, connection); + this.connectionMap.put(channel, new NettyPlayerConnection(channel, channel.getRemoteAddress())); register(channel); this.selector.wakeup(); } @@ -91,7 +90,7 @@ public class Worker { private void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { // Client close channel.close(); - connectionMap.remove(channel); + this.connectionMap.remove(channel); // Remove the connection connection.refreshOnline(false); Player player = connection.getPlayer(); diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 720db87bb..f8298a113 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -89,7 +89,8 @@ public final class PacketUtils { // Send grouped packet... final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); if (success) { - final ByteBuffer finalBuffer = createFramedPacket(packet); + ByteBuffer finalBuffer = ByteBuffer.allocate(2_000_000); + writeFramedPacket(finalBuffer, packet, MinecraftServer.getCompressionThreshold() > 0); final FramedPacket framedPacket = new FramedPacket(finalBuffer); // Send packet to all players for (Player player : players) { @@ -98,7 +99,6 @@ public final class PacketUtils { // Verify if the player should receive the packet if (playerValidator != null && !playerValidator.isValid(player)) continue; - final PlayerConnection playerConnection = player.getPlayerConnection(); if (playerConnection instanceof NettyPlayerConnection) { final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) playerConnection; @@ -114,8 +114,7 @@ public final class PacketUtils { // Verify if the player should receive the packet if (playerValidator != null && !playerValidator.isValid(player)) continue; - final PlayerConnection playerConnection = player.getPlayerConnection(); - playerConnection.sendPacket(packet, false); + player.getPlayerConnection().sendPacket(packet, false); } } } @@ -154,11 +153,11 @@ public final class PacketUtils { // Packet large enough, compress final int limitCache = buffer.limit(); buffer.position(contentStart).limit(contentStart + packetSize); - var uncompressedCopy = ByteBuffer.allocate(packetSize).put(buffer); + var uncompressedCopy = ByteBuffer.allocate(packetSize).put(buffer).flip(); buffer.position(contentStart).limit(limitCache); var deflater = COMPRESSOR.get(); - deflater.setInput(uncompressedCopy.flip()); + deflater.setInput(uncompressedCopy); deflater.finish(); deflater.deflate(buffer); deflater.reset(); @@ -170,17 +169,4 @@ public final class PacketUtils { Utils.writeVarIntHeader(buffer, uncompressedIndex, 0); } } - - /** - * Creates a "framed packet" (packet which can be send and understood by a Minecraft client) - * from a server packet, directly into an output buffer. - *

- * Can be used if you want to store a raw buffer and send it later without the additional writing cost. - * Compression is applied if {@link MinecraftServer#getCompressionThreshold()} is greater than 0. - */ - public static @NotNull ByteBuffer createFramedPacket(@NotNull ServerPacket serverPacket) { - ByteBuffer packetBuf = ByteBuffer.allocate(2_000_000); - writeFramedPacket(packetBuf, serverPacket, MinecraftServer.getCompressionThreshold() > 0); - return packetBuf; - } } From 5adeed392b0b778d6ce074bd255ca9bbeb0f1cd1 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 00:48:35 +0200 Subject: [PATCH 10/41] Flush packet sync Signed-off-by: TheMode --- src/main/java/net/minestom/server/UpdateManager.java | 12 +++++++----- .../server/network/player/NettyPlayerConnection.java | 5 ++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/minestom/server/UpdateManager.java b/src/main/java/net/minestom/server/UpdateManager.java index 585440138..da9ab6954 100644 --- a/src/main/java/net/minestom/server/UpdateManager.java +++ b/src/main/java/net/minestom/server/UpdateManager.java @@ -1,6 +1,7 @@ package net.minestom.server; import net.minestom.server.acquirable.Acquirable; +import net.minestom.server.entity.Player; import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceManager; @@ -9,7 +10,6 @@ import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.thread.SingleThreadProvider; import net.minestom.server.thread.ThreadProvider; -import net.minestom.server.utils.async.AsyncUtils; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -82,10 +82,12 @@ public final class UpdateManager { } // Flush all waiting packets - AsyncUtils.runAsync(() -> connectionManager.getOnlinePlayers().parallelStream() - .filter(player -> player.getPlayerConnection() instanceof NettyPlayerConnection) - .map(player -> (NettyPlayerConnection) player.getPlayerConnection()) - .forEach(NettyPlayerConnection::flush)); + for (Player player : connectionManager.getOnlinePlayers()) { + final var connection = player.getPlayerConnection(); + if (connection instanceof NettyPlayerConnection) { + ((NettyPlayerConnection) connection).flush(); + } + } // Disable thread until next tick LockSupport.parkNanos((long) ((MinecraftServer.TICK_MS * 1e6) - tickTime)); diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index a8808614d..112d8c96c 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -247,9 +247,12 @@ public class NettyPlayerConnection extends PlayerConnection { } public void flush() { + if (tickBuffer.position() == 0) { + // Nothing to write + return; + } synchronized (tickBuffer) { if (tickBuffer.position() == 0) { - // Nothing to write return; } try { From 9bb50430d497936235ca2a64a9feda90c6314509 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 03:53:01 +0200 Subject: [PATCH 11/41] Fix memory leak, decrease socket size --- .../server/network/player/NettyPlayerConnection.java | 9 ++++----- .../net/minestom/server/network/socket/Server.java | 2 +- .../net/minestom/server/network/socket/Worker.java | 11 ++++------- .../java/net/minestom/server/utils/PacketUtils.java | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 112d8c96c..8945e1bd6 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -38,9 +38,8 @@ import java.util.zip.DataFormatException; * It is the implementation used for all network client. */ public class NettyPlayerConnection extends PlayerConnection { - + private final Worker worker; private final SocketChannel channel; - private SocketAddress remoteAddress; private volatile boolean encrypted = false; @@ -66,8 +65,9 @@ public class NettyPlayerConnection extends PlayerConnection { private final ByteBuffer tickBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); private volatile ByteBuffer cacheBuffer; - public NettyPlayerConnection(@NotNull SocketChannel channel, SocketAddress remoteAddress) { + public NettyPlayerConnection(@NotNull Worker worker, @NotNull SocketChannel channel, SocketAddress remoteAddress) { super(); + this.worker = worker; this.channel = channel; this.remoteAddress = remoteAddress; } @@ -283,9 +283,8 @@ public class NettyPlayerConnection extends PlayerConnection { @Override public void disconnect() { - refreshOnline(false); try { - this.channel.close(); + this.worker.disconnect(this, channel); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index b5c98dbf9..434141a42 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -18,7 +18,7 @@ public class Server { public static final Logger LOGGER = LoggerFactory.getLogger(Server.class); public static final int WORKER_COUNT = Integer.getInteger("minestom.workers", Runtime.getRuntime().availableProcessors() * 2); - public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 262143); + public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 65535); public static final int MAX_PACKET_SIZE = 2097151; // 3 bytes var-int public static final boolean NO_DELAY = true; diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 685484ba2..0846bb96a 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -73,22 +73,19 @@ public class Worker { } public void receiveConnection(SocketChannel channel) throws IOException { - this.connectionMap.put(channel, new NettyPlayerConnection(channel, channel.getRemoteAddress())); - register(channel); - this.selector.wakeup(); - } - - private void register(SocketChannel channel) throws IOException { + this.connectionMap.put(channel, new NettyPlayerConnection(this, channel, channel.getRemoteAddress())); channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_READ); var socket = channel.socket(); socket.setSendBufferSize(Server.SOCKET_BUFFER_SIZE); socket.setReceiveBufferSize(Server.SOCKET_BUFFER_SIZE); socket.setTcpNoDelay(Server.NO_DELAY); + this.selector.wakeup(); } - private void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { + public void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { // Client close + connection.refreshOnline(false); channel.close(); this.connectionMap.remove(channel); // Remove the connection diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index f8298a113..afda163dd 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -89,7 +89,7 @@ public final class PacketUtils { // Send grouped packet... final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); if (success) { - ByteBuffer finalBuffer = ByteBuffer.allocate(2_000_000); + ByteBuffer finalBuffer = ByteBuffer.allocate(200_000); writeFramedPacket(finalBuffer, packet, MinecraftServer.getCompressionThreshold() > 0); final FramedPacket framedPacket = new FramedPacket(finalBuffer); // Send packet to all players From 557d34c378382218837cc3a671cce05ec6ad7ad3 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 04:00:42 +0200 Subject: [PATCH 12/41] Reduce allocation count --- .../server/network/PacketProcessor.java | 11 ++--- .../network/netty/packet/InboundPacket.java | 23 ---------- .../{netty => }/packet/FramedPacket.java | 12 +++-- .../network/player/NettyPlayerConnection.java | 46 +++++++++---------- .../minestom/server/utils/PacketUtils.java | 6 +-- 5 files changed, 39 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java rename src/main/java/net/minestom/server/network/{netty => }/packet/FramedPacket.java (60%) diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index f89799602..3b1fd51b2 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -2,7 +2,6 @@ package net.minestom.server.network; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; -import net.minestom.server.network.netty.packet.InboundPacket; import net.minestom.server.network.packet.client.ClientPlayPacket; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.client.handler.ClientLoginPacketsHandler; @@ -17,6 +16,8 @@ import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.ByteBuffer; + /** * Responsible for processing client packets. *

@@ -41,14 +42,12 @@ public final class PacketProcessor { this.playPacketsHandler = new ClientPlayPacketsHandler(); } - public void process(@NotNull NettyPlayerConnection playerConnection, @NotNull InboundPacket packet) { - // Increment packet count (checked in PlayerConnection#update) + public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, ByteBuffer body) { if (MinecraftServer.getRateLimit() > 0) { + // Increment packet count (checked in PlayerConnection#update) playerConnection.getPacketCounter().incrementAndGet(); } - final int packetId = packet.getPacketId(); - BinaryReader binaryReader = new BinaryReader(packet.getBody()); - + BinaryReader binaryReader = new BinaryReader(body); final ConnectionState connectionState = playerConnection.getConnectionState(); if (connectionState == ConnectionState.UNKNOWN) { // Should be handshake packet diff --git a/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java b/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java deleted file mode 100644 index 51ae25550..000000000 --- a/src/main/java/net/minestom/server/network/netty/packet/InboundPacket.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.minestom.server.network.netty.packet; - -import org.jetbrains.annotations.NotNull; - -import java.nio.ByteBuffer; - -public class InboundPacket { - private final int packetId; - private final ByteBuffer body; - - public InboundPacket(int id, @NotNull ByteBuffer body) { - this.packetId = id; - this.body = body; - } - - public int getPacketId() { - return packetId; - } - - public @NotNull ByteBuffer getBody() { - return body; - } -} diff --git a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java b/src/main/java/net/minestom/server/network/packet/FramedPacket.java similarity index 60% rename from src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java rename to src/main/java/net/minestom/server/network/packet/FramedPacket.java index 96426ac66..eb5e4adbf 100644 --- a/src/main/java/net/minestom/server/network/netty/packet/FramedPacket.java +++ b/src/main/java/net/minestom/server/network/packet/FramedPacket.java @@ -1,4 +1,4 @@ -package net.minestom.server.network.netty.packet; +package net.minestom.server.network.packet; import org.jetbrains.annotations.NotNull; @@ -9,13 +9,19 @@ import java.nio.ByteBuffer; * Can be used if you want to send the exact same buffer to multiple clients without processing it more than once. */ public final class FramedPacket { + private final int packetId; private final ByteBuffer body; - public FramedPacket(@NotNull ByteBuffer body) { + public FramedPacket(int packetId, @NotNull ByteBuffer body) { + this.packetId = packetId; this.body = body; } - public @NotNull ByteBuffer getBody() { + public int packetId() { + return packetId; + } + + public @NotNull ByteBuffer body() { return body; } } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 8945e1bd6..6db666581 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -6,8 +6,7 @@ import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.entity.PlayerSkin; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.netty.packet.FramedPacket; -import net.minestom.server.network.netty.packet.InboundPacket; +import net.minestom.server.network.packet.FramedPacket; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.login.SetCompressionPacket; @@ -90,38 +89,37 @@ public class NettyPlayerConnection extends PlayerConnection { readBuffer.limit(packetEnd); // Ensure that the reader doesn't exceed packet bound // Read protocol - var content = workerContext.contentBuffer.clear(); - { - if (!compressed) { - // Compression disabled, payload is following + ByteBuffer content; + if (!compressed) { + // Compression disabled, payload is following + content = readBuffer; + } else { + final int dataLength = Utils.readVarInt(readBuffer); + if (dataLength == 0) { + // Data is too small to be compressed, payload is following content = readBuffer; } else { - final int dataLength = Utils.readVarInt(readBuffer); - if (dataLength == 0) { - // Data is too small to be compressed, payload is following - content = readBuffer; - } else { - // Decompress to content buffer - try { - final var inflater = workerContext.inflater; - inflater.setInput(readBuffer); - inflater.inflate(content); - inflater.reset(); - } catch (DataFormatException e) { - e.printStackTrace(); - } - content.flip(); + // Decompress to content buffer + content = workerContext.contentBuffer.clear(); + try { + final var inflater = workerContext.inflater; + inflater.setInput(readBuffer); + inflater.inflate(content); + inflater.reset(); + } catch (DataFormatException e) { + e.printStackTrace(); } + content.flip(); } } // Process packet final int packetId = Utils.readVarInt(content); try { - packetProcessor.process(this, new InboundPacket(packetId, content)); + packetProcessor.process(this, packetId, content); } catch (Exception e) { // Error while reading the packet - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); break; } @@ -196,7 +194,7 @@ public class NettyPlayerConnection extends PlayerConnection { } public void write(@NotNull FramedPacket framedPacket) { - attemptWrite(framedPacket.getBody()); + attemptWrite(framedPacket.body()); } public void write(@NotNull ByteBuffer buffer) { diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index afda163dd..339512500 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -7,7 +7,7 @@ import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.adventure.audience.PacketGroupingAudience; import net.minestom.server.entity.Player; import net.minestom.server.listener.manager.PacketListenerManager; -import net.minestom.server.network.netty.packet.FramedPacket; +import net.minestom.server.network.packet.FramedPacket; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.player.NettyPlayerConnection; @@ -89,9 +89,9 @@ public final class PacketUtils { // Send grouped packet... final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); if (success) { - ByteBuffer finalBuffer = ByteBuffer.allocate(200_000); + ByteBuffer finalBuffer = ByteBuffer.allocate(200_000); // TODO don't allocate writeFramedPacket(finalBuffer, packet, MinecraftServer.getCompressionThreshold() > 0); - final FramedPacket framedPacket = new FramedPacket(finalBuffer); + final FramedPacket framedPacket = new FramedPacket(packet.getId(), finalBuffer); // Send packet to all players for (Player player : players) { if (!player.isOnline()) From 8895e49a527804f007dffdf331d36dce2481ab60 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 05:15:40 +0200 Subject: [PATCH 13/41] Improve socket shutdown --- src/main/java/net/minestom/server/network/socket/Server.java | 1 + src/main/java/net/minestom/server/network/socket/Worker.java | 2 +- src/main/java/net/minestom/server/utils/PacketUtils.java | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index 434141a42..ac349040c 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -65,6 +65,7 @@ public class Server { public void stop() { this.stop = true; + this.workers.forEach(worker -> worker.selector.wakeup()); } public String getAddress() { diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 0846bb96a..b12e51232 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -19,7 +19,7 @@ import java.util.zip.Inflater; public class Worker { private final Map connectionMap = new ConcurrentHashMap<>(); - private final Selector selector = Selector.open(); + protected final Selector selector = Selector.open(); private final PacketProcessor packetProcessor; public Worker(Server server, PacketProcessor packetProcessor) throws IOException { diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 339512500..4c0bf3f48 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -101,8 +101,7 @@ public final class PacketUtils { continue; final PlayerConnection playerConnection = player.getPlayerConnection(); if (playerConnection instanceof NettyPlayerConnection) { - final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) playerConnection; - nettyPlayerConnection.write(framedPacket); + ((NettyPlayerConnection) playerConnection).write(framedPacket); } else { playerConnection.sendPacket(packet); } From 0d91f9efc6b8d6ca0329a32e18609f627a7029ad Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 05:19:11 +0200 Subject: [PATCH 14/41] Close the main selector --- src/main/java/net/minestom/server/network/socket/Server.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index ac349040c..c639ddf30 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -24,6 +24,7 @@ public class Server { private volatile boolean stop; + private final Selector selector = Selector.open(); private final List workers = new ArrayList<>(WORKER_COUNT); private int index; @@ -39,7 +40,6 @@ public class Server { } public void start(SocketAddress address) throws IOException { - Selector selector = Selector.open(); this.serverSocket = ServerSocketChannel.open(); serverSocket.bind(address); serverSocket.configureBlocking(false); @@ -65,6 +65,7 @@ public class Server { public void stop() { this.stop = true; + this.selector.wakeup(); this.workers.forEach(worker -> worker.selector.wakeup()); } From 174ef14303cc46a2e57015e5d6cbc0c17399539a Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 12:41:15 +0200 Subject: [PATCH 15/41] Reuse grouped buffers --- .../minestom/server/utils/PacketUtils.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 4c0bf3f48..758416538 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -12,11 +12,13 @@ import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.socket.Server; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.callback.validator.PlayerValidator; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.util.Collection; import java.util.zip.Deflater; @@ -28,6 +30,7 @@ import java.util.zip.Deflater; public final class PacketUtils { private static final PacketListenerManager PACKET_LISTENER_MANAGER = MinecraftServer.getPacketListenerManager(); private static final ThreadLocal COMPRESSOR = ThreadLocal.withInitial(Deflater::new); + private static final ThreadLocal BUFFER = ThreadLocal.withInitial(() -> ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE)); private PacketUtils() { } @@ -89,8 +92,7 @@ public final class PacketUtils { // Send grouped packet... final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); if (success) { - ByteBuffer finalBuffer = ByteBuffer.allocate(200_000); // TODO don't allocate - writeFramedPacket(finalBuffer, packet, MinecraftServer.getCompressionThreshold() > 0); + ByteBuffer finalBuffer = createFramedPacket(packet); final FramedPacket framedPacket = new FramedPacket(packet.getId(), finalBuffer); // Send packet to all players for (Player player : players) { @@ -106,6 +108,7 @@ public final class PacketUtils { playerConnection.sendPacket(packet); } } + finalBuffer.clear(); // Clear packet to be reused } } else { // Write the same packet for each individual players @@ -168,4 +171,17 @@ public final class PacketUtils { Utils.writeVarIntHeader(buffer, uncompressedIndex, 0); } } + + public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { + var buffer = BUFFER.get(); + try { + writeFramedPacket(buffer, packet, MinecraftServer.getCompressionThreshold() > 0); + } catch (BufferOverflowException e) { + // In the unlikely case where the packet is bigger than the default buffer size, + // increase to the highest authorized buffer size using heap (for cheap allocation) + buffer = ByteBuffer.allocate(Server.MAX_PACKET_SIZE); + writeFramedPacket(buffer, packet, MinecraftServer.getCompressionThreshold() > 0); + } + return buffer; + } } From 7320d83175a72fb2c0a238b2d6e5a2a834b91af0 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 12:52:49 +0200 Subject: [PATCH 16/41] Reduce exception spam --- .../network/player/NettyPlayerConnection.java | 5 ++-- .../server/network/socket/Worker.java | 23 ++++++++----------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 6db666581..be870a663 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -250,9 +250,8 @@ public class NettyPlayerConnection extends PlayerConnection { return; } synchronized (tickBuffer) { - if (tickBuffer.position() == 0) { - return; - } + if (!channel.isOpen()) return; + if (tickBuffer.position() == 0) return; try { this.channel.write(tickBuffer.flip()); } catch (IOException e) { diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index b12e51232..11f1b849c 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -4,6 +4,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.network.PacketProcessor; import net.minestom.server.network.player.NettyPlayerConnection; +import org.jetbrains.annotations.ApiStatus; import java.io.IOException; import java.nio.ByteBuffer; @@ -17,9 +18,10 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.zip.Inflater; -public class Worker { +@ApiStatus.Internal +public final class Worker { + final Selector selector = Selector.open(); private final Map connectionMap = new ConcurrentHashMap<>(); - protected final Selector selector = Selector.open(); private final PacketProcessor packetProcessor; public Worker(Server server, PacketProcessor packetProcessor) throws IOException { @@ -49,7 +51,6 @@ public class Worker { ByteBuffer readBuffer = workerContext.readBuffer; // Consume last incomplete packet connection.consumeCache(readBuffer); - // Read socket if (channel.read(readBuffer) == -1) { // EOS @@ -59,7 +60,7 @@ public class Worker { readBuffer.flip(); connection.processPackets(workerContext, packetProcessor); } catch (IOException e) { - e.printStackTrace(); + // TODO print exception? (should ignore disconnection) try { disconnect(connection, channel); } catch (IOException ioException) { @@ -101,15 +102,15 @@ public class Worker { private static final AtomicInteger COUNTER = new AtomicInteger(); private Thread(Runnable runnable) { - super(null, runnable, "worker-" + COUNTER.getAndIncrement()); + super(null, runnable, "net-worker-" + COUNTER.getAndIncrement()); } protected static void start(Server server, Consumer runnable) { new Thread(() -> { - Context workerContext = new Context(); + Context context = new Context(); while (server.isOpen()) { try { - runnable.accept(workerContext); + runnable.accept(context); } catch (Exception e) { e.printStackTrace(); } @@ -122,20 +123,16 @@ public class Worker { * Contains objects that we can be shared across all the connection of a {@link Worker worker}. */ public static final class Context { - public final ByteBuffer readBuffer = allocate(Server.SOCKET_BUFFER_SIZE); + public final ByteBuffer readBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); /** * Stores a single packet payload to be read. */ - public final ByteBuffer contentBuffer = allocate(Server.MAX_PACKET_SIZE); + public final ByteBuffer contentBuffer = ByteBuffer.allocateDirect(Server.MAX_PACKET_SIZE); public final Inflater inflater = new Inflater(); public void clearBuffers() { this.readBuffer.clear(); this.contentBuffer.clear(); } - - private static ByteBuffer allocate(int size) { - return ByteBuffer.allocateDirect(size); - } } } From 58f0f3ec8980cffec2cf73ca0b28c2f27f07f473 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 14:47:19 +0200 Subject: [PATCH 17/41] Light cleanup --- .../server/network/player/NettyPlayerConnection.java | 9 ++++++--- .../net/minestom/server/network/socket/Server.java | 7 +++---- .../net/minestom/server/network/socket/Worker.java | 10 +++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index be870a663..f5c117b22 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -3,6 +3,7 @@ package net.minestom.server.network.player; import net.kyori.adventure.translation.GlobalTranslator; import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.MinestomAdventure; +import net.minestom.server.entity.Player; import net.minestom.server.entity.PlayerSkin; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.PacketProcessor; @@ -15,6 +16,7 @@ import net.minestom.server.network.socket.Worker; import net.minestom.server.utils.PacketUtils; import net.minestom.server.utils.Utils; import net.minestom.server.utils.validate.Check; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -179,11 +181,12 @@ public class NettyPlayerConnection extends PlayerConnection { if (!channel.isConnected()) return; if (shouldSendPacket(serverPacket)) { - if (getPlayer() != null) { + final Player player = getPlayer(); + if (player != null) { // Flush happen during #update() if ((MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && serverPacket instanceof ComponentHoldingServerPacket) { serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> - GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); + GlobalTranslator.render(component, Objects.requireNonNullElseGet(player.getLocale(), MinestomAdventure::getDefaultLocale))); } attemptWrite(serverPacket); } else { @@ -273,6 +276,7 @@ public class NettyPlayerConnection extends PlayerConnection { * * @param remoteAddress the new connection remote address */ + @ApiStatus.Internal public void setRemoteAddress(@NotNull SocketAddress remoteAddress) { this.remoteAddress = remoteAddress; } @@ -345,7 +349,6 @@ public class NettyPlayerConnection extends PlayerConnection { return protocolVersion; } - /** * Used in {@link net.minestom.server.network.packet.client.handshake.HandshakePacket} to change the internal fields. * diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index c639ddf30..a11d9c9b5 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -14,12 +14,12 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -public class Server { +public final class Server { public static final Logger LOGGER = LoggerFactory.getLogger(Server.class); public static final int WORKER_COUNT = Integer.getInteger("minestom.workers", Runtime.getRuntime().availableProcessors() * 2); public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 65535); - public static final int MAX_PACKET_SIZE = 2097151; // 3 bytes var-int + public static final int MAX_PACKET_SIZE = 2_097_151; // 3 bytes var-int public static final boolean NO_DELAY = true; private volatile boolean stop; @@ -45,7 +45,6 @@ public class Server { serverSocket.configureBlocking(false); serverSocket.register(selector, SelectionKey.OP_ACCEPT); serverSocket.socket().setReceiveBufferSize(SOCKET_BUFFER_SIZE); - LOGGER.info("Server starting, wait for connections"); new Thread(() -> { while (!stop) { @@ -56,7 +55,7 @@ public class Server { e.printStackTrace(); } } - }).start(); + }, "Ms-entrypoint").start(); } public boolean isOpen() { diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 11f1b849c..c4998af63 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -98,14 +98,18 @@ public final class Worker { } } - static class Thread extends java.lang.Thread { + /** + * Thread responsible for reading players socket and forwarding packets into + * players' packet queue. + */ + static final class Thread extends java.lang.Thread { private static final AtomicInteger COUNTER = new AtomicInteger(); private Thread(Runnable runnable) { - super(null, runnable, "net-worker-" + COUNTER.getAndIncrement()); + super(null, runnable, "Ms-worker-" + COUNTER.getAndIncrement()); } - protected static void start(Server server, Consumer runnable) { + static void start(Server server, Consumer runnable) { new Thread(() -> { Context context = new Context(); while (server.isOpen()) { From 9b9d3f34057a710c5330f9225ea5923a7c54374a Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 16:49:01 +0200 Subject: [PATCH 18/41] Better chunk packet caching --- .../net/minestom/server/instance/Chunk.java | 84 ++------------- .../server/instance/DynamicChunk.java | 100 +++++++++++++++--- .../server/instance/batch/ChunkBatch.java | 5 +- .../minestom/server/utils/PacketUtils.java | 55 +++++----- .../server/utils/binary/BitmaskUtil.java | 9 -- 5 files changed, 120 insertions(+), 133 deletions(-) delete mode 100644 src/main/java/net/minestom/server/utils/binary/BitmaskUtil.java diff --git a/src/main/java/net/minestom/server/instance/Chunk.java b/src/main/java/net/minestom/server/instance/Chunk.java index dec32ac4d..d5121a09b 100644 --- a/src/main/java/net/minestom/server/instance/Chunk.java +++ b/src/main/java/net/minestom/server/instance/Chunk.java @@ -13,18 +13,18 @@ import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockGetter; import net.minestom.server.instance.block.BlockSetter; import net.minestom.server.network.packet.server.play.ChunkDataPacket; -import net.minestom.server.network.packet.server.play.UpdateLightPacket; -import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.tag.Tag; import net.minestom.server.tag.TagHandler; -import net.minestom.server.utils.ArrayUtils; import net.minestom.server.utils.chunk.ChunkSupplier; import net.minestom.server.world.biomes.Biome; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jglrxavpok.hephaistos.nbt.NBTCompound; -import java.util.*; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; // TODO light data & API @@ -126,11 +126,13 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka public abstract long getLastChangeTime(); /** - * Creates a {@link ChunkDataPacket} with this chunk data ready to be written. + * Sends the chunk data to {@code player}. * - * @return a new chunk data packet + * @param player the player */ - public abstract @NotNull ChunkDataPacket createChunkPacket(); + public abstract void sendChunk(@NotNull Player player); + + public abstract void sendChunk(); /** * Creates a copy of this chunk, including blocks state id, custom block id, biomes, update data. @@ -152,7 +154,7 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka /** * Gets the unique identifier of this chunk. *

- * WARNING: this UUID is not persistent but randomized once the object is instantiate. + * WARNING: this UUID is not persistent but randomized once the object is instantiated. * * @return the chunk identifier */ @@ -244,50 +246,6 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka this.columnarSpace = columnarSpace; } - /** - * Gets the light packet of this chunk. - * - * @return the light packet - */ - @NotNull - public UpdateLightPacket getLightPacket() { - long skyMask = 0; - long blockMask = 0; - List skyLights = new ArrayList<>(); - List blockLights = new ArrayList<>(); - - UpdateLightPacket updateLightPacket = new UpdateLightPacket(); - updateLightPacket.chunkX = getChunkX(); - updateLightPacket.chunkZ = getChunkZ(); - - updateLightPacket.skyLight = skyLights; - updateLightPacket.blockLight = blockLights; - - final var sections = getSections(); - for (var entry : sections.entrySet()) { - final int index = entry.getKey() + 1; - final Section section = entry.getValue(); - - final var skyLight = section.getSkyLight(); - final var blockLight = section.getBlockLight(); - - if (!ArrayUtils.empty(skyLight)) { - skyLights.add(skyLight); - skyMask |= 1L << index; - } - if (!ArrayUtils.empty(blockLight)) { - blockLights.add(blockLight); - blockMask |= 1L << index; - } - } - - updateLightPacket.skyLightMask = new long[]{skyMask}; - updateLightPacket.blockLightMask = new long[]{blockMask}; - updateLightPacket.emptySkyLightMask = new long[0]; - updateLightPacket.emptyBlockLightMask = new long[0]; - return updateLightPacket; - } - /** * Used to verify if the chunk should still be kept in memory. * @@ -365,28 +323,6 @@ public abstract class Chunk implements BlockGetter, BlockSetter, Viewable, Ticka tag.write(nbt, value); } - /** - * Sends the chunk data to {@code player}. - * - * @param player the player - */ - public synchronized void sendChunk(@NotNull Player player) { - // Only send loaded chunk - if (!isLoaded()) - return; - final PlayerConnection playerConnection = player.getPlayerConnection(); - playerConnection.sendPacket(getLightPacket()); - playerConnection.sendPacket(createChunkPacket()); - } - - public synchronized void sendChunk() { - if (!isLoaded()) { - return; - } - sendPacketToViewers(getLightPacket()); - sendPacketToViewers(createChunkPacket()); - } - /** * Sets the chunk as "unloaded". */ diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index d44fe308a..72812c589 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -4,16 +4,24 @@ import com.extollit.gaming.ai.path.model.ColumnarOcclusionFieldList; import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minestom.server.coordinate.Vec; +import net.minestom.server.entity.Player; import net.minestom.server.entity.pathfinding.PFBlock; import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.network.packet.server.play.ChunkDataPacket; +import net.minestom.server.network.packet.server.play.UpdateLightPacket; +import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.utils.ArrayUtils; +import net.minestom.server.utils.PacketUtils; import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.lang.ref.SoftReference; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -30,9 +38,10 @@ public class DynamicChunk extends Chunk { protected final Int2ObjectOpenHashMap entries = new Int2ObjectOpenHashMap<>(); protected final Int2ObjectOpenHashMap tickableMap = new Int2ObjectOpenHashMap<>(); - private long lastChangeTime; + private volatile long lastChangeTime; - private SoftReference cachedPacket = new SoftReference<>(null); + private ByteBuffer cachedChunkBuffer; + private ByteBuffer cachedLightBuffer; private long cachedPacketTime; public DynamicChunk(@NotNull Instance instance, @Nullable Biome[] biomes, int chunkX, int chunkZ) { @@ -117,23 +126,32 @@ public class DynamicChunk extends Chunk { return lastChangeTime; } - @NotNull @Override - public ChunkDataPacket createChunkPacket() { - ChunkDataPacket packet = cachedPacket.get(); - if (packet != null && cachedPacketTime == getLastChangeTime()) { - return packet; + public synchronized void sendChunk(@NotNull Player player) { + if (!isLoaded()) return; + final PlayerConnection connection = player.getPlayerConnection(); + if (connection instanceof NettyPlayerConnection) { + final long lastChange = getLastChangeTime(); + if (lastChange > cachedPacketTime || + (cachedChunkBuffer == null || cachedLightBuffer == null)) { + this.cachedChunkBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createChunkPacket()); + this.cachedLightBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createLightPacket()); + this.cachedPacketTime = lastChange; + } + NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; + nettyPlayerConnection.write(cachedChunkBuffer); + nettyPlayerConnection.write(cachedLightBuffer); + } else { + connection.sendPacket(createLightPacket()); + connection.sendPacket(createChunkPacket()); } - packet = new ChunkDataPacket(); - packet.biomes = biomes; - packet.chunkX = chunkX; - packet.chunkZ = chunkZ; - packet.sections = sectionMap.clone(); // TODO deep clone - packet.entries = entries.clone(); + } - this.cachedPacketTime = getLastChangeTime(); - this.cachedPacket = new SoftReference<>(packet); - return packet; + @Override + public synchronized void sendChunk() { + if (!isLoaded()) return; + sendPacketToViewers(createLightPacket()); + sendPacketToViewers(createChunkPacket()); } @NotNull @@ -153,6 +171,54 @@ public class DynamicChunk extends Chunk { this.entries.clear(); } + private @NotNull ChunkDataPacket createChunkPacket() { + ChunkDataPacket packet = new ChunkDataPacket(); + packet.biomes = biomes; + packet.chunkX = chunkX; + packet.chunkZ = chunkZ; + packet.sections = sectionMap.clone(); // TODO deep clone + packet.entries = entries.clone(); + return packet; + } + + private @NotNull UpdateLightPacket createLightPacket() { + long skyMask = 0; + long blockMask = 0; + List skyLights = new ArrayList<>(); + List blockLights = new ArrayList<>(); + + UpdateLightPacket updateLightPacket = new UpdateLightPacket(); + updateLightPacket.chunkX = getChunkX(); + updateLightPacket.chunkZ = getChunkZ(); + + updateLightPacket.skyLight = skyLights; + updateLightPacket.blockLight = blockLights; + + final var sections = getSections(); + for (var entry : sections.entrySet()) { + final int index = entry.getKey() + 1; + final Section section = entry.getValue(); + + final var skyLight = section.getSkyLight(); + final var blockLight = section.getBlockLight(); + + if (!ArrayUtils.empty(skyLight)) { + skyLights.add(skyLight); + skyMask |= 1L << index; + } + if (!ArrayUtils.empty(blockLight)) { + blockLights.add(blockLight); + blockMask |= 1L << index; + } + } + + updateLightPacket.skyLightMask = new long[]{skyMask}; + updateLightPacket.blockLightMask = new long[]{blockMask}; + updateLightPacket.emptySkyLightMask = new long[0]; + updateLightPacket.emptyBlockLightMask = new long[0]; + return updateLightPacket; + } + private @Nullable Section getOptionalSection(int y) { final int sectionIndex = ChunkUtils.getSectionAt(y); return sectionMap.get(sectionIndex); diff --git a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java index ce50369e7..5c47a7779 100644 --- a/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java +++ b/src/main/java/net/minestom/server/instance/batch/ChunkBatch.java @@ -8,8 +8,6 @@ import net.minestom.server.instance.Chunk; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceContainer; import net.minestom.server.instance.block.Block; -import net.minestom.server.network.packet.server.play.ChunkDataPacket; -import net.minestom.server.utils.PacketUtils; import net.minestom.server.utils.callback.OptionalCallback; import net.minestom.server.utils.chunk.ChunkCallback; import net.minestom.server.utils.chunk.ChunkUtils; @@ -225,9 +223,8 @@ public class ChunkBatch implements Batch { private void updateChunk(@NotNull Instance instance, Chunk chunk, IntSet updatedSections, @Nullable ChunkCallback callback, boolean safeCallback) { // Refresh chunk for viewers if (options.shouldSendUpdate()) { - ChunkDataPacket chunkDataPacket = chunk.createChunkPacket(); // TODO update all sections from `updatedSections` - PacketUtils.sendGroupedPacket(chunk.getViewers(), chunkDataPacket); + chunk.sendChunk(); } if (instance instanceof InstanceContainer) { diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 758416538..b45c03211 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -16,7 +16,6 @@ import net.minestom.server.network.socket.Server; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.callback.validator.PlayerValidator; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.nio.BufferOverflowException; import java.nio.ByteBuffer; @@ -78,43 +77,36 @@ public final class PacketUtils { * @param playerValidator optional callback to check if a specify player of {@code players} should receive the packet */ public static void sendGroupedPacket(@NotNull Collection players, @NotNull ServerPacket packet, - @Nullable PlayerValidator playerValidator) { + @NotNull PlayerValidator playerValidator) { if (players.isEmpty()) return; - // work out if the packet needs to be sent individually due to server-side translating boolean needsTranslating = false; if (MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && packet instanceof ComponentHoldingServerPacket) { needsTranslating = ComponentUtils.areAnyTranslatable(((ComponentHoldingServerPacket) packet).components()); } - if (MinecraftServer.hasGroupedPacket() && !needsTranslating) { // Send grouped packet... - final boolean success = PACKET_LISTENER_MANAGER.processServerPacket(packet, players); - if (success) { - ByteBuffer finalBuffer = createFramedPacket(packet); - final FramedPacket framedPacket = new FramedPacket(packet.getId(), finalBuffer); - // Send packet to all players - for (Player player : players) { - if (!player.isOnline()) - continue; - // Verify if the player should receive the packet - if (playerValidator != null && !playerValidator.isValid(player)) - continue; - final PlayerConnection playerConnection = player.getPlayerConnection(); - if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).write(framedPacket); - } else { - playerConnection.sendPacket(packet); - } + if (!PACKET_LISTENER_MANAGER.processServerPacket(packet, players)) + return; + final ByteBuffer finalBuffer = createFramedPacket(packet); + final FramedPacket framedPacket = new FramedPacket(packet.getId(), finalBuffer); + // Send packet to all players + for (Player player : players) { + if (!player.isOnline() || !playerValidator.isValid(player)) + continue; + final PlayerConnection connection = player.getPlayerConnection(); + if (connection instanceof NettyPlayerConnection) { + ((NettyPlayerConnection) connection).write(framedPacket); + } else { + connection.sendPacket(packet); } - finalBuffer.clear(); // Clear packet to be reused } + finalBuffer.clear(); // Clear packet to be reused } else { // Write the same packet for each individual players for (Player player : players) { - // Verify if the player should receive the packet - if (playerValidator != null && !playerValidator.isValid(player)) + if (!player.isOnline() || !playerValidator.isValid(player)) continue; player.getPlayerConnection().sendPacket(packet, false); } @@ -128,7 +120,7 @@ public final class PacketUtils { * @see #sendGroupedPacket(Collection, ServerPacket, PlayerValidator) */ public static void sendGroupedPacket(@NotNull Collection players, @NotNull ServerPacket packet) { - sendGroupedPacket(players, packet, null); + sendGroupedPacket(players, packet, player -> true); } public static void writeFramedPacket(@NotNull ByteBuffer buffer, @@ -172,16 +164,21 @@ public final class PacketUtils { } } - public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { - var buffer = BUFFER.get(); + public static ByteBuffer createFramedPacket(@NotNull ByteBuffer initial, @NotNull ServerPacket packet) { + final boolean compression = MinecraftServer.getCompressionThreshold() > 0; + var buffer = initial; try { - writeFramedPacket(buffer, packet, MinecraftServer.getCompressionThreshold() > 0); + writeFramedPacket(buffer, packet, compression); } catch (BufferOverflowException e) { // In the unlikely case where the packet is bigger than the default buffer size, // increase to the highest authorized buffer size using heap (for cheap allocation) buffer = ByteBuffer.allocate(Server.MAX_PACKET_SIZE); - writeFramedPacket(buffer, packet, MinecraftServer.getCompressionThreshold() > 0); + writeFramedPacket(buffer, packet, compression); } return buffer; } + + public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { + return createFramedPacket(BUFFER.get(), packet); + } } diff --git a/src/main/java/net/minestom/server/utils/binary/BitmaskUtil.java b/src/main/java/net/minestom/server/utils/binary/BitmaskUtil.java deleted file mode 100644 index a7813ebd6..000000000 --- a/src/main/java/net/minestom/server/utils/binary/BitmaskUtil.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.minestom.server.utils.binary; - -public final class BitmaskUtil { - - public static byte changeBit(byte value, byte mask, byte replacement, byte shift) { - return (byte) (value & ~mask | (replacement << shift)); - } - -} From 0b23795fb063234402bd9c898c9b2baab7cb21a7 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 17:32:36 +0200 Subject: [PATCH 19/41] Remove login log --- src/main/java/net/minestom/server/network/socket/Server.java | 1 - src/test/java/demo/Main.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index a11d9c9b5..5d0f32a05 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -85,7 +85,6 @@ public final class Server { Worker thread = findWorker(); final SocketChannel client = socketChannel.accept(); thread.receiveConnection(client); - LOGGER.info("new connection: " + client); } } selectedKeys.clear(); diff --git a/src/test/java/demo/Main.java b/src/test/java/demo/Main.java index 1ea170024..1343f44e9 100644 --- a/src/test/java/demo/Main.java +++ b/src/test/java/demo/Main.java @@ -24,7 +24,6 @@ public class Main { public static void main(String[] args) { MinecraftServer minecraftServer = MinecraftServer.init(); - MinecraftServer.setCompressionThreshold(0); BlockManager blockManager = MinecraftServer.getBlockManager(); From 538d641d4bf2c1aa3d2edd85c12d73fdb19b41b1 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 20:34:27 +0200 Subject: [PATCH 20/41] Channel write cleanup --- .../server/instance/DynamicChunk.java | 3 +- .../network/player/NettyPlayerConnection.java | 51 +++++++++---------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index 72812c589..fdd322054 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -132,8 +132,7 @@ public class DynamicChunk extends Chunk { final PlayerConnection connection = player.getPlayerConnection(); if (connection instanceof NettyPlayerConnection) { final long lastChange = getLastChangeTime(); - if (lastChange > cachedPacketTime || - (cachedChunkBuffer == null || cachedLightBuffer == null)) { + if (lastChange > cachedPacketTime || (cachedChunkBuffer == null || cachedLightBuffer == null)) { this.cachedChunkBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createChunkPacket()); this.cachedLightBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createLightPacket()); this.cachedPacketTime = lastChange; diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index f5c117b22..9be69b392 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -188,7 +188,7 @@ public class NettyPlayerConnection extends PlayerConnection { serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> GlobalTranslator.render(component, Objects.requireNonNullElseGet(player.getLocale(), MinestomAdventure::getDefaultLocale))); } - attemptWrite(serverPacket); + write(serverPacket); } else { // Player is probably not logged yet writeAndFlush(serverPacket); @@ -196,22 +196,29 @@ public class NettyPlayerConnection extends PlayerConnection { } } - public void write(@NotNull FramedPacket framedPacket) { - attemptWrite(framedPacket.body()); - } - public void write(@NotNull ByteBuffer buffer) { - attemptWrite(buffer); - } - - public void writeAndFlush(@NotNull ServerPacket packet) { synchronized (tickBuffer) { - attemptWrite(packet); - flush(); + buffer.flip(); + if (tickBuffer.remaining() >= buffer.remaining()) { + // Enough buffer space + this.tickBuffer.put(buffer); + } else { + try { + this.channel.write(tickBuffer.flip()); + this.tickBuffer.clear().put(buffer); + } catch (IOException ex) { + disconnect(); + MinecraftServer.getExceptionManager().handleException(ex); + } + } } } - public void attemptWrite(ServerPacket packet) { + public void write(@NotNull FramedPacket framedPacket) { + write(framedPacket.body()); + } + + public void write(@NotNull ServerPacket packet) { synchronized (tickBuffer) { final int position = tickBuffer.position(); try { @@ -229,21 +236,10 @@ public class NettyPlayerConnection extends PlayerConnection { } } - public void attemptWrite(ByteBuffer buffer) { + public void writeAndFlush(@NotNull ServerPacket packet) { synchronized (tickBuffer) { - try { - this.tickBuffer.put(buffer.flip()); - } catch (BufferOverflowException e) { - try { - this.channel.write(tickBuffer.flip()); - this.channel.write(buffer); - } catch (IOException ex) { - disconnect(); - MinecraftServer.getExceptionManager().handleException(ex); - } finally { - this.tickBuffer.clear(); - } - } + write(packet); + flush(); } } @@ -257,10 +253,11 @@ public class NettyPlayerConnection extends PlayerConnection { if (tickBuffer.position() == 0) return; try { this.channel.write(tickBuffer.flip()); + this.tickBuffer.clear(); } catch (IOException e) { + disconnect(); MinecraftServer.getExceptionManager().handleException(e); } - this.tickBuffer.clear(); } } From 120b58db6ac6c94383fd0b244083832dfb2a65b1 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 21:02:59 +0200 Subject: [PATCH 21/41] Fix ghost player, trim chunk/light packets --- .../java/net/minestom/server/instance/DynamicChunk.java | 6 ++++-- .../server/network/player/NettyPlayerConnection.java | 6 +----- .../java/net/minestom/server/network/socket/Worker.java | 4 +--- src/main/java/net/minestom/server/utils/PacketUtils.java | 3 +-- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index fdd322054..d391d2e7b 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -133,8 +133,10 @@ public class DynamicChunk extends Chunk { if (connection instanceof NettyPlayerConnection) { final long lastChange = getLastChangeTime(); if (lastChange > cachedPacketTime || (cachedChunkBuffer == null || cachedLightBuffer == null)) { - this.cachedChunkBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createChunkPacket()); - this.cachedLightBuffer = PacketUtils.createFramedPacket(ByteBuffer.allocate(65000), createLightPacket()); + final var tempChunk = PacketUtils.createFramedPacket(createChunkPacket()); + this.cachedChunkBuffer = ByteBuffer.allocate(tempChunk.position()).put(tempChunk.flip()); + final var tempLight = PacketUtils.createFramedPacket(createLightPacket()); + this.cachedLightBuffer = ByteBuffer.allocate(tempLight.position()).put(tempLight.flip()); this.cachedPacketTime = lastChange; } NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 9be69b392..5ca363d0b 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -178,8 +178,7 @@ public class NettyPlayerConnection extends PlayerConnection { */ @Override public void sendPacket(@NotNull ServerPacket serverPacket, boolean skipTranslating) { - if (!channel.isConnected()) - return; + if (!channel.isConnected()) return; if (shouldSendPacket(serverPacket)) { final Player player = getPlayer(); if (player != null) { @@ -207,7 +206,6 @@ public class NettyPlayerConnection extends PlayerConnection { this.channel.write(tickBuffer.flip()); this.tickBuffer.clear().put(buffer); } catch (IOException ex) { - disconnect(); MinecraftServer.getExceptionManager().handleException(ex); } } @@ -229,7 +227,6 @@ public class NettyPlayerConnection extends PlayerConnection { this.tickBuffer.clear(); PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); } catch (IOException ex) { - disconnect(); MinecraftServer.getExceptionManager().handleException(ex); } } @@ -255,7 +252,6 @@ public class NettyPlayerConnection extends PlayerConnection { this.channel.write(tickBuffer.flip()); this.tickBuffer.clear(); } catch (IOException e) { - disconnect(); MinecraftServer.getExceptionManager().handleException(e); } } diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index c4998af63..9764d2b00 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -85,11 +85,9 @@ public final class Worker { } public void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { + if (connectionMap.remove(channel) == null) return; // Client close - connection.refreshOnline(false); channel.close(); - this.connectionMap.remove(channel); - // Remove the connection connection.refreshOnline(false); Player player = connection.getPlayer(); if (player != null) { diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index b45c03211..4ee1b9c71 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -102,7 +102,6 @@ public final class PacketUtils { connection.sendPacket(packet); } } - finalBuffer.clear(); // Clear packet to be reused } else { // Write the same packet for each individual players for (Player player : players) { @@ -179,6 +178,6 @@ public final class PacketUtils { } public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { - return createFramedPacket(BUFFER.get(), packet); + return createFramedPacket(BUFFER.get().clear(), packet); } } From a2afcdd3a0b269834693ad1e72f3a8c8cac27a05 Mon Sep 17 00:00:00 2001 From: TheMode Date: Wed, 4 Aug 2021 21:17:02 +0200 Subject: [PATCH 22/41] Reduce field access --- .../net/minestom/server/instance/DynamicChunk.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index d391d2e7b..faf515919 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -132,16 +132,20 @@ public class DynamicChunk extends Chunk { final PlayerConnection connection = player.getPlayerConnection(); if (connection instanceof NettyPlayerConnection) { final long lastChange = getLastChangeTime(); - if (lastChange > cachedPacketTime || (cachedChunkBuffer == null || cachedLightBuffer == null)) { + ByteBuffer chunkPacket = cachedChunkBuffer; + ByteBuffer lightPacket = cachedLightBuffer; + if (lastChange > cachedPacketTime || (chunkPacket == null || lightPacket == null)) { final var tempChunk = PacketUtils.createFramedPacket(createChunkPacket()); - this.cachedChunkBuffer = ByteBuffer.allocate(tempChunk.position()).put(tempChunk.flip()); + chunkPacket = ByteBuffer.allocate(tempChunk.position()).put(tempChunk.flip()); final var tempLight = PacketUtils.createFramedPacket(createLightPacket()); - this.cachedLightBuffer = ByteBuffer.allocate(tempLight.position()).put(tempLight.flip()); + lightPacket = ByteBuffer.allocate(tempLight.position()).put(tempLight.flip()); + this.cachedChunkBuffer = chunkPacket; + this.cachedLightBuffer = lightPacket; this.cachedPacketTime = lastChange; } NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - nettyPlayerConnection.write(cachedChunkBuffer); - nettyPlayerConnection.write(cachedLightBuffer); + nettyPlayerConnection.write(chunkPacket); + nettyPlayerConnection.write(lightPacket); } else { connection.sendPacket(createLightPacket()); connection.sendPacket(createChunkPacket()); From 58487f4455b33f28f9528e8434860b5273d12a70 Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 00:08:53 +0200 Subject: [PATCH 23/41] Add PacketUtils#allocateTrimmedPacket --- .../java/net/minestom/server/instance/DynamicChunk.java | 6 ++---- src/main/java/net/minestom/server/utils/PacketUtils.java | 5 +++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index faf515919..b57277d6c 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -135,10 +135,8 @@ public class DynamicChunk extends Chunk { ByteBuffer chunkPacket = cachedChunkBuffer; ByteBuffer lightPacket = cachedLightBuffer; if (lastChange > cachedPacketTime || (chunkPacket == null || lightPacket == null)) { - final var tempChunk = PacketUtils.createFramedPacket(createChunkPacket()); - chunkPacket = ByteBuffer.allocate(tempChunk.position()).put(tempChunk.flip()); - final var tempLight = PacketUtils.createFramedPacket(createLightPacket()); - lightPacket = ByteBuffer.allocate(tempLight.position()).put(tempLight.flip()); + chunkPacket = PacketUtils.allocateTrimmedPacket(createChunkPacket()); + lightPacket = PacketUtils.allocateTrimmedPacket(createLightPacket()); this.cachedChunkBuffer = chunkPacket; this.cachedLightBuffer = lightPacket; this.cachedPacketTime = lastChange; diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 4ee1b9c71..954e35797 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -180,4 +180,9 @@ public final class PacketUtils { public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { return createFramedPacket(BUFFER.get().clear(), packet); } + + public static ByteBuffer allocateTrimmedPacket(@NotNull ServerPacket packet) { + final var temp = PacketUtils.createFramedPacket(packet); + return ByteBuffer.allocate(temp.position()).put(temp.flip()); + } } From eb43dc0cc0f2603d8e55206769fd8eb6dce201fc Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 01:10:03 +0200 Subject: [PATCH 24/41] Reuse flush method --- .../network/player/NettyPlayerConnection.java | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 5ca363d0b..6399887e5 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -198,17 +198,11 @@ public class NettyPlayerConnection extends PlayerConnection { public void write(@NotNull ByteBuffer buffer) { synchronized (tickBuffer) { buffer.flip(); - if (tickBuffer.remaining() >= buffer.remaining()) { - // Enough buffer space - this.tickBuffer.put(buffer); - } else { - try { - this.channel.write(tickBuffer.flip()); - this.tickBuffer.clear().put(buffer); - } catch (IOException ex) { - MinecraftServer.getExceptionManager().handleException(ex); - } + if (buffer.remaining() > tickBuffer.remaining()) { + // Tick buffer is full, flush before appending + flush(); } + this.tickBuffer.put(buffer); } } @@ -218,17 +212,13 @@ public class NettyPlayerConnection extends PlayerConnection { public void write(@NotNull ServerPacket packet) { synchronized (tickBuffer) { - final int position = tickBuffer.position(); + this.tickBuffer.mark(); try { PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); } catch (BufferOverflowException e) { - try { - this.channel.write(tickBuffer.position(position).flip()); - this.tickBuffer.clear(); - PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); - } catch (IOException ex) { - MinecraftServer.getExceptionManager().handleException(ex); - } + this.tickBuffer.reset(); + flush(); + PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); } } } @@ -241,18 +231,15 @@ public class NettyPlayerConnection extends PlayerConnection { } public void flush() { - if (tickBuffer.position() == 0) { - // Nothing to write - return; - } synchronized (tickBuffer) { if (!channel.isOpen()) return; if (tickBuffer.position() == 0) return; try { this.channel.write(tickBuffer.flip()); - this.tickBuffer.clear(); } catch (IOException e) { MinecraftServer.getExceptionManager().handleException(e); + } finally { + this.tickBuffer.clear(); } } } From a52d57404966575412d55e5a2ba7f9542f1a93f2 Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 02:34:48 +0200 Subject: [PATCH 25/41] Send light packet first --- src/main/java/net/minestom/server/instance/DynamicChunk.java | 2 +- .../minestom/server/network/player/NettyPlayerConnection.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index b57277d6c..f288d9312 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -142,8 +142,8 @@ public class DynamicChunk extends Chunk { this.cachedPacketTime = lastChange; } NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - nettyPlayerConnection.write(chunkPacket); nettyPlayerConnection.write(lightPacket); + nettyPlayerConnection.write(chunkPacket); } else { connection.sendPacket(createLightPacket()); connection.sendPacket(createChunkPacket()); diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 6399887e5..c226bb2c3 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -198,7 +198,7 @@ public class NettyPlayerConnection extends PlayerConnection { public void write(@NotNull ByteBuffer buffer) { synchronized (tickBuffer) { buffer.flip(); - if (buffer.remaining() > tickBuffer.remaining()) { + if (buffer.limit() > tickBuffer.remaining()) { // Tick buffer is full, flush before appending flush(); } From 87f141ff5016b2e57f61a65ce8b61ad33f16870f Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 03:09:45 +0200 Subject: [PATCH 26/41] Simplify packet writing --- .../network/player/NettyPlayerConnection.java | 15 +++------------ .../net/minestom/server/utils/PacketUtils.java | 12 ++++++++++-- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index c226bb2c3..0b780e9f9 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import javax.crypto.SecretKey; import java.io.IOException; import java.net.SocketAddress; -import java.nio.BufferOverflowException; import java.nio.BufferUnderflowException; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; @@ -211,16 +210,8 @@ public class NettyPlayerConnection extends PlayerConnection { } public void write(@NotNull ServerPacket packet) { - synchronized (tickBuffer) { - this.tickBuffer.mark(); - try { - PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); - } catch (BufferOverflowException e) { - this.tickBuffer.reset(); - flush(); - PacketUtils.writeFramedPacket(tickBuffer, packet, compressed); - } - } + // TODO write directly to the tick buffer + write(PacketUtils.createFramedPacket(packet, compressed)); } public void writeAndFlush(@NotNull ServerPacket packet) { @@ -231,8 +222,8 @@ public class NettyPlayerConnection extends PlayerConnection { } public void flush() { + if (!channel.isOpen()) return; synchronized (tickBuffer) { - if (!channel.isOpen()) return; if (tickBuffer.position() == 0) return; try { this.channel.write(tickBuffer.flip()); diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 954e35797..a536ce824 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -163,8 +163,8 @@ public final class PacketUtils { } } - public static ByteBuffer createFramedPacket(@NotNull ByteBuffer initial, @NotNull ServerPacket packet) { - final boolean compression = MinecraftServer.getCompressionThreshold() > 0; + public static ByteBuffer createFramedPacket(@NotNull ByteBuffer initial, @NotNull ServerPacket packet, + boolean compression) { var buffer = initial; try { writeFramedPacket(buffer, packet, compression); @@ -177,10 +177,18 @@ public final class PacketUtils { return buffer; } + public static ByteBuffer createFramedPacket(@NotNull ByteBuffer initial, @NotNull ServerPacket packet) { + return createFramedPacket(initial, packet, MinecraftServer.getCompressionThreshold() > 0); + } + public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet) { return createFramedPacket(BUFFER.get().clear(), packet); } + public static ByteBuffer createFramedPacket(@NotNull ServerPacket packet, boolean compression) { + return createFramedPacket(BUFFER.get().clear(), packet, compression); + } + public static ByteBuffer allocateTrimmedPacket(@NotNull ServerPacket packet) { final var temp = PacketUtils.createFramedPacket(packet); return ByteBuffer.allocate(temp.position()).put(temp.flip()); From 7ba8189a2855105902c67e0c262a9e7e3c8e1391 Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 15:10:15 +0200 Subject: [PATCH 27/41] Fix ghost players --- .../net/minestom/server/entity/Entity.java | 9 ++++--- .../net/minestom/server/entity/Player.java | 17 +++---------- .../server/network/ConnectionManager.java | 4 +-- .../network/player/NettyPlayerConnection.java | 8 ++---- .../network/player/PlayerConnection.java | 3 +-- .../server/network/socket/Worker.java | 25 +++++++++---------- 6 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index 2e1ab97ed..6526d9fe9 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -33,6 +33,7 @@ import net.minestom.server.potion.TimedPotion; import net.minestom.server.tag.Tag; import net.minestom.server.tag.TagHandler; import net.minestom.server.thread.ThreadProvider; +import net.minestom.server.utils.async.AsyncUtils; import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.utils.entity.EntityUtils; import net.minestom.server.utils.player.PlayerUtils; @@ -708,6 +709,7 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler public CompletableFuture setInstance(@NotNull Instance instance, @NotNull Pos spawnPosition) { Check.stateCondition(!instance.isRegistered(), "Instances need to be registered, please use InstanceManager#registerInstance or InstanceManager#registerSharedInstance"); + if (isRemoved()) return AsyncUtils.VOID_FUTURE; if (this.instance != null) { this.instance.UNSAFE_removeEntity(this); } @@ -1267,16 +1269,15 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler * WARNING: this does not trigger {@link EntityDeathEvent}. */ public void remove() { - if (isRemoved()) - return; - + if (isRemoved()) return; MinecraftServer.getUpdateManager().getThreadProvider().removeEntity(this); this.removed = true; this.shouldRemove = true; Entity.ENTITY_BY_ID.remove(id); Entity.ENTITY_BY_UUID.remove(uuid); - if (instance != null) + if (instance != null) { instance.UNSAFE_removeEntity(this); + } } /** diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index f8b38da7e..2177ea141 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -441,18 +441,14 @@ public class Player extends LivingEntity implements CommandSender, Localizable, @Override public void remove() { - if (isRemoved()) - return; - + if (isRemoved()) return; EventDispatcher.call(new PlayerDisconnectEvent(this)); - super.remove(); this.packets.clear(); - if (getOpenInventory() != null) + if (getOpenInventory() != null) { getOpenInventory().removeViewer(this); - + } MinecraftServer.getBossBarManager().removeAllBossBars(this); - // Advancement tabs cache { Set advancementTabs = AdvancementTab.getTabs(this); @@ -462,15 +458,10 @@ public class Player extends LivingEntity implements CommandSender, Localizable, } } } - // Clear all viewable entities this.viewableEntities.forEach(entity -> entity.removeViewer(this)); // Clear all viewable chunks - this.viewableChunks.forEach(chunk -> { - if (chunk.isLoaded()) - chunk.removeViewer(this); - }); - playerConnection.disconnect(); + this.viewableChunks.forEach(chunk -> chunk.removeViewer(this)); } @Override diff --git a/src/main/java/net/minestom/server/network/ConnectionManager.java b/src/main/java/net/minestom/server/network/ConnectionManager.java index d6b8d1fef..2667e93af 100644 --- a/src/main/java/net/minestom/server/network/ConnectionManager.java +++ b/src/main/java/net/minestom/server/network/ConnectionManager.java @@ -268,7 +268,7 @@ public final class ConnectionManager { * @param connection the player connection * @see PlayerConnection#disconnect() to properly disconnect a player */ - public void removePlayer(@NotNull PlayerConnection connection) { + public synchronized void removePlayer(@NotNull PlayerConnection connection) { final Player player = this.connectionPlayerMap.get(connection); if (player == null) return; @@ -344,7 +344,7 @@ public final class ConnectionManager { /** * Shutdowns the connection manager by kicking all the currently connected players. */ - public void shutdown() { + public synchronized void shutdown() { DisconnectPacket disconnectPacket = new DisconnectPacket(shutdownText); for (Player player : getOnlinePlayers()) { final PlayerConnection playerConnection = player.getPlayerConnection(); diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index 0b780e9f9..e57294f1f 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -101,7 +101,7 @@ public class NettyPlayerConnection extends PlayerConnection { content = readBuffer; } else { // Decompress to content buffer - content = workerContext.contentBuffer.clear(); + content = workerContext.contentBuffer; try { final var inflater = workerContext.inflater; inflater.setInput(readBuffer); @@ -255,11 +255,7 @@ public class NettyPlayerConnection extends PlayerConnection { @Override public void disconnect() { - try { - this.worker.disconnect(this, channel); - } catch (IOException e) { - e.printStackTrace(); - } + this.worker.disconnect(this, channel); } public @NotNull SocketChannel getChannel() { diff --git a/src/main/java/net/minestom/server/network/player/PlayerConnection.java b/src/main/java/net/minestom/server/network/player/PlayerConnection.java index 28feb23b5..3acddf607 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerConnection.java @@ -160,8 +160,7 @@ public abstract class PlayerConnection { * * @return the player, can be null if not initialized yet */ - @Nullable - public Player getPlayer() { + public @Nullable Player getPlayer() { return player; } diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 9764d2b00..4d5762ebe 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -61,11 +61,7 @@ public final class Worker { connection.processPackets(workerContext, packetProcessor); } catch (IOException e) { // TODO print exception? (should ignore disconnection) - try { - disconnect(connection, channel); - } catch (IOException ioException) { - ioException.printStackTrace(); - } + connection.disconnect(); } finally { workerContext.clearBuffers(); } @@ -84,15 +80,18 @@ public final class Worker { this.selector.wakeup(); } - public void disconnect(NettyPlayerConnection connection, SocketChannel channel) throws IOException { - if (connectionMap.remove(channel) == null) return; - // Client close - channel.close(); - connection.refreshOnline(false); - Player player = connection.getPlayer(); - if (player != null) { - player.remove(); + public void disconnect(NettyPlayerConnection connection, SocketChannel channel) { + try { + channel.close(); + this.connectionMap.remove(channel); MinecraftServer.getConnectionManager().removePlayer(connection); + connection.refreshOnline(false); + Player player = connection.getPlayer(); + if (player != null) { + player.remove(); + } + } catch (IOException e) { + e.printStackTrace(); } } From aa2a6522dc158f0f0170914ab4c319782602ec7e Mon Sep 17 00:00:00 2001 From: TheMode Date: Thu, 5 Aug 2021 15:42:16 +0200 Subject: [PATCH 28/41] Increase socket size, cache direct buffers --- src/main/java/net/minestom/server/network/socket/Server.java | 2 +- src/main/java/net/minestom/server/utils/PacketUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index 5d0f32a05..8fda5710f 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -18,7 +18,7 @@ public final class Server { public static final Logger LOGGER = LoggerFactory.getLogger(Server.class); public static final int WORKER_COUNT = Integer.getInteger("minestom.workers", Runtime.getRuntime().availableProcessors() * 2); - public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 65535); + public static final int SOCKET_BUFFER_SIZE = Integer.getInteger("minestom.buffer-size", 262_143); public static final int MAX_PACKET_SIZE = 2_097_151; // 3 bytes var-int public static final boolean NO_DELAY = true; diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index a536ce824..ca94f3388 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -191,6 +191,6 @@ public final class PacketUtils { public static ByteBuffer allocateTrimmedPacket(@NotNull ServerPacket packet) { final var temp = PacketUtils.createFramedPacket(packet); - return ByteBuffer.allocate(temp.position()).put(temp.flip()); + return ByteBuffer.allocateDirect(temp.position()).put(temp.flip()); } } From 455c21208e048b5673bca605d3f86eda5ca722c2 Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 6 Aug 2021 14:21:11 +0200 Subject: [PATCH 29/41] WIP BinaryBuffer --- .../server/network/PacketProcessor.java | 4 +- .../network/player/NettyPlayerConnection.java | 67 ++++---- .../server/network/socket/Worker.java | 17 +- .../server/utils/binary/BinaryBuffer.java | 162 ++++++++++++++++++ 4 files changed, 200 insertions(+), 50 deletions(-) create mode 100644 src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index 3b1fd51b2..81a7f8211 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -127,9 +127,7 @@ public final class PacketProcessor { } catch (Exception e) { final Player player = connection.getPlayer(); final String username = player != null ? player.getUsername() : "null"; - LOGGER.warn("Connection {} ({}) sent an unexpected packet.", - connection.getRemoteAddress(), - username); + LOGGER.warn("Connection {} ({}) sent an unexpected packet.", connection.getRemoteAddress(), username); MinecraftServer.getExceptionManager().handleException(e); } } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index e57294f1f..ea77c3270 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -14,7 +14,7 @@ import net.minestom.server.network.packet.server.login.SetCompressionPacket; import net.minestom.server.network.socket.Server; import net.minestom.server.network.socket.Worker; import net.minestom.server.utils.PacketUtils; -import net.minestom.server.utils.Utils; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -62,8 +62,8 @@ public class NettyPlayerConnection extends PlayerConnection { private UUID bungeeUuid; private PlayerSkin bungeeSkin; - private final ByteBuffer tickBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); - private volatile ByteBuffer cacheBuffer; + private final BinaryBuffer tickBuffer = BinaryBuffer.ofSize(Server.SOCKET_BUFFER_SIZE); + private volatile BinaryBuffer cacheBuffer; public NettyPlayerConnection(@NotNull Worker worker, @NotNull SocketChannel channel, SocketAddress remoteAddress) { super(); @@ -74,73 +74,68 @@ public class NettyPlayerConnection extends PlayerConnection { public void processPackets(Worker.Context workerContext, PacketProcessor packetProcessor) { final var readBuffer = workerContext.readBuffer; - final int limit = readBuffer.limit(); + final int limit = readBuffer.writerOffset(); // Read all packets - while (readBuffer.remaining() > 0) { - readBuffer.mark(); // Mark the beginning of the packet + while (readBuffer.readableBytes() > 0) { + final var beginMark = readBuffer.mark(); try { - // Read packet - final int packetLength = Utils.readVarInt(readBuffer); - final int packetEnd = readBuffer.position() + packetLength; - if (packetEnd > readBuffer.limit()) { + // Ensure that the buffer contains the full packet (or wait for next socket read) + final int packetLength = readBuffer.readVarInt(); + final int packetEnd = readBuffer.readerOffset() + packetLength; + if (packetEnd > readBuffer.writerOffset()) { // Integrity fail throw new BufferUnderflowException(); } - - readBuffer.limit(packetEnd); // Ensure that the reader doesn't exceed packet bound - - // Read protocol - ByteBuffer content; + // Read packet https://wiki.vg/Protocol#Packet_format + BinaryBuffer content; if (!compressed) { // Compression disabled, payload is following content = readBuffer; } else { - final int dataLength = Utils.readVarInt(readBuffer); + final int dataLength = readBuffer.readVarInt(); if (dataLength == 0) { // Data is too small to be compressed, payload is following content = readBuffer; } else { // Decompress to content buffer content = workerContext.contentBuffer; + final var contentStartMark = content.mark(); try { final var inflater = workerContext.inflater; - inflater.setInput(readBuffer); - inflater.inflate(content); + inflater.setInput(readBuffer.asByteBuffer(readBuffer.readerOffset(), packetEnd)); + inflater.inflate(content.asByteBuffer(0, content.capacity())); inflater.reset(); } catch (DataFormatException e) { e.printStackTrace(); } - content.flip(); + content.reset(contentStartMark); } } - // Process packet - final int packetId = Utils.readVarInt(content); + final int packetId = content.readVarInt(); try { - packetProcessor.process(this, packetId, content); + var finalBuffer = content.asByteBuffer(content.readerOffset(), packetEnd); + packetProcessor.process(this, packetId, finalBuffer); } catch (Exception e) { // Error while reading the packet MinecraftServer.getExceptionManager().handleException(e); break; } - // Return to original state (before writing) - readBuffer.limit(limit).position(packetEnd); + readBuffer.reset(packetEnd, limit); } catch (BufferUnderflowException e) { - readBuffer.reset(); - this.cacheBuffer = ByteBuffer.allocateDirect(readBuffer.remaining()) - .put(readBuffer).flip(); + readBuffer.reset(beginMark); + this.cacheBuffer = BinaryBuffer.copy(readBuffer); break; } } } - public void consumeCache(ByteBuffer buffer) { - if (cacheBuffer == null) { - return; + public void consumeCache(BinaryBuffer buffer) { + if (cacheBuffer != null) { + buffer.write(cacheBuffer); + this.cacheBuffer = null; } - buffer.put(cacheBuffer); - this.cacheBuffer = null; } /** @@ -197,11 +192,11 @@ public class NettyPlayerConnection extends PlayerConnection { public void write(@NotNull ByteBuffer buffer) { synchronized (tickBuffer) { buffer.flip(); - if (buffer.limit() > tickBuffer.remaining()) { + if (!tickBuffer.canWrite(buffer.limit())) { // Tick buffer is full, flush before appending flush(); } - this.tickBuffer.put(buffer); + this.tickBuffer.write(buffer); } } @@ -224,9 +219,9 @@ public class NettyPlayerConnection extends PlayerConnection { public void flush() { if (!channel.isOpen()) return; synchronized (tickBuffer) { - if (tickBuffer.position() == 0) return; + if (tickBuffer.readableBytes() == 0) return; try { - this.channel.write(tickBuffer.flip()); + this.tickBuffer.writeChannel(channel); } catch (IOException e) { MinecraftServer.getExceptionManager().handleException(e); } finally { diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 4d5762ebe..c2fe6581e 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -4,10 +4,10 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.network.PacketProcessor; import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.utils.binary.BinaryBuffer; import org.jetbrains.annotations.ApiStatus; import java.io.IOException; -import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; @@ -48,16 +48,11 @@ public final class Worker { } var connection = connectionMap.get(channel); try { - ByteBuffer readBuffer = workerContext.readBuffer; + var readBuffer = workerContext.readBuffer; // Consume last incomplete packet connection.consumeCache(readBuffer); - // Read socket - if (channel.read(readBuffer) == -1) { - // EOS - throw new IOException("Disconnected"); - } - // Process data - readBuffer.flip(); + // Read & process + readBuffer.readChannel(channel); connection.processPackets(workerContext, packetProcessor); } catch (IOException e) { // TODO print exception? (should ignore disconnection) @@ -124,11 +119,11 @@ public final class Worker { * Contains objects that we can be shared across all the connection of a {@link Worker worker}. */ public static final class Context { - public final ByteBuffer readBuffer = ByteBuffer.allocateDirect(Server.SOCKET_BUFFER_SIZE); + public final BinaryBuffer readBuffer = BinaryBuffer.ofSize(Server.SOCKET_BUFFER_SIZE); /** * Stores a single packet payload to be read. */ - public final ByteBuffer contentBuffer = ByteBuffer.allocateDirect(Server.MAX_PACKET_SIZE); + public final BinaryBuffer contentBuffer = BinaryBuffer.ofSize(Server.MAX_PACKET_SIZE); public final Inflater inflater = new Inflater(); public void clearBuffers() { diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java new file mode 100644 index 000000000..8f7b862ff --- /dev/null +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -0,0 +1,162 @@ +package net.minestom.server.utils.binary; + +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jglrxavpok.hephaistos.nbt.NBTReader; +import org.jglrxavpok.hephaistos.nbt.NBTWriter; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; + +/** + * Manages off-heap memory. + * Not thread-safe. + */ +public final class BinaryBuffer { + private ByteBuffer nioBuffer; // To become a `MemorySegment` once released + private NBTReader nbtReader; + private NBTWriter nbtWriter; + + private final int capacity; + private int readerOffset, writerOffset; + + private BinaryBuffer(ByteBuffer buffer) { + this.nioBuffer = buffer; + this.capacity = buffer.capacity(); + } + + @ApiStatus.Internal + public static BinaryBuffer ofSize(int size) { + return new BinaryBuffer(ByteBuffer.allocateDirect(size)); + } + + public static BinaryBuffer copy(BinaryBuffer buffer) { + final int size = buffer.readableBytes(); + final var temp = ByteBuffer.allocateDirect(size) + .put(buffer.asByteBuffer(0, size)); + return new BinaryBuffer(temp); + } + + public void write(ByteBuffer buffer) { + final int size = buffer.remaining(); + // TODO jdk 13 put with index + asByteBuffer(writerOffset, writerOffset + size).put(buffer); + this.writerOffset += size; + } + + public void write(BinaryBuffer buffer) { + write(buffer.asByteBuffer(buffer.readerOffset, buffer.writerOffset)); + } + + public int readVarInt() { + int value = 0; + final int maxRead = Math.min(5, readableBytes()); + for (int i = 0; i < maxRead; i++) { + final int offset = readerOffset + i; + final byte k = nioBuffer.get(offset); + value |= (k & 0x7F) << i * 7; + if ((k & 0x80) != 128) { + this.readerOffset = offset + 1; + return value; + } + } + this.readerOffset += maxRead; + throw new RuntimeException("VarInt is too big"); + } + + public @NotNull Marker mark() { + return new Marker(readerOffset, writerOffset); + } + + public void reset(int readerOffset, int writerOffset) { + this.readerOffset = readerOffset; + this.writerOffset = writerOffset; + } + + public void reset(@NotNull Marker marker) { + reset(marker.readerOffset(), marker.writerOffset()); + } + + public boolean canWrite(int size) { + return writerOffset + size <= capacity; + } + + public int capacity() { + return capacity; + } + + public int readerOffset() { + return readerOffset; + } + + public int writerOffset() { + return writerOffset; + } + + public int readableBytes() { + return writerOffset - readerOffset; + } + + public void clear() { + this.readerOffset = 0; + this.writerOffset = 0; + } + + public ByteBuffer asByteBuffer(int reader, int writer) { + return nioBuffer.duplicate().position(reader).limit(writer); + } + + public void writeChannel(WritableByteChannel channel) throws IOException { + final int count = channel.write(asByteBuffer(readerOffset, writerOffset)); + if (count == -1) { + // EOS + throw new IOException("Disconnected"); + } + this.readerOffset += count; + } + + public void readChannel(ReadableByteChannel channel) throws IOException { + final int count = channel.read(asByteBuffer(readerOffset, capacity)); + if (count == -1) { + // EOS + throw new IOException("Disconnected"); + } + this.writerOffset += count; + } + + @Override + public String toString() { + return "BinaryBuffer{" + + "readerOffset=" + readerOffset + + ", writerOffset=" + writerOffset + + ", capacity=" + capacity + + '}'; + } + + public static final class Marker { + private final int readerOffset, writerOffset; + + private Marker(int readerOffset, int writerOffset) { + this.readerOffset = readerOffset; + this.writerOffset = writerOffset; + } + + public int readerOffset() { + return readerOffset; + } + + public int writerOffset() { + return writerOffset; + } + + @Override + public String toString() { + return "Marker{" + + "readerOffset=" + readerOffset + + ", writerOffset=" + writerOffset + + '}'; + } + } +} From 9bcf89b6770869044bcb393443973174bb12b8ea Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 6 Aug 2021 14:30:55 +0200 Subject: [PATCH 30/41] Simplify var-int reading --- .../java/net/minestom/server/utils/binary/BinaryBuffer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java index 8f7b862ff..f996c9252 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -52,8 +52,7 @@ public final class BinaryBuffer { public int readVarInt() { int value = 0; - final int maxRead = Math.min(5, readableBytes()); - for (int i = 0; i < maxRead; i++) { + for (int i = 0; i < 5; i++) { final int offset = readerOffset + i; final byte k = nioBuffer.get(offset); value |= (k & 0x7F) << i * 7; @@ -62,7 +61,6 @@ public final class BinaryBuffer { return value; } } - this.readerOffset += maxRead; throw new RuntimeException("VarInt is too big"); } From f135edba0db03383b281a3c5ebb2f024aba26dcc Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 6 Aug 2021 16:30:52 +0200 Subject: [PATCH 31/41] Replace BinaryReader to BinaryBuffer --- .../net/minestom/server/data/DataType.java | 6 +- .../server/data/SerializableData.java | 21 +- .../server/data/SerializableDataImpl.java | 4 +- .../server/data/type/BooleanData.java | 4 +- .../minestom/server/data/type/ByteData.java | 4 +- .../server/data/type/CharacterData.java | 4 +- .../minestom/server/data/type/DoubleData.java | 4 +- .../minestom/server/data/type/FloatData.java | 4 +- .../server/data/type/IntegerData.java | 4 +- .../server/data/type/InventoryData.java | 4 +- .../server/data/type/ItemStackData.java | 4 +- .../minestom/server/data/type/LongData.java | 4 +- .../data/type/SerializableDataData.java | 4 +- .../minestom/server/data/type/ShortData.java | 4 +- .../minestom/server/data/type/StringData.java | 4 +- .../minestom/server/data/type/UuidType.java | 4 +- .../data/type/array/BooleanArrayData.java | 4 +- .../server/data/type/array/ByteArrayData.java | 6 +- .../data/type/array/CharacterArrayData.java | 4 +- .../data/type/array/DoubleArrayData.java | 4 +- .../data/type/array/FloatArrayData.java | 4 +- .../data/type/array/IntegerArrayData.java | 6 +- .../data/type/array/ItemStackArrayData.java | 4 +- .../server/data/type/array/LongArrayData.java | 4 +- .../data/type/array/ShortArrayData.java | 4 +- .../data/type/array/StringArrayData.java | 4 +- .../net/minestom/server/entity/Metadata.java | 28 +-- .../server/network/PacketProcessor.java | 23 +- .../client/handler/ClientPacketsHandler.java | 3 +- .../client/handshake/HandshakePacket.java | 4 +- .../login/EncryptionResponsePacket.java | 4 +- .../login/LoginPluginResponsePacket.java | 3 +- .../packet/client/login/LoginStartPacket.java | 4 +- .../play/ClientAdvancementTabPacket.java | 4 +- .../client/play/ClientAnimationPacket.java | 4 +- .../client/play/ClientChatMessagePacket.java | 4 +- .../play/ClientClickWindowButtonPacket.java | 4 +- .../client/play/ClientClickWindowPacket.java | 4 +- .../client/play/ClientCloseWindowPacket.java | 4 +- .../client/play/ClientCraftRecipeRequest.java | 4 +- .../ClientCreativeInventoryActionPacket.java | 4 +- .../client/play/ClientEditBookPacket.java | 4 +- .../client/play/ClientEntityActionPacket.java | 4 +- .../play/ClientGenerateStructurePacket.java | 4 +- .../play/ClientHeldItemChangePacket.java | 4 +- .../play/ClientInteractEntityPacket.java | 4 +- .../client/play/ClientKeepAlivePacket.java | 4 +- .../client/play/ClientNameItemPacket.java | 4 +- .../client/play/ClientPickItemPacket.java | 4 +- .../play/ClientPlayerAbilitiesPacket.java | 4 +- .../ClientPlayerBlockPlacementPacket.java | 4 +- .../play/ClientPlayerDiggingPacket.java | 4 +- .../client/play/ClientPlayerPacket.java | 4 +- ...ClientPlayerPositionAndRotationPacket.java | 4 +- .../play/ClientPlayerPositionPacket.java | 4 +- .../play/ClientPlayerRotationPacket.java | 4 +- .../play/ClientPluginMessagePacket.java | 4 +- .../packet/client/play/ClientPongPacket.java | 4 +- .../play/ClientQueryBlockNbtPacket.java | 4 +- .../play/ClientQueryEntityNbtPacket.java | 4 +- .../play/ClientResourcePackStatusPacket.java | 4 +- .../client/play/ClientSelectTradePacket.java | 4 +- .../play/ClientSetBeaconEffectPacket.java | 4 +- .../play/ClientSetDisplayedRecipePacket.java | 4 +- .../play/ClientSetRecipeBookStatePacket.java | 4 +- .../client/play/ClientSettingsPacket.java | 4 +- .../client/play/ClientSpectatePacket.java | 4 +- .../client/play/ClientStatusPacket.java | 4 +- .../client/play/ClientSteerBoatPacket.java | 4 +- .../client/play/ClientSteerVehiclePacket.java | 4 +- .../client/play/ClientTabCompletePacket.java | 4 +- .../play/ClientTeleportConfirmPacket.java | 4 +- ...lientUpdateCommandBlockMinecartPacket.java | 4 +- .../play/ClientUpdateCommandBlockPacket.java | 4 +- .../client/play/ClientUpdateSignPacket.java | 4 +- .../ClientUpdateStructureBlockPacket.java | 4 +- .../client/play/ClientUseItemPacket.java | 4 +- .../client/play/ClientVehicleMovePacket.java | 4 +- .../status/LegacyServerListPingPacket.java | 4 +- .../packet/client/status/PingPacket.java | 4 +- .../client/status/StatusRequestPacket.java | 4 +- .../network/packet/server/ServerPacket.java | 4 +- .../server/handshake/ResponsePacket.java | 4 +- .../server/login/EncryptionRequestPacket.java | 4 +- .../server/login/LoginDisconnectPacket.java | 4 +- .../login/LoginPluginRequestPacket.java | 4 +- .../server/login/LoginSuccessPacket.java | 4 +- .../server/login/SetCompressionPacket.java | 4 +- .../play/AcknowledgePlayerDiggingPacket.java | 4 +- .../packet/server/play/ActionBarPacket.java | 4 +- .../server/play/AdvancementsPacket.java | 22 +- .../server/play/AttachEntityPacket.java | 4 +- .../packet/server/play/BlockActionPacket.java | 4 +- .../play/BlockBreakAnimationPacket.java | 4 +- .../packet/server/play/BlockChangePacket.java | 4 +- .../server/play/BlockEntityDataPacket.java | 4 +- .../packet/server/play/BossBarPacket.java | 4 +- .../packet/server/play/CameraPacket.java | 4 +- .../server/play/ChangeGameStatePacket.java | 4 +- .../packet/server/play/ChatMessagePacket.java | 4 +- .../packet/server/play/ChunkDataPacket.java | 4 +- .../packet/server/play/ClearTitlesPacket.java | 4 +- .../packet/server/play/CloseWindowPacket.java | 4 +- .../packet/server/play/CollectItemPacket.java | 4 +- .../server/play/CraftRecipeResponse.java | 4 +- .../server/play/DeathCombatEventPacket.java | 4 +- .../server/play/DeclareCommandsPacket.java | 8 +- .../server/play/DeclareRecipesPacket.java | 40 ++-- .../server/play/DestroyEntitiesPacket.java | 4 +- .../packet/server/play/DisconnectPacket.java | 4 +- .../server/play/DisplayScoreboardPacket.java | 4 +- .../packet/server/play/EffectPacket.java | 4 +- .../server/play/EndCombatEventPacket.java | 4 +- .../server/play/EnterCombatEventPacket.java | 4 +- .../server/play/EntityAnimationPacket.java | 4 +- .../server/play/EntityEffectPacket.java | 4 +- .../server/play/EntityEquipmentPacket.java | 4 +- .../server/play/EntityHeadLookPacket.java | 4 +- .../server/play/EntityMetaDataPacket.java | 4 +- .../play/EntityPositionAndRotationPacket.java | 4 +- .../server/play/EntityPositionPacket.java | 4 +- .../server/play/EntityPropertiesPacket.java | 8 +- .../server/play/EntityRotationPacket.java | 4 +- .../server/play/EntitySoundEffectPacket.java | 4 +- .../server/play/EntityStatusPacket.java | 4 +- .../server/play/EntityTeleportPacket.java | 4 +- .../server/play/EntityVelocityPacket.java | 4 +- .../packet/server/play/ExplosionPacket.java | 4 +- .../packet/server/play/FacePlayerPacket.java | 4 +- .../server/play/HeldItemChangePacket.java | 4 +- .../play/InitializeWorldBorderPacket.java | 4 +- .../packet/server/play/JoinGamePacket.java | 4 +- .../packet/server/play/KeepAlivePacket.java | 4 +- .../packet/server/play/MapDataPacket.java | 8 +- .../server/play/MultiBlockChangePacket.java | 4 +- .../server/play/NamedSoundEffectPacket.java | 4 +- .../server/play/NbtQueryResponsePacket.java | 4 +- .../packet/server/play/OpenBookPacket.java | 4 +- .../server/play/OpenHorseWindowPacket.java | 4 +- .../server/play/OpenSignEditorPacket.java | 4 +- .../packet/server/play/OpenWindowPacket.java | 4 +- .../packet/server/play/ParticlePacket.java | 4 +- .../packet/server/play/PingPacket.java | 4 +- .../server/play/PlayerAbilitiesPacket.java | 4 +- .../packet/server/play/PlayerInfoPacket.java | 14 +- .../play/PlayerListHeaderAndFooterPacket.java | 4 +- .../play/PlayerPositionAndLookPacket.java | 4 +- .../server/play/PluginMessagePacket.java | 4 +- .../server/play/RemoveEntityEffectPacket.java | 4 +- .../server/play/ResourcePackSendPacket.java | 4 +- .../packet/server/play/RespawnPacket.java | 4 +- .../play/ScoreboardObjectivePacket.java | 4 +- .../server/play/SculkVibrationSignal.java | 4 +- .../play/SelectAdvancementTabPacket.java | 4 +- .../server/play/ServerDifficultyPacket.java | 4 +- .../packet/server/play/SetCooldownPacket.java | 4 +- .../server/play/SetExperiencePacket.java | 4 +- .../server/play/SetPassengersPacket.java | 4 +- .../packet/server/play/SetSlotPacket.java | 4 +- .../server/play/SetTitleSubTitlePacket.java | 4 +- .../server/play/SetTitleTextPacket.java | 4 +- .../server/play/SetTitleTimePacket.java | 4 +- .../packet/server/play/SoundEffectPacket.java | 4 +- .../packet/server/play/SpawnEntityPacket.java | 4 +- .../server/play/SpawnExperienceOrbPacket.java | 4 +- .../server/play/SpawnLivingEntityPacket.java | 4 +- .../server/play/SpawnPaintingPacket.java | 4 +- .../packet/server/play/SpawnPlayerPacket.java | 4 +- .../server/play/SpawnPositionPacket.java | 4 +- .../packet/server/play/StatisticsPacket.java | 8 +- .../packet/server/play/StopSoundPacket.java | 4 +- .../packet/server/play/TabCompletePacket.java | 4 +- .../packet/server/play/TagsPacket.java | 4 +- .../packet/server/play/TeamsPacket.java | 4 +- .../packet/server/play/TimeUpdatePacket.java | 4 +- .../packet/server/play/TradeListPacket.java | 8 +- .../packet/server/play/UnloadChunkPacket.java | 4 +- .../server/play/UnlockRecipesPacket.java | 4 +- .../server/play/UpdateHealthPacket.java | 4 +- .../packet/server/play/UpdateLightPacket.java | 4 +- .../packet/server/play/UpdateScorePacket.java | 4 +- .../server/play/UpdateViewDistancePacket.java | 4 +- .../server/play/UpdateViewPositionPacket.java | 4 +- .../packet/server/play/VehicleMovePacket.java | 4 +- .../packet/server/play/WindowItemsPacket.java | 4 +- .../server/play/WindowPropertyPacket.java | 4 +- .../server/play/WorldBorderCenterPacket.java | 4 +- .../play/WorldBorderLerpSizePacket.java | 4 +- .../server/play/WorldBorderSizePacket.java | 4 +- .../play/WorldBorderWarningDelayPacket.java | 4 +- .../play/WorldBorderWarningReachPacket.java | 4 +- .../packet/server/status/PongPacket.java | 4 +- .../network/player/NettyPlayerConnection.java | 4 +- .../server/storage/StorageLocation.java | 4 +- .../net/minestom/server/utils/NBTUtils.java | 5 +- .../server/utils/binary/BinaryBuffer.java | 225 +++++++++++++++++- .../server/utils/binary/BinaryReader.java | 45 ---- .../server/utils/binary/Readable.java | 4 +- .../readwritepackets/ReadWritePackets.java | 4 +- 199 files changed, 681 insertions(+), 526 deletions(-) diff --git a/src/main/java/net/minestom/server/data/DataType.java b/src/main/java/net/minestom/server/data/DataType.java index 729da70dd..55df65c40 100644 --- a/src/main/java/net/minestom/server/data/DataType.java +++ b/src/main/java/net/minestom/server/data/DataType.java @@ -1,6 +1,6 @@ package net.minestom.server.data; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public abstract class DataType { /** * Encodes the data type. *

- * Be sure that the encoded value can be decoded back using {@link #decode(BinaryReader)}. + * Be sure that the encoded value can be decoded back using {@link #decode(BinaryBuffer)}. * * @param writer the data writer * @param value the value to encode @@ -31,6 +31,6 @@ public abstract class DataType { * @return the decoded value */ @NotNull - public abstract T decode(@NotNull BinaryReader reader); + public abstract T decode(@NotNull BinaryBuffer reader); } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/data/SerializableData.java b/src/main/java/net/minestom/server/data/SerializableData.java index ac38a2282..c25deec6e 100644 --- a/src/main/java/net/minestom/server/data/SerializableData.java +++ b/src/main/java/net/minestom/server/data/SerializableData.java @@ -2,7 +2,7 @@ package net.minestom.server.data; import it.unimi.dsi.fastutil.objects.Object2ShortMap; import it.unimi.dsi.fastutil.objects.Object2ShortOpenHashMap; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,8 +16,8 @@ public abstract class SerializableData extends Data { /** * Serializes the data into an array of bytes. *

- * Use {@link #readIndexedSerializedData(BinaryReader)} if {@code indexed} is true, - * {@link #readSerializedData(BinaryReader, Object2ShortMap)} otherwise with the index map + * Use {@link #readIndexedSerializedData(BinaryBuffer)} if {@code indexed} is true, + * {@link #readSerializedData(BinaryBuffer, Object2ShortMap)} otherwise with the index map * to convert it back to a {@link SerializableData}. * * @param typeToIndexMap the type to index map, will create entries if new types are discovered. @@ -32,17 +32,16 @@ public abstract class SerializableData extends Data { * Reads the data of a {@link SerializableData} when you already have the index map. *

* WARNING: the data to read should not have any index to read and your index map should be COMPLETE. - * Use {@link #readIndexedSerializedData(BinaryReader)} if you need to read the header. - * - * @param reader the binary reader + * Use {@link #readIndexedSerializedData(BinaryBuffer)} if you need to read the header. + * @param reader the binary reader * @param typeToIndexMap the index map */ - public abstract void readSerializedData(@NotNull BinaryReader reader, @NotNull Object2ShortMap typeToIndexMap); + public abstract void readSerializedData(@NotNull BinaryBuffer reader, @NotNull Object2ShortMap typeToIndexMap); /** * Serializes the data into an array of bytes. *

- * Use {@link #readIndexedSerializedData(BinaryReader)} + * Use {@link #readIndexedSerializedData(BinaryBuffer)} * to convert it back to a {@link SerializableData}. *

* This will create a type index map which will be present in the header. @@ -61,7 +60,7 @@ public abstract class SerializableData extends Data { * * @param reader the binary reader */ - public void readIndexedSerializedData(@NotNull BinaryReader reader) { + public void readIndexedSerializedData(@NotNull BinaryBuffer reader) { final Object2ShortMap typeToIndexMap = SerializableData.readDataIndexes(reader); readSerializedData(reader, typeToIndexMap); } @@ -97,13 +96,13 @@ public abstract class SerializableData extends Data { /** * Reads a data index map (type name -> type index). *

- * Can then be used with {@link SerializableData#readSerializedData(BinaryReader, Object2ShortMap)}. + * Can then be used with {@link SerializableData#readSerializedData(BinaryBuffer, Object2ShortMap)}. * * @param binaryReader the reader * @return a map containing the indexes of your data */ @NotNull - public static Object2ShortMap readDataIndexes(@NotNull BinaryReader binaryReader) { + public static Object2ShortMap readDataIndexes(@NotNull BinaryBuffer binaryReader) { Object2ShortMap typeToIndexMap = new Object2ShortOpenHashMap<>(); { final int dataIndexSize = binaryReader.readVarInt(); diff --git a/src/main/java/net/minestom/server/data/SerializableDataImpl.java b/src/main/java/net/minestom/server/data/SerializableDataImpl.java index 2f9112eed..9492dbead 100644 --- a/src/main/java/net/minestom/server/data/SerializableDataImpl.java +++ b/src/main/java/net/minestom/server/data/SerializableDataImpl.java @@ -5,7 +5,7 @@ import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; import net.minestom.server.MinecraftServer; import net.minestom.server.utils.PrimitiveConversion; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -153,7 +153,7 @@ public class SerializableDataImpl extends SerializableData { } @Override - public void readSerializedData(@NotNull BinaryReader reader, @NotNull Object2ShortMap typeToIndexMap) { + public void readSerializedData(@NotNull BinaryBuffer reader, @NotNull Object2ShortMap typeToIndexMap) { // Map used to convert an index to the class name (opposite of typeToIndexMap) final Short2ObjectMap indexToTypeMap = new Short2ObjectOpenHashMap<>(typeToIndexMap.size()); { diff --git a/src/main/java/net/minestom/server/data/type/BooleanData.java b/src/main/java/net/minestom/server/data/type/BooleanData.java index 38e0d7491..3b3ffae48 100644 --- a/src/main/java/net/minestom/server/data/type/BooleanData.java +++ b/src/main/java/net/minestom/server/data/type/BooleanData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class BooleanData extends DataType { @NotNull @Override - public Boolean decode(@NotNull BinaryReader reader) { + public Boolean decode(@NotNull BinaryBuffer reader) { return reader.readBoolean(); } } diff --git a/src/main/java/net/minestom/server/data/type/ByteData.java b/src/main/java/net/minestom/server/data/type/ByteData.java index 0fd3c7693..ada01fe1d 100644 --- a/src/main/java/net/minestom/server/data/type/ByteData.java +++ b/src/main/java/net/minestom/server/data/type/ByteData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class ByteData extends DataType { @NotNull @Override - public Byte decode(@NotNull BinaryReader reader) { + public Byte decode(@NotNull BinaryBuffer reader) { return reader.readByte(); } } diff --git a/src/main/java/net/minestom/server/data/type/CharacterData.java b/src/main/java/net/minestom/server/data/type/CharacterData.java index 48d54ac7c..df5407cfc 100644 --- a/src/main/java/net/minestom/server/data/type/CharacterData.java +++ b/src/main/java/net/minestom/server/data/type/CharacterData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class CharacterData extends DataType { @NotNull @Override - public Character decode(@NotNull BinaryReader reader) { + public Character decode(@NotNull BinaryBuffer reader) { return reader.readChar(); } } diff --git a/src/main/java/net/minestom/server/data/type/DoubleData.java b/src/main/java/net/minestom/server/data/type/DoubleData.java index f5b897589..d90fb21a0 100644 --- a/src/main/java/net/minestom/server/data/type/DoubleData.java +++ b/src/main/java/net/minestom/server/data/type/DoubleData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class DoubleData extends DataType { @NotNull @Override - public Double decode(@NotNull BinaryReader reader) { + public Double decode(@NotNull BinaryBuffer reader) { return reader.readDouble(); } } diff --git a/src/main/java/net/minestom/server/data/type/FloatData.java b/src/main/java/net/minestom/server/data/type/FloatData.java index 69d392ddc..54c05eec8 100644 --- a/src/main/java/net/minestom/server/data/type/FloatData.java +++ b/src/main/java/net/minestom/server/data/type/FloatData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class FloatData extends DataType { @NotNull @Override - public Float decode(@NotNull BinaryReader reader) { + public Float decode(@NotNull BinaryBuffer reader) { return reader.readFloat(); } } diff --git a/src/main/java/net/minestom/server/data/type/IntegerData.java b/src/main/java/net/minestom/server/data/type/IntegerData.java index c0902b59c..ed579a283 100644 --- a/src/main/java/net/minestom/server/data/type/IntegerData.java +++ b/src/main/java/net/minestom/server/data/type/IntegerData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class IntegerData extends DataType { @NotNull @Override - public Integer decode(@NotNull BinaryReader reader) { + public Integer decode(@NotNull BinaryBuffer reader) { return reader.readVarInt(); } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/data/type/InventoryData.java b/src/main/java/net/minestom/server/data/type/InventoryData.java index 8c3d2447b..26d889285 100644 --- a/src/main/java/net/minestom/server/data/type/InventoryData.java +++ b/src/main/java/net/minestom/server/data/type/InventoryData.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.data.DataType; import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.InventoryType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class InventoryData extends DataType { @NotNull @Override - public Inventory decode(@NotNull BinaryReader reader) { + public Inventory decode(@NotNull BinaryBuffer reader) { final Component title = reader.readComponent(); final InventoryType inventoryType = InventoryType.valueOf(reader.readSizedString()); final int size = inventoryType.getSize(); diff --git a/src/main/java/net/minestom/server/data/type/ItemStackData.java b/src/main/java/net/minestom/server/data/type/ItemStackData.java index efbc7454b..497dfc1c8 100644 --- a/src/main/java/net/minestom/server/data/type/ItemStackData.java +++ b/src/main/java/net/minestom/server/data/type/ItemStackData.java @@ -2,7 +2,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ItemStackData extends DataType { @NotNull @Override - public ItemStack decode(@NotNull BinaryReader reader) { + public ItemStack decode(@NotNull BinaryBuffer reader) { return reader.readItemStack(); } } diff --git a/src/main/java/net/minestom/server/data/type/LongData.java b/src/main/java/net/minestom/server/data/type/LongData.java index ebd97be26..b7e999ad9 100644 --- a/src/main/java/net/minestom/server/data/type/LongData.java +++ b/src/main/java/net/minestom/server/data/type/LongData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class LongData extends DataType { @NotNull @Override - public Long decode(@NotNull BinaryReader reader) { + public Long decode(@NotNull BinaryBuffer reader) { return reader.readLong(); } } diff --git a/src/main/java/net/minestom/server/data/type/SerializableDataData.java b/src/main/java/net/minestom/server/data/type/SerializableDataData.java index 85ceaefd3..526ce3cce 100644 --- a/src/main/java/net/minestom/server/data/type/SerializableDataData.java +++ b/src/main/java/net/minestom/server/data/type/SerializableDataData.java @@ -3,7 +3,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; import net.minestom.server.data.SerializableData; import net.minestom.server.data.SerializableDataImpl; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class SerializableDataData extends DataType { @NotNull @Override - public SerializableData decode(@NotNull BinaryReader reader) { + public SerializableData decode(@NotNull BinaryBuffer reader) { SerializableData serializableData = new SerializableDataImpl(); serializableData.readIndexedSerializedData(reader); return serializableData; diff --git a/src/main/java/net/minestom/server/data/type/ShortData.java b/src/main/java/net/minestom/server/data/type/ShortData.java index 01c746370..ba21ad0b4 100644 --- a/src/main/java/net/minestom/server/data/type/ShortData.java +++ b/src/main/java/net/minestom/server/data/type/ShortData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ShortData extends DataType { @NotNull @Override - public Short decode(@NotNull BinaryReader reader) { + public Short decode(@NotNull BinaryBuffer reader) { return reader.readShort(); } } diff --git a/src/main/java/net/minestom/server/data/type/StringData.java b/src/main/java/net/minestom/server/data/type/StringData.java index 99d0a3a5f..49f0e46fc 100644 --- a/src/main/java/net/minestom/server/data/type/StringData.java +++ b/src/main/java/net/minestom/server/data/type/StringData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class StringData extends DataType { @NotNull @Override - public String decode(@NotNull BinaryReader reader) { + public String decode(@NotNull BinaryBuffer reader) { return reader.readSizedString(); } } diff --git a/src/main/java/net/minestom/server/data/type/UuidType.java b/src/main/java/net/minestom/server/data/type/UuidType.java index e4c026ed0..1d06176f2 100644 --- a/src/main/java/net/minestom/server/data/type/UuidType.java +++ b/src/main/java/net/minestom/server/data/type/UuidType.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -15,7 +15,7 @@ public class UuidType extends DataType { @NotNull @Override - public UUID decode(@NotNull BinaryReader reader) { + public UUID decode(@NotNull BinaryBuffer reader) { return reader.readUuid(); } } diff --git a/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java b/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java index bbcbdd19c..3e2deea7a 100644 --- a/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class BooleanArrayData extends DataType { @NotNull @Override - public boolean[] decode(@NotNull BinaryReader reader) { + public boolean[] decode(@NotNull BinaryBuffer reader) { boolean[] array = new boolean[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java b/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java index a1adb5881..2836bc44a 100644 --- a/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class ByteArrayData extends DataType { @NotNull @Override - public byte[] decode(@NotNull BinaryReader reader) { + public byte[] decode(@NotNull BinaryBuffer reader) { return decodeByteArray(reader); } @@ -24,7 +24,7 @@ public class ByteArrayData extends DataType { } } - public static byte[] decodeByteArray(@NotNull BinaryReader binaryReader) { + public static byte[] decodeByteArray(@NotNull BinaryBuffer binaryReader) { byte[] array = new byte[binaryReader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = binaryReader.readByte(); diff --git a/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java b/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java index 4a69fc99f..0bf5e6211 100644 --- a/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,7 +16,7 @@ public class CharacterArrayData extends DataType { @NotNull @Override - public char[] decode(@NotNull BinaryReader reader) { + public char[] decode(@NotNull BinaryBuffer reader) { char[] array = new char[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readChar(); diff --git a/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java b/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java index e5131602f..f337c7d65 100644 --- a/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class DoubleArrayData extends DataType { @NotNull @Override - public double[] decode(@NotNull BinaryReader reader) { + public double[] decode(@NotNull BinaryBuffer reader) { double[] array = new double[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java b/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java index 6a11fdd36..47b8c61a4 100644 --- a/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class FloatArrayData extends DataType { @NotNull @Override - public float[] decode(@NotNull BinaryReader reader) { + public float[] decode(@NotNull BinaryBuffer reader) { float[] array = new float[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java b/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java index 9f754d7ca..91c2d5b91 100644 --- a/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,10 +17,10 @@ public class IntegerArrayData extends DataType { @NotNull @Override - public int[] decode(@NotNull BinaryReader reader) { + public int[] decode(@NotNull BinaryBuffer reader) { int[] array = new int[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { - array[i] = reader.readInteger(); + array[i] = reader.readInt(); } return array; } diff --git a/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java b/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java index 86f129457..f87bb33a1 100644 --- a/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java @@ -2,7 +2,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ItemStackArrayData extends DataType { @NotNull @Override - public ItemStack[] decode(@NotNull BinaryReader reader) { + public ItemStack[] decode(@NotNull BinaryBuffer reader) { ItemStack[] items = new ItemStack[reader.readVarInt()]; for (int i = 0; i < items.length; i++) { items[i] = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/data/type/array/LongArrayData.java b/src/main/java/net/minestom/server/data/type/array/LongArrayData.java index cb7e9df54..5f2063966 100644 --- a/src/main/java/net/minestom/server/data/type/array/LongArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/LongArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class LongArrayData extends DataType { @NotNull @Override - public long[] decode(@NotNull BinaryReader reader) { + public long[] decode(@NotNull BinaryBuffer reader) { long[] array = new long[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readLong(); diff --git a/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java b/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java index c133a1478..04796929c 100644 --- a/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ShortArrayData extends DataType { @NotNull @Override - public short[] decode(@NotNull BinaryReader reader) { + public short[] decode(@NotNull BinaryBuffer reader) { short[] array = new short[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readShort(); diff --git a/src/main/java/net/minestom/server/data/type/array/StringArrayData.java b/src/main/java/net/minestom/server/data/type/array/StringArrayData.java index 514fc4a0b..1bbf0c4fa 100644 --- a/src/main/java/net/minestom/server/data/type/array/StringArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/StringArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class StringArrayData extends DataType { @NotNull @Override - public String[] decode(@NotNull BinaryReader reader) { + public String[] decode(@NotNull BinaryBuffer reader) { return reader.readSizedStringArray(Integer.MAX_VALUE); } } diff --git a/src/main/java/net/minestom/server/entity/Metadata.java b/src/main/java/net/minestom/server/entity/Metadata.java index 8cf0b055c..5e3723e00 100644 --- a/src/main/java/net/minestom/server/entity/Metadata.java +++ b/src/main/java/net/minestom/server/entity/Metadata.java @@ -7,7 +7,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.play.EntityMetaDataPacket; import net.minestom.server.utils.Direction; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -28,23 +28,23 @@ public class Metadata { // METADATA TYPES public static Value Byte(byte value) { - return new Value<>(TYPE_BYTE, value, writer -> writer.writeByte(value), BinaryReader::readByte); + return new Value<>(TYPE_BYTE, value, writer -> writer.writeByte(value), BinaryBuffer::readByte); } public static Value VarInt(int value) { - return new Value<>(TYPE_VARINT, value, writer -> writer.writeVarInt(value), BinaryReader::readVarInt); + return new Value<>(TYPE_VARINT, value, writer -> writer.writeVarInt(value), BinaryBuffer::readVarInt); } public static Value Float(float value) { - return new Value<>(TYPE_FLOAT, value, writer -> writer.writeFloat(value), BinaryReader::readFloat); + return new Value<>(TYPE_FLOAT, value, writer -> writer.writeFloat(value), BinaryBuffer::readFloat); } public static Value String(@NotNull String value) { - return new Value<>(TYPE_STRING, value, writer -> writer.writeSizedString(value), BinaryReader::readSizedString); + return new Value<>(TYPE_STRING, value, writer -> writer.writeSizedString(value), BinaryBuffer::readSizedString); } public static Value Chat(@NotNull Component value) { - return new Value<>(TYPE_CHAT, value, writer -> writer.writeComponent(value), BinaryReader::readComponent); + return new Value<>(TYPE_CHAT, value, writer -> writer.writeComponent(value), BinaryBuffer::readComponent); } public static Value OptChat(@Nullable Component value) { @@ -64,11 +64,11 @@ public class Metadata { } public static Value Slot(@NotNull ItemStack value) { - return new Value<>(TYPE_SLOT, value, writer -> writer.writeItemStack(value), BinaryReader::readItemStack); + return new Value<>(TYPE_SLOT, value, writer -> writer.writeItemStack(value), BinaryBuffer::readItemStack); } public static Value Boolean(boolean value) { - return new Value<>(TYPE_BOOLEAN, value, writer -> writer.writeBoolean(value), BinaryReader::readBoolean); + return new Value<>(TYPE_BOOLEAN, value, writer -> writer.writeBoolean(value), BinaryBuffer::readBoolean); } public static Value Rotation(@NotNull Point value) { @@ -80,7 +80,7 @@ public class Metadata { } public static Value Position(@NotNull Point value) { - return new Value<>(TYPE_POSITION, value, writer -> writer.writeBlockPosition(value), BinaryReader::readBlockPosition); + return new Value<>(TYPE_POSITION, value, writer -> writer.writeBlockPosition(value), BinaryBuffer::readBlockPosition); } public static Value OptPosition(@Nullable Point value) { @@ -268,7 +268,7 @@ public class Metadata { this.value = value; } - public Entry(BinaryReader reader) { + public Entry(BinaryBuffer reader) { this.index = reader.readByte(); int type = reader.readVarInt(); value = Metadata.read(type, reader); @@ -336,7 +336,7 @@ public class Metadata { } } - private static Value read(int type, BinaryReader reader) { + private static Value read(int type, BinaryBuffer reader) { Value value = getCorrespondingNewEmptyValue(type); value.read(reader); return value; @@ -347,9 +347,9 @@ public class Metadata { protected final int type; protected T value; protected final Consumer valueWriter; - protected final Function readingFunction; + protected final Function readingFunction; - public Value(int type, T value, @NotNull Consumer valueWriter, @NotNull Function readingFunction) { + public Value(int type, T value, @NotNull Consumer valueWriter, @NotNull Function readingFunction) { this.type = type; this.value = value; this.valueWriter = valueWriter; @@ -363,7 +363,7 @@ public class Metadata { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { // skip type, will be read somewhere else value = readingFunction.apply(reader); } diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index 81a7f8211..9679e1642 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -10,14 +10,12 @@ import net.minestom.server.network.packet.client.handler.ClientStatusPacketsHand import net.minestom.server.network.packet.client.handshake.HandshakePacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.Readable; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.nio.ByteBuffer; - /** * Responsible for processing client packets. *

@@ -42,18 +40,17 @@ public final class PacketProcessor { this.playPacketsHandler = new ClientPlayPacketsHandler(); } - public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, ByteBuffer body) { + public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, BinaryBuffer content) { if (MinecraftServer.getRateLimit() > 0) { // Increment packet count (checked in PlayerConnection#update) playerConnection.getPacketCounter().incrementAndGet(); } - BinaryReader binaryReader = new BinaryReader(body); final ConnectionState connectionState = playerConnection.getConnectionState(); if (connectionState == ConnectionState.UNKNOWN) { // Should be handshake packet if (packetId == 0) { HandshakePacket handshakePacket = new HandshakePacket(); - safeRead(playerConnection, handshakePacket, binaryReader); + safeRead(playerConnection, handshakePacket, content); handshakePacket.process(playerConnection); } return; @@ -62,18 +59,18 @@ public final class PacketProcessor { case PLAY: final Player player = playerConnection.getPlayer(); ClientPlayPacket playPacket = (ClientPlayPacket) playPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, playPacket, binaryReader); + safeRead(playerConnection, playPacket, content); assert player != null; player.addPacketToQueue(playPacket); break; case LOGIN: final ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, loginPacket, binaryReader); + safeRead(playerConnection, loginPacket, content); loginPacket.process(playerConnection); break; case STATUS: final ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, statusPacket, binaryReader); + safeRead(playerConnection, statusPacket, content); statusPacket.process(playerConnection); break; } @@ -110,16 +107,14 @@ public final class PacketProcessor { } /** - * Calls {@link Readable#read(BinaryReader)} and catch all the exceptions to be printed using the packet processor logger. + * Calls {@link Readable#read(BinaryBuffer)} and catch all the exceptions to be printed using the packet processor logger. * * @param connection the connection who sent the packet * @param readable the readable interface * @param reader the buffer containing the packet */ - private void safeRead(@NotNull PlayerConnection connection, @NotNull Readable readable, @NotNull BinaryReader reader) { - final int readableBytes = reader.available(); - // Check if there is anything to read - if (readableBytes == 0) { + private void safeRead(@NotNull PlayerConnection connection, @NotNull Readable readable, @NotNull BinaryBuffer reader) { + if (reader.readableBytes() == 0) { return; } try { diff --git a/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java b/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java index a61b1b8cb..f702c6242 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java +++ b/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java @@ -1,7 +1,6 @@ package net.minestom.server.network.packet.client.handler; import net.minestom.server.network.packet.client.ClientPacket; -import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; @@ -12,7 +11,7 @@ import java.util.function.Supplier; * Packets are register using {@link #register(int, ClientPacketSupplier)} * (you can override a packet id even if not recommended and not officially supported) and retrieved with {@link #getPacketInstance(int)}. *

- * If you want to fill the packet from a buffer, consider using {@link ClientPacket#read(BinaryReader)} after getting the packet instance. + * If you want to fill the packet from a buffer, consider using {@link Readable#read(net.minestom.server.utils.binary.BinaryBuffer)} after getting the packet instance. */ public class ClientPacketsHandler { diff --git a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java index e6f8cbe34..14d18484b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java @@ -10,7 +10,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -31,7 +31,7 @@ public class HandshakePacket implements ClientPreplayPacket { private int nextState; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.protocolVersion = reader.readVarInt(); this.serverAddress = reader.readSizedString(BungeeCordProxy.isEnabled() ? Short.MAX_VALUE : 255); this.serverPort = reader.readUnsignedShort(); diff --git a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java index 83d5ef855..894be7c70 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java @@ -10,7 +10,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.async.AsyncUtils; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -84,7 +84,7 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { sharedSecret = ByteArrayData.decodeByteArray(reader); verifyToken = ByteArrayData.decodeByteArray(reader); } diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java index 6b8b93875..e2993193b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java @@ -11,6 +11,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -90,7 +91,7 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.messageId = reader.readVarInt(); this.successful = reader.readBoolean(); if (successful) { diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java index f3a4282fc..fb0d65245 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java @@ -14,7 +14,7 @@ import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -98,7 +98,7 @@ public class LoginStartPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.username = reader.readSizedString(16); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java index cb080627b..29f9377fc 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.advancements.AdvancementAction; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientAdvancementTabPacket extends ClientPlayPacket { public String tabIdentifier = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.action = AdvancementAction.values()[reader.readVarInt()]; if (action == AdvancementAction.OPENED_TAB) { diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java index c6a8b92aa..797a3a7fd 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientAnimationPacket extends ClientPlayPacket { public Player.Hand hand = Player.Hand.MAIN; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java index 9ce504e64..d021030aa 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientChatMessagePacket extends ClientPlayPacket { public String message = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.message = reader.readSizedString(256); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java index 3ee6a362b..6ed391f3c 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientClickWindowButtonPacket extends ClientPlayPacket { public byte buttonId; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.windowId = reader.readByte(); this.buttonId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java index fe762a408..453de731f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java @@ -4,7 +4,7 @@ import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class ClientClickWindowPacket extends ClientPlayPacket { public ItemStack item = ItemStack.AIR; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.windowId = reader.readByte(); this.stateId = reader.readVarInt(); this.slot = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java index c0bb899a1..228462f99 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientCloseWindowPacket extends ClientPlayPacket { public byte windowId; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.windowId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java index cb0ce7a22..2f94aa375 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientCraftRecipeRequest extends ClientPlayPacket { public boolean makeAll; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.windowId = reader.readByte(); this.recipe = reader.readSizedString(256); this.makeAll = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java index 2cf718f2f..538411d0b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientCreativeInventoryActionPacket extends ClientPlayPacket { public ItemStack item = ItemStack.AIR; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.slot = reader.readShort(); this.item = reader.readItemStack(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java index c19c4450a..6b3166fb4 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class ClientEditBookPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.slot = reader.readVarInt(); final int pageLength = reader.readVarInt(); this.pages = new String[pageLength]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java index 7c251b342..579404352 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientEntityActionPacket extends ClientPlayPacket { public int horseJumpBoost; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.playerId = reader.readVarInt(); this.action = Action.values()[reader.readVarInt()]; this.horseJumpBoost = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java index 67add65de..19679c082 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -14,7 +14,7 @@ public class ClientGenerateStructurePacket extends ClientPlayPacket { public boolean keepJigsaws; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.level = reader.readVarInt(); this.keepJigsaws = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java index ea6f4fab9..7393ce050 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientHeldItemChangePacket extends ClientPlayPacket { public short slot; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.slot = reader.readShort(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java index 752c7814c..19eedeb92 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ClientInteractEntityPacket extends ClientPlayPacket { public boolean sneaking; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.targetId = reader.readVarInt(); this.type = Type.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java index a22cf834a..dc7ffa70d 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientKeepAlivePacket extends ClientPlayPacket { public long id; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.id = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java index 664b12433..e8800a272 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientNameItemPacket extends ClientPlayPacket { public String itemName = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.itemName = reader.readSizedString(Short.MAX_VALUE); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java index 4c32370d0..73bcd5a06 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPickItemPacket extends ClientPlayPacket { public int slotToUse; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.slotToUse = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java index 0fec1a32b..e36de7c35 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPlayerAbilitiesPacket extends ClientPlayPacket { public byte flags; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.flags = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java index 91581be44..1b11e5e57 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -18,7 +18,7 @@ public class ClientPlayerBlockPlacementPacket extends ClientPlayPacket { public boolean insideBlock; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; this.blockPosition = reader.readBlockPosition(); this.blockFace = BlockFace.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java index 88edf7bfc..32693adab 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -15,7 +15,7 @@ public class ClientPlayerDiggingPacket extends ClientPlayPacket { public BlockFace blockFace = BlockFace.TOP; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.status = Status.values()[reader.readVarInt()]; this.blockPosition = reader.readBlockPosition(); this.blockFace = BlockFace.values()[reader.readByte()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java index 4aa5de700..ff8e84af2 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPlayerPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.onGround = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java index 07b05e92f..458ab12d4 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientPlayerPositionAndRotationPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java index 8141c3fe7..b56475020 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPlayerPositionPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java index 476e48b99..1b17f68fe 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPlayerRotationPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.yaw = reader.readFloat(); this.pitch = reader.readFloat(); this.onGround = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java index 53fb5fd43..53b6bb320 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPluginMessagePacket extends ClientPlayPacket { public byte[] data = new byte[0]; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.channel = reader.readSizedString(256); this.data = reader.readRemainingBytes(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java index 67eaffa79..e1d3acb52 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPongPacket extends ClientPlayPacket { public int id; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.id = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java index f0a7bf897..fbfdcbf76 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -13,7 +13,7 @@ public class ClientQueryBlockNbtPacket extends ClientPlayPacket { public Point blockPosition = Vec.ZERO; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.transactionId = reader.readVarInt(); this.blockPosition = reader.readBlockPosition(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java index 767187895..2dbdb0c46 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientQueryEntityNbtPacket extends ClientPlayPacket { public int entityId; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.transactionId = reader.readVarInt(); this.entityId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java index 046d33ef6..aba81ff87 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; import net.minestom.server.resourcepack.ResourcePackStatus; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientResourcePackStatusPacket extends ClientPlayPacket { public ResourcePackStatus result = ResourcePackStatus.SUCCESS; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.result = ResourcePackStatus.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java index e6f3a327f..0b799ad4b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientSelectTradePacket extends ClientPlayPacket { public int selectedSlot; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.selectedSlot = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java index dc1573c8e..c1ec3fe53 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientSetBeaconEffectPacket extends ClientPlayPacket { public int secondaryEffect; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.primaryEffect = reader.readVarInt(); this.secondaryEffect = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java index 860a58078..7635a65b8 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientSetDisplayedRecipePacket extends ClientPlayPacket { public String recipeId = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.recipeId = reader.readSizedString(256); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java index 17a1e9e64..8cbe19b1d 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSetRecipeBookStatePacket extends ClientPlayPacket { public boolean filterActive; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.type = BookType.values()[reader.readVarInt()]; this.bookOpen = reader.readBoolean(); this.filterActive = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java index 68ac0f4a2..3ec1177a5 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.message.ChatMessageType; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class ClientSettingsPacket extends ClientPlayPacket { public boolean disableTextFiltering; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.locale = reader.readSizedString(128); this.viewDistance = reader.readByte(); this.chatMessageType = ChatMessageType.fromPacketID(reader.readVarInt()); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java index a29fb1060..00435f8b0 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSpectatePacket extends ClientPlayPacket { public UUID targetUuid = new UUID(0,0); @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.targetUuid = reader.readUuid(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java index 6327b4271..388a47df3 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ClientStatusPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.action = Action.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java index 1c7d3ff2e..57b32690d 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientSteerBoatPacket extends ClientPlayPacket { public boolean rightPaddleTurning; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.leftPaddleTurning = reader.readBoolean(); this.rightPaddleTurning = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java index a14c6be53..cdc615120 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSteerVehiclePacket extends ClientPlayPacket { public byte flags; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.sideways = reader.readFloat(); this.forward = reader.readFloat(); this.flags = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java index 53388fc29..01b4f0c64 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientTabCompletePacket extends ClientPlayPacket { public String text = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.transactionId = reader.readVarInt(); this.text = reader.readSizedString(Short.MAX_VALUE); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java index d070880cf..4d5c697ea 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientTeleportConfirmPacket extends ClientPlayPacket { public int teleportId; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.teleportId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java index 930831415..17dc3c382 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientUpdateCommandBlockMinecartPacket extends ClientPlayPacket { public boolean trackOutput; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.entityId = reader.readVarInt(); this.command = reader.readSizedString(Short.MAX_VALUE); this.trackOutput = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java index 7f581516b..38eb15c18 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -21,7 +21,7 @@ public class ClientUpdateCommandBlockPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.command = reader.readSizedString(Short.MAX_VALUE); this.mode = Mode.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java index 20f62a968..23953efd9 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -16,7 +16,7 @@ public class ClientUpdateSignPacket extends ClientPlayPacket { public String line4 = ""; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.line1 = reader.readSizedString(384); this.line2 = reader.readSizedString(384); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java index c7553cc06..b145f9e82 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; import net.minestom.server.utils.Rotation; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -51,7 +51,7 @@ public class ClientUpdateStructureBlockPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { location = reader.readBlockPosition(); action = Action.values()[reader.readVarInt()]; mode = Mode.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java index 29781adbd..6a743d1c8 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientUseItemPacket extends ClientPlayPacket { public Player.Hand hand = Player.Hand.MAIN; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java index 5378a493d..a810e105a 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientVehicleMovePacket extends ClientPlayPacket { public float yaw, pitch; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java index 86aa82da4..e58106708 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.status; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,7 +16,7 @@ public class LegacyServerListPingPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.payload = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java index 5e336a12f..80d946089 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.event.server.ClientPingServerEvent; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.status.PongPacket; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class PingPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.number = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java index 87361e984..4a305168f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.handshake.ResponsePacket; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.ping.ServerListPingType; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class StatusRequestPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { // Empty } diff --git a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java index eb94d671b..337fc1297 100644 --- a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; public interface ServerPacket extends Readable, Writeable { @Override - default void read(@NotNull BinaryReader reader) { + default void read(@NotNull BinaryBuffer reader) { // FIXME: remove when all packets are written and read properly throw new UnsupportedOperationException("WIP: This packet is not set up to be read from Minestom code at the moment."); } diff --git a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java index a654281c1..c3f0404b4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server.handshake; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class ResponsePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { jsonResponse = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java index eafaec561..faa9d278e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.extras.MojangAuth; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.network.player.NettyPlayerConnection; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class EncryptionRequestPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { reader.readSizedString(); // server id, apparently empty publicKey = ByteArrayData.decodeByteArray(reader); diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java index c9737071a..717bfab16 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.login; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class LoginDisconnectPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { kickMessage = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java index 5e9d355ed..c2b0e49fe 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class LoginPluginRequestPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { messageId = reader.readVarInt(); channel = reader.readSizedString(); data = reader.readRemainingBytes(); diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java index 501ba1168..1b4b88f60 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class LoginSuccessPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { uuid = reader.readUuid(); username = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java index a3229f7fc..e7d790abe 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class SetCompressionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { threshold = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java index 52e9e3f7a..cc54c8f88 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.client.play.ClientPlayerDiggingPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -37,7 +37,7 @@ public class AcknowledgePlayerDiggingPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.blockStateId = reader.readVarInt(); this.status = ClientPlayerDiggingPacket.Status.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java index 8c12cc9e6..6462045ff 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class ActionBarPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.actionBarText = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java index 1d85fd22a..585792e88 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java @@ -6,10 +6,8 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; -import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.binary.*; import net.minestom.server.utils.binary.Readable; -import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -45,7 +43,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { resetAdvancements = reader.readBoolean(); int mappingCount = reader.readVarInt(); @@ -111,7 +109,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { key = reader.readSizedString(); value = new Advancement(); value.read(reader); @@ -148,7 +146,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { boolean hasParent = reader.readBoolean(); if (hasParent) { parentIdentifier = reader.readSizedString(); @@ -200,7 +198,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { title = reader.readComponent(); description = reader.readComponent(); icon = reader.readItemStack(); @@ -226,7 +224,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { requirements = reader.readSizedStringArray(Integer.MAX_VALUE); } } @@ -242,7 +240,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { key = reader.readSizedString(); value = new AdvancementProgress(); value.read(reader); @@ -261,7 +259,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { int count = reader.readVarInt(); criteria = new Criteria[count]; for (int i = 0; i < count; i++) { @@ -282,7 +280,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { criterionIdentifier = reader.readSizedString(); criterionProgress = new CriterionProgress(); criterionProgress.read(reader); @@ -301,7 +299,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { achieved = reader.readBoolean(); if (achieved) { dateOfAchieving = reader.readLong(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java index 66b6a1234..473a3838a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Entity; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -33,7 +33,7 @@ public class AttachEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { attachedEntityId = reader.readInt(); holdingEntityId = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java index 426b884c1..b19678416 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.instance.block.Block; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class BlockActionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.actionId = reader.readByte(); this.actionParam = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java index efb060e38..5c5d55d4f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -32,7 +32,7 @@ public class BlockBreakAnimationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.entityId = reader.readVarInt(); this.blockPosition = reader.readBlockPosition(); this.destroyStage = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java index b73c3b2cc..05a992680 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.instance.block.Block; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class BlockChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.blockPosition = reader.readBlockPosition(); this.blockStateId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java index 03a67decb..32e14a12c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -37,7 +37,7 @@ public class BlockEntityDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { blockPosition = reader.readBlockPosition(); action = reader.readByte(); try { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java index 13d52a7f5..92bada668 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -62,7 +62,7 @@ public class BossBarPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { uuid = reader.readUuid(); action = Action.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java index 87de08693..7fadc6c7b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Entity; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class CameraPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { cameraId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java index 78e791013..33f2cb632 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class ChangeGameStatePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { reason = Reason.values()[reader.readByte()]; value = reader.readFloat(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java index 85b57f270..849c1347e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.message.ChatPosition; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +44,7 @@ public class ChatMessagePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { message = reader.readComponent(); position = ChatPosition.fromPacketID(reader.readByte()); uuid = reader.readUuid(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java index acd3f8b62..8a444b9b3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java @@ -11,7 +11,7 @@ import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.tag.Tag; import net.minestom.server.utils.Utils; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; @@ -146,7 +146,7 @@ public class ChunkDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { chunkX = reader.readInt(); chunkZ = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java index 5e0151b5e..c1d67c13c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class ClearTitlesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.reset = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java index e30b27830..b12679d01 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class CloseWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java index 9e137ee2a..fedcf6933 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class CollectItemPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { collectedEntityId = reader.readVarInt(); collectorEntityId = reader.readVarInt(); pickupItemCount = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java b/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java index cb6db367a..844ce57db 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class CraftRecipeResponse implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); recipe = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java index 038512226..502d784df 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class DeathCombatEventPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.playerId = reader.readVarInt(); this.entityId = reader.readInt(); this.message = reader.readComponent(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java index c0112f5a0..21b63ea51 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -23,7 +23,7 @@ public class DeclareCommandsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { int nodeCount = reader.readVarInt(); nodes = new Node[nodeCount]; for (int i = 0; i < nodeCount; i++) { @@ -75,7 +75,7 @@ public class DeclareCommandsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { flags = reader.readByte(); children = reader.readVarIntArray(); if ((flags & 0x08) != 0) { @@ -96,7 +96,7 @@ public class DeclareCommandsPacket implements ServerPacket { } } - private byte[] getProperties(BinaryReader reader, String parser) { + private byte[] getProperties(BinaryBuffer reader, String parser) { switch (parser) { case "brigadier:double": return reader.extractBytes(() -> { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java index 8e9f3692a..c98342fae 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -28,7 +28,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { int recipeCount = reader.readVarInt(); recipes = new DeclaredRecipe[recipeCount]; for (int i = 0; i < recipeCount; i++) { @@ -94,7 +94,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { throw new UnsupportedOperationException("'read' must be implemented inside subclasses!"); } } @@ -116,7 +116,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredShapelessCraftingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredShapelessCraftingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "crafting_shapeless"); read(reader); } @@ -135,7 +135,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); int count = reader.readVarInt(); ingredients = new Ingredient[count]; @@ -170,7 +170,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.height = height; } - private DeclaredShapedCraftingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredShapedCraftingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "crafting_shaped"); read(reader); } @@ -190,7 +190,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { width = reader.readVarInt(); height = reader.readVarInt(); group = reader.readSizedString(); @@ -226,7 +226,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredSmeltingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredSmeltingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "smelting"); read(reader); } @@ -244,7 +244,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -277,7 +277,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredBlastingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredBlastingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "blasting"); read(reader); } @@ -295,7 +295,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -328,7 +328,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredSmokingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredSmokingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "smoking"); read(reader); } @@ -346,7 +346,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -379,7 +379,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredCampfireCookingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredCampfireCookingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "campfire_cooking"); read(reader); } @@ -397,7 +397,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -424,7 +424,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredStonecutterRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredStonecutterRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "stonecutter"); read(reader); } @@ -440,7 +440,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -465,7 +465,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredSmithingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { + private DeclaredSmithingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { super(recipeId, "smithing"); read(reader); } @@ -481,7 +481,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { base = new Ingredient(); addition = new Ingredient(); base.read(reader); @@ -503,7 +503,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { items = new ItemStack[reader.readVarInt()]; for (int i = 0; i < items.length; i++) { items[i] = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java index 210e7726b..18b7c5c88 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class DestroyEntitiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.entityIds = reader.readVarIntArray(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java index 4f5725b43..4fa256495 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class DisconnectPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { message = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java index ed0d36174..a8e75f633 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class DisplayScoreboardPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { position = reader.readByte(); scoreName = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java index d789ad30d..e9f9e9fc3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -35,7 +35,7 @@ public class EffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.effectId = reader.readInt(); this.position = reader.readBlockPosition(); this.data = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java index 58ab29eec..97b549511 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class EndCombatEventPacket implements ServerPacket { public int entityId; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.duration = reader.readVarInt(); this.entityId = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java index 028660250..e4f17cd7e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java @@ -2,14 +2,14 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; public class EnterCombatEventPacket implements ServerPacket { @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { } @Override diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java index a171e040f..b4f0b6183 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityAnimationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); animation = Animation.values()[reader.readByte()]; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java index d3ffa277b..c41c18776 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.potion.Potion; import net.minestom.server.potion.PotionEffect; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); byte potionEffectID = reader.readByte(); byte amplifier = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java index 5707fba40..09a1e1a48 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -48,7 +48,7 @@ public class EntityEquipmentPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); boolean hasRemaining = true; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java index db0dbe883..3b8aa6678 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityHeadLookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); yaw = reader.readByte() * 360f / 256f; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java index 57fa2eeda..f4d5c7754 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Metadata; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class EntityMetaDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); entries = new LinkedList<>(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java index 5f2389d18..2ac42089f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class EntityPositionAndRotationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); deltaX = reader.readShort(); deltaY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java index a15e63b6d..011a4ecc3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class EntityPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); deltaX = reader.readShort(); deltaY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java index 06c8989f9..d8da63a7d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java @@ -6,10 +6,8 @@ import net.minestom.server.attribute.AttributeModifier; import net.minestom.server.attribute.AttributeOperation; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; -import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.binary.*; import net.minestom.server.utils.binary.Readable; -import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -32,7 +30,7 @@ public class EntityPropertiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); int propertyCount = reader.readVarInt(); properties = new Property[propertyCount]; @@ -75,7 +73,7 @@ public class EntityPropertiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { String key = reader.readSizedString(); attribute = Attribute.fromKey(key); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java index a5b074775..991ee23fa 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class EntityRotationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); yaw = reader.readByte() * 360f / 256f; pitch = reader.readByte() * 360f / 256f; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java index a697e1de6..7f345cb52 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.sound.Sound; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class EntitySoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { soundId = reader.readVarInt(); soundSource = Sound.Source.values()[reader.readVarInt()]; entityId = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java index d7b10f94e..6e80c59f0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityStatusPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readInt(); status = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java index 8e0486a8e..c137981bd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -35,7 +35,7 @@ public class EntityTeleportPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); position = new Pos( reader.readDouble(), diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java index 8d4fc5a22..72d0ed326 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -36,7 +36,7 @@ public class EntityVelocityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); velocityX = reader.readShort(); velocityY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java index 8605e993c..dbf6c8d28 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -31,7 +31,7 @@ public class ExplosionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { x = reader.readFloat(); y = reader.readFloat(); z = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java index 15aa2f456..4ccb99b97 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class FacePlayerPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { facePosition = FacePosition.values()[reader.readVarInt()]; targetX = reader.readDouble(); targetY = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java index 3abde0710..c436dec19 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class HeldItemChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { slot = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java index db3beb0be..c84ad31b3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -43,7 +43,7 @@ public class InitializeWorldBorderPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.x = reader.readDouble(); this.z = reader.readDouble(); this.oldDiameter = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java index 321204703..5f20aceb8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java @@ -4,7 +4,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import net.minestom.server.world.DimensionType; @@ -72,7 +72,7 @@ public class JoinGamePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readInt(); hardcore = reader.readBoolean(); gameMode = GameMode.fromId(reader.readByte()); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java index 3e76ed3bb..efa23c3a3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class KeepAlivePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { id = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java index bd9d87295..7f027929c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java @@ -4,10 +4,8 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; -import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.binary.*; import net.minestom.server.utils.binary.Readable; -import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -67,7 +65,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { mapId = reader.readVarInt(); scale = reader.readByte(); locked = reader.readBoolean(); @@ -159,7 +157,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { type = reader.readVarInt(); x = reader.readByte(); z = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java index 14954d844..3eaf1fa91 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.instance.Chunk; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.chunk.ChunkUtils; import org.jetbrains.annotations.NotNull; @@ -36,7 +36,7 @@ public class MultiBlockChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { long chunkIndexWithSection = reader.readLong(); chunkX = ChunkUtils.getChunkXFromChunkIndexWithSection(chunkIndexWithSection); chunkZ = ChunkUtils.getChunkZFromChunkIndexWithSection(chunkIndexWithSection); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java index ec15cd0b3..14b3a35a8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.sound.Sound.Source; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -33,7 +33,7 @@ public class NamedSoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { soundName = reader.readSizedString(); soundSource = Source.values()[reader.readVarInt()]; x = reader.readInt() / 8; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java index 05a0ffd98..887365fef 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jglrxavpok.hephaistos.nbt.NBT; @@ -32,7 +32,7 @@ public class NbtQueryResponsePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { transactionId = reader.readVarInt(); try { NBT nbt = reader.readTag(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java index ad5695538..a09230eb4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -25,7 +25,7 @@ public class OpenBookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java index 376e4a189..351a13927 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class OpenHorseWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); slotCount = reader.readVarInt(); entityId = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java index 06a22eb5e..24b92006b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -25,7 +25,7 @@ public class OpenSignEditorPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.signPosition = reader.readBlockPosition(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java index f8ca80130..d9b8e21af 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class OpenWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readVarInt(); windowType = reader.readVarInt(); title = reader.readComponent(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java index 005ca13c8..0e0fb0c0b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class ParticlePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { particleId = reader.readInt(); longDistance = reader.readBoolean(); x = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java index e5aa01de8..b4bd0222d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class PingPacket implements ServerPacket { public int id; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.id = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java index 4035c86ad..a46c865ac 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class PlayerAbilitiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.flags = reader.readByte(); this.flyingSpeed = reader.readFloat(); this.fieldViewModifier = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java index 5f54c802a..777b4227a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -41,7 +41,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { action = Action.values()[reader.readVarInt()]; int playerInfoCount = reader.readVarInt(); @@ -163,7 +163,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.ping = ping; } - AddPlayer(UUID uuid, BinaryReader reader) { + AddPlayer(UUID uuid, BinaryBuffer reader) { super(uuid); name = reader.readSizedString(); int propertyCount = reader.readVarInt(); @@ -236,7 +236,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this(name, value, null); } - Property(BinaryReader reader) { + Property(BinaryBuffer reader) { name = reader.readSizedString(); value = reader.readSizedString(); boolean hasSignature = reader.readBoolean(); @@ -267,7 +267,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.gameMode = gameMode; } - UpdateGamemode(UUID uuid, BinaryReader reader) { + UpdateGamemode(UUID uuid, BinaryBuffer reader) { super(uuid); gameMode = GameMode.fromId((byte) reader.readVarInt()); } @@ -287,7 +287,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.ping = ping; } - UpdateLatency(UUID uuid, BinaryReader reader) { + UpdateLatency(UUID uuid, BinaryBuffer reader) { super(uuid); ping = reader.readVarInt(); } @@ -307,7 +307,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.displayName = displayName; } - UpdateDisplayName(UUID uuid, BinaryReader reader) { + UpdateDisplayName(UUID uuid, BinaryBuffer reader) { super(uuid); boolean hasDisplayName = reader.readBoolean(); if (hasDisplayName) { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java index 28361a613..c96028552 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -51,7 +51,7 @@ public class PlayerListHeaderAndFooterPacket implements ComponentHoldingServerPa return new PlayerListHeaderAndFooterPacket(header == null ? null : operator.apply(header), footer == null ? null : operator.apply(footer)); } - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { header = reader.readComponent(); footer = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java index 8d7d01dbe..4b63bb4a0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class PlayerPositionAndLookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble(), reader.readFloat(), reader.readFloat()); flags = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java index 32efda9f9..1532e9e18 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class PluginMessagePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { channel = reader.readSizedString(); data = reader.readRemainingBytes(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java index 7a989e92a..2c3ce8b28 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.potion.PotionEffect; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class RemoveEntityEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); effect = PotionEffect.fromId(reader.readByte()); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java index 015bc503f..ed7af15f4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.resourcepack.ResourcePack; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -39,7 +39,7 @@ public class ResourcePackSendPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.url = reader.readSizedString(); this.hash = reader.readSizedString(); this.forced = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java index 6eb5b2e20..8d2c5ae98 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.world.DimensionType; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class RespawnPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { try { dimensionType = DimensionType.fromNBT((NBTCompound) reader.readTag()); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java index 530b3cb95..386d6b9c4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -51,7 +51,7 @@ public class ScoreboardObjectivePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { objectiveName = reader.readSizedString(); mode = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java b/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java index 64953cbb7..f4052208c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -15,7 +15,7 @@ public class SculkVibrationSignal implements ServerPacket { public int arrivalTicks; @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java index 657797fe1..8fbd37499 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +26,7 @@ public class SelectAdvancementTabPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { boolean hasID = reader.readBoolean(); if (hasID) { identifier = reader.readSizedString(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java index 1752e686b..b6009b995 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.world.Difficulty; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class ServerDifficultyPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { difficulty = Difficulty.values()[reader.readByte()]; locked = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java index b3de767b0..fde739be5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class SetCooldownPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { itemId = reader.readVarInt(); cooldownTicks = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java index 8e847f7b7..2896222f4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class SetExperiencePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { percentage = reader.readFloat(); level = reader.readVarInt(); totalExperience = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java index 7344bf8e3..ccdaf8483 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class SetPassengersPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { vehicleEntityId = reader.readVarInt(); passengersId = reader.readVarIntArray(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java index 75b91b0cd..843c853dc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class SetSlotPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); stateId = reader.readVarInt(); slot = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java index fe5bd7f3d..99d2acf4c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class SetTitleSubTitlePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.subtitle = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java index 0b74572a5..eb6a68c49 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class SetTitleTextPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.title = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java index 0199a4f39..e2a3a2f24 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class SetTitleTimePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.fadeIn = reader.readInt(); this.stay = reader.readInt(); this.fadeOut = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java index cb0006082..e4c265714 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.sound.SoundEvent; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -48,7 +48,7 @@ public class SoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { soundId = reader.readVarInt(); soundSource = Source.values()[reader.readVarInt()]; x = reader.readInt() / 8; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java index f220801a1..353ffa9f1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -44,7 +44,7 @@ public class SpawnEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); uuid = reader.readUuid(); type = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java index b0db786b2..1767532d4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class SpawnExperienceOrbPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble()); expCount = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java index c407ab502..17580f90d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -43,7 +43,7 @@ public class SpawnLivingEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityId = reader.readVarInt(); entityUuid = reader.readUuid(); entityType = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java index 4a9308b6a..a189839dd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -33,7 +33,7 @@ public class SpawnPaintingPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.entityId = reader.readVarInt(); this.entityUuid = reader.readUuid(); this.motive = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java index 978b13e87..ff2551e29 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -37,7 +37,7 @@ public class SpawnPlayerPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.entityId = reader.readVarInt(); this.playerUuid = reader.readUuid(); this.position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble(), diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java index a26e3748d..1f7e68f43 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class SpawnPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.position = reader.readBlockPosition(); this.angle = reader.readFloat(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java index 9dfb76a2c..70675f0e1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java @@ -3,10 +3,8 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.statistic.StatisticCategory; -import net.minestom.server.utils.binary.BinaryReader; -import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.binary.*; import net.minestom.server.utils.binary.Readable; -import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; public class StatisticsPacket implements ServerPacket { @@ -26,7 +24,7 @@ public class StatisticsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { int length = reader.readVarInt(); statistics = new Statistic[length]; for (int i = 0; i < length; i++) { @@ -54,7 +52,7 @@ public class StatisticsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { category = StatisticCategory.values()[reader.readVarInt()]; statisticId = reader.readVarInt(); value = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java index 08de7c0b5..60e9da50e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class StopSoundPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { flags = reader.readByte(); if (flags == 3 || flags == 1) { source = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java index f690ae0dc..ae1382d53 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.adventure.ComponentHolder; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class TabCompletePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { transactionId = reader.readVarInt(); start = reader.readVarInt(); length = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java index 823eccf2a..b2ce4bed4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.gamedata.tags.Tag; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -45,7 +45,7 @@ public class TagsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.tagsMap = new HashMap<>(); // Read amount of tag types final int typeCount = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java index 915885dd1..a2a26474b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -105,7 +105,7 @@ public class TeamsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { teamName = reader.readSizedString(); action = Action.values()[reader.readByte()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java index a7c5e06bc..7c932f0fb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class TimeUpdatePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { worldAge = reader.readLong(); timeOfDay = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java index 0ff36a2f7..eb51c5bad 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java @@ -3,10 +3,8 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; -import net.minestom.server.utils.binary.BinaryWriter; +import net.minestom.server.utils.binary.*; import net.minestom.server.utils.binary.Readable; -import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; public class TradeListPacket implements ServerPacket { @@ -39,7 +37,7 @@ public class TradeListPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readVarInt(); byte tradeCount = reader.readByte(); @@ -91,7 +89,7 @@ public class TradeListPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { inputItem1 = reader.readItemStack(); result = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java index 463bd7e9f..946e2b947 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class UnloadChunkPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { chunkX = reader.readInt(); chunkZ = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java index 4114c4f46..348dbb4c5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -51,7 +51,7 @@ public class UnlockRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { mode = reader.readVarInt(); craftingRecipeBookOpen = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java index 1e397ea44..622a964e0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class UpdateHealthPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { health = reader.readFloat(); food = reader.readVarInt(); foodSaturation = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java index cdffdf9d9..206e223fb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -58,7 +58,7 @@ public class UpdateLightPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { chunkX = reader.readVarInt(); chunkZ = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java index c56e610a8..744395fe0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class UpdateScorePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { entityName = reader.readSizedString(); action = reader.readByte(); objectiveName = reader.readSizedString(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java index 3c1783614..5ae700918 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class UpdateViewDistancePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { viewDistance = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java index 57d27d022..ed979a936 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class UpdateViewPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { chunkX = reader.readVarInt(); chunkZ = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java index 1a53d5abf..59ea62828 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class VehicleMovePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { x = reader.readDouble(); y = reader.readDouble(); z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java index 60761727b..134c592ce 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class WindowItemsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); stateId = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java index 8f0451fb2..58ee698fd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class WindowPropertyPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { windowId = reader.readByte(); property = reader.readShort(); value = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java index d097b879c..732dcfb60 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class WorldBorderCenterPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.x = reader.readDouble(); this.z = reader.readDouble(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java index df835c6a8..9df7c53a4 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class WorldBorderLerpSizePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.oldDiameter = reader.readDouble(); this.newDiameter = reader.readDouble(); this.speed = reader.readVarLong(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java index 320fd601b..dc9b40953 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderSizePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.diameter = reader.readDouble(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java index 79b1e6871..5c0a3171c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderWarningDelayPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.warningTime = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java index da4a8f654..50d77d705 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderWarningReachPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { this.warningBlocks = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java b/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java index b088e9842..c1b8162d9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server.status; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class PongPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryReader reader) { + public void read(@NotNull BinaryBuffer reader) { number = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index ea77c3270..b02a06943 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -114,8 +114,8 @@ public class NettyPlayerConnection extends PlayerConnection { // Process packet final int packetId = content.readVarInt(); try { - var finalBuffer = content.asByteBuffer(content.readerOffset(), packetEnd); - packetProcessor.process(this, packetId, finalBuffer); + final var slice = content.slice(content.readerOffset(), packetLength); + packetProcessor.process(this, packetId, slice); } catch (Exception e) { // Error while reading the packet MinecraftServer.getExceptionManager().handleException(e); diff --git a/src/main/java/net/minestom/server/storage/StorageLocation.java b/src/main/java/net/minestom/server/storage/StorageLocation.java index d34a41bd2..8a21100a6 100644 --- a/src/main/java/net/minestom/server/storage/StorageLocation.java +++ b/src/main/java/net/minestom/server/storage/StorageLocation.java @@ -2,7 +2,7 @@ package net.minestom.server.storage; import net.minestom.server.MinecraftServer; import net.minestom.server.data.*; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -122,7 +122,7 @@ public class StorageLocation { return null; // Decode the data - BinaryReader binaryReader = new BinaryReader(data); + BinaryBuffer binaryReader = BinaryBuffer.ofArray(data); return dataType.decode(binaryReader); } diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java index 785914d03..2a2dde83f 100644 --- a/src/main/java/net/minestom/server/utils/NBTUtils.java +++ b/src/main/java/net/minestom/server/utils/NBTUtils.java @@ -16,7 +16,7 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.item.attribute.AttributeSlot; import net.minestom.server.item.attribute.ItemAttribute; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -112,8 +112,7 @@ public final class NBTUtils { nbt.set(listName, enchantList); } - @NotNull - public static ItemStack readItemStack(@NotNull BinaryReader reader) { + public static @NotNull ItemStack readItemStack(@NotNull BinaryBuffer reader) { final boolean present = reader.readBoolean(); if (!present) { diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java index f996c9252..1bef21c42 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -1,14 +1,29 @@ package net.minestom.server.utils.binary; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.minestom.server.coordinate.Point; +import net.minestom.server.item.ItemStack; +import net.minestom.server.utils.NBTUtils; +import net.minestom.server.utils.SerializerUtils; +import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; +import org.jglrxavpok.hephaistos.nbt.NBT; +import org.jglrxavpok.hephaistos.nbt.NBTException; import org.jglrxavpok.hephaistos.nbt.NBTReader; import org.jglrxavpok.hephaistos.nbt.NBTWriter; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import java.util.function.Supplier; /** * Manages off-heap memory. @@ -16,8 +31,18 @@ import java.nio.channels.WritableByteChannel; */ public final class BinaryBuffer { private ByteBuffer nioBuffer; // To become a `MemorySegment` once released - private NBTReader nbtReader; - private NBTWriter nbtWriter; + private NBTReader nbtReader = new NBTReader(new InputStream() { + @Override + public int read() { + return readByte(); + } + }, false); + private NBTWriter nbtWriter = new NBTWriter(new OutputStream() { + @Override + public void write(int b) { + // TODO write byte + } + }, false); private final int capacity; private int readerOffset, writerOffset; @@ -32,6 +57,11 @@ public final class BinaryBuffer { return new BinaryBuffer(ByteBuffer.allocateDirect(size)); } + @ApiStatus.Internal + public static BinaryBuffer ofArray(byte[] bytes) { + return new BinaryBuffer(ByteBuffer.wrap(bytes)); + } + public static BinaryBuffer copy(BinaryBuffer buffer) { final int size = buffer.readableBytes(); final var temp = ByteBuffer.allocateDirect(size) @@ -42,7 +72,7 @@ public final class BinaryBuffer { public void write(ByteBuffer buffer) { final int size = buffer.remaining(); // TODO jdk 13 put with index - asByteBuffer(writerOffset, writerOffset + size).put(buffer); + this.nioBuffer.position(writerOffset).put(buffer); this.writerOffset += size; } @@ -64,6 +94,195 @@ public final class BinaryBuffer { throw new RuntimeException("VarInt is too big"); } + public long readVarLong() { + int numRead = 0; + long result = 0; + byte read; + do { + read = readByte(); + final long value = (read & 0b01111111); + result |= (value << (7 * numRead)); + numRead++; + if (numRead > 10) { + throw new RuntimeException("VarLong is too big"); + } + } while ((read & 0b10000000) != 0); + return result; + } + + public byte readByte() { + return nioBuffer.get(readerOffset++); + } + + public boolean readBoolean() { + return readByte() == 1; + } + + public short readShort() { + final short value = nioBuffer.getShort(readerOffset); + this.readerOffset += Short.BYTES; + return value; + } + + public char readChar() { + final char value = nioBuffer.getChar(readerOffset); + this.readerOffset += Character.BYTES; + return value; + } + + public int readUnsignedShort() { + return readShort() & 0xFFFF; + } + + public int readInt() { + final int value = nioBuffer.getInt(readerOffset); + this.readerOffset += Integer.BYTES; + return value; + } + + public long readLong() { + final long value = nioBuffer.getLong(readerOffset); + this.readerOffset += Long.BYTES; + return value; + } + + public float readFloat() { + final float value = nioBuffer.getFloat(readerOffset); + this.readerOffset += Float.BYTES; + return value; + } + + public double readDouble() { + final double value = nioBuffer.getDouble(readerOffset); + this.readerOffset += Double.BYTES; + return value; + } + + public String readSizedString(int maxLength) { + final int length = readVarInt(); + final byte[] bytes = readBytes(length); + final String str = new String(bytes, StandardCharsets.UTF_8); + System.out.println("read " + str + " " + length); + Check.stateCondition(str.length() > maxLength, + "String length ({0}) was higher than the max length of {1}", length, maxLength); + return str; + } + + public String readSizedString() { + return readSizedString(Integer.MAX_VALUE); + } + + public Component readComponent(int maxLength) { + final String jsonObject = readSizedString(maxLength); + return GsonComponentSerializer.gson().deserialize(jsonObject); + } + + public Component readComponent() { + return readComponent(Integer.MAX_VALUE); + } + + public Point readBlockPosition() { + return SerializerUtils.longToBlockPosition(readLong()); + } + + public UUID readUuid() { + return new UUID(readLong(), readLong()); + } + + public NBT readTag() throws IOException, NBTException { + return nbtReader.read(); + } + + public ItemStack readItemStack() { + final ItemStack itemStack = NBTUtils.readItemStack(this); + Check.notNull(itemStack, "#readSlot returned null, probably because the buffer was corrupted"); + return itemStack; + } + + public byte[] readBytes(int length) { + byte[] bytes = new byte[length]; + this.nioBuffer.position(readerOffset).get(bytes, 0, length); + this.readerOffset += length; + return bytes; + } + + public byte[] readRemainingBytes() { + return readBytes(readableBytes()); + } + + public int[] readVarIntArray() { + final int size = readVarInt(); + int[] array = new int[size]; + for (int i = 0; i < size; i++) { + array[i] = readVarInt(); + } + return array; + } + + public long[] readLongArray() { + final int size = readVarInt(); + long[] array = new long[size]; + for (int i = 0; i < size; i++) { + array[i] = readLong(); + } + return array; + } + + public String[] readSizedStringArray(int maxLength) { + final int size = readVarInt(); + String[] strings = new String[size]; + for (int i = 0; i < size; i++) { + strings[i] = readSizedString(maxLength); + } + return strings; + } + + public String[] readSizedStringArray() { + return readSizedStringArray(Integer.MAX_VALUE); + } + + public T read(@NotNull Supplier<@NotNull T> supplier) { + T result = supplier.get(); + result.read(this); + return result; + } + + @SuppressWarnings("unchecked") + public @NotNull T[] readArray(@NotNull Supplier<@NotNull T> supplier) { + Readable[] result = new Readable[readVarInt()]; + for (int i = 0; i < result.length; i++) { + result[i] = supplier.get(); + result[i].read(this); + } + return (T[]) result; + } + + /** + * Records the current position, runs the given Runnable, and then returns the bytes between the position before + * running the runnable and the position after. + * Can be used to extract a subsection of this reader's buffer with complex data + * + * @param extractor the extraction code, simply call the reader's read* methods here. + */ + public byte[] extractBytes(Runnable extractor) { + final int startingPosition = readerOffset(); + extractor.run(); + final int endingPosition = readerOffset(); + this.readerOffset += endingPosition - startingPosition; + byte[] output = new byte[endingPosition - startingPosition]; + this.nioBuffer.position(startingPosition).get(output, 0, output.length); + return output; + } + + @Contract(pure = true) + public BinaryBuffer slice(int start, int length) { + final int end = start + length; + var slice = new BinaryBuffer(asByteBuffer(start, end)); + slice.readerOffset = start; + slice.writerOffset = end; + return slice; + } + public @NotNull Marker mark() { return new Marker(readerOffset, writerOffset); } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java index d529ae4e7..e85fdb0f5 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java @@ -3,8 +3,6 @@ package net.minestom.server.utils.binary; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.coordinate.Point; -import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.NBTUtils; import net.minestom.server.utils.SerializerUtils; import net.minestom.server.utils.Utils; import net.minestom.server.utils.validate.Check; @@ -18,7 +16,6 @@ import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.UUID; -import java.util.function.Supplier; /** * Class used to read from a byte array. @@ -164,18 +161,6 @@ public class BinaryReader extends InputStream { return new UUID(readLong(), readLong()); } - /** - * Tries to read an {@link ItemStack}. - * - * @return the read item - * @throws NullPointerException if the item could not get read - */ - public ItemStack readItemStack() { - final ItemStack itemStack = NBTUtils.readItemStack(this); - Check.notNull(itemStack, "#readSlot returned null, probably because the buffer was corrupted"); - return itemStack; - } - public Component readComponent(int maxLength) { final String jsonObject = readSizedString(maxLength); return GsonComponentSerializer.gson().deserialize(jsonObject); @@ -185,36 +170,6 @@ public class BinaryReader extends InputStream { return readComponent(Integer.MAX_VALUE); } - /** - * Creates a new object from the given supplier and calls its {@link Readable#read(BinaryReader)} method with this reader. - * - * @param supplier supplier to create new instances of your object - * @param the readable object type - * @return the read object - */ - public T read(@NotNull Supplier<@NotNull T> supplier) { - T result = supplier.get(); - result.read(this); - return result; - } - - /** - * Reads the length of the array to read as a varint, creates the array to contain the readable objects and call - * their respective {@link Readable#read(BinaryReader)} methods. - * - * @param supplier supplier to create new instances of your object - * @param the readable object type - * @return the read objects - */ - public @NotNull T[] readArray(@NotNull Supplier<@NotNull T> supplier) { - Readable[] result = new Readable[readVarInt()]; - for (int i = 0; i < result.length; i++) { - result[i] = supplier.get(); - result[i].read(this); - } - return (T[]) result; - } - public ByteBuffer getBuffer() { return buffer; } diff --git a/src/main/java/net/minestom/server/utils/binary/Readable.java b/src/main/java/net/minestom/server/utils/binary/Readable.java index 48fa33012..b814e934a 100644 --- a/src/main/java/net/minestom/server/utils/binary/Readable.java +++ b/src/main/java/net/minestom/server/utils/binary/Readable.java @@ -6,12 +6,10 @@ import org.jetbrains.annotations.NotNull; * Represents an element which can read from a {@link BinaryReader}. */ public interface Readable { - /** * Reads from a {@link BinaryReader}. * * @param reader the reader to read from */ - void read(@NotNull BinaryReader reader); - + void read(@NotNull BinaryBuffer reader); } diff --git a/src/test/java/readwritepackets/ReadWritePackets.java b/src/test/java/readwritepackets/ReadWritePackets.java index 30d6ace81..9bf9baebc 100644 --- a/src/test/java/readwritepackets/ReadWritePackets.java +++ b/src/test/java/readwritepackets/ReadWritePackets.java @@ -7,7 +7,7 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.play.EntityEquipmentPacket; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -79,7 +79,7 @@ public class ReadWritePackets { // re-read packet byte[] originalBytes = writer.toByteArray(); - BinaryReader reader = new BinaryReader(originalBytes); + BinaryBuffer reader = BinaryBuffer.ofArray(originalBytes); packet.read(reader); Assertions.assertEquals(0, reader.readRemainingBytes().length, "Packet did not read all available data"); From 2a6f9a8bc892b55e5b846bae1c66aa839a3dcfb4 Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 6 Aug 2021 16:35:01 +0200 Subject: [PATCH 32/41] Use BinaryBuffer for velocity forwarding --- .../server/extras/velocity/VelocityProxy.java | 17 +++++++---------- .../client/login/LoginPluginResponsePacket.java | 3 +-- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java index 97e653109..08f3b54cf 100644 --- a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java +++ b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java @@ -2,14 +2,13 @@ package net.minestom.server.extras.velocity; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.PlayerSkin; -import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryBuffer; import org.jetbrains.annotations.NotNull; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.InetAddress; import java.net.UnknownHostException; -import java.nio.ByteBuffer; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -47,18 +46,16 @@ public final class VelocityProxy { return enabled; } - public static boolean checkIntegrity(@NotNull BinaryReader reader) { + public static boolean checkIntegrity(@NotNull BinaryBuffer reader) { if (!enabled) { return false; } final byte[] signature = reader.readBytes(32); - ByteBuffer buf = reader.getBuffer(); - buf.mark(); - final byte[] data = new byte[buf.remaining()]; - buf.get(data); - buf.reset(); + final var mark = reader.mark(); + final byte[] data = reader.readBytes(reader.readableBytes()); + reader.reset(mark); try { final Mac mac = Mac.getInstance("HmacSHA256"); @@ -75,7 +72,7 @@ public final class VelocityProxy { return version == SUPPORTED_FORWARDING_VERSION; } - public static InetAddress readAddress(@NotNull BinaryReader reader) { + public static InetAddress readAddress(@NotNull BinaryBuffer reader) { try { return InetAddress.getByName(reader.readSizedString()); } catch (UnknownHostException e) { @@ -84,7 +81,7 @@ public final class VelocityProxy { } } - public static PlayerSkin readSkin(@NotNull BinaryReader reader) { + public static PlayerSkin readSkin(@NotNull BinaryBuffer reader) { String skinTexture = null; String skinSignature = null; diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java index e2993193b..bd2e598bc 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java @@ -12,7 +12,6 @@ import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.binary.BinaryBuffer; -import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -50,7 +49,7 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { // Velocity if (VelocityProxy.isEnabled() && channel.equals(VelocityProxy.PLAYER_INFO_CHANNEL)) { if (data != null && data.length > 0) { - BinaryReader reader = new BinaryReader(data); + BinaryBuffer reader = BinaryBuffer.ofArray(data); success = VelocityProxy.checkIntegrity(reader); if (success) { // Get the real connection address From a2e2461d224d4076562ec508f7e5867fd9100575 Mon Sep 17 00:00:00 2001 From: TheMode Date: Fri, 6 Aug 2021 17:30:39 +0200 Subject: [PATCH 33/41] Revert BinaryReader changes --- .../net/minestom/server/data/DataType.java | 6 +- .../server/data/SerializableData.java | 21 +- .../server/data/SerializableDataImpl.java | 4 +- .../server/data/type/BooleanData.java | 4 +- .../minestom/server/data/type/ByteData.java | 4 +- .../server/data/type/CharacterData.java | 4 +- .../minestom/server/data/type/DoubleData.java | 4 +- .../minestom/server/data/type/FloatData.java | 4 +- .../server/data/type/IntegerData.java | 4 +- .../server/data/type/InventoryData.java | 4 +- .../server/data/type/ItemStackData.java | 4 +- .../minestom/server/data/type/LongData.java | 4 +- .../data/type/SerializableDataData.java | 4 +- .../minestom/server/data/type/ShortData.java | 4 +- .../minestom/server/data/type/StringData.java | 4 +- .../minestom/server/data/type/UuidType.java | 4 +- .../data/type/array/BooleanArrayData.java | 4 +- .../server/data/type/array/ByteArrayData.java | 6 +- .../data/type/array/CharacterArrayData.java | 4 +- .../data/type/array/DoubleArrayData.java | 4 +- .../data/type/array/FloatArrayData.java | 4 +- .../data/type/array/IntegerArrayData.java | 6 +- .../data/type/array/ItemStackArrayData.java | 4 +- .../server/data/type/array/LongArrayData.java | 4 +- .../data/type/array/ShortArrayData.java | 4 +- .../data/type/array/StringArrayData.java | 4 +- .../net/minestom/server/entity/Metadata.java | 28 +-- .../server/extras/velocity/VelocityProxy.java | 17 +- .../server/network/PacketProcessor.java | 23 +- .../client/handler/ClientPacketsHandler.java | 3 +- .../client/handshake/HandshakePacket.java | 4 +- .../login/EncryptionResponsePacket.java | 4 +- .../login/LoginPluginResponsePacket.java | 6 +- .../packet/client/login/LoginStartPacket.java | 4 +- .../play/ClientAdvancementTabPacket.java | 4 +- .../client/play/ClientAnimationPacket.java | 4 +- .../client/play/ClientChatMessagePacket.java | 4 +- .../play/ClientClickWindowButtonPacket.java | 4 +- .../client/play/ClientClickWindowPacket.java | 4 +- .../client/play/ClientCloseWindowPacket.java | 4 +- .../client/play/ClientCraftRecipeRequest.java | 4 +- .../ClientCreativeInventoryActionPacket.java | 4 +- .../client/play/ClientEditBookPacket.java | 4 +- .../client/play/ClientEntityActionPacket.java | 4 +- .../play/ClientGenerateStructurePacket.java | 4 +- .../play/ClientHeldItemChangePacket.java | 4 +- .../play/ClientInteractEntityPacket.java | 4 +- .../client/play/ClientKeepAlivePacket.java | 4 +- .../client/play/ClientNameItemPacket.java | 4 +- .../client/play/ClientPickItemPacket.java | 4 +- .../play/ClientPlayerAbilitiesPacket.java | 4 +- .../ClientPlayerBlockPlacementPacket.java | 4 +- .../play/ClientPlayerDiggingPacket.java | 4 +- .../client/play/ClientPlayerPacket.java | 4 +- ...ClientPlayerPositionAndRotationPacket.java | 4 +- .../play/ClientPlayerPositionPacket.java | 4 +- .../play/ClientPlayerRotationPacket.java | 4 +- .../play/ClientPluginMessagePacket.java | 4 +- .../packet/client/play/ClientPongPacket.java | 4 +- .../play/ClientQueryBlockNbtPacket.java | 4 +- .../play/ClientQueryEntityNbtPacket.java | 4 +- .../play/ClientResourcePackStatusPacket.java | 4 +- .../client/play/ClientSelectTradePacket.java | 4 +- .../play/ClientSetBeaconEffectPacket.java | 4 +- .../play/ClientSetDisplayedRecipePacket.java | 4 +- .../play/ClientSetRecipeBookStatePacket.java | 4 +- .../client/play/ClientSettingsPacket.java | 4 +- .../client/play/ClientSpectatePacket.java | 4 +- .../client/play/ClientStatusPacket.java | 4 +- .../client/play/ClientSteerBoatPacket.java | 4 +- .../client/play/ClientSteerVehiclePacket.java | 4 +- .../client/play/ClientTabCompletePacket.java | 4 +- .../play/ClientTeleportConfirmPacket.java | 4 +- ...lientUpdateCommandBlockMinecartPacket.java | 4 +- .../play/ClientUpdateCommandBlockPacket.java | 4 +- .../client/play/ClientUpdateSignPacket.java | 4 +- .../ClientUpdateStructureBlockPacket.java | 4 +- .../client/play/ClientUseItemPacket.java | 4 +- .../client/play/ClientVehicleMovePacket.java | 4 +- .../status/LegacyServerListPingPacket.java | 4 +- .../packet/client/status/PingPacket.java | 4 +- .../client/status/StatusRequestPacket.java | 4 +- .../network/packet/server/ServerPacket.java | 4 +- .../server/handshake/ResponsePacket.java | 4 +- .../server/login/EncryptionRequestPacket.java | 4 +- .../server/login/LoginDisconnectPacket.java | 4 +- .../login/LoginPluginRequestPacket.java | 4 +- .../server/login/LoginSuccessPacket.java | 4 +- .../server/login/SetCompressionPacket.java | 4 +- .../play/AcknowledgePlayerDiggingPacket.java | 4 +- .../packet/server/play/ActionBarPacket.java | 4 +- .../server/play/AdvancementsPacket.java | 22 +- .../server/play/AttachEntityPacket.java | 4 +- .../packet/server/play/BlockActionPacket.java | 4 +- .../play/BlockBreakAnimationPacket.java | 4 +- .../packet/server/play/BlockChangePacket.java | 4 +- .../server/play/BlockEntityDataPacket.java | 4 +- .../packet/server/play/BossBarPacket.java | 4 +- .../packet/server/play/CameraPacket.java | 4 +- .../server/play/ChangeGameStatePacket.java | 4 +- .../packet/server/play/ChatMessagePacket.java | 4 +- .../packet/server/play/ChunkDataPacket.java | 4 +- .../packet/server/play/ClearTitlesPacket.java | 4 +- .../packet/server/play/CloseWindowPacket.java | 4 +- .../packet/server/play/CollectItemPacket.java | 4 +- .../server/play/CraftRecipeResponse.java | 4 +- .../server/play/DeathCombatEventPacket.java | 4 +- .../server/play/DeclareCommandsPacket.java | 8 +- .../server/play/DeclareRecipesPacket.java | 40 ++-- .../server/play/DestroyEntitiesPacket.java | 4 +- .../packet/server/play/DisconnectPacket.java | 4 +- .../server/play/DisplayScoreboardPacket.java | 4 +- .../packet/server/play/EffectPacket.java | 4 +- .../server/play/EndCombatEventPacket.java | 4 +- .../server/play/EnterCombatEventPacket.java | 4 +- .../server/play/EntityAnimationPacket.java | 4 +- .../server/play/EntityEffectPacket.java | 4 +- .../server/play/EntityEquipmentPacket.java | 4 +- .../server/play/EntityHeadLookPacket.java | 4 +- .../server/play/EntityMetaDataPacket.java | 4 +- .../play/EntityPositionAndRotationPacket.java | 4 +- .../server/play/EntityPositionPacket.java | 4 +- .../server/play/EntityPropertiesPacket.java | 8 +- .../server/play/EntityRotationPacket.java | 4 +- .../server/play/EntitySoundEffectPacket.java | 4 +- .../server/play/EntityStatusPacket.java | 4 +- .../server/play/EntityTeleportPacket.java | 4 +- .../server/play/EntityVelocityPacket.java | 4 +- .../packet/server/play/ExplosionPacket.java | 4 +- .../packet/server/play/FacePlayerPacket.java | 4 +- .../server/play/HeldItemChangePacket.java | 4 +- .../play/InitializeWorldBorderPacket.java | 4 +- .../packet/server/play/JoinGamePacket.java | 4 +- .../packet/server/play/KeepAlivePacket.java | 4 +- .../packet/server/play/MapDataPacket.java | 8 +- .../server/play/MultiBlockChangePacket.java | 4 +- .../server/play/NamedSoundEffectPacket.java | 4 +- .../server/play/NbtQueryResponsePacket.java | 4 +- .../packet/server/play/OpenBookPacket.java | 4 +- .../server/play/OpenHorseWindowPacket.java | 4 +- .../server/play/OpenSignEditorPacket.java | 4 +- .../packet/server/play/OpenWindowPacket.java | 4 +- .../packet/server/play/ParticlePacket.java | 4 +- .../packet/server/play/PingPacket.java | 4 +- .../server/play/PlayerAbilitiesPacket.java | 4 +- .../packet/server/play/PlayerInfoPacket.java | 14 +- .../play/PlayerListHeaderAndFooterPacket.java | 4 +- .../play/PlayerPositionAndLookPacket.java | 4 +- .../server/play/PluginMessagePacket.java | 4 +- .../server/play/RemoveEntityEffectPacket.java | 4 +- .../server/play/ResourcePackSendPacket.java | 4 +- .../packet/server/play/RespawnPacket.java | 4 +- .../play/ScoreboardObjectivePacket.java | 4 +- .../server/play/SculkVibrationSignal.java | 4 +- .../play/SelectAdvancementTabPacket.java | 4 +- .../server/play/ServerDifficultyPacket.java | 4 +- .../packet/server/play/SetCooldownPacket.java | 4 +- .../server/play/SetExperiencePacket.java | 4 +- .../server/play/SetPassengersPacket.java | 4 +- .../packet/server/play/SetSlotPacket.java | 4 +- .../server/play/SetTitleSubTitlePacket.java | 4 +- .../server/play/SetTitleTextPacket.java | 4 +- .../server/play/SetTitleTimePacket.java | 4 +- .../packet/server/play/SoundEffectPacket.java | 4 +- .../packet/server/play/SpawnEntityPacket.java | 4 +- .../server/play/SpawnExperienceOrbPacket.java | 4 +- .../server/play/SpawnLivingEntityPacket.java | 4 +- .../server/play/SpawnPaintingPacket.java | 4 +- .../packet/server/play/SpawnPlayerPacket.java | 4 +- .../server/play/SpawnPositionPacket.java | 4 +- .../packet/server/play/StatisticsPacket.java | 8 +- .../packet/server/play/StopSoundPacket.java | 4 +- .../packet/server/play/TabCompletePacket.java | 4 +- .../packet/server/play/TagsPacket.java | 4 +- .../packet/server/play/TeamsPacket.java | 4 +- .../packet/server/play/TimeUpdatePacket.java | 4 +- .../packet/server/play/TradeListPacket.java | 8 +- .../packet/server/play/UnloadChunkPacket.java | 4 +- .../server/play/UnlockRecipesPacket.java | 4 +- .../server/play/UpdateHealthPacket.java | 4 +- .../packet/server/play/UpdateLightPacket.java | 4 +- .../packet/server/play/UpdateScorePacket.java | 4 +- .../server/play/UpdateViewDistancePacket.java | 4 +- .../server/play/UpdateViewPositionPacket.java | 4 +- .../packet/server/play/VehicleMovePacket.java | 4 +- .../packet/server/play/WindowItemsPacket.java | 4 +- .../server/play/WindowPropertyPacket.java | 4 +- .../server/play/WorldBorderCenterPacket.java | 4 +- .../play/WorldBorderLerpSizePacket.java | 4 +- .../server/play/WorldBorderSizePacket.java | 4 +- .../play/WorldBorderWarningDelayPacket.java | 4 +- .../play/WorldBorderWarningReachPacket.java | 4 +- .../packet/server/status/PongPacket.java | 4 +- .../network/player/NettyPlayerConnection.java | 4 +- .../server/storage/StorageLocation.java | 4 +- .../net/minestom/server/utils/NBTUtils.java | 5 +- .../server/utils/binary/BinaryBuffer.java | 225 +----------------- .../server/utils/binary/BinaryReader.java | 45 ++++ .../server/utils/binary/Readable.java | 4 +- .../readwritepackets/ReadWritePackets.java | 4 +- 200 files changed, 538 insertions(+), 689 deletions(-) diff --git a/src/main/java/net/minestom/server/data/DataType.java b/src/main/java/net/minestom/server/data/DataType.java index 55df65c40..729da70dd 100644 --- a/src/main/java/net/minestom/server/data/DataType.java +++ b/src/main/java/net/minestom/server/data/DataType.java @@ -1,6 +1,6 @@ package net.minestom.server.data; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public abstract class DataType { /** * Encodes the data type. *

- * Be sure that the encoded value can be decoded back using {@link #decode(BinaryBuffer)}. + * Be sure that the encoded value can be decoded back using {@link #decode(BinaryReader)}. * * @param writer the data writer * @param value the value to encode @@ -31,6 +31,6 @@ public abstract class DataType { * @return the decoded value */ @NotNull - public abstract T decode(@NotNull BinaryBuffer reader); + public abstract T decode(@NotNull BinaryReader reader); } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/data/SerializableData.java b/src/main/java/net/minestom/server/data/SerializableData.java index c25deec6e..ac38a2282 100644 --- a/src/main/java/net/minestom/server/data/SerializableData.java +++ b/src/main/java/net/minestom/server/data/SerializableData.java @@ -2,7 +2,7 @@ package net.minestom.server.data; import it.unimi.dsi.fastutil.objects.Object2ShortMap; import it.unimi.dsi.fastutil.objects.Object2ShortOpenHashMap; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,8 +16,8 @@ public abstract class SerializableData extends Data { /** * Serializes the data into an array of bytes. *

- * Use {@link #readIndexedSerializedData(BinaryBuffer)} if {@code indexed} is true, - * {@link #readSerializedData(BinaryBuffer, Object2ShortMap)} otherwise with the index map + * Use {@link #readIndexedSerializedData(BinaryReader)} if {@code indexed} is true, + * {@link #readSerializedData(BinaryReader, Object2ShortMap)} otherwise with the index map * to convert it back to a {@link SerializableData}. * * @param typeToIndexMap the type to index map, will create entries if new types are discovered. @@ -32,16 +32,17 @@ public abstract class SerializableData extends Data { * Reads the data of a {@link SerializableData} when you already have the index map. *

* WARNING: the data to read should not have any index to read and your index map should be COMPLETE. - * Use {@link #readIndexedSerializedData(BinaryBuffer)} if you need to read the header. - * @param reader the binary reader + * Use {@link #readIndexedSerializedData(BinaryReader)} if you need to read the header. + * + * @param reader the binary reader * @param typeToIndexMap the index map */ - public abstract void readSerializedData(@NotNull BinaryBuffer reader, @NotNull Object2ShortMap typeToIndexMap); + public abstract void readSerializedData(@NotNull BinaryReader reader, @NotNull Object2ShortMap typeToIndexMap); /** * Serializes the data into an array of bytes. *

- * Use {@link #readIndexedSerializedData(BinaryBuffer)} + * Use {@link #readIndexedSerializedData(BinaryReader)} * to convert it back to a {@link SerializableData}. *

* This will create a type index map which will be present in the header. @@ -60,7 +61,7 @@ public abstract class SerializableData extends Data { * * @param reader the binary reader */ - public void readIndexedSerializedData(@NotNull BinaryBuffer reader) { + public void readIndexedSerializedData(@NotNull BinaryReader reader) { final Object2ShortMap typeToIndexMap = SerializableData.readDataIndexes(reader); readSerializedData(reader, typeToIndexMap); } @@ -96,13 +97,13 @@ public abstract class SerializableData extends Data { /** * Reads a data index map (type name -> type index). *

- * Can then be used with {@link SerializableData#readSerializedData(BinaryBuffer, Object2ShortMap)}. + * Can then be used with {@link SerializableData#readSerializedData(BinaryReader, Object2ShortMap)}. * * @param binaryReader the reader * @return a map containing the indexes of your data */ @NotNull - public static Object2ShortMap readDataIndexes(@NotNull BinaryBuffer binaryReader) { + public static Object2ShortMap readDataIndexes(@NotNull BinaryReader binaryReader) { Object2ShortMap typeToIndexMap = new Object2ShortOpenHashMap<>(); { final int dataIndexSize = binaryReader.readVarInt(); diff --git a/src/main/java/net/minestom/server/data/SerializableDataImpl.java b/src/main/java/net/minestom/server/data/SerializableDataImpl.java index 9492dbead..2f9112eed 100644 --- a/src/main/java/net/minestom/server/data/SerializableDataImpl.java +++ b/src/main/java/net/minestom/server/data/SerializableDataImpl.java @@ -5,7 +5,7 @@ import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; import net.minestom.server.MinecraftServer; import net.minestom.server.utils.PrimitiveConversion; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -153,7 +153,7 @@ public class SerializableDataImpl extends SerializableData { } @Override - public void readSerializedData(@NotNull BinaryBuffer reader, @NotNull Object2ShortMap typeToIndexMap) { + public void readSerializedData(@NotNull BinaryReader reader, @NotNull Object2ShortMap typeToIndexMap) { // Map used to convert an index to the class name (opposite of typeToIndexMap) final Short2ObjectMap indexToTypeMap = new Short2ObjectOpenHashMap<>(typeToIndexMap.size()); { diff --git a/src/main/java/net/minestom/server/data/type/BooleanData.java b/src/main/java/net/minestom/server/data/type/BooleanData.java index 3b3ffae48..38e0d7491 100644 --- a/src/main/java/net/minestom/server/data/type/BooleanData.java +++ b/src/main/java/net/minestom/server/data/type/BooleanData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class BooleanData extends DataType { @NotNull @Override - public Boolean decode(@NotNull BinaryBuffer reader) { + public Boolean decode(@NotNull BinaryReader reader) { return reader.readBoolean(); } } diff --git a/src/main/java/net/minestom/server/data/type/ByteData.java b/src/main/java/net/minestom/server/data/type/ByteData.java index ada01fe1d..0fd3c7693 100644 --- a/src/main/java/net/minestom/server/data/type/ByteData.java +++ b/src/main/java/net/minestom/server/data/type/ByteData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class ByteData extends DataType { @NotNull @Override - public Byte decode(@NotNull BinaryBuffer reader) { + public Byte decode(@NotNull BinaryReader reader) { return reader.readByte(); } } diff --git a/src/main/java/net/minestom/server/data/type/CharacterData.java b/src/main/java/net/minestom/server/data/type/CharacterData.java index df5407cfc..48d54ac7c 100644 --- a/src/main/java/net/minestom/server/data/type/CharacterData.java +++ b/src/main/java/net/minestom/server/data/type/CharacterData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class CharacterData extends DataType { @NotNull @Override - public Character decode(@NotNull BinaryBuffer reader) { + public Character decode(@NotNull BinaryReader reader) { return reader.readChar(); } } diff --git a/src/main/java/net/minestom/server/data/type/DoubleData.java b/src/main/java/net/minestom/server/data/type/DoubleData.java index d90fb21a0..f5b897589 100644 --- a/src/main/java/net/minestom/server/data/type/DoubleData.java +++ b/src/main/java/net/minestom/server/data/type/DoubleData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class DoubleData extends DataType { @NotNull @Override - public Double decode(@NotNull BinaryBuffer reader) { + public Double decode(@NotNull BinaryReader reader) { return reader.readDouble(); } } diff --git a/src/main/java/net/minestom/server/data/type/FloatData.java b/src/main/java/net/minestom/server/data/type/FloatData.java index 54c05eec8..69d392ddc 100644 --- a/src/main/java/net/minestom/server/data/type/FloatData.java +++ b/src/main/java/net/minestom/server/data/type/FloatData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class FloatData extends DataType { @NotNull @Override - public Float decode(@NotNull BinaryBuffer reader) { + public Float decode(@NotNull BinaryReader reader) { return reader.readFloat(); } } diff --git a/src/main/java/net/minestom/server/data/type/IntegerData.java b/src/main/java/net/minestom/server/data/type/IntegerData.java index ed579a283..c0902b59c 100644 --- a/src/main/java/net/minestom/server/data/type/IntegerData.java +++ b/src/main/java/net/minestom/server/data/type/IntegerData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class IntegerData extends DataType { @NotNull @Override - public Integer decode(@NotNull BinaryBuffer reader) { + public Integer decode(@NotNull BinaryReader reader) { return reader.readVarInt(); } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/data/type/InventoryData.java b/src/main/java/net/minestom/server/data/type/InventoryData.java index 26d889285..8c3d2447b 100644 --- a/src/main/java/net/minestom/server/data/type/InventoryData.java +++ b/src/main/java/net/minestom/server/data/type/InventoryData.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.data.DataType; import net.minestom.server.inventory.Inventory; import net.minestom.server.inventory.InventoryType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class InventoryData extends DataType { @NotNull @Override - public Inventory decode(@NotNull BinaryBuffer reader) { + public Inventory decode(@NotNull BinaryReader reader) { final Component title = reader.readComponent(); final InventoryType inventoryType = InventoryType.valueOf(reader.readSizedString()); final int size = inventoryType.getSize(); diff --git a/src/main/java/net/minestom/server/data/type/ItemStackData.java b/src/main/java/net/minestom/server/data/type/ItemStackData.java index 497dfc1c8..efbc7454b 100644 --- a/src/main/java/net/minestom/server/data/type/ItemStackData.java +++ b/src/main/java/net/minestom/server/data/type/ItemStackData.java @@ -2,7 +2,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ItemStackData extends DataType { @NotNull @Override - public ItemStack decode(@NotNull BinaryBuffer reader) { + public ItemStack decode(@NotNull BinaryReader reader) { return reader.readItemStack(); } } diff --git a/src/main/java/net/minestom/server/data/type/LongData.java b/src/main/java/net/minestom/server/data/type/LongData.java index b7e999ad9..ebd97be26 100644 --- a/src/main/java/net/minestom/server/data/type/LongData.java +++ b/src/main/java/net/minestom/server/data/type/LongData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class LongData extends DataType { @NotNull @Override - public Long decode(@NotNull BinaryBuffer reader) { + public Long decode(@NotNull BinaryReader reader) { return reader.readLong(); } } diff --git a/src/main/java/net/minestom/server/data/type/SerializableDataData.java b/src/main/java/net/minestom/server/data/type/SerializableDataData.java index 526ce3cce..85ceaefd3 100644 --- a/src/main/java/net/minestom/server/data/type/SerializableDataData.java +++ b/src/main/java/net/minestom/server/data/type/SerializableDataData.java @@ -3,7 +3,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; import net.minestom.server.data.SerializableData; import net.minestom.server.data.SerializableDataImpl; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class SerializableDataData extends DataType { @NotNull @Override - public SerializableData decode(@NotNull BinaryBuffer reader) { + public SerializableData decode(@NotNull BinaryReader reader) { SerializableData serializableData = new SerializableDataImpl(); serializableData.readIndexedSerializedData(reader); return serializableData; diff --git a/src/main/java/net/minestom/server/data/type/ShortData.java b/src/main/java/net/minestom/server/data/type/ShortData.java index ba21ad0b4..01c746370 100644 --- a/src/main/java/net/minestom/server/data/type/ShortData.java +++ b/src/main/java/net/minestom/server/data/type/ShortData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ShortData extends DataType { @NotNull @Override - public Short decode(@NotNull BinaryBuffer reader) { + public Short decode(@NotNull BinaryReader reader) { return reader.readShort(); } } diff --git a/src/main/java/net/minestom/server/data/type/StringData.java b/src/main/java/net/minestom/server/data/type/StringData.java index 49f0e46fc..99d0a3a5f 100644 --- a/src/main/java/net/minestom/server/data/type/StringData.java +++ b/src/main/java/net/minestom/server/data/type/StringData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class StringData extends DataType { @NotNull @Override - public String decode(@NotNull BinaryBuffer reader) { + public String decode(@NotNull BinaryReader reader) { return reader.readSizedString(); } } diff --git a/src/main/java/net/minestom/server/data/type/UuidType.java b/src/main/java/net/minestom/server/data/type/UuidType.java index 1d06176f2..e4c026ed0 100644 --- a/src/main/java/net/minestom/server/data/type/UuidType.java +++ b/src/main/java/net/minestom/server/data/type/UuidType.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -15,7 +15,7 @@ public class UuidType extends DataType { @NotNull @Override - public UUID decode(@NotNull BinaryBuffer reader) { + public UUID decode(@NotNull BinaryReader reader) { return reader.readUuid(); } } diff --git a/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java b/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java index 3e2deea7a..bbcbdd19c 100644 --- a/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/BooleanArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class BooleanArrayData extends DataType { @NotNull @Override - public boolean[] decode(@NotNull BinaryBuffer reader) { + public boolean[] decode(@NotNull BinaryReader reader) { boolean[] array = new boolean[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java b/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java index 2836bc44a..a1adb5881 100644 --- a/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ByteArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -13,7 +13,7 @@ public class ByteArrayData extends DataType { @NotNull @Override - public byte[] decode(@NotNull BinaryBuffer reader) { + public byte[] decode(@NotNull BinaryReader reader) { return decodeByteArray(reader); } @@ -24,7 +24,7 @@ public class ByteArrayData extends DataType { } } - public static byte[] decodeByteArray(@NotNull BinaryBuffer binaryReader) { + public static byte[] decodeByteArray(@NotNull BinaryReader binaryReader) { byte[] array = new byte[binaryReader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = binaryReader.readByte(); diff --git a/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java b/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java index 0bf5e6211..4a69fc99f 100644 --- a/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/CharacterArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,7 +16,7 @@ public class CharacterArrayData extends DataType { @NotNull @Override - public char[] decode(@NotNull BinaryBuffer reader) { + public char[] decode(@NotNull BinaryReader reader) { char[] array = new char[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readChar(); diff --git a/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java b/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java index f337c7d65..e5131602f 100644 --- a/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/DoubleArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class DoubleArrayData extends DataType { @NotNull @Override - public double[] decode(@NotNull BinaryBuffer reader) { + public double[] decode(@NotNull BinaryReader reader) { double[] array = new double[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java b/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java index 47b8c61a4..6a11fdd36 100644 --- a/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/FloatArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class FloatArrayData extends DataType { @NotNull @Override - public float[] decode(@NotNull BinaryBuffer reader) { + public float[] decode(@NotNull BinaryReader reader) { float[] array = new float[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java b/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java index 91c2d5b91..9f754d7ca 100644 --- a/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/IntegerArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,10 +17,10 @@ public class IntegerArrayData extends DataType { @NotNull @Override - public int[] decode(@NotNull BinaryBuffer reader) { + public int[] decode(@NotNull BinaryReader reader) { int[] array = new int[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { - array[i] = reader.readInt(); + array[i] = reader.readInteger(); } return array; } diff --git a/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java b/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java index f87bb33a1..86f129457 100644 --- a/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ItemStackArrayData.java @@ -2,7 +2,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ItemStackArrayData extends DataType { @NotNull @Override - public ItemStack[] decode(@NotNull BinaryBuffer reader) { + public ItemStack[] decode(@NotNull BinaryReader reader) { ItemStack[] items = new ItemStack[reader.readVarInt()]; for (int i = 0; i < items.length; i++) { items[i] = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/data/type/array/LongArrayData.java b/src/main/java/net/minestom/server/data/type/array/LongArrayData.java index 5f2063966..cb7e9df54 100644 --- a/src/main/java/net/minestom/server/data/type/array/LongArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/LongArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class LongArrayData extends DataType { @NotNull @Override - public long[] decode(@NotNull BinaryBuffer reader) { + public long[] decode(@NotNull BinaryReader reader) { long[] array = new long[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readLong(); diff --git a/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java b/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java index 04796929c..c133a1478 100644 --- a/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/ShortArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ShortArrayData extends DataType { @NotNull @Override - public short[] decode(@NotNull BinaryBuffer reader) { + public short[] decode(@NotNull BinaryReader reader) { short[] array = new short[reader.readVarInt()]; for (int i = 0; i < array.length; i++) { array[i] = reader.readShort(); diff --git a/src/main/java/net/minestom/server/data/type/array/StringArrayData.java b/src/main/java/net/minestom/server/data/type/array/StringArrayData.java index 1bbf0c4fa..514fc4a0b 100644 --- a/src/main/java/net/minestom/server/data/type/array/StringArrayData.java +++ b/src/main/java/net/minestom/server/data/type/array/StringArrayData.java @@ -1,7 +1,7 @@ package net.minestom.server.data.type.array; import net.minestom.server.data.DataType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class StringArrayData extends DataType { @NotNull @Override - public String[] decode(@NotNull BinaryBuffer reader) { + public String[] decode(@NotNull BinaryReader reader) { return reader.readSizedStringArray(Integer.MAX_VALUE); } } diff --git a/src/main/java/net/minestom/server/entity/Metadata.java b/src/main/java/net/minestom/server/entity/Metadata.java index 5e3723e00..8cf0b055c 100644 --- a/src/main/java/net/minestom/server/entity/Metadata.java +++ b/src/main/java/net/minestom/server/entity/Metadata.java @@ -7,7 +7,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.play.EntityMetaDataPacket; import net.minestom.server.utils.Direction; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -28,23 +28,23 @@ public class Metadata { // METADATA TYPES public static Value Byte(byte value) { - return new Value<>(TYPE_BYTE, value, writer -> writer.writeByte(value), BinaryBuffer::readByte); + return new Value<>(TYPE_BYTE, value, writer -> writer.writeByte(value), BinaryReader::readByte); } public static Value VarInt(int value) { - return new Value<>(TYPE_VARINT, value, writer -> writer.writeVarInt(value), BinaryBuffer::readVarInt); + return new Value<>(TYPE_VARINT, value, writer -> writer.writeVarInt(value), BinaryReader::readVarInt); } public static Value Float(float value) { - return new Value<>(TYPE_FLOAT, value, writer -> writer.writeFloat(value), BinaryBuffer::readFloat); + return new Value<>(TYPE_FLOAT, value, writer -> writer.writeFloat(value), BinaryReader::readFloat); } public static Value String(@NotNull String value) { - return new Value<>(TYPE_STRING, value, writer -> writer.writeSizedString(value), BinaryBuffer::readSizedString); + return new Value<>(TYPE_STRING, value, writer -> writer.writeSizedString(value), BinaryReader::readSizedString); } public static Value Chat(@NotNull Component value) { - return new Value<>(TYPE_CHAT, value, writer -> writer.writeComponent(value), BinaryBuffer::readComponent); + return new Value<>(TYPE_CHAT, value, writer -> writer.writeComponent(value), BinaryReader::readComponent); } public static Value OptChat(@Nullable Component value) { @@ -64,11 +64,11 @@ public class Metadata { } public static Value Slot(@NotNull ItemStack value) { - return new Value<>(TYPE_SLOT, value, writer -> writer.writeItemStack(value), BinaryBuffer::readItemStack); + return new Value<>(TYPE_SLOT, value, writer -> writer.writeItemStack(value), BinaryReader::readItemStack); } public static Value Boolean(boolean value) { - return new Value<>(TYPE_BOOLEAN, value, writer -> writer.writeBoolean(value), BinaryBuffer::readBoolean); + return new Value<>(TYPE_BOOLEAN, value, writer -> writer.writeBoolean(value), BinaryReader::readBoolean); } public static Value Rotation(@NotNull Point value) { @@ -80,7 +80,7 @@ public class Metadata { } public static Value Position(@NotNull Point value) { - return new Value<>(TYPE_POSITION, value, writer -> writer.writeBlockPosition(value), BinaryBuffer::readBlockPosition); + return new Value<>(TYPE_POSITION, value, writer -> writer.writeBlockPosition(value), BinaryReader::readBlockPosition); } public static Value OptPosition(@Nullable Point value) { @@ -268,7 +268,7 @@ public class Metadata { this.value = value; } - public Entry(BinaryBuffer reader) { + public Entry(BinaryReader reader) { this.index = reader.readByte(); int type = reader.readVarInt(); value = Metadata.read(type, reader); @@ -336,7 +336,7 @@ public class Metadata { } } - private static Value read(int type, BinaryBuffer reader) { + private static Value read(int type, BinaryReader reader) { Value value = getCorrespondingNewEmptyValue(type); value.read(reader); return value; @@ -347,9 +347,9 @@ public class Metadata { protected final int type; protected T value; protected final Consumer valueWriter; - protected final Function readingFunction; + protected final Function readingFunction; - public Value(int type, T value, @NotNull Consumer valueWriter, @NotNull Function readingFunction) { + public Value(int type, T value, @NotNull Consumer valueWriter, @NotNull Function readingFunction) { this.type = type; this.value = value; this.valueWriter = valueWriter; @@ -363,7 +363,7 @@ public class Metadata { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { // skip type, will be read somewhere else value = readingFunction.apply(reader); } diff --git a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java index 08f3b54cf..97e653109 100644 --- a/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java +++ b/src/main/java/net/minestom/server/extras/velocity/VelocityProxy.java @@ -2,13 +2,14 @@ package net.minestom.server.extras.velocity; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.PlayerSkin; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.NotNull; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.net.InetAddress; import java.net.UnknownHostException; +import java.nio.ByteBuffer; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -46,16 +47,18 @@ public final class VelocityProxy { return enabled; } - public static boolean checkIntegrity(@NotNull BinaryBuffer reader) { + public static boolean checkIntegrity(@NotNull BinaryReader reader) { if (!enabled) { return false; } final byte[] signature = reader.readBytes(32); - final var mark = reader.mark(); - final byte[] data = reader.readBytes(reader.readableBytes()); - reader.reset(mark); + ByteBuffer buf = reader.getBuffer(); + buf.mark(); + final byte[] data = new byte[buf.remaining()]; + buf.get(data); + buf.reset(); try { final Mac mac = Mac.getInstance("HmacSHA256"); @@ -72,7 +75,7 @@ public final class VelocityProxy { return version == SUPPORTED_FORWARDING_VERSION; } - public static InetAddress readAddress(@NotNull BinaryBuffer reader) { + public static InetAddress readAddress(@NotNull BinaryReader reader) { try { return InetAddress.getByName(reader.readSizedString()); } catch (UnknownHostException e) { @@ -81,7 +84,7 @@ public final class VelocityProxy { } } - public static PlayerSkin readSkin(@NotNull BinaryBuffer reader) { + public static PlayerSkin readSkin(@NotNull BinaryReader reader) { String skinTexture = null; String skinSignature = null; diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index 9679e1642..81a7f8211 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -10,12 +10,14 @@ import net.minestom.server.network.packet.client.handler.ClientStatusPacketsHand import net.minestom.server.network.packet.client.handshake.HandshakePacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.Readable; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.ByteBuffer; + /** * Responsible for processing client packets. *

@@ -40,17 +42,18 @@ public final class PacketProcessor { this.playPacketsHandler = new ClientPlayPacketsHandler(); } - public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, BinaryBuffer content) { + public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, ByteBuffer body) { if (MinecraftServer.getRateLimit() > 0) { // Increment packet count (checked in PlayerConnection#update) playerConnection.getPacketCounter().incrementAndGet(); } + BinaryReader binaryReader = new BinaryReader(body); final ConnectionState connectionState = playerConnection.getConnectionState(); if (connectionState == ConnectionState.UNKNOWN) { // Should be handshake packet if (packetId == 0) { HandshakePacket handshakePacket = new HandshakePacket(); - safeRead(playerConnection, handshakePacket, content); + safeRead(playerConnection, handshakePacket, binaryReader); handshakePacket.process(playerConnection); } return; @@ -59,18 +62,18 @@ public final class PacketProcessor { case PLAY: final Player player = playerConnection.getPlayer(); ClientPlayPacket playPacket = (ClientPlayPacket) playPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, playPacket, content); + safeRead(playerConnection, playPacket, binaryReader); assert player != null; player.addPacketToQueue(playPacket); break; case LOGIN: final ClientPreplayPacket loginPacket = (ClientPreplayPacket) loginPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, loginPacket, content); + safeRead(playerConnection, loginPacket, binaryReader); loginPacket.process(playerConnection); break; case STATUS: final ClientPreplayPacket statusPacket = (ClientPreplayPacket) statusPacketsHandler.getPacketInstance(packetId); - safeRead(playerConnection, statusPacket, content); + safeRead(playerConnection, statusPacket, binaryReader); statusPacket.process(playerConnection); break; } @@ -107,14 +110,16 @@ public final class PacketProcessor { } /** - * Calls {@link Readable#read(BinaryBuffer)} and catch all the exceptions to be printed using the packet processor logger. + * Calls {@link Readable#read(BinaryReader)} and catch all the exceptions to be printed using the packet processor logger. * * @param connection the connection who sent the packet * @param readable the readable interface * @param reader the buffer containing the packet */ - private void safeRead(@NotNull PlayerConnection connection, @NotNull Readable readable, @NotNull BinaryBuffer reader) { - if (reader.readableBytes() == 0) { + private void safeRead(@NotNull PlayerConnection connection, @NotNull Readable readable, @NotNull BinaryReader reader) { + final int readableBytes = reader.available(); + // Check if there is anything to read + if (readableBytes == 0) { return; } try { diff --git a/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java b/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java index f702c6242..a61b1b8cb 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java +++ b/src/main/java/net/minestom/server/network/packet/client/handler/ClientPacketsHandler.java @@ -1,6 +1,7 @@ package net.minestom.server.network.packet.client.handler; import net.minestom.server.network.packet.client.ClientPacket; +import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; @@ -11,7 +12,7 @@ import java.util.function.Supplier; * Packets are register using {@link #register(int, ClientPacketSupplier)} * (you can override a packet id even if not recommended and not officially supported) and retrieved with {@link #getPacketInstance(int)}. *

- * If you want to fill the packet from a buffer, consider using {@link Readable#read(net.minestom.server.utils.binary.BinaryBuffer)} after getting the packet instance. + * If you want to fill the packet from a buffer, consider using {@link ClientPacket#read(BinaryReader)} after getting the packet instance. */ public class ClientPacketsHandler { diff --git a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java index 14d18484b..e6f8cbe34 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java @@ -10,7 +10,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -31,7 +31,7 @@ public class HandshakePacket implements ClientPreplayPacket { private int nextState; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.protocolVersion = reader.readVarInt(); this.serverAddress = reader.readSizedString(BungeeCordProxy.isEnabled() ? Short.MAX_VALUE : 255); this.serverPort = reader.readUnsignedShort(); diff --git a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java index 894be7c70..83d5ef855 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java @@ -10,7 +10,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.async.AsyncUtils; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -84,7 +84,7 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { sharedSecret = ByteArrayData.decodeByteArray(reader); verifyToken = ByteArrayData.decodeByteArray(reader); } diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java index bd2e598bc..6b8b93875 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java @@ -11,7 +11,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -49,7 +49,7 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { // Velocity if (VelocityProxy.isEnabled() && channel.equals(VelocityProxy.PLAYER_INFO_CHANNEL)) { if (data != null && data.length > 0) { - BinaryBuffer reader = BinaryBuffer.ofArray(data); + BinaryReader reader = new BinaryReader(data); success = VelocityProxy.checkIntegrity(reader); if (success) { // Get the real connection address @@ -90,7 +90,7 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.messageId = reader.readVarInt(); this.successful = reader.readBoolean(); if (successful) { diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java index fb0d65245..f3a4282fc 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java @@ -14,7 +14,7 @@ import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket; import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -98,7 +98,7 @@ public class LoginStartPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.username = reader.readSizedString(16); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java index 29f9377fc..cb080627b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientAdvancementTabPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.advancements.AdvancementAction; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientAdvancementTabPacket extends ClientPlayPacket { public String tabIdentifier = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.action = AdvancementAction.values()[reader.readVarInt()]; if (action == AdvancementAction.OPENED_TAB) { diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java index 797a3a7fd..c6a8b92aa 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientAnimationPacket extends ClientPlayPacket { public Player.Hand hand = Player.Hand.MAIN; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java index d021030aa..9ce504e64 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientChatMessagePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientChatMessagePacket extends ClientPlayPacket { public String message = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.message = reader.readSizedString(256); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java index 6ed391f3c..3ee6a362b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowButtonPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientClickWindowButtonPacket extends ClientPlayPacket { public byte buttonId; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.windowId = reader.readByte(); this.buttonId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java index 453de731f..fe762a408 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientClickWindowPacket.java @@ -4,7 +4,7 @@ import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class ClientClickWindowPacket extends ClientPlayPacket { public ItemStack item = ItemStack.AIR; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.windowId = reader.readByte(); this.stateId = reader.readVarInt(); this.slot = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java index 228462f99..c0bb899a1 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCloseWindowPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientCloseWindowPacket extends ClientPlayPacket { public byte windowId; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.windowId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java index 2f94aa375..cb0ce7a22 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCraftRecipeRequest.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientCraftRecipeRequest extends ClientPlayPacket { public boolean makeAll; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.windowId = reader.readByte(); this.recipe = reader.readSizedString(256); this.makeAll = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java index 538411d0b..2cf718f2f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientCreativeInventoryActionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientCreativeInventoryActionPacket extends ClientPlayPacket { public ItemStack item = ItemStack.AIR; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.slot = reader.readShort(); this.item = reader.readItemStack(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java index 6b3166fb4..c19c4450a 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientEditBookPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class ClientEditBookPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.slot = reader.readVarInt(); final int pageLength = reader.readVarInt(); this.pages = new String[pageLength]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java index 579404352..7c251b342 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientEntityActionPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientEntityActionPacket extends ClientPlayPacket { public int horseJumpBoost; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.playerId = reader.readVarInt(); this.action = Action.values()[reader.readVarInt()]; this.horseJumpBoost = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java index 19679c082..67add65de 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientGenerateStructurePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -14,7 +14,7 @@ public class ClientGenerateStructurePacket extends ClientPlayPacket { public boolean keepJigsaws; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.level = reader.readVarInt(); this.keepJigsaws = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java index 7393ce050..ea6f4fab9 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientHeldItemChangePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientHeldItemChangePacket extends ClientPlayPacket { public short slot; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.slot = reader.readShort(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java index 19eedeb92..752c7814c 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientInteractEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class ClientInteractEntityPacket extends ClientPlayPacket { public boolean sneaking; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.targetId = reader.readVarInt(); this.type = Type.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java index dc7ffa70d..a22cf834a 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientKeepAlivePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientKeepAlivePacket extends ClientPlayPacket { public long id; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.id = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java index e8800a272..664b12433 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientNameItemPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientNameItemPacket extends ClientPlayPacket { public String itemName = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.itemName = reader.readSizedString(Short.MAX_VALUE); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java index 73bcd5a06..4c32370d0 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPickItemPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPickItemPacket extends ClientPlayPacket { public int slotToUse; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.slotToUse = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java index e36de7c35..0fec1a32b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerAbilitiesPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPlayerAbilitiesPacket extends ClientPlayPacket { public byte flags; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.flags = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java index 1b11e5e57..91581be44 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerBlockPlacementPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -18,7 +18,7 @@ public class ClientPlayerBlockPlacementPacket extends ClientPlayPacket { public boolean insideBlock; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; this.blockPosition = reader.readBlockPosition(); this.blockFace = BlockFace.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java index 32693adab..88edf7bfc 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerDiggingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.instance.block.BlockFace; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -15,7 +15,7 @@ public class ClientPlayerDiggingPacket extends ClientPlayPacket { public BlockFace blockFace = BlockFace.TOP; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.status = Status.values()[reader.readVarInt()]; this.blockPosition = reader.readBlockPosition(); this.blockFace = BlockFace.values()[reader.readByte()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java index ff8e84af2..4aa5de700 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPlayerPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.onGround = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java index 458ab12d4..07b05e92f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionAndRotationPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientPlayerPositionAndRotationPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java index b56475020..8141c3fe7 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerPositionPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPlayerPositionPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java index 1b17f68fe..476e48b99 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPlayerRotationPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPlayerRotationPacket extends ClientPlayPacket { public boolean onGround; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.yaw = reader.readFloat(); this.pitch = reader.readFloat(); this.onGround = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java index 53b6bb320..53fb5fd43 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPluginMessagePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientPluginMessagePacket extends ClientPlayPacket { public byte[] data = new byte[0]; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.channel = reader.readSizedString(256); this.data = reader.readRemainingBytes(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java index e1d3acb52..67eaffa79 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientPongPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientPongPacket extends ClientPlayPacket { public int id; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.id = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java index fbfdcbf76..f0a7bf897 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryBlockNbtPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -13,7 +13,7 @@ public class ClientQueryBlockNbtPacket extends ClientPlayPacket { public Point blockPosition = Vec.ZERO; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.transactionId = reader.readVarInt(); this.blockPosition = reader.readBlockPosition(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java index 2dbdb0c46..767187895 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientQueryEntityNbtPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientQueryEntityNbtPacket extends ClientPlayPacket { public int entityId; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.transactionId = reader.readVarInt(); this.entityId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java index aba81ff87..046d33ef6 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientResourcePackStatusPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; import net.minestom.server.resourcepack.ResourcePackStatus; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientResourcePackStatusPacket extends ClientPlayPacket { public ResourcePackStatus result = ResourcePackStatus.SUCCESS; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.result = ResourcePackStatus.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java index 0b799ad4b..e6f3a327f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSelectTradePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientSelectTradePacket extends ClientPlayPacket { public int selectedSlot; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.selectedSlot = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java index c1ec3fe53..dc1573c8e 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetBeaconEffectPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientSetBeaconEffectPacket extends ClientPlayPacket { public int secondaryEffect; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.primaryEffect = reader.readVarInt(); this.secondaryEffect = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java index 7635a65b8..860a58078 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetDisplayedRecipePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientSetDisplayedRecipePacket extends ClientPlayPacket { public String recipeId = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.recipeId = reader.readSizedString(256); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java index 8cbe19b1d..17a1e9e64 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSetRecipeBookStatePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSetRecipeBookStatePacket extends ClientPlayPacket { public boolean filterActive; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.type = BookType.values()[reader.readVarInt()]; this.bookOpen = reader.readBoolean(); this.filterActive = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java index 3ec1177a5..68ac0f4a2 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSettingsPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.message.ChatMessageType; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class ClientSettingsPacket extends ClientPlayPacket { public boolean disableTextFiltering; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.locale = reader.readSizedString(128); this.viewDistance = reader.readByte(); this.chatMessageType = ChatMessageType.fromPacketID(reader.readVarInt()); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java index 00435f8b0..a29fb1060 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSpectatePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSpectatePacket extends ClientPlayPacket { public UUID targetUuid = new UUID(0,0); @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.targetUuid = reader.readUuid(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java index 388a47df3..6327b4271 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientStatusPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -14,7 +14,7 @@ public class ClientStatusPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.action = Action.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java index 57b32690d..1c7d3ff2e 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerBoatPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientSteerBoatPacket extends ClientPlayPacket { public boolean rightPaddleTurning; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.leftPaddleTurning = reader.readBoolean(); this.rightPaddleTurning = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java index cdc615120..a14c6be53 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientSteerVehiclePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientSteerVehiclePacket extends ClientPlayPacket { public byte flags; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.sideways = reader.readFloat(); this.forward = reader.readFloat(); this.flags = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java index 01b4f0c64..53388fc29 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientTabCompletePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientTabCompletePacket extends ClientPlayPacket { public String text = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.transactionId = reader.readVarInt(); this.text = reader.readSizedString(Short.MAX_VALUE); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java index 4d5c697ea..d070880cf 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientTeleportConfirmPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -10,7 +10,7 @@ public class ClientTeleportConfirmPacket extends ClientPlayPacket { public int teleportId; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.teleportId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java index 17dc3c382..930831415 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockMinecartPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class ClientUpdateCommandBlockMinecartPacket extends ClientPlayPacket { public boolean trackOutput; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.entityId = reader.readVarInt(); this.command = reader.readSizedString(Short.MAX_VALUE); this.trackOutput = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java index 38eb15c18..7f581516b 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateCommandBlockPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -21,7 +21,7 @@ public class ClientUpdateCommandBlockPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.command = reader.readSizedString(Short.MAX_VALUE); this.mode = Mode.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java index 23953efd9..20f62a968 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateSignPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -16,7 +16,7 @@ public class ClientUpdateSignPacket extends ClientPlayPacket { public String line4 = ""; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.line1 = reader.readSizedString(384); this.line2 = reader.readSizedString(384); diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java index b145f9e82..c7553cc06 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUpdateStructureBlockPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; import net.minestom.server.utils.Rotation; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -51,7 +51,7 @@ public class ClientUpdateStructureBlockPacket extends ClientPlayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { location = reader.readBlockPosition(); action = Action.values()[reader.readVarInt()]; mode = Mode.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java index 6a743d1c8..29781adbd 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientUseItemPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientUseItemPacket extends ClientPlayPacket { public Player.Hand hand = Player.Hand.MAIN; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java b/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java index a810e105a..5378a493d 100644 --- a/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/play/ClientVehicleMovePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.client.play; import net.minestom.server.network.packet.client.ClientPlayPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class ClientVehicleMovePacket extends ClientPlayPacket { public float yaw, pitch; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.x = reader.readDouble(); this.y = reader.readDouble(); this.z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java index e58106708..86aa82da4 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/LegacyServerListPingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.client.status; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,7 +16,7 @@ public class LegacyServerListPingPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.payload = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java index 80d946089..5e336a12f 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/PingPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.event.server.ClientPingServerEvent; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.status.PongPacket; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class PingPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.number = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java index 4a305168f..87361e984 100644 --- a/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/status/StatusRequestPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.handshake.ResponsePacket; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.ping.ServerListPingType; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class StatusRequestPacket implements ClientPreplayPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { // Empty } diff --git a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java index 337fc1297..eb94d671b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/ServerPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server; import net.minestom.server.network.player.PlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; public interface ServerPacket extends Readable, Writeable { @Override - default void read(@NotNull BinaryBuffer reader) { + default void read(@NotNull BinaryReader reader) { // FIXME: remove when all packets are written and read properly throw new UnsupportedOperationException("WIP: This packet is not set up to be read from Minestom code at the moment."); } diff --git a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java index c3f0404b4..a654281c1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/handshake/ResponsePacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server.handshake; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class ResponsePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { jsonResponse = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java index faa9d278e..eafaec561 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.extras.MojangAuth; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.network.player.NettyPlayerConnection; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class EncryptionRequestPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { reader.readSizedString(); // server id, apparently empty publicKey = ByteArrayData.decodeByteArray(reader); diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java index 717bfab16..c9737071a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginDisconnectPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.login; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class LoginDisconnectPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { kickMessage = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java index c2b0e49fe..5e9d355ed 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginPluginRequestPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class LoginPluginRequestPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { messageId = reader.readVarInt(); channel = reader.readSizedString(); data = reader.readRemainingBytes(); diff --git a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java index 1b4b88f60..501ba1168 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/LoginSuccessPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class LoginSuccessPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { uuid = reader.readUuid(); username = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java index e7d790abe..a3229f7fc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/SetCompressionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.login; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class SetCompressionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { threshold = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java index cc54c8f88..52e9e3f7a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AcknowledgePlayerDiggingPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.client.play.ClientPlayerDiggingPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -37,7 +37,7 @@ public class AcknowledgePlayerDiggingPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.blockStateId = reader.readVarInt(); this.status = ClientPlayerDiggingPacket.Status.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java index 6462045ff..8c12cc9e6 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ActionBarPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class ActionBarPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.actionBarText = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java index 585792e88..1d85fd22a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AdvancementsPacket.java @@ -6,8 +6,10 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.*; +import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; +import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -43,7 +45,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { resetAdvancements = reader.readBoolean(); int mappingCount = reader.readVarInt(); @@ -109,7 +111,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { key = reader.readSizedString(); value = new Advancement(); value.read(reader); @@ -146,7 +148,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { boolean hasParent = reader.readBoolean(); if (hasParent) { parentIdentifier = reader.readSizedString(); @@ -198,7 +200,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { title = reader.readComponent(); description = reader.readComponent(); icon = reader.readItemStack(); @@ -224,7 +226,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { requirements = reader.readSizedStringArray(Integer.MAX_VALUE); } } @@ -240,7 +242,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { key = reader.readSizedString(); value = new AdvancementProgress(); value.read(reader); @@ -259,7 +261,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { int count = reader.readVarInt(); criteria = new Criteria[count]; for (int i = 0; i < count; i++) { @@ -280,7 +282,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { criterionIdentifier = reader.readSizedString(); criterionProgress = new CriterionProgress(); criterionProgress.read(reader); @@ -299,7 +301,7 @@ public class AdvancementsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { achieved = reader.readBoolean(); if (achieved) { dateOfAchieving = reader.readLong(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java index 473a3838a..66b6a1234 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/AttachEntityPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Entity; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -33,7 +33,7 @@ public class AttachEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { attachedEntityId = reader.readInt(); holdingEntityId = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java index b19678416..426b884c1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockActionPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.instance.block.Block; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class BlockActionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.actionId = reader.readByte(); this.actionParam = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java index 5c5d55d4f..efb060e38 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockBreakAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -32,7 +32,7 @@ public class BlockBreakAnimationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.entityId = reader.readVarInt(); this.blockPosition = reader.readBlockPosition(); this.destroyStage = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java index 05a992680..b73c3b2cc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockChangePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.coordinate.Vec; import net.minestom.server.instance.block.Block; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class BlockChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.blockPosition = reader.readBlockPosition(); this.blockStateId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java index 32e14a12c..03a67decb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BlockEntityDataPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -37,7 +37,7 @@ public class BlockEntityDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { blockPosition = reader.readBlockPosition(); action = reader.readByte(); try { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java index 92bada668..13d52a7f5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/BossBarPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -62,7 +62,7 @@ public class BossBarPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { uuid = reader.readUuid(); action = Action.values()[reader.readVarInt()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java index 7fadc6c7b..87de08693 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CameraPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Entity; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class CameraPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { cameraId = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java index 33f2cb632..78e791013 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChangeGameStatePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class ChangeGameStatePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { reason = Reason.values()[reader.readByte()]; value = reader.readFloat(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java index 849c1347e..85b57f270 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChatMessagePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.message.ChatPosition; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +44,7 @@ public class ChatMessagePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { message = reader.readComponent(); position = ChatPosition.fromPacketID(reader.readByte()); uuid = reader.readUuid(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java index 8a444b9b3..acd3f8b62 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ChunkDataPacket.java @@ -11,7 +11,7 @@ import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.tag.Tag; import net.minestom.server.utils.Utils; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.chunk.ChunkUtils; import net.minestom.server.world.biomes.Biome; @@ -146,7 +146,7 @@ public class ChunkDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { chunkX = reader.readInt(); chunkZ = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java index c1d67c13c..5e0151b5e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ClearTitlesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class ClearTitlesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.reset = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java index b12679d01..e30b27830 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CloseWindowPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -18,7 +18,7 @@ public class CloseWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java index fedcf6933..9e137ee2a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CollectItemPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class CollectItemPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { collectedEntityId = reader.readVarInt(); collectorEntityId = reader.readVarInt(); pickupItemCount = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java b/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java index 844ce57db..cb6db367a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/CraftRecipeResponse.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class CraftRecipeResponse implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); recipe = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java index 502d784df..038512226 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeathCombatEventPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class DeathCombatEventPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.playerId = reader.readVarInt(); this.entityId = reader.readInt(); this.message = reader.readComponent(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java index 21b63ea51..c0112f5a0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareCommandsPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -23,7 +23,7 @@ public class DeclareCommandsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { int nodeCount = reader.readVarInt(); nodes = new Node[nodeCount]; for (int i = 0; i < nodeCount; i++) { @@ -75,7 +75,7 @@ public class DeclareCommandsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { flags = reader.readByte(); children = reader.readVarIntArray(); if ((flags & 0x08) != 0) { @@ -96,7 +96,7 @@ public class DeclareCommandsPacket implements ServerPacket { } } - private byte[] getProperties(BinaryBuffer reader, String parser) { + private byte[] getProperties(BinaryReader reader, String parser) { switch (parser) { case "brigadier:double": return reader.extractBytes(() -> { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java index c98342fae..8e9f3692a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DeclareRecipesPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -28,7 +28,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { int recipeCount = reader.readVarInt(); recipes = new DeclaredRecipe[recipeCount]; for (int i = 0; i < recipeCount; i++) { @@ -94,7 +94,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { throw new UnsupportedOperationException("'read' must be implemented inside subclasses!"); } } @@ -116,7 +116,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredShapelessCraftingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredShapelessCraftingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "crafting_shapeless"); read(reader); } @@ -135,7 +135,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); int count = reader.readVarInt(); ingredients = new Ingredient[count]; @@ -170,7 +170,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.height = height; } - private DeclaredShapedCraftingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredShapedCraftingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "crafting_shaped"); read(reader); } @@ -190,7 +190,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { width = reader.readVarInt(); height = reader.readVarInt(); group = reader.readSizedString(); @@ -226,7 +226,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredSmeltingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredSmeltingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "smelting"); read(reader); } @@ -244,7 +244,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -277,7 +277,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredBlastingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredBlastingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "blasting"); read(reader); } @@ -295,7 +295,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -328,7 +328,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredSmokingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredSmokingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "smoking"); read(reader); } @@ -346,7 +346,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -379,7 +379,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.cookingTime = cookingTime; } - private DeclaredCampfireCookingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredCampfireCookingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "campfire_cooking"); read(reader); } @@ -397,7 +397,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -424,7 +424,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredStonecutterRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredStonecutterRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "stonecutter"); read(reader); } @@ -440,7 +440,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { group = reader.readSizedString(); ingredient = new Ingredient(); ingredient.read(reader); @@ -465,7 +465,7 @@ public class DeclareRecipesPacket implements ServerPacket { this.result = result; } - private DeclaredSmithingRecipe(@NotNull String recipeId, @NotNull BinaryBuffer reader) { + private DeclaredSmithingRecipe(@NotNull String recipeId, @NotNull BinaryReader reader) { super(recipeId, "smithing"); read(reader); } @@ -481,7 +481,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { base = new Ingredient(); addition = new Ingredient(); base.read(reader); @@ -503,7 +503,7 @@ public class DeclareRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { items = new ItemStack[reader.readVarInt()]; for (int i = 0; i < items.length; i++) { items[i] = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java index 18b7c5c88..210e7726b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DestroyEntitiesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class DestroyEntitiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.entityIds = reader.readVarIntArray(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java index 4fa256495..4f5725b43 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DisconnectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class DisconnectPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { message = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java index a8e75f633..ed0d36174 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/DisplayScoreboardPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class DisplayScoreboardPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { position = reader.readByte(); scoreName = reader.readSizedString(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java index e9f9e9fc3..d789ad30d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EffectPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -35,7 +35,7 @@ public class EffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.effectId = reader.readInt(); this.position = reader.readBlockPosition(); this.data = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java index 97b549511..58ab29eec 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EndCombatEventPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -12,7 +12,7 @@ public class EndCombatEventPacket implements ServerPacket { public int entityId; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.duration = reader.readVarInt(); this.entityId = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java index e4f17cd7e..028660250 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EnterCombatEventPacket.java @@ -2,14 +2,14 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; public class EnterCombatEventPacket implements ServerPacket { @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { } @Override diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java index b4f0b6183..a171e040f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityAnimationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityAnimationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); animation = Animation.values()[reader.readByte()]; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java index c41c18776..d3ffa277b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEffectPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.potion.Potion; import net.minestom.server.potion.PotionEffect; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); byte potionEffectID = reader.readByte(); byte amplifier = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java index 09a1e1a48..5707fba40 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -48,7 +48,7 @@ public class EntityEquipmentPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); boolean hasRemaining = true; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java index 3b8aa6678..db0dbe883 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityHeadLookPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityHeadLookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); yaw = reader.readByte() * 360f / 256f; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java index f4d5c7754..57fa2eeda 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityMetaDataPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Metadata; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class EntityMetaDataPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); entries = new LinkedList<>(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java index 2ac42089f..5f2389d18 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionAndRotationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class EntityPositionAndRotationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); deltaX = reader.readShort(); deltaY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java index 011a4ecc3..a15e63b6d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPositionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class EntityPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); deltaX = reader.readShort(); deltaY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java index d8da63a7d..06c8989f9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityPropertiesPacket.java @@ -6,8 +6,10 @@ import net.minestom.server.attribute.AttributeModifier; import net.minestom.server.attribute.AttributeOperation; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.*; +import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; +import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -30,7 +32,7 @@ public class EntityPropertiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); int propertyCount = reader.readVarInt(); properties = new Property[propertyCount]; @@ -73,7 +75,7 @@ public class EntityPropertiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { String key = reader.readSizedString(); attribute = Attribute.fromKey(key); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java index 991ee23fa..a5b074775 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityRotationPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class EntityRotationPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); yaw = reader.readByte() * 360f / 256f; pitch = reader.readByte() * 360f / 256f; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java index 7f345cb52..a697e1de6 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntitySoundEffectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.sound.Sound; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class EntitySoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { soundId = reader.readVarInt(); soundSource = Sound.Source.values()[reader.readVarInt()]; entityId = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java index 6e80c59f0..d7b10f94e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityStatusPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class EntityStatusPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readInt(); status = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java index c137981bd..8e0486a8e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityTeleportPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -35,7 +35,7 @@ public class EntityTeleportPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); position = new Pos( reader.readDouble(), diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java index 72d0ed326..8d4fc5a22 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityVelocityPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -36,7 +36,7 @@ public class EntityVelocityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); velocityX = reader.readShort(); velocityY = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java index dbf6c8d28..8605e993c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ExplosionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -31,7 +31,7 @@ public class ExplosionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { x = reader.readFloat(); y = reader.readFloat(); z = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java index 4ccb99b97..15aa2f456 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/FacePlayerPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class FacePlayerPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { facePosition = FacePosition.values()[reader.readVarInt()]; targetX = reader.readDouble(); targetY = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java index c436dec19..3abde0710 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/HeldItemChangePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class HeldItemChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { slot = reader.readByte(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java index c84ad31b3..db3beb0be 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/InitializeWorldBorderPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -43,7 +43,7 @@ public class InitializeWorldBorderPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.x = reader.readDouble(); this.z = reader.readDouble(); this.oldDiameter = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java index 5f20aceb8..321204703 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/JoinGamePacket.java @@ -4,7 +4,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import net.minestom.server.world.DimensionType; @@ -72,7 +72,7 @@ public class JoinGamePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readInt(); hardcore = reader.readBoolean(); gameMode = GameMode.fromId(reader.readByte()); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java index efa23c3a3..3e76ed3bb 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/KeepAlivePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class KeepAlivePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { id = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java index 7f027929c..bd9d87295 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java @@ -4,8 +4,10 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.*; +import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; +import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -65,7 +67,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { mapId = reader.readVarInt(); scale = reader.readByte(); locked = reader.readBoolean(); @@ -157,7 +159,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { type = reader.readVarInt(); x = reader.readByte(); z = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java index 3eaf1fa91..14954d844 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MultiBlockChangePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.instance.Chunk; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.chunk.ChunkUtils; import org.jetbrains.annotations.NotNull; @@ -36,7 +36,7 @@ public class MultiBlockChangePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { long chunkIndexWithSection = reader.readLong(); chunkX = ChunkUtils.getChunkXFromChunkIndexWithSection(chunkIndexWithSection); chunkZ = ChunkUtils.getChunkZFromChunkIndexWithSection(chunkIndexWithSection); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java index 14b3a35a8..ec15cd0b3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/NamedSoundEffectPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.sound.Sound.Source; import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -33,7 +33,7 @@ public class NamedSoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { soundName = reader.readSizedString(); soundSource = Source.values()[reader.readVarInt()]; x = reader.readInt() / 8; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java index 887365fef..05a0ffd98 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/NbtQueryResponsePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jglrxavpok.hephaistos.nbt.NBT; @@ -32,7 +32,7 @@ public class NbtQueryResponsePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { transactionId = reader.readVarInt(); try { NBT nbt = reader.readTag(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java index a09230eb4..ad5695538 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenBookPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.Player; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -25,7 +25,7 @@ public class OpenBookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { hand = Player.Hand.values()[reader.readVarInt()]; } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java index 351a13927..376e4a189 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenHorseWindowPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class OpenHorseWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); slotCount = reader.readVarInt(); entityId = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java index 24b92006b..06a22eb5e 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenSignEditorPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -25,7 +25,7 @@ public class OpenSignEditorPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.signPosition = reader.readBlockPosition(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java index d9b8e21af..f8ca80130 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/OpenWindowPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class OpenWindowPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readVarInt(); windowType = reader.readVarInt(); title = reader.readComponent(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java index 0e0fb0c0b..005ca13c8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ParticlePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class ParticlePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { particleId = reader.readInt(); longDistance = reader.readBoolean(); x = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java index b4bd0222d..e5aa01de8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -11,7 +11,7 @@ public class PingPacket implements ServerPacket { public int id; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.id = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java index a46c865ac..4035c86ad 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerAbilitiesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class PlayerAbilitiesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.flags = reader.readByte(); this.flyingSpeed = reader.readFloat(); this.fieldViewModifier = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java index 777b4227a..5f54c802a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerInfoPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -41,7 +41,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { action = Action.values()[reader.readVarInt()]; int playerInfoCount = reader.readVarInt(); @@ -163,7 +163,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.ping = ping; } - AddPlayer(UUID uuid, BinaryBuffer reader) { + AddPlayer(UUID uuid, BinaryReader reader) { super(uuid); name = reader.readSizedString(); int propertyCount = reader.readVarInt(); @@ -236,7 +236,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this(name, value, null); } - Property(BinaryBuffer reader) { + Property(BinaryReader reader) { name = reader.readSizedString(); value = reader.readSizedString(); boolean hasSignature = reader.readBoolean(); @@ -267,7 +267,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.gameMode = gameMode; } - UpdateGamemode(UUID uuid, BinaryBuffer reader) { + UpdateGamemode(UUID uuid, BinaryReader reader) { super(uuid); gameMode = GameMode.fromId((byte) reader.readVarInt()); } @@ -287,7 +287,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.ping = ping; } - UpdateLatency(UUID uuid, BinaryBuffer reader) { + UpdateLatency(UUID uuid, BinaryReader reader) { super(uuid); ping = reader.readVarInt(); } @@ -307,7 +307,7 @@ public class PlayerInfoPacket implements ComponentHoldingServerPacket { this.displayName = displayName; } - UpdateDisplayName(UUID uuid, BinaryBuffer reader) { + UpdateDisplayName(UUID uuid, BinaryReader reader) { super(uuid); boolean hasDisplayName = reader.readBoolean(); if (hasDisplayName) { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java index c96028552..28361a613 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerListHeaderAndFooterPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -51,7 +51,7 @@ public class PlayerListHeaderAndFooterPacket implements ComponentHoldingServerPa return new PlayerListHeaderAndFooterPacket(header == null ? null : operator.apply(header), footer == null ? null : operator.apply(footer)); } - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { header = reader.readComponent(); footer = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java index 4b63bb4a0..8d7d01dbe 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PlayerPositionAndLookPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -40,7 +40,7 @@ public class PlayerPositionAndLookPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble(), reader.readFloat(), reader.readFloat()); flags = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java index 1532e9e18..32efda9f9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/PluginMessagePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.MinecraftServer; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class PluginMessagePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { channel = reader.readSizedString(); data = reader.readRemainingBytes(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java index 2c3ce8b28..7a989e92a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RemoveEntityEffectPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.potion.PotionEffect; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class RemoveEntityEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); effect = PotionEffect.fromId(reader.readByte()); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java index ed7af15f4..015bc503f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ResourcePackSendPacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.resourcepack.ResourcePack; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -39,7 +39,7 @@ public class ResourcePackSendPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.url = reader.readSizedString(); this.hash = reader.readSizedString(); this.forced = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java index 8d2c5ae98..6eb5b2e20 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/RespawnPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.entity.GameMode; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.world.DimensionType; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class RespawnPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { try { dimensionType = DimensionType.fromNBT((NBTCompound) reader.readTag()); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java index 386d6b9c4..530b3cb95 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ScoreboardObjectivePacket.java @@ -4,7 +4,7 @@ import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -51,7 +51,7 @@ public class ScoreboardObjectivePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { objectiveName = reader.readSizedString(); mode = reader.readByte(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java b/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java index f4052208c..64953cbb7 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SculkVibrationSignal.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Point; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -15,7 +15,7 @@ public class SculkVibrationSignal implements ServerPacket { public int arrivalTicks; @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java index 8fbd37499..657797fe1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SelectAdvancementTabPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -26,7 +26,7 @@ public class SelectAdvancementTabPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { boolean hasID = reader.readBoolean(); if (hasID) { identifier = reader.readSizedString(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java index b6009b995..1752e686b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/ServerDifficultyPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.world.Difficulty; import org.jetbrains.annotations.NotNull; @@ -28,7 +28,7 @@ public class ServerDifficultyPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { difficulty = Difficulty.values()[reader.readByte()]; locked = reader.readBoolean(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java index fde739be5..b3de767b0 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetCooldownPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -20,7 +20,7 @@ public class SetCooldownPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { itemId = reader.readVarInt(); cooldownTicks = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java index 2896222f4..8e847f7b7 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetExperiencePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class SetExperiencePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { percentage = reader.readFloat(); level = reader.readVarInt(); totalExperience = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java index ccdaf8483..7344bf8e3 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetPassengersPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class SetPassengersPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { vehicleEntityId = reader.readVarInt(); passengersId = reader.readVarIntArray(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java index 843c853dc..75b91b0cd 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetSlotPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -34,7 +34,7 @@ public class SetSlotPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); stateId = reader.readVarInt(); slot = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java index 99d2acf4c..fe5bd7f3d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleSubTitlePacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class SetTitleSubTitlePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.subtitle = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java index eb6a68c49..0b74572a5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTextPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.kyori.adventure.text.Component; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class SetTitleTextPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.title = reader.readComponent(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java index e2a3a2f24..0199a4f39 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SetTitleTimePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ public class SetTitleTimePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.fadeIn = reader.readInt(); this.stay = reader.readInt(); this.fadeOut = reader.readInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java index e4c265714..cb0006082 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SoundEffectPacket.java @@ -5,7 +5,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.sound.SoundEvent; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -48,7 +48,7 @@ public class SoundEffectPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { soundId = reader.readVarInt(); soundSource = Source.values()[reader.readVarInt()]; x = reader.readInt() / 8; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java index 353ffa9f1..f220801a1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -44,7 +44,7 @@ public class SpawnEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); uuid = reader.readUuid(); type = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java index 1767532d4..b0db786b2 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnExperienceOrbPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class SpawnExperienceOrbPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble()); expCount = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java index 17580f90d..c407ab502 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnLivingEntityPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Pos; import org.jetbrains.annotations.NotNull; @@ -43,7 +43,7 @@ public class SpawnLivingEntityPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityId = reader.readVarInt(); entityUuid = reader.readUuid(); entityType = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java index a189839dd..4a9308b6a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPaintingPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; @@ -33,7 +33,7 @@ public class SpawnPaintingPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.entityId = reader.readVarInt(); this.entityUuid = reader.readUuid(); this.motive = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java index ff2551e29..978b13e87 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPlayerPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.coordinate.Pos; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -37,7 +37,7 @@ public class SpawnPlayerPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.entityId = reader.readVarInt(); this.playerUuid = reader.readUuid(); this.position = new Pos(reader.readDouble(), reader.readDouble(), reader.readDouble(), diff --git a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java index 1f7e68f43..a26e3748d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/SpawnPositionPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.coordinate.Point; import net.minestom.server.coordinate.Vec; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -29,7 +29,7 @@ public class SpawnPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.position = reader.readBlockPosition(); this.angle = reader.readFloat(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java index 70675f0e1..9dfb76a2c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StatisticsPacket.java @@ -3,8 +3,10 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; import net.minestom.server.statistic.StatisticCategory; -import net.minestom.server.utils.binary.*; +import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; +import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; public class StatisticsPacket implements ServerPacket { @@ -24,7 +26,7 @@ public class StatisticsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { int length = reader.readVarInt(); statistics = new Statistic[length]; for (int i = 0; i < length; i++) { @@ -52,7 +54,7 @@ public class StatisticsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { category = StatisticCategory.values()[reader.readVarInt()]; statisticId = reader.readVarInt(); value = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java index 60e9da50e..08de7c0b5 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/StopSoundPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class StopSoundPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { flags = reader.readByte(); if (flags == 3 || flags == 1) { source = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java index ae1382d53..f690ae0dc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TabCompletePacket.java @@ -5,7 +5,7 @@ import net.minestom.server.adventure.ComponentHolder; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class TabCompletePacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { transactionId = reader.readVarInt(); start = reader.readVarInt(); length = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java index b2ce4bed4..823eccf2a 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TagsPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.gamedata.tags.Tag; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -45,7 +45,7 @@ public class TagsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.tagsMap = new HashMap<>(); // Read amount of tag types final int typeCount = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java index a2a26474b..915885dd1 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TeamsPacket.java @@ -6,7 +6,7 @@ import net.minestom.server.adventure.AdventurePacketConvertor; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -105,7 +105,7 @@ public class TeamsPacket implements ComponentHoldingServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { teamName = reader.readSizedString(); action = Action.values()[reader.readByte()]; diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java index 7c932f0fb..a7c5e06bc 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TimeUpdatePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ public class TimeUpdatePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { worldAge = reader.readLong(); timeOfDay = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java index eb51c5bad..0ff36a2f7 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/TradeListPacket.java @@ -3,8 +3,10 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.*; +import net.minestom.server.utils.binary.BinaryReader; +import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; +import net.minestom.server.utils.binary.Writeable; import org.jetbrains.annotations.NotNull; public class TradeListPacket implements ServerPacket { @@ -37,7 +39,7 @@ public class TradeListPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readVarInt(); byte tradeCount = reader.readByte(); @@ -89,7 +91,7 @@ public class TradeListPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { inputItem1 = reader.readItemStack(); result = reader.readItemStack(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java index 946e2b947..463bd7e9f 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnloadChunkPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class UnloadChunkPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { chunkX = reader.readInt(); chunkZ = reader.readInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java index 348dbb4c5..4114c4f46 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UnlockRecipesPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -51,7 +51,7 @@ public class UnlockRecipesPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { mode = reader.readVarInt(); craftingRecipeBookOpen = reader.readBoolean(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java index 622a964e0..1e397ea44 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateHealthPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class UpdateHealthPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { health = reader.readFloat(); food = reader.readVarInt(); foodSaturation = reader.readFloat(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java index 206e223fb..cdffdf9d9 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateLightPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -58,7 +58,7 @@ public class UpdateLightPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { chunkX = reader.readVarInt(); chunkZ = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java index 744395fe0..c56e610a8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateScorePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -32,7 +32,7 @@ public class UpdateScorePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { entityName = reader.readSizedString(); action = reader.readByte(); objectiveName = reader.readSizedString(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java index 5ae700918..3c1783614 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewDistancePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class UpdateViewDistancePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { viewDistance = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java index ed979a936..57d27d022 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/UpdateViewPositionPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class UpdateViewPositionPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { chunkX = reader.readVarInt(); chunkZ = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java index 59ea62828..1a53d5abf 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/VehicleMovePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -26,7 +26,7 @@ public class VehicleMovePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { x = reader.readDouble(); y = reader.readDouble(); z = reader.readDouble(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java index 134c592ce..60761727b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WindowItemsPacket.java @@ -3,7 +3,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -42,7 +42,7 @@ public class WindowItemsPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); stateId = reader.readVarInt(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java index 58ee698fd..8f0451fb2 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WindowPropertyPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -30,7 +30,7 @@ public class WindowPropertyPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { windowId = reader.readByte(); property = reader.readShort(); value = reader.readShort(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java index 732dcfb60..d097b879c 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderCenterPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -19,7 +19,7 @@ public class WorldBorderCenterPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.x = reader.readDouble(); this.z = reader.readDouble(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java index 9df7c53a4..df835c6a8 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderLerpSizePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class WorldBorderLerpSizePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.oldDiameter = reader.readDouble(); this.newDiameter = reader.readDouble(); this.speed = reader.readVarLong(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java index dc9b40953..320fd601b 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderSizePacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderSizePacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.diameter = reader.readDouble(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java index 5c0a3171c..79b1e6871 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningDelayPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderWarningDelayPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.warningTime = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java index 50d77d705..da4a8f654 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/WorldBorderWarningReachPacket.java @@ -2,7 +2,7 @@ package net.minestom.server.network.packet.server.play; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -17,7 +17,7 @@ public class WorldBorderWarningReachPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { this.warningBlocks = reader.readVarInt(); } diff --git a/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java b/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java index c1b8162d9..b088e9842 100644 --- a/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/status/PongPacket.java @@ -1,7 +1,7 @@ package net.minestom.server.network.packet.server.status; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -24,7 +24,7 @@ public class PongPacket implements ServerPacket { } @Override - public void read(@NotNull BinaryBuffer reader) { + public void read(@NotNull BinaryReader reader) { number = reader.readLong(); } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index b02a06943..ea77c3270 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -114,8 +114,8 @@ public class NettyPlayerConnection extends PlayerConnection { // Process packet final int packetId = content.readVarInt(); try { - final var slice = content.slice(content.readerOffset(), packetLength); - packetProcessor.process(this, packetId, slice); + var finalBuffer = content.asByteBuffer(content.readerOffset(), packetEnd); + packetProcessor.process(this, packetId, finalBuffer); } catch (Exception e) { // Error while reading the packet MinecraftServer.getExceptionManager().handleException(e); diff --git a/src/main/java/net/minestom/server/storage/StorageLocation.java b/src/main/java/net/minestom/server/storage/StorageLocation.java index 8a21100a6..d34a41bd2 100644 --- a/src/main/java/net/minestom/server/storage/StorageLocation.java +++ b/src/main/java/net/minestom/server/storage/StorageLocation.java @@ -2,7 +2,7 @@ package net.minestom.server.storage; import net.minestom.server.MinecraftServer; import net.minestom.server.data.*; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; @@ -122,7 +122,7 @@ public class StorageLocation { return null; // Decode the data - BinaryBuffer binaryReader = BinaryBuffer.ofArray(data); + BinaryReader binaryReader = new BinaryReader(data); return dataType.decode(binaryReader); } diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java index 2a2dde83f..785914d03 100644 --- a/src/main/java/net/minestom/server/utils/NBTUtils.java +++ b/src/main/java/net/minestom/server/utils/NBTUtils.java @@ -16,7 +16,7 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.item.Material; import net.minestom.server.item.attribute.AttributeSlot; import net.minestom.server.item.attribute.ItemAttribute; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -112,7 +112,8 @@ public final class NBTUtils { nbt.set(listName, enchantList); } - public static @NotNull ItemStack readItemStack(@NotNull BinaryBuffer reader) { + @NotNull + public static ItemStack readItemStack(@NotNull BinaryReader reader) { final boolean present = reader.readBoolean(); if (!present) { diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java index 1bef21c42..f996c9252 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -1,29 +1,14 @@ package net.minestom.server.utils.binary; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import net.minestom.server.coordinate.Point; -import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.NBTUtils; -import net.minestom.server.utils.SerializerUtils; -import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; -import org.jglrxavpok.hephaistos.nbt.NBT; -import org.jglrxavpok.hephaistos.nbt.NBTException; import org.jglrxavpok.hephaistos.nbt.NBTReader; import org.jglrxavpok.hephaistos.nbt.NBTWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; -import java.nio.charset.StandardCharsets; -import java.util.UUID; -import java.util.function.Supplier; /** * Manages off-heap memory. @@ -31,18 +16,8 @@ import java.util.function.Supplier; */ public final class BinaryBuffer { private ByteBuffer nioBuffer; // To become a `MemorySegment` once released - private NBTReader nbtReader = new NBTReader(new InputStream() { - @Override - public int read() { - return readByte(); - } - }, false); - private NBTWriter nbtWriter = new NBTWriter(new OutputStream() { - @Override - public void write(int b) { - // TODO write byte - } - }, false); + private NBTReader nbtReader; + private NBTWriter nbtWriter; private final int capacity; private int readerOffset, writerOffset; @@ -57,11 +32,6 @@ public final class BinaryBuffer { return new BinaryBuffer(ByteBuffer.allocateDirect(size)); } - @ApiStatus.Internal - public static BinaryBuffer ofArray(byte[] bytes) { - return new BinaryBuffer(ByteBuffer.wrap(bytes)); - } - public static BinaryBuffer copy(BinaryBuffer buffer) { final int size = buffer.readableBytes(); final var temp = ByteBuffer.allocateDirect(size) @@ -72,7 +42,7 @@ public final class BinaryBuffer { public void write(ByteBuffer buffer) { final int size = buffer.remaining(); // TODO jdk 13 put with index - this.nioBuffer.position(writerOffset).put(buffer); + asByteBuffer(writerOffset, writerOffset + size).put(buffer); this.writerOffset += size; } @@ -94,195 +64,6 @@ public final class BinaryBuffer { throw new RuntimeException("VarInt is too big"); } - public long readVarLong() { - int numRead = 0; - long result = 0; - byte read; - do { - read = readByte(); - final long value = (read & 0b01111111); - result |= (value << (7 * numRead)); - numRead++; - if (numRead > 10) { - throw new RuntimeException("VarLong is too big"); - } - } while ((read & 0b10000000) != 0); - return result; - } - - public byte readByte() { - return nioBuffer.get(readerOffset++); - } - - public boolean readBoolean() { - return readByte() == 1; - } - - public short readShort() { - final short value = nioBuffer.getShort(readerOffset); - this.readerOffset += Short.BYTES; - return value; - } - - public char readChar() { - final char value = nioBuffer.getChar(readerOffset); - this.readerOffset += Character.BYTES; - return value; - } - - public int readUnsignedShort() { - return readShort() & 0xFFFF; - } - - public int readInt() { - final int value = nioBuffer.getInt(readerOffset); - this.readerOffset += Integer.BYTES; - return value; - } - - public long readLong() { - final long value = nioBuffer.getLong(readerOffset); - this.readerOffset += Long.BYTES; - return value; - } - - public float readFloat() { - final float value = nioBuffer.getFloat(readerOffset); - this.readerOffset += Float.BYTES; - return value; - } - - public double readDouble() { - final double value = nioBuffer.getDouble(readerOffset); - this.readerOffset += Double.BYTES; - return value; - } - - public String readSizedString(int maxLength) { - final int length = readVarInt(); - final byte[] bytes = readBytes(length); - final String str = new String(bytes, StandardCharsets.UTF_8); - System.out.println("read " + str + " " + length); - Check.stateCondition(str.length() > maxLength, - "String length ({0}) was higher than the max length of {1}", length, maxLength); - return str; - } - - public String readSizedString() { - return readSizedString(Integer.MAX_VALUE); - } - - public Component readComponent(int maxLength) { - final String jsonObject = readSizedString(maxLength); - return GsonComponentSerializer.gson().deserialize(jsonObject); - } - - public Component readComponent() { - return readComponent(Integer.MAX_VALUE); - } - - public Point readBlockPosition() { - return SerializerUtils.longToBlockPosition(readLong()); - } - - public UUID readUuid() { - return new UUID(readLong(), readLong()); - } - - public NBT readTag() throws IOException, NBTException { - return nbtReader.read(); - } - - public ItemStack readItemStack() { - final ItemStack itemStack = NBTUtils.readItemStack(this); - Check.notNull(itemStack, "#readSlot returned null, probably because the buffer was corrupted"); - return itemStack; - } - - public byte[] readBytes(int length) { - byte[] bytes = new byte[length]; - this.nioBuffer.position(readerOffset).get(bytes, 0, length); - this.readerOffset += length; - return bytes; - } - - public byte[] readRemainingBytes() { - return readBytes(readableBytes()); - } - - public int[] readVarIntArray() { - final int size = readVarInt(); - int[] array = new int[size]; - for (int i = 0; i < size; i++) { - array[i] = readVarInt(); - } - return array; - } - - public long[] readLongArray() { - final int size = readVarInt(); - long[] array = new long[size]; - for (int i = 0; i < size; i++) { - array[i] = readLong(); - } - return array; - } - - public String[] readSizedStringArray(int maxLength) { - final int size = readVarInt(); - String[] strings = new String[size]; - for (int i = 0; i < size; i++) { - strings[i] = readSizedString(maxLength); - } - return strings; - } - - public String[] readSizedStringArray() { - return readSizedStringArray(Integer.MAX_VALUE); - } - - public T read(@NotNull Supplier<@NotNull T> supplier) { - T result = supplier.get(); - result.read(this); - return result; - } - - @SuppressWarnings("unchecked") - public @NotNull T[] readArray(@NotNull Supplier<@NotNull T> supplier) { - Readable[] result = new Readable[readVarInt()]; - for (int i = 0; i < result.length; i++) { - result[i] = supplier.get(); - result[i].read(this); - } - return (T[]) result; - } - - /** - * Records the current position, runs the given Runnable, and then returns the bytes between the position before - * running the runnable and the position after. - * Can be used to extract a subsection of this reader's buffer with complex data - * - * @param extractor the extraction code, simply call the reader's read* methods here. - */ - public byte[] extractBytes(Runnable extractor) { - final int startingPosition = readerOffset(); - extractor.run(); - final int endingPosition = readerOffset(); - this.readerOffset += endingPosition - startingPosition; - byte[] output = new byte[endingPosition - startingPosition]; - this.nioBuffer.position(startingPosition).get(output, 0, output.length); - return output; - } - - @Contract(pure = true) - public BinaryBuffer slice(int start, int length) { - final int end = start + length; - var slice = new BinaryBuffer(asByteBuffer(start, end)); - slice.readerOffset = start; - slice.writerOffset = end; - return slice; - } - public @NotNull Marker mark() { return new Marker(readerOffset, writerOffset); } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java index e85fdb0f5..d529ae4e7 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryReader.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryReader.java @@ -3,6 +3,8 @@ package net.minestom.server.utils.binary; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.coordinate.Point; +import net.minestom.server.item.ItemStack; +import net.minestom.server.utils.NBTUtils; import net.minestom.server.utils.SerializerUtils; import net.minestom.server.utils.Utils; import net.minestom.server.utils.validate.Check; @@ -16,6 +18,7 @@ import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.UUID; +import java.util.function.Supplier; /** * Class used to read from a byte array. @@ -161,6 +164,18 @@ public class BinaryReader extends InputStream { return new UUID(readLong(), readLong()); } + /** + * Tries to read an {@link ItemStack}. + * + * @return the read item + * @throws NullPointerException if the item could not get read + */ + public ItemStack readItemStack() { + final ItemStack itemStack = NBTUtils.readItemStack(this); + Check.notNull(itemStack, "#readSlot returned null, probably because the buffer was corrupted"); + return itemStack; + } + public Component readComponent(int maxLength) { final String jsonObject = readSizedString(maxLength); return GsonComponentSerializer.gson().deserialize(jsonObject); @@ -170,6 +185,36 @@ public class BinaryReader extends InputStream { return readComponent(Integer.MAX_VALUE); } + /** + * Creates a new object from the given supplier and calls its {@link Readable#read(BinaryReader)} method with this reader. + * + * @param supplier supplier to create new instances of your object + * @param the readable object type + * @return the read object + */ + public T read(@NotNull Supplier<@NotNull T> supplier) { + T result = supplier.get(); + result.read(this); + return result; + } + + /** + * Reads the length of the array to read as a varint, creates the array to contain the readable objects and call + * their respective {@link Readable#read(BinaryReader)} methods. + * + * @param supplier supplier to create new instances of your object + * @param the readable object type + * @return the read objects + */ + public @NotNull T[] readArray(@NotNull Supplier<@NotNull T> supplier) { + Readable[] result = new Readable[readVarInt()]; + for (int i = 0; i < result.length; i++) { + result[i] = supplier.get(); + result[i].read(this); + } + return (T[]) result; + } + public ByteBuffer getBuffer() { return buffer; } diff --git a/src/main/java/net/minestom/server/utils/binary/Readable.java b/src/main/java/net/minestom/server/utils/binary/Readable.java index b814e934a..48fa33012 100644 --- a/src/main/java/net/minestom/server/utils/binary/Readable.java +++ b/src/main/java/net/minestom/server/utils/binary/Readable.java @@ -6,10 +6,12 @@ import org.jetbrains.annotations.NotNull; * Represents an element which can read from a {@link BinaryReader}. */ public interface Readable { + /** * Reads from a {@link BinaryReader}. * * @param reader the reader to read from */ - void read(@NotNull BinaryBuffer reader); + void read(@NotNull BinaryReader reader); + } diff --git a/src/test/java/readwritepackets/ReadWritePackets.java b/src/test/java/readwritepackets/ReadWritePackets.java index 9bf9baebc..30d6ace81 100644 --- a/src/test/java/readwritepackets/ReadWritePackets.java +++ b/src/test/java/readwritepackets/ReadWritePackets.java @@ -7,7 +7,7 @@ import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.play.EntityEquipmentPacket; -import net.minestom.server.utils.binary.BinaryBuffer; +import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import net.minestom.server.utils.binary.Readable; import net.minestom.server.utils.binary.Writeable; @@ -79,7 +79,7 @@ public class ReadWritePackets { // re-read packet byte[] originalBytes = writer.toByteArray(); - BinaryBuffer reader = BinaryBuffer.ofArray(originalBytes); + BinaryReader reader = new BinaryReader(originalBytes); packet.read(reader); Assertions.assertEquals(0, reader.readRemainingBytes().length, "Packet did not read all available data"); From f75f75519467ae07ad7880e8a75dbbeae19b78c9 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 17:01:44 +0200 Subject: [PATCH 34/41] Make BinaryBuffer internal --- src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java index f996c9252..daa639b3d 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -14,6 +14,7 @@ import java.nio.channels.WritableByteChannel; * Manages off-heap memory. * Not thread-safe. */ +@ApiStatus.Internal public final class BinaryBuffer { private ByteBuffer nioBuffer; // To become a `MemorySegment` once released private NBTReader nbtReader; From b56509718cd7897a78320fa7912d02571f8fe47a Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 19:02:36 +0200 Subject: [PATCH 35/41] Add encryption support --- .../server/extras/mojangAuth/MojangCrypt.java | 13 ++----- .../network/player/NettyPlayerConnection.java | 34 ++++++++++++++++++- .../server/utils/binary/BinaryBuffer.java | 20 +++++++++-- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minestom/server/extras/mojangAuth/MojangCrypt.java b/src/main/java/net/minestom/server/extras/mojangAuth/MojangCrypt.java index c040b55d9..63aaaebca 100644 --- a/src/main/java/net/minestom/server/extras/mojangAuth/MojangCrypt.java +++ b/src/main/java/net/minestom/server/extras/mojangAuth/MojangCrypt.java @@ -14,8 +14,7 @@ import java.security.*; public final class MojangCrypt { private static final Logger LOGGER = LogManager.getLogger(); - @Nullable - public static KeyPair generateKeyPair() { + public static @Nullable KeyPair generateKeyPair() { try { KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); @@ -27,8 +26,7 @@ public final class MojangCrypt { } } - @Nullable - public static byte[] digestData(String data, PublicKey publicKey, SecretKey secretKey) { + public static byte @Nullable [] digestData(String data, PublicKey publicKey, SecretKey secretKey) { try { return digestData("SHA-1", data.getBytes("ISO_8859_1"), secretKey.getEncoded(), publicKey.getEncoded()); } catch (UnsupportedEncodingException e) { @@ -37,15 +35,12 @@ public final class MojangCrypt { } } - @Nullable - private static byte[] digestData(String algorithm, byte[]... data) { + private static byte @Nullable [] digestData(String algorithm, byte[]... data) { try { MessageDigest digest = MessageDigest.getInstance(algorithm); - for (byte[] bytes : data) { digest.update(bytes); } - return digest.digest(); } catch (NoSuchAlgorithmException e) { MinecraftServer.getExceptionManager().handleException(e); @@ -67,7 +62,6 @@ public final class MojangCrypt { } catch (IllegalBlockSizeException | BadPaddingException var4) { MinecraftServer.getExceptionManager().handleException(var4); } - LOGGER.error("Cipher data failed!"); return null; } @@ -80,7 +74,6 @@ public final class MojangCrypt { } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException var4) { MinecraftServer.getExceptionManager().handleException(var4); } - LOGGER.error("Cipher creation failed!"); return null; } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index ea77c3270..738592985 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -5,6 +5,7 @@ import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.entity.Player; import net.minestom.server.entity.PlayerSkin; +import net.minestom.server.extras.mojangAuth.MojangCrypt; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.PacketProcessor; import net.minestom.server.network.packet.FramedPacket; @@ -20,7 +21,9 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.crypto.Cipher; import javax.crypto.SecretKey; +import javax.crypto.ShortBufferException; import java.io.IOException; import java.net.SocketAddress; import java.nio.BufferUnderflowException; @@ -47,6 +50,8 @@ public class NettyPlayerConnection extends PlayerConnection { //Could be null. Only used for Mojang Auth private byte[] nonce = new byte[4]; + private Cipher decryptCipher; + private Cipher encryptCipher; // Data from client packets private String loginUsername; @@ -74,6 +79,20 @@ public class NettyPlayerConnection extends PlayerConnection { public void processPackets(Worker.Context workerContext, PacketProcessor packetProcessor) { final var readBuffer = workerContext.readBuffer; + // Decrypt data + if (encrypted) { + final Cipher cipher = decryptCipher; + final int remainingBytes = readBuffer.readableBytes(); + final byte[] bytes = readBuffer.readRemainingBytes(); + byte[] output = new byte[cipher.getOutputSize(remainingBytes)]; + try { + cipher.update(bytes, 0, remainingBytes, output, 0); + } catch (ShortBufferException e) { + e.printStackTrace(); + } + readBuffer.clear(); + readBuffer.writeBytes(output); + } final int limit = readBuffer.writerOffset(); // Read all packets while (readBuffer.readableBytes() > 0) { @@ -146,8 +165,9 @@ public class NettyPlayerConnection extends PlayerConnection { */ public void setEncryptionKey(@NotNull SecretKey secretKey) { Check.stateCondition(encrypted, "Encryption is already enabled!"); + this.decryptCipher = MojangCrypt.getCipher(2, secretKey); + this.encryptCipher = MojangCrypt.getCipher(1, secretKey); this.encrypted = true; - // TODO } /** @@ -221,9 +241,21 @@ public class NettyPlayerConnection extends PlayerConnection { synchronized (tickBuffer) { if (tickBuffer.readableBytes() == 0) return; try { + if (encrypted) { + final Cipher cipher = encryptCipher; + // Encrypt data first + final int remainingBytes = tickBuffer.readableBytes(); + final byte[] bytes = tickBuffer.readRemainingBytes(); + byte[] outTempArray = new byte[cipher.getOutputSize(remainingBytes)]; + cipher.update(bytes, 0, remainingBytes, outTempArray); + this.tickBuffer.clear(); + this.tickBuffer.writeBytes(outTempArray); + } this.tickBuffer.writeChannel(channel); } catch (IOException e) { MinecraftServer.getExceptionManager().handleException(e); + } catch (ShortBufferException e) { + e.printStackTrace(); } finally { this.tickBuffer.clear(); } diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java index daa639b3d..629a2f8c3 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryBuffer.java @@ -43,7 +43,7 @@ public final class BinaryBuffer { public void write(ByteBuffer buffer) { final int size = buffer.remaining(); // TODO jdk 13 put with index - asByteBuffer(writerOffset, writerOffset + size).put(buffer); + this.nioBuffer.position(writerOffset).put(buffer); this.writerOffset += size; } @@ -98,13 +98,29 @@ public final class BinaryBuffer { return writerOffset - readerOffset; } + public void writeBytes(byte[] bytes) { + this.nioBuffer.position(writerOffset).put(bytes); + this.writerOffset += bytes.length; + } + + public byte[] readBytes(int length) { + byte[] bytes = new byte[length]; + this.nioBuffer.position(readerOffset).get(bytes, 0, length); + this.readerOffset += length; + return bytes; + } + + public byte[] readRemainingBytes() { + return readBytes(readableBytes()); + } + public void clear() { this.readerOffset = 0; this.writerOffset = 0; } public ByteBuffer asByteBuffer(int reader, int writer) { - return nioBuffer.duplicate().position(reader).limit(writer); + return nioBuffer.position(reader).slice().limit(writer); } public void writeChannel(WritableByteChannel channel) throws IOException { From 1591df16aa25a282fd3236b9969883dc768547f8 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 19:11:47 +0200 Subject: [PATCH 36/41] Rename `netty` to `socket` wherever possible --- .../net/minestom/server/UpdateManager.java | 6 +- .../net/minestom/server/entity/Entity.java | 10 +-- .../net/minestom/server/entity/Player.java | 10 +-- .../server/entity/fakeplayer/FakePlayer.java | 2 +- .../minestom/server/extras/MojangAuth.java | 13 +-- .../server/instance/DynamicChunk.java | 10 +-- .../server/network/ConnectionManager.java | 18 ++--- .../server/network/PacketProcessor.java | 4 +- .../client/handshake/HandshakePacket.java | 20 ++--- .../login/EncryptionResponsePacket.java | 25 +++--- .../login/LoginPluginResponsePacket.java | 16 ++-- .../packet/client/login/LoginStartPacket.java | 80 ++++++++----------- .../server/login/EncryptionRequestPacket.java | 4 +- .../network/player/PlayerConnection.java | 14 +--- ...ction.java => PlayerSocketConnection.java} | 8 +- .../server/network/socket/Worker.java | 8 +- .../minestom/server/utils/PacketUtils.java | 6 +- .../server/utils/player/PlayerUtils.java | 16 ++-- 18 files changed, 120 insertions(+), 150 deletions(-) rename src/main/java/net/minestom/server/network/player/{NettyPlayerConnection.java => PlayerSocketConnection.java} (98%) diff --git a/src/main/java/net/minestom/server/UpdateManager.java b/src/main/java/net/minestom/server/UpdateManager.java index da9ab6954..31405290e 100644 --- a/src/main/java/net/minestom/server/UpdateManager.java +++ b/src/main/java/net/minestom/server/UpdateManager.java @@ -7,7 +7,7 @@ import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceManager; import net.minestom.server.monitoring.TickMonitor; import net.minestom.server.network.ConnectionManager; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.thread.SingleThreadProvider; import net.minestom.server.thread.ThreadProvider; import org.jetbrains.annotations.NotNull; @@ -84,8 +84,8 @@ public final class UpdateManager { // Flush all waiting packets for (Player player : connectionManager.getOnlinePlayers()) { final var connection = player.getPlayerConnection(); - if (connection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) connection).flush(); + if (connection instanceof PlayerSocketConnection) { + ((PlayerSocketConnection) connection).flush(); } } diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index 6526d9fe9..ae04a260f 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -491,14 +491,14 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler } private void velocityTick() { - final boolean isNettyClient = PlayerUtils.isNettyClient(this); + final boolean isSocketClient = PlayerUtils.isSocketClient(this); final boolean noGravity = hasNoGravity(); final boolean hasVelocity = hasVelocity(); boolean applyVelocity; // Non-player entities with either velocity or gravity enabled - applyVelocity = !isNettyClient && (hasVelocity || !noGravity); + applyVelocity = !isSocketClient && (hasVelocity || !noGravity); // Players with a velocity applied (client is responsible for gravity) - applyVelocity |= isNettyClient && hasVelocity; + applyVelocity |= isSocketClient && hasVelocity; if (!applyVelocity) { return; } @@ -537,13 +537,13 @@ public class Entity implements Viewable, Tickable, TagHandler, PermissionHandler return; } refreshPosition(finalVelocityPosition, true); - if (!isNettyClient) { + if (!isSocketClient) { synchronizePosition(true); } // Update velocity if (hasVelocity || !newVelocity.isZero()) { - if (onGround && isNettyClient) { + if (onGround && isSocketClient) { // Stop player velocity this.velocity = Vec.ZERO; } else { diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 2177ea141..822fbb4aa 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -55,8 +55,8 @@ import net.minestom.server.network.packet.client.play.ClientChatMessagePacket; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.play.*; -import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.recipe.Recipe; import net.minestom.server.recipe.RecipeManager; import net.minestom.server.resourcepack.ResourcePack; @@ -92,7 +92,7 @@ import java.util.function.UnaryOperator; /** * Those are the major actors of the server, - * they are not necessary backed by a {@link NettyPlayerConnection} as shown by {@link FakePlayer}. + * they are not necessary backed by a {@link PlayerSocketConnection} as shown by {@link FakePlayer}. *

* You can easily create your own implementation of this and use it with {@link ConnectionManager#setPlayerProvider(PlayerProvider)}. */ @@ -212,7 +212,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, * Init the player and spawn him. *

* WARNING: executed in the main update thread - * UNSAFE: Only meant to be used when a netty player connects through the server. + * UNSAFE: Only meant to be used when a socket player connects through the server. * * @param spawnInstance the player spawn instance (defined in {@link PlayerLoginEvent}) */ @@ -1366,8 +1366,8 @@ public class Player extends LivingEntity implements CommandSender, Localizable, } else { disconnectPacket = new DisconnectPacket(component); } - if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).writeAndFlush(disconnectPacket); + if (playerConnection instanceof PlayerSocketConnection) { + ((PlayerSocketConnection) playerConnection).writeAndFlush(disconnectPacket); playerConnection.disconnect(); } else { playerConnection.sendPacket(disconnectPacket); diff --git a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java index ad5202b50..3b4c5a833 100644 --- a/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java +++ b/src/main/java/net/minestom/server/entity/fakeplayer/FakePlayer.java @@ -22,7 +22,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; /** - * A fake player will behave exactly the same way as would do a {@link Player} backed by a netty connection + * A fake player will behave exactly the same way as would do a {@link Player} backed by a socket connection * (events, velocity, gravity, player list, etc...) with the exception that you need to control it server-side * using a {@link FakePlayerController} (see {@link #getController()}). *

diff --git a/src/main/java/net/minestom/server/extras/MojangAuth.java b/src/main/java/net/minestom/server/extras/MojangAuth.java index d322ef4fe..f503ef5fc 100644 --- a/src/main/java/net/minestom/server/extras/MojangAuth.java +++ b/src/main/java/net/minestom/server/extras/MojangAuth.java @@ -8,10 +8,8 @@ import org.jetbrains.annotations.Nullable; import java.security.KeyPair; public final class MojangAuth { - private static volatile boolean enabled = false; - - private static KeyPair keyPair; + private static volatile KeyPair keyPair; /** * Enables mojang authentication on the server. @@ -21,19 +19,16 @@ public final class MojangAuth { public static void init() { Check.stateCondition(enabled, "Mojang auth is already enabled!"); Check.stateCondition(MinecraftServer.isStarted(), "The server has already been started!"); - - enabled = true; - + MojangAuth.enabled = true; // Generate necessary fields... - keyPair = MojangCrypt.generateKeyPair(); + MojangAuth.keyPair = MojangCrypt.generateKeyPair(); } public static boolean isEnabled() { return enabled; } - @Nullable - public static KeyPair getKeyPair() { + public static @Nullable KeyPair getKeyPair() { return keyPair; } } diff --git a/src/main/java/net/minestom/server/instance/DynamicChunk.java b/src/main/java/net/minestom/server/instance/DynamicChunk.java index f288d9312..38060b5b7 100644 --- a/src/main/java/net/minestom/server/instance/DynamicChunk.java +++ b/src/main/java/net/minestom/server/instance/DynamicChunk.java @@ -10,7 +10,7 @@ import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.network.packet.server.play.ChunkDataPacket; import net.minestom.server.network.packet.server.play.UpdateLightPacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.ArrayUtils; import net.minestom.server.utils.PacketUtils; @@ -130,7 +130,7 @@ public class DynamicChunk extends Chunk { public synchronized void sendChunk(@NotNull Player player) { if (!isLoaded()) return; final PlayerConnection connection = player.getPlayerConnection(); - if (connection instanceof NettyPlayerConnection) { + if (connection instanceof PlayerSocketConnection) { final long lastChange = getLastChangeTime(); ByteBuffer chunkPacket = cachedChunkBuffer; ByteBuffer lightPacket = cachedLightBuffer; @@ -141,9 +141,9 @@ public class DynamicChunk extends Chunk { this.cachedLightBuffer = lightPacket; this.cachedPacketTime = lastChange; } - NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - nettyPlayerConnection.write(lightPacket); - nettyPlayerConnection.write(chunkPacket); + PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + socketConnection.write(lightPacket); + socketConnection.write(chunkPacket); } else { connection.sendPacket(createLightPacket()); connection.sendPacket(createChunkPacket()); diff --git a/src/main/java/net/minestom/server/network/ConnectionManager.java b/src/main/java/net/minestom/server/network/ConnectionManager.java index 2667e93af..d94f204e5 100644 --- a/src/main/java/net/minestom/server/network/ConnectionManager.java +++ b/src/main/java/net/minestom/server/network/ConnectionManager.java @@ -15,7 +15,7 @@ import net.minestom.server.network.packet.client.login.LoginStartPacket; import net.minestom.server.network.packet.server.login.LoginSuccessPacket; import net.minestom.server.network.packet.server.play.DisconnectPacket; import net.minestom.server.network.packet.server.play.KeepAlivePacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.StringUtils; import net.minestom.server.utils.async.AsyncUtils; @@ -293,8 +293,8 @@ public final class ConnectionManager { EventDispatcher.call(asyncPlayerPreLoginEvent); // Close the player channel if he has been disconnected (kick) if (!player.isOnline()) { - if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).flush(); + if (playerConnection instanceof PlayerSocketConnection) { + ((PlayerSocketConnection) playerConnection).flush(); } //playerConnection.disconnect(); return; @@ -312,8 +312,8 @@ public final class ConnectionManager { } // Send login success packet LoginSuccessPacket loginSuccessPacket = new LoginSuccessPacket(player.getUuid(), player.getUsername()); - if (playerConnection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) playerConnection).writeAndFlush(loginSuccessPacket); + if (playerConnection instanceof PlayerSocketConnection) { + ((PlayerSocketConnection) playerConnection).writeAndFlush(loginSuccessPacket); } else { playerConnection.sendPacket(loginSuccessPacket); } @@ -348,11 +348,11 @@ public final class ConnectionManager { DisconnectPacket disconnectPacket = new DisconnectPacket(shutdownText); for (Player player : getOnlinePlayers()) { final PlayerConnection playerConnection = player.getPlayerConnection(); - if (playerConnection instanceof NettyPlayerConnection) { - final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) playerConnection; - nettyPlayerConnection.writeAndFlush(disconnectPacket); + if (playerConnection instanceof PlayerSocketConnection) { + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) playerConnection; + socketConnection.writeAndFlush(disconnectPacket); try { - nettyPlayerConnection.getChannel().close(); + socketConnection.getChannel().close(); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/net/minestom/server/network/PacketProcessor.java b/src/main/java/net/minestom/server/network/PacketProcessor.java index 81a7f8211..31267f616 100644 --- a/src/main/java/net/minestom/server/network/PacketProcessor.java +++ b/src/main/java/net/minestom/server/network/PacketProcessor.java @@ -8,7 +8,7 @@ import net.minestom.server.network.packet.client.handler.ClientLoginPacketsHandl import net.minestom.server.network.packet.client.handler.ClientPlayPacketsHandler; import net.minestom.server.network.packet.client.handler.ClientStatusPacketsHandler; import net.minestom.server.network.packet.client.handshake.HandshakePacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.Readable; @@ -42,7 +42,7 @@ public final class PacketProcessor { this.playPacketsHandler = new ClientPlayPacketsHandler(); } - public void process(@NotNull NettyPlayerConnection playerConnection, int packetId, ByteBuffer body) { + public void process(@NotNull PlayerSocketConnection playerConnection, int packetId, ByteBuffer body) { if (MinecraftServer.getRateLimit() > 0) { // Increment packet count (checked in PlayerConnection#update) playerConnection.getPacketCounter().incrementAndGet(); diff --git a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java index e6f8cbe34..5de00c981 100644 --- a/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/handshake/HandshakePacket.java @@ -8,7 +8,7 @@ import net.minestom.server.extras.bungee.BungeeCordProxy; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; @@ -54,8 +54,8 @@ public class HandshakePacket implements ClientPreplayPacket { public void process(@NotNull PlayerConnection connection) { // Bungee support (IP forwarding) - if (BungeeCordProxy.isEnabled() && connection instanceof NettyPlayerConnection) { - NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; + if (BungeeCordProxy.isEnabled() && connection instanceof PlayerSocketConnection) { + PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; if (serverAddress != null) { final String[] split = serverAddress.split("\00"); @@ -65,7 +65,7 @@ public class HandshakePacket implements ClientPreplayPacket { final SocketAddress socketAddress = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) connection.getRemoteAddress()).getPort()); - nettyPlayerConnection.setRemoteAddress(socketAddress); + socketConnection.setRemoteAddress(socketAddress); UUID playerUuid = UUID.fromString( split[2] @@ -79,11 +79,11 @@ public class HandshakePacket implements ClientPreplayPacket { playerSkin = BungeeCordProxy.readSkin(split[3]); } - nettyPlayerConnection.UNSAFE_setBungeeUuid(playerUuid); - nettyPlayerConnection.UNSAFE_setBungeeSkin(playerSkin); + socketConnection.UNSAFE_setBungeeUuid(playerUuid); + socketConnection.UNSAFE_setBungeeSkin(playerSkin); } else { - nettyPlayerConnection.sendPacket(new LoginDisconnectPacket(INVALID_BUNGEE_FORWARDING)); - nettyPlayerConnection.disconnect(); + socketConnection.sendPacket(new LoginDisconnectPacket(INVALID_BUNGEE_FORWARDING)); + socketConnection.disconnect(); return; } } else { @@ -92,9 +92,9 @@ public class HandshakePacket implements ClientPreplayPacket { } } - if (connection instanceof NettyPlayerConnection) { + if (connection instanceof PlayerSocketConnection) { // Give to the connection the server info that the client used - ((NettyPlayerConnection) connection).refreshServerInformation(serverAddress, serverPort, protocolVersion); + ((PlayerSocketConnection) connection).refreshServerInformation(serverAddress, serverPort, protocolVersion); } switch (nextState) { diff --git a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java index 83d5ef855..509e4bfab 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/EncryptionResponsePacket.java @@ -7,8 +7,8 @@ import net.minestom.server.data.type.array.ByteArrayData; import net.minestom.server.extras.MojangAuth; import net.minestom.server.extras.mojangAuth.MojangCrypt; import net.minestom.server.network.packet.client.ClientPreplayPacket; -import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.utils.async.AsyncUtils; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; @@ -35,31 +35,26 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { @Override public void process(@NotNull PlayerConnection connection) { - - // Encryption is only support for netty connection - if (!(connection instanceof NettyPlayerConnection)) { + // Encryption is only support for socket connection + if (!(connection instanceof PlayerSocketConnection)) { return; } - final NettyPlayerConnection nettyConnection = (NettyPlayerConnection) connection; - + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; AsyncUtils.runAsync(() -> { try { - final String loginUsername = nettyConnection.getLoginUsername(); - if (!Arrays.equals(nettyConnection.getNonce(), getNonce())) { + final String loginUsername = socketConnection.getLoginUsername(); + if (!Arrays.equals(socketConnection.getNonce(), getNonce())) { MinecraftServer.LOGGER.error("{} tried to login with an invalid nonce!", loginUsername); return; } if (loginUsername != null && !loginUsername.isEmpty()) { - final byte[] digestedData = MojangCrypt.digestData("", MojangAuth.getKeyPair().getPublic(), getSecretKey()); - if (digestedData == null) { // Incorrect key, probably because of the client - MinecraftServer.LOGGER.error("Connection {} failed initializing encryption.", nettyConnection.getRemoteAddress()); + MinecraftServer.LOGGER.error("Connection {} failed initializing encryption.", socketConnection.getRemoteAddress()); connection.disconnect(); return; } - // Query Mojang's sessionserver. final String serverId = new BigInteger(digestedData).toString(16); InputStream gameProfileStream = new URL( @@ -70,7 +65,7 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { ).openStream(); final JsonObject gameProfile = GSON.fromJson(new InputStreamReader(gameProfileStream), JsonObject.class); - nettyConnection.setEncryptionKey(getSecretKey()); + socketConnection.setEncryptionKey(getSecretKey()); UUID profileUUID = UUID.fromString(gameProfile.get("id").getAsString().replaceFirst("(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})", "$1-$2-$3-$4-$5")); String profileName = gameProfile.get("name").getAsString(); @@ -85,8 +80,8 @@ public class EncryptionResponsePacket implements ClientPreplayPacket { @Override public void read(@NotNull BinaryReader reader) { - sharedSecret = ByteArrayData.decodeByteArray(reader); - verifyToken = ByteArrayData.decodeByteArray(reader); + this.sharedSecret = ByteArrayData.decodeByteArray(reader); + this.verifyToken = ByteArrayData.decodeByteArray(reader); } @Override diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java index 6b8b93875..f63f945a3 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginPluginResponsePacket.java @@ -9,7 +9,7 @@ import net.minestom.server.extras.velocity.VelocityProxy; import net.minestom.server.network.ConnectionManager; import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; @@ -34,9 +34,9 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { public void process(@NotNull PlayerConnection connection) { // Proxy support - if (connection instanceof NettyPlayerConnection) { - final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - final String channel = nettyPlayerConnection.getPluginRequestChannel(messageId); + if (connection instanceof PlayerSocketConnection) { + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + final String channel = socketConnection.getPluginRequestChannel(messageId); if (channel != null) { boolean success = false; @@ -68,13 +68,13 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { if (success) { if (socketAddress != null) { - nettyPlayerConnection.setRemoteAddress(socketAddress); + socketConnection.setRemoteAddress(socketAddress); } if (playerUsername != null) { - nettyPlayerConnection.UNSAFE_setLoginUsername(playerUsername); + socketConnection.UNSAFE_setLoginUsername(playerUsername); } - final String username = nettyPlayerConnection.getLoginUsername(); + final String username = socketConnection.getLoginUsername(); final UUID uuid = playerUuid != null ? playerUuid : CONNECTION_MANAGER.getPlayerConnectionUuid(connection, username); @@ -82,7 +82,7 @@ public class LoginPluginResponsePacket implements ClientPreplayPacket { player.setSkin(playerSkin); } else { LoginDisconnectPacket disconnectPacket = new LoginDisconnectPacket(INVALID_PROXY_RESPONSE); - nettyPlayerConnection.sendPacket(disconnectPacket); + socketConnection.sendPacket(disconnectPacket); } } diff --git a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java index f3a4282fc..285871e70 100644 --- a/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java +++ b/src/main/java/net/minestom/server/network/packet/client/login/LoginStartPacket.java @@ -12,8 +12,8 @@ import net.minestom.server.network.packet.client.ClientPreplayPacket; import net.minestom.server.network.packet.server.login.EncryptionRequestPacket; import net.minestom.server.network.packet.server.login.LoginDisconnectPacket; import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket; -import net.minestom.server.network.player.NettyPlayerConnection; import net.minestom.server.network.player.PlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -29,70 +29,58 @@ public class LoginStartPacket implements ClientPreplayPacket { @Override public void process(@NotNull PlayerConnection connection) { - - final boolean isNettyClient = connection instanceof NettyPlayerConnection; - + final boolean isSocketConnection = connection instanceof PlayerSocketConnection; // Cache the login username and start compression if enabled - if (isNettyClient) { - NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - nettyPlayerConnection.UNSAFE_setLoginUsername(username); + if (isSocketConnection) { + PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + socketConnection.UNSAFE_setLoginUsername(username); // Compression final int threshold = MinecraftServer.getCompressionThreshold(); if (threshold > 0) { - nettyPlayerConnection.startCompression(); + socketConnection.startCompression(); + } + } + // Proxy support (only for socket clients) + if (isSocketConnection) { + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + // Velocity support + if (VelocityProxy.isEnabled()) { + final int messageId = ThreadLocalRandom.current().nextInt(); + final String channel = VelocityProxy.PLAYER_INFO_CHANNEL; + // Important in order to retrieve the channel in the response packet + socketConnection.addPluginRequestEntry(messageId, channel); + + LoginPluginRequestPacket loginPluginRequestPacket = new LoginPluginRequestPacket(); + loginPluginRequestPacket.messageId = messageId; + loginPluginRequestPacket.channel = channel; + loginPluginRequestPacket.data = null; + connection.sendPacket(loginPluginRequestPacket); + return; } } - // Proxy support (only for netty clients) - if (isNettyClient) { - final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - - { - // Velocity support - if (VelocityProxy.isEnabled()) { - - final int messageId = ThreadLocalRandom.current().nextInt(); - final String channel = VelocityProxy.PLAYER_INFO_CHANNEL; - - // Important in order to retrieve the channel in the response packet - nettyPlayerConnection.addPluginRequestEntry(messageId, channel); - - LoginPluginRequestPacket loginPluginRequestPacket = new LoginPluginRequestPacket(); - loginPluginRequestPacket.messageId = messageId; - loginPluginRequestPacket.channel = channel; - loginPluginRequestPacket.data = null; - connection.sendPacket(loginPluginRequestPacket); - - return; - } - } - - } - - if (MojangAuth.isEnabled() && isNettyClient) { + if (MojangAuth.isEnabled() && isSocketConnection) { // Mojang auth if (CONNECTION_MANAGER.getPlayer(username) != null) { connection.sendPacket(new LoginDisconnectPacket(ALREADY_CONNECTED)); connection.disconnect(); return; } - - final NettyPlayerConnection nettyPlayerConnection = (NettyPlayerConnection) connection; - - nettyPlayerConnection.setConnectionState(ConnectionState.LOGIN); - EncryptionRequestPacket encryptionRequestPacket = new EncryptionRequestPacket(nettyPlayerConnection); - nettyPlayerConnection.sendPacket(encryptionRequestPacket); + final PlayerSocketConnection socketConnection = (PlayerSocketConnection) connection; + socketConnection.setConnectionState(ConnectionState.LOGIN); + EncryptionRequestPacket encryptionRequestPacket = new EncryptionRequestPacket(socketConnection); + socketConnection.sendPacket(encryptionRequestPacket); } else { final boolean bungee = BungeeCordProxy.isEnabled(); // Offline - final UUID playerUuid = bungee && isNettyClient ? - ((NettyPlayerConnection) connection).getBungeeUuid() : + final UUID playerUuid = bungee && isSocketConnection ? + ((PlayerSocketConnection) connection).getBungeeUuid() : CONNECTION_MANAGER.getPlayerConnectionUuid(connection, username); Player player = CONNECTION_MANAGER.startPlayState(connection, playerUuid, username, true); - if (bungee && isNettyClient) { - player.setSkin(((NettyPlayerConnection) connection).getBungeeSkin()); + if (bungee && isSocketConnection) { + player.setSkin(((PlayerSocketConnection) connection).getBungeeSkin()); } } } @@ -104,7 +92,7 @@ public class LoginStartPacket implements ClientPreplayPacket { @Override public void write(@NotNull BinaryWriter writer) { - if(username.length() > 16) + if (username.length() > 16) throw new IllegalArgumentException("Username is not allowed to be longer than 16 characters"); writer.writeSizedString(username); } diff --git a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java index eafaec561..20b38349d 100644 --- a/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/login/EncryptionRequestPacket.java @@ -4,7 +4,7 @@ import net.minestom.server.data.type.array.ByteArrayData; import net.minestom.server.extras.MojangAuth; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.utils.binary.BinaryReader; import net.minestom.server.utils.binary.BinaryWriter; import org.jetbrains.annotations.NotNull; @@ -16,7 +16,7 @@ public class EncryptionRequestPacket implements ServerPacket { public byte[] publicKey; public byte[] nonce = new byte[4]; - public EncryptionRequestPacket(NettyPlayerConnection connection) { + public EncryptionRequestPacket(PlayerSocketConnection connection) { ThreadLocalRandom.current().nextBytes(nonce); connection.setNonce(nonce); } diff --git a/src/main/java/net/minestom/server/network/player/PlayerConnection.java b/src/main/java/net/minestom/server/network/player/PlayerConnection.java index 3acddf607..b7845baf9 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerConnection.java @@ -21,7 +21,6 @@ import java.util.concurrent.atomic.AtomicInteger; * It can be extended to create a new kind of player (NPC for instance). */ public abstract class PlayerConnection { - protected static final PacketListenerManager PACKET_LISTENER_MANAGER = MinecraftServer.getPacketListenerManager(); private Player player; @@ -63,8 +62,7 @@ public abstract class PlayerConnection { } } - @NotNull - public AtomicInteger getPacketCounter() { + public @NotNull AtomicInteger getPacketCounter() { return packetCounter; } @@ -74,8 +72,7 @@ public abstract class PlayerConnection { * * @return this connection identifier */ - @NotNull - public String getIdentifier() { + public @NotNull String getIdentifier() { final Player player = getPlayer(); return player != null ? player.getUsername() : @@ -114,9 +111,7 @@ public abstract class PlayerConnection { * * @return the remote address */ - @NotNull - public abstract SocketAddress getRemoteAddress(); - + public abstract @NotNull SocketAddress getRemoteAddress(); /** * Gets protocol version of client. @@ -197,8 +192,7 @@ public abstract class PlayerConnection { * * @return the client connection state */ - @NotNull - public ConnectionState getConnectionState() { + public @NotNull ConnectionState getConnectionState() { return connectionState; } diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java similarity index 98% rename from src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java rename to src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java index 738592985..49d478f2a 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java @@ -36,11 +36,12 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.zip.DataFormatException; /** - * Represents a networking connection with Netty. + * Represents a socket connection. *

* It is the implementation used for all network client. */ -public class NettyPlayerConnection extends PlayerConnection { +@ApiStatus.Internal +public class PlayerSocketConnection extends PlayerConnection { private final Worker worker; private final SocketChannel channel; private SocketAddress remoteAddress; @@ -70,7 +71,7 @@ public class NettyPlayerConnection extends PlayerConnection { private final BinaryBuffer tickBuffer = BinaryBuffer.ofSize(Server.SOCKET_BUFFER_SIZE); private volatile BinaryBuffer cacheBuffer; - public NettyPlayerConnection(@NotNull Worker worker, @NotNull SocketChannel channel, SocketAddress remoteAddress) { + public PlayerSocketConnection(@NotNull Worker worker, @NotNull SocketChannel channel, SocketAddress remoteAddress) { super(); this.worker = worker; this.channel = channel; @@ -279,7 +280,6 @@ public class NettyPlayerConnection extends PlayerConnection { this.remoteAddress = remoteAddress; } - @Override public void disconnect() { this.worker.disconnect(this, channel); diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index c2fe6581e..94a9fdc26 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -3,7 +3,7 @@ package net.minestom.server.network.socket; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.network.PacketProcessor; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.utils.binary.BinaryBuffer; import org.jetbrains.annotations.ApiStatus; @@ -21,7 +21,7 @@ import java.util.zip.Inflater; @ApiStatus.Internal public final class Worker { final Selector selector = Selector.open(); - private final Map connectionMap = new ConcurrentHashMap<>(); + private final Map connectionMap = new ConcurrentHashMap<>(); private final PacketProcessor packetProcessor; public Worker(Server server, PacketProcessor packetProcessor) throws IOException { @@ -65,7 +65,7 @@ public final class Worker { } public void receiveConnection(SocketChannel channel) throws IOException { - this.connectionMap.put(channel, new NettyPlayerConnection(this, channel, channel.getRemoteAddress())); + this.connectionMap.put(channel, new PlayerSocketConnection(this, channel, channel.getRemoteAddress())); channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_READ); var socket = channel.socket(); @@ -75,7 +75,7 @@ public final class Worker { this.selector.wakeup(); } - public void disconnect(NettyPlayerConnection connection, SocketChannel channel) { + public void disconnect(PlayerSocketConnection connection, SocketChannel channel) { try { channel.close(); this.connectionMap.remove(channel); diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index ca94f3388..b0beaad72 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -10,7 +10,7 @@ import net.minestom.server.listener.manager.PacketListenerManager; import net.minestom.server.network.packet.FramedPacket; import net.minestom.server.network.packet.server.ComponentHoldingServerPacket; import net.minestom.server.network.packet.server.ServerPacket; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.network.socket.Server; import net.minestom.server.utils.binary.BinaryWriter; @@ -96,8 +96,8 @@ public final class PacketUtils { if (!player.isOnline() || !playerValidator.isValid(player)) continue; final PlayerConnection connection = player.getPlayerConnection(); - if (connection instanceof NettyPlayerConnection) { - ((NettyPlayerConnection) connection).write(framedPacket); + if (connection instanceof PlayerSocketConnection) { + ((PlayerSocketConnection) connection).write(framedPacket); } else { connection.sendPacket(packet); } diff --git a/src/main/java/net/minestom/server/utils/player/PlayerUtils.java b/src/main/java/net/minestom/server/utils/player/PlayerUtils.java index 6f7f03fdf..f08042554 100644 --- a/src/main/java/net/minestom/server/utils/player/PlayerUtils.java +++ b/src/main/java/net/minestom/server/utils/player/PlayerUtils.java @@ -2,25 +2,23 @@ package net.minestom.server.utils.player; import net.minestom.server.entity.Entity; import net.minestom.server.entity.Player; -import net.minestom.server.network.player.NettyPlayerConnection; +import net.minestom.server.network.player.PlayerSocketConnection; import net.minestom.server.network.player.PlayerConnection; public final class PlayerUtils { private PlayerUtils() { - } - public static boolean isNettyClient(PlayerConnection playerConnection) { - return playerConnection instanceof NettyPlayerConnection; + public static boolean isSocketClient(PlayerConnection playerConnection) { + return playerConnection instanceof PlayerSocketConnection; } - public static boolean isNettyClient(Player player) { - return isNettyClient(player.getPlayerConnection()); + public static boolean isSocketClient(Player player) { + return isSocketClient(player.getPlayerConnection()); } - public static boolean isNettyClient(Entity entity) { - return (entity instanceof Player) && isNettyClient((Player) entity); + public static boolean isSocketClient(Entity entity) { + return (entity instanceof Player) && isSocketClient((Player) entity); } - } From 09b7daa9851776d3d9cfc8deaa4f3a89ca25d7e8 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 19:58:00 +0200 Subject: [PATCH 37/41] Fix server shutdown --- src/main/java/net/minestom/server/UpdateManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/UpdateManager.java b/src/main/java/net/minestom/server/UpdateManager.java index 31405290e..ad15174e1 100644 --- a/src/main/java/net/minestom/server/UpdateManager.java +++ b/src/main/java/net/minestom/server/UpdateManager.java @@ -39,13 +39,13 @@ public final class UpdateManager { /** * Should only be created in MinecraftServer. */ - protected UpdateManager() { + UpdateManager() { } /** * Starts the server loop in the update thread. */ - protected void start() { + void start() { final ConnectionManager connectionManager = MinecraftServer.getConnectionManager(); new Thread(() -> { @@ -95,6 +95,7 @@ public final class UpdateManager { MinecraftServer.getExceptionManager().handleException(e); } } + this.threadProvider.shutdown(); }, MinecraftServer.THREAD_NAME_TICK_SCHEDULER).start(); } @@ -241,6 +242,5 @@ public final class UpdateManager { */ public void stop() { this.stopRequested = true; - this.threadProvider.shutdown(); } } From 99a3ad88a15f6436ed6a7c9a1dfac9d69ab92f85 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 21:14:53 +0200 Subject: [PATCH 38/41] Use lambda for socket selection --- .../server/network/socket/Worker.java | 50 ++++++++----------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 94a9fdc26..4cad204c2 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -12,7 +12,6 @@ import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -31,37 +30,28 @@ public final class Worker { private void threadTick(Context workerContext) { try { - selector.select(); + this.selector.select(key -> { + final SocketChannel channel = (SocketChannel) key.channel(); + if (!channel.isOpen()) return; + if (!key.isReadable()) return; + var connection = connectionMap.get(channel); + try { + var readBuffer = workerContext.readBuffer; + // Consume last incomplete packet + connection.consumeCache(readBuffer); + // Read & process + readBuffer.readChannel(channel); + connection.processPackets(workerContext, packetProcessor); + } catch (IOException e) { + // TODO print exception? (should ignore disconnection) + connection.disconnect(); + } finally { + workerContext.clearBuffers(); + } + }); } catch (IOException e) { - e.printStackTrace(); - return; + MinecraftServer.getExceptionManager().handleException(e); } - Set selectedKeys = selector.selectedKeys(); - for (SelectionKey key : selectedKeys) { - SocketChannel channel = (SocketChannel) key.channel(); - if (!channel.isOpen()) { - continue; - } - if (!key.isReadable()) { - // We only care about read - continue; - } - var connection = connectionMap.get(channel); - try { - var readBuffer = workerContext.readBuffer; - // Consume last incomplete packet - connection.consumeCache(readBuffer); - // Read & process - readBuffer.readChannel(channel); - connection.processPackets(workerContext, packetProcessor); - } catch (IOException e) { - // TODO print exception? (should ignore disconnection) - connection.disconnect(); - } finally { - workerContext.clearBuffers(); - } - } - selectedKeys.clear(); } public void receiveConnection(SocketChannel channel) throws IOException { From 3881102925314ed370bb6aa1470018ae1911c91b Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 21:28:38 +0200 Subject: [PATCH 39/41] Make `Worker` a thread --- .../server/network/socket/Server.java | 4 +- .../server/network/socket/Worker.java | 87 +++++++------------ 2 files changed, 36 insertions(+), 55 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index 8fda5710f..ccadcc56e 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -35,7 +35,9 @@ public final class Server { public Server(PacketProcessor packetProcessor) throws IOException { // Create all workers for (int i = 0; i < WORKER_COUNT; i++) { - this.workers.add(new Worker(this, packetProcessor)); + Worker worker = new Worker(this, packetProcessor); + this.workers.add(worker); + worker.start(); } } diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 4cad204c2..80487897a 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -14,43 +14,50 @@ import java.nio.channels.SocketChannel; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Consumer; import java.util.zip.Inflater; @ApiStatus.Internal -public final class Worker { +public final class Worker extends Thread { + private static final AtomicInteger COUNTER = new AtomicInteger(); + final Selector selector = Selector.open(); + private final Context context = new Context(); private final Map connectionMap = new ConcurrentHashMap<>(); + private final Server server; private final PacketProcessor packetProcessor; public Worker(Server server, PacketProcessor packetProcessor) throws IOException { + super(null, null, "Ms-worker-" + COUNTER.getAndIncrement()); + this.server = server; this.packetProcessor = packetProcessor; - Thread.start(server, this::threadTick); } - private void threadTick(Context workerContext) { - try { - this.selector.select(key -> { - final SocketChannel channel = (SocketChannel) key.channel(); - if (!channel.isOpen()) return; - if (!key.isReadable()) return; - var connection = connectionMap.get(channel); - try { - var readBuffer = workerContext.readBuffer; - // Consume last incomplete packet - connection.consumeCache(readBuffer); - // Read & process - readBuffer.readChannel(channel); - connection.processPackets(workerContext, packetProcessor); - } catch (IOException e) { - // TODO print exception? (should ignore disconnection) - connection.disconnect(); - } finally { - workerContext.clearBuffers(); - } - }); - } catch (IOException e) { - MinecraftServer.getExceptionManager().handleException(e); + @Override + public void run() { + while (server.isOpen()) { + try { + this.selector.select(key -> { + final SocketChannel channel = (SocketChannel) key.channel(); + if (!channel.isOpen()) return; + if (!key.isReadable()) return; + var connection = connectionMap.get(channel); + try { + var readBuffer = context.readBuffer; + // Consume last incomplete packet + connection.consumeCache(readBuffer); + // Read & process + readBuffer.readChannel(channel); + connection.processPackets(context, packetProcessor); + } catch (IOException e) { + // TODO print exception? (should ignore disconnection) + connection.disconnect(); + } finally { + context.clearBuffers(); + } + }); + } catch (IOException e) { + MinecraftServer.getExceptionManager().handleException(e); + } } } @@ -80,39 +87,11 @@ public final class Worker { } } - /** - * Thread responsible for reading players socket and forwarding packets into - * players' packet queue. - */ - static final class Thread extends java.lang.Thread { - private static final AtomicInteger COUNTER = new AtomicInteger(); - - private Thread(Runnable runnable) { - super(null, runnable, "Ms-worker-" + COUNTER.getAndIncrement()); - } - - static void start(Server server, Consumer runnable) { - new Thread(() -> { - Context context = new Context(); - while (server.isOpen()) { - try { - runnable.accept(context); - } catch (Exception e) { - e.printStackTrace(); - } - } - }).start(); - } - } - /** * Contains objects that we can be shared across all the connection of a {@link Worker worker}. */ public static final class Context { public final BinaryBuffer readBuffer = BinaryBuffer.ofSize(Server.SOCKET_BUFFER_SIZE); - /** - * Stores a single packet payload to be read. - */ public final BinaryBuffer contentBuffer = BinaryBuffer.ofSize(Server.MAX_PACKET_SIZE); public final Inflater inflater = new Inflater(); From 1b79d2e2e88a3078a16ee5179e662fd0379a38d0 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 23:03:01 +0200 Subject: [PATCH 40/41] Cleanup --- .../player/PlayerSocketConnection.java | 9 +++---- .../server/network/socket/Worker.java | 24 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java index 49d478f2a..c2fac0361 100644 --- a/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java +++ b/src/main/java/net/minestom/server/network/player/PlayerSocketConnection.java @@ -89,7 +89,8 @@ public class PlayerSocketConnection extends PlayerConnection { try { cipher.update(bytes, 0, remainingBytes, output, 0); } catch (ShortBufferException e) { - e.printStackTrace(); + MinecraftServer.getExceptionManager().handleException(e); + return; } readBuffer.clear(); readBuffer.writeBytes(output); @@ -134,14 +135,14 @@ public class PlayerSocketConnection extends PlayerConnection { // Process packet final int packetId = content.readVarInt(); try { - var finalBuffer = content.asByteBuffer(content.readerOffset(), packetEnd); - packetProcessor.process(this, packetId, finalBuffer); + final ByteBuffer payload = content.asByteBuffer(content.readerOffset(), packetEnd); + packetProcessor.process(this, packetId, payload); } catch (Exception e) { // Error while reading the packet MinecraftServer.getExceptionManager().handleException(e); break; } - // Return to original state (before writing) + // Position buffer to read the next packet readBuffer.reset(packetEnd, limit); } catch (BufferUnderflowException e) { readBuffer.reset(beginMark); diff --git a/src/main/java/net/minestom/server/network/socket/Worker.java b/src/main/java/net/minestom/server/network/socket/Worker.java index 80487897a..54b94d61d 100644 --- a/src/main/java/net/minestom/server/network/socket/Worker.java +++ b/src/main/java/net/minestom/server/network/socket/Worker.java @@ -61,17 +61,6 @@ public final class Worker extends Thread { } } - public void receiveConnection(SocketChannel channel) throws IOException { - this.connectionMap.put(channel, new PlayerSocketConnection(this, channel, channel.getRemoteAddress())); - channel.configureBlocking(false); - channel.register(selector, SelectionKey.OP_READ); - var socket = channel.socket(); - socket.setSendBufferSize(Server.SOCKET_BUFFER_SIZE); - socket.setReceiveBufferSize(Server.SOCKET_BUFFER_SIZE); - socket.setTcpNoDelay(Server.NO_DELAY); - this.selector.wakeup(); - } - public void disconnect(PlayerSocketConnection connection, SocketChannel channel) { try { channel.close(); @@ -87,6 +76,17 @@ public final class Worker extends Thread { } } + void receiveConnection(SocketChannel channel) throws IOException { + this.connectionMap.put(channel, new PlayerSocketConnection(this, channel, channel.getRemoteAddress())); + channel.configureBlocking(false); + channel.register(selector, SelectionKey.OP_READ); + var socket = channel.socket(); + socket.setSendBufferSize(Server.SOCKET_BUFFER_SIZE); + socket.setReceiveBufferSize(Server.SOCKET_BUFFER_SIZE); + socket.setTcpNoDelay(Server.NO_DELAY); + this.selector.wakeup(); + } + /** * Contains objects that we can be shared across all the connection of a {@link Worker worker}. */ @@ -95,7 +95,7 @@ public final class Worker extends Thread { public final BinaryBuffer contentBuffer = BinaryBuffer.ofSize(Server.MAX_PACKET_SIZE); public final Inflater inflater = new Inflater(); - public void clearBuffers() { + void clearBuffers() { this.readBuffer.clear(); this.contentBuffer.clear(); } From 10fce3c034c87e8311f24ff0fc959174128e091c Mon Sep 17 00:00:00 2001 From: TheMode Date: Sun, 8 Aug 2021 23:51:59 +0200 Subject: [PATCH 41/41] Use lambda for socket accept --- .../server/network/socket/Server.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/minestom/server/network/socket/Server.java b/src/main/java/net/minestom/server/network/socket/Server.java index ccadcc56e..781121948 100644 --- a/src/main/java/net/minestom/server/network/socket/Server.java +++ b/src/main/java/net/minestom/server/network/socket/Server.java @@ -12,7 +12,6 @@ import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.List; -import java.util.Set; public final class Server { public static final Logger LOGGER = LoggerFactory.getLogger(Server.class); @@ -52,7 +51,17 @@ public final class Server { while (!stop) { // Busy wait for connections try { - serverTick(selector, serverSocket); + this.selector.select(key -> { + if (!key.isAcceptable()) return; + try { + // Register socket and forward to thread + Worker worker = findWorker(); + final SocketChannel client = serverSocket.accept(); + worker.receiveConnection(client); + } catch (IOException e) { + e.printStackTrace(); + } + }); } catch (IOException e) { e.printStackTrace(); } @@ -78,20 +87,6 @@ public final class Server { return port; } - private void serverTick(Selector selector, ServerSocketChannel socketChannel) throws IOException { - selector.select(); - Set selectedKeys = selector.selectedKeys(); - for (SelectionKey key : selectedKeys) { - if (key.isAcceptable()) { - // Register socket and forward to thread - Worker thread = findWorker(); - final SocketChannel client = socketChannel.accept(); - thread.receiveConnection(client); - } - } - selectedKeys.clear(); - } - private Worker findWorker() { this.index = ++index % WORKER_COUNT; return workers.get(index);