Skip to content

Commit 514fd0a

Browse files
authored
Improve writeVarInt: no loops, return self (#6)
1 parent 1b6b3dc commit 514fd0a

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/main/java/net/hypixel/modapi/serializer/PacketSerializer.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,20 @@ public int readVarInt() {
4242
return i;
4343
}
4444

45-
public void writeVarInt(int i) {
46-
while ((i & -128) != 0) {
47-
this.buf.writeByte(i & 127 | 128);
48-
i >>>= 7;
45+
public PacketSerializer writeVarInt(int value) {
46+
if ((value & 0xFFFFFF80) == 0) {
47+
buf.writeByte(value);
48+
} else if ((value & 0xFFFFC000) == 0) {
49+
buf.writeShort((value & 0x7F | 0x80) << 8 | (value >>> 7 & 0x7F));
50+
} else if ((value & 0xFFE00000) == 0) {
51+
buf.writeMedium((value & 0x7F | 0x80) << 16 | (value >>> 7 & 0x7F | 0x80) << 8 | (value >>> 14 & 0x7F));
52+
} else if ((value & 0xF0000000) == 0) {
53+
buf.writeInt((value & 0x7F | 0x80) << 24 | (value >>> 7 & 0x7F | 0x80) << 16 | (value >>> 14 & 0x7F | 0x80) << 8 | (value >>> 21 & 0x7F));
54+
} else {
55+
buf.writeInt((value & 0x7F | 0x80) << 24 | (value >>> 7 & 0x7F | 0x80) << 16 | (value >>> 14 & 0x7F | 0x80) << 8 | (value >>> 21 & 0x7F | 0x80));
56+
buf.writeByte(value >>> 28);
4957
}
50-
51-
this.buf.writeByte(i);
58+
return this;
5259
}
5360

5461
public String readString() {

0 commit comments

Comments
 (0)