diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java index 072010f25..35678b59d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java @@ -492,6 +492,10 @@ public abstract class AbstractFontManager implements FontManager { return; } } + if (codepoints.length == 0) { + TranslationManager.instance().log("warning.config.image.lack_char", path.toString(), id.toString()); + return; + } codepointGrid[i] = codepoints; if (size == -1) size = codepoints.length; if (size != codepoints.length) { 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 81ceb9719..5219bb4b4 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 @@ -101,6 +101,29 @@ public class FriendlyByteBuf extends ByteBuf { idList.forEach(this::writeVarInt); } + public List readByteArrayList() { + int listSize = this.readVarInt(); + List bytes = new ArrayList<>(); + for (int i = 0; i < listSize; ++i) { + bytes.add(this.readByteArray()); + } + return bytes; + } + + public List readByteArrayList(int maxSize) { + int listSize = this.readVarInt(); + List bytes = new ArrayList<>(); + for (int i = 0; i < listSize; ++i) { + bytes.add(this.readByteArray(maxSize)); + } + return bytes; + } + + public void writeByteArrayList(List bytes) { + this.writeVarInt(bytes.size()); + bytes.forEach(this::writeByteArray); + } + public > M readMap(IntFunction mapFactory, FriendlyByteBuf.Reader keyReader, FriendlyByteBuf.Reader valueReader) { int mapSize = this.readVarInt(); M map = mapFactory.apply(mapSize);