From faae40e0dc6efe07e8d39cef73fd441361e40fd0 Mon Sep 17 00:00:00 2001 From: bixilon Date: Fri, 5 Jun 2020 22:43:40 +0200 Subject: [PATCH] fix section counting in chunk bulk --- .../clientbound/play/PacketChunkBulk.java | 2 +- .../java/de/bixilon/minosoft/util/BitByte.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketChunkBulk.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketChunkBulk.java index cc3a747e6..a6048701f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketChunkBulk.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketChunkBulk.java @@ -42,7 +42,7 @@ public class PacketChunkBulk implements ClientboundPacket { //chunk - byte sections = (byte) Integer.bitCount(sectionBitMask); + byte sections = BitByte.getBitCount(sectionBitMask); int totalBytes = 4096 * sections; // 16 * 16 * 16 * sections; Section Width * Section Height * Section Width * sections int halfBytes = totalBytes / 2; // half bytes diff --git a/src/main/java/de/bixilon/minosoft/util/BitByte.java b/src/main/java/de/bixilon/minosoft/util/BitByte.java index 83dbf08ad..43f6683c5 100644 --- a/src/main/java/de/bixilon/minosoft/util/BitByte.java +++ b/src/main/java/de/bixilon/minosoft/util/BitByte.java @@ -8,6 +8,13 @@ public class BitByte { return bitSet; } + public static boolean isBitSetShort(short in, int pos) { + boolean bitSet; + int mask = 1 << pos; + bitSet = ((in & mask) == mask); + return bitSet; + } + public static byte getLow4Bits(byte input) { return (byte) (input & 0xF); } @@ -16,4 +23,14 @@ public class BitByte { return (byte) ((input) >> 4 & 0xF); } + public static byte getBitCount(short input) { + byte ret = 0; + for (int i = 0; i < Short.BYTES * 8; i++) { // bytes to bits + if (isBitSetShort(input, i)) { + ret++; + } + } + return ret; + } + }