diff --git a/src/main/java/mc/core/network/NetStream.java b/src/main/java/mc/core/network/NetStream.java index 7012583..7db7959 100644 --- a/src/main/java/mc/core/network/NetStream.java +++ b/src/main/java/mc/core/network/NetStream.java @@ -17,6 +17,7 @@ public abstract class NetStream { public abstract void readBytes(byte[] buffer); public abstract int readUnsignedByte(); public abstract int readUnsignedShort(); + public abstract short readShort(); public abstract int readInt(); public abstract float readFloat(); public abstract double readDouble(); diff --git a/src/main/java/mc/core/network/proto_125/ByteArrayOutputNetStream.java b/src/main/java/mc/core/network/proto_125/ByteArrayOutputNetStream.java index fc3302e..b3aff55 100644 --- a/src/main/java/mc/core/network/proto_125/ByteArrayOutputNetStream.java +++ b/src/main/java/mc/core/network/proto_125/ByteArrayOutputNetStream.java @@ -39,6 +39,11 @@ public class ByteArrayOutputNetStream extends NetStream_p125 { throw new UnsupportedOperationException(); } + @Override + public short readShort() { + throw new UnsupportedOperationException(); + } + @Override public int readInt() { throw new UnsupportedOperationException(); diff --git a/src/main/java/mc/core/network/proto_125/NetStream_p125.java b/src/main/java/mc/core/network/proto_125/NetStream_p125.java index d850e4f..8280116 100644 --- a/src/main/java/mc/core/network/proto_125/NetStream_p125.java +++ b/src/main/java/mc/core/network/proto_125/NetStream_p125.java @@ -13,7 +13,12 @@ import java.nio.charset.StandardCharsets; public abstract class NetStream_p125 extends NetStream { @Override public String readString() { - int size = readUnsignedByte() * 2; + int size = readShort() * 2; + if (size == 0) { + log.warn("String zero length??"); + return ""; + } + byte[] bytes = new byte[size]; readBytes(bytes); return new String(bytes, StandardCharsets.UTF_16BE); @@ -21,14 +26,14 @@ public abstract class NetStream_p125 extends NetStream { @Override public void writeString(String value) { - if (value.length() > 240) { + if (value.length() > Short.MAX_VALUE) { log.warn("String \"{}\" too long!", value); - byte[] buf = value.substring(0, 240).getBytes(StandardCharsets.UTF_16BE); - writeByte(240); + byte[] buf = value.substring(0, Short.MAX_VALUE).getBytes(StandardCharsets.UTF_16BE); + writeShort(Short.MAX_VALUE); writeBytes(buf); } else { byte[] buf = value.getBytes(StandardCharsets.UTF_16BE); - writeByte(value.length()); + writeShort(value.length()); writeBytes(buf); } } diff --git a/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetStream.java b/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetStream.java index e033f2b..c6c8380 100644 --- a/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetStream.java +++ b/src/main/java/mc/core/network/proto_125/netty/wrappers/WrapperNetStream.java @@ -41,6 +41,11 @@ public class WrapperNetStream extends NetStream_p125 { return byteBuf.readUnsignedShort(); } + @Override + public short readShort() { + return byteBuf.readShort(); + } + @Override public int readInt() { return byteBuf.readInt(); diff --git a/src/main/java/mc/core/network/proto_125/packets/HandshakePacket.java b/src/main/java/mc/core/network/proto_125/packets/HandshakePacket.java index 6292317..c9afd57 100644 --- a/src/main/java/mc/core/network/proto_125/packets/HandshakePacket.java +++ b/src/main/java/mc/core/network/proto_125/packets/HandshakePacket.java @@ -20,7 +20,6 @@ public class HandshakePacket implements CSPacket, SCPacket { @Override public void readSelf(NetStream netStream) { - netStream.skipBytes(1); String[] str = netStream.readString().split(";"); playerName = str[0]; @@ -37,7 +36,6 @@ public class HandshakePacket implements CSPacket, SCPacket { @Override public byte[] toByteArray() { ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream(); - netStream.writeByte(0); netStream.writeString("-"); return netStream.toByteArray(); } diff --git a/src/main/java/mc/core/network/proto_125/packets/KickPacket.java b/src/main/java/mc/core/network/proto_125/packets/KickPacket.java index 1080f74..38bf3fc 100644 --- a/src/main/java/mc/core/network/proto_125/packets/KickPacket.java +++ b/src/main/java/mc/core/network/proto_125/packets/KickPacket.java @@ -19,7 +19,6 @@ public class KickPacket implements SCPacket { @Override public byte[] toByteArray() { ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream(); - netStream.writeByte(0); netStream.writeString(reason); return netStream.toByteArray(); } diff --git a/src/main/java/mc/core/network/proto_125/packets/LoginPacket.java b/src/main/java/mc/core/network/proto_125/packets/LoginPacket.java index b7b0328..22ad07c 100644 --- a/src/main/java/mc/core/network/proto_125/packets/LoginPacket.java +++ b/src/main/java/mc/core/network/proto_125/packets/LoginPacket.java @@ -35,7 +35,6 @@ public class LoginPacket implements CSPacket, SCPacket { @Override public void readSelf(NetStream netStream) { protocol = netStream.readInt(); - netStream.skipBytes(1); playerName = netStream.readString(); }