diff --git a/src/main/java/net/packet/ByteBufInPacket.java b/src/main/java/net/packet/ByteBufInPacket.java index 19dfdfffc0..e79326f7c6 100644 --- a/src/main/java/net/packet/ByteBufInPacket.java +++ b/src/main/java/net/packet/ByteBufInPacket.java @@ -22,6 +22,8 @@ public class ByteBufInPacket implements InPacket { public byte readByte() { return byteBuf.readByte(); } + @Override + public short readUnsignedByte() { return byteBuf.readUnsignedByte(); } @Override public short readShort() { diff --git a/src/main/java/net/packet/InPacket.java b/src/main/java/net/packet/InPacket.java index 37e5280899..e21e15a44a 100644 --- a/src/main/java/net/packet/InPacket.java +++ b/src/main/java/net/packet/InPacket.java @@ -4,6 +4,7 @@ import java.awt.*; public interface InPacket extends Packet { byte readByte(); + short readUnsignedByte(); short readShort(); int readInt(); long readLong(); diff --git a/src/main/java/net/server/channel/handlers/NPCMoreTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCMoreTalkHandler.java index 0dc04cd8a0..e39b1676e4 100644 --- a/src/main/java/net/server/channel/handlers/NPCMoreTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCMoreTalkHandler.java @@ -59,7 +59,7 @@ public final class NPCMoreTalkHandler extends AbstractPacketHandler { if (p.available() >= 4) { selection = p.readInt(); } else if (p.available() > 0) { - selection = p.readByte(); + selection = p.readUnsignedByte(); } if (c.getQM() != null) { if (c.getQM().isStart()) { diff --git a/src/test/java/net/packet/ByteBufInPacketTest.java b/src/test/java/net/packet/ByteBufInPacketTest.java index 3a27dd795a..6837ecfe1c 100644 --- a/src/test/java/net/packet/ByteBufInPacketTest.java +++ b/src/test/java/net/packet/ByteBufInPacketTest.java @@ -38,6 +38,36 @@ class ByteBufInPacketTest { assertEquals(writtenByte, readByte); } + @Test + void readUnsignedByte() { + final byte writtenByte = Byte.MAX_VALUE; + byteBuf.writeByte(writtenByte); + + short readUnsignedByte = inPacket.readUnsignedByte(); + + assertEquals(writtenByte, readUnsignedByte); + } + + @Test + void readUnsignedByte_shouldBeNonnegative() { + final byte writtenByte = Byte.MIN_VALUE; + byteBuf.writeByte(writtenByte); + + short readUnsignedByte = inPacket.readUnsignedByte(); + + assertEquals((short)writtenByte + 256, readUnsignedByte); + } + + @Test + void readUnsignedByte_shouldBeNonnegative2() { + final byte writtenByte = -1; + byteBuf.writeByte(writtenByte); + + short readUnsignedByte = inPacket.readUnsignedByte(); + + assertEquals((short)writtenByte + 256, readUnsignedByte); + } + @Test void readShort() { final short writtenShort = 12_345;