From 0ae6d9be69ac7d897c0a2bef513c38abd10eac3b Mon Sep 17 00:00:00 2001 From: SupremeMortal <6178101+SupremeMortal@users.noreply.github.com> Date: Sun, 5 Apr 2020 17:01:52 +0100 Subject: [PATCH] Fix array cast exception --- .../nukkit/network/protocol/CraftingEventPacket.java | 4 ++-- .../java/cn/nukkit/network/protocol/TextPacket.java | 2 +- src/main/java/cn/nukkit/utils/BinaryStream.java | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/cn/nukkit/network/protocol/CraftingEventPacket.java b/src/main/java/cn/nukkit/network/protocol/CraftingEventPacket.java index 28affc391ce..0a3a658814a 100644 --- a/src/main/java/cn/nukkit/network/protocol/CraftingEventPacket.java +++ b/src/main/java/cn/nukkit/network/protocol/CraftingEventPacket.java @@ -38,8 +38,8 @@ public void decode() { this.type = (int) this.getUnsignedVarInt(); this.id = this.getUUID(); - this.input = this.getArray(BinaryStream::getSlot); - this.output = this.getArray(BinaryStream::getSlot); + this.input = this.getArray(Item.class, BinaryStream::getSlot); + this.output = this.getArray(Item.class, BinaryStream::getSlot); } @Override diff --git a/src/main/java/cn/nukkit/network/protocol/TextPacket.java b/src/main/java/cn/nukkit/network/protocol/TextPacket.java index 668fc40cc21..9e4d7b96a7a 100644 --- a/src/main/java/cn/nukkit/network/protocol/TextPacket.java +++ b/src/main/java/cn/nukkit/network/protocol/TextPacket.java @@ -59,7 +59,7 @@ public void decode() { case TYPE_POPUP: case TYPE_JUKEBOX_POPUP: this.message = this.getString(); - this.parameters = this.getArray(BinaryStream::getString); + this.parameters = this.getArray(String.class, BinaryStream::getString); } this.xboxUserId = this.getString(); this.platformChatId = this.getString(); diff --git a/src/main/java/cn/nukkit/utils/BinaryStream.java b/src/main/java/cn/nukkit/utils/BinaryStream.java index e2e8ddd20ec..eadedb7c548 100644 --- a/src/main/java/cn/nukkit/utils/BinaryStream.java +++ b/src/main/java/cn/nukkit/utils/BinaryStream.java @@ -14,9 +14,11 @@ import cn.nukkit.nbt.tag.ListTag; import cn.nukkit.nbt.tag.StringTag; import cn.nukkit.network.protocol.types.EntityLink; +import com.google.common.collect.Iterables; import it.unimi.dsi.fastutil.io.FastByteArrayInputStream; import java.io.IOException; +import java.lang.reflect.Array; import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.util.*; @@ -669,13 +671,13 @@ public EntityLink getEntityLink() { } @SuppressWarnings("unchecked") - public T[] getArray(Function function) { - ArrayDeque array = new ArrayDeque<>(); + public T[] getArray(Class clazz, Function function) { + ArrayDeque deque = new ArrayDeque<>(); int count = (int) getUnsignedVarInt(); for (int i = 0; i < count; i++) { - array.add(function.apply(this)); + deque.add(function.apply(this)); } - return (T[]) array.toArray(); + return deque.toArray((T[]) Array.newInstance(clazz, 0)); } public boolean feof() {