diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/FriendlyByteBuf.java b/core/src/main/java/net/momirealms/craftengine/core/util/FriendlyByteBuf.java index 7b298a6cd..e9b1c7de8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/FriendlyByteBuf.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/FriendlyByteBuf.java @@ -217,6 +217,20 @@ public class FriendlyByteBuf extends ByteBuf { return this; } + public FriendlyByteBuf writeFixedSizeLongArray(long[] array) { + for (long value : array) { + this.writeLong(value); + } + return this; + } + + public long[] readFixedSizeLongArray(long[] output) { + for(int i = 0; i < output.length; ++i) { + output[i] = this.readLong(); + } + return output; + } + public long[] readLongArray() { return this.readLongArray(null); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/chunk/PalettedContainer.java b/core/src/main/java/net/momirealms/craftengine/core/world/chunk/PalettedContainer.java index bc41daeec..da44b67e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/chunk/PalettedContainer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/chunk/PalettedContainer.java @@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.FriendlyByteBuf; import net.momirealms.craftengine.core.util.IndexedIterable; import net.momirealms.craftengine.core.util.MCUtils; +import net.momirealms.craftengine.core.util.VersionHelper; import org.jetbrains.annotations.Nullable; import java.util.Arrays; @@ -15,12 +16,14 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import java.util.function.Consumer; -import java.util.function.IntUnaryOperator; -import java.util.function.Predicate; +import java.util.function.*; import java.util.stream.LongStream; public class PalettedContainer implements PaletteResizeListener, ReadableContainer { + private static final BiConsumer RAW_DATA_WRITER = VersionHelper.isVersionNewerThan1_21_5() ? + (FriendlyByteBuf::writeFixedSizeLongArray) : (FriendlyByteBuf::writeLongArray); + private static final BiConsumer RAW_DATA_READER = VersionHelper.isVersionNewerThan1_21_5() ? + (FriendlyByteBuf::readFixedSizeLongArray) : (FriendlyByteBuf::readLongArray); private final PaletteResizeListener dummyListener = (newSize, added) -> 0; private final IndexedIterable idList; private Data data; @@ -78,7 +81,7 @@ public class PalettedContainer implements PaletteResizeListener, ReadableC int i = buf.readByte(); Data data = this.getCompatibleData(this.data, i); data.palette.readPacket(buf); - buf.readLongArray(data.storage.getData()); + RAW_DATA_READER.accept(buf, data.storage.getData()); this.data = data; } finally { this.unlock(); @@ -303,7 +306,7 @@ public class PalettedContainer implements PaletteResizeListener, ReadableC public void writePacket(FriendlyByteBuf buf) { buf.writeByte(this.storage.getElementBits()); this.palette.writePacket(buf); - buf.writeLongArray(this.storage.getData()); + RAW_DATA_WRITER.accept(buf, this.storage.getData()); } }