From 8c61451201bdc977e6601e08a8641514c5d0cd26 Mon Sep 17 00:00:00 2001 From: Catnies Date: Wed, 25 Jun 2025 02:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20SNBTReader#parsePrimitive,?= =?UTF-8?q?=20=E9=80=82=E5=BD=93=E6=97=B6=E6=9C=BA=E5=8F=AF=E6=8F=90?= =?UTF-8?q?=E5=89=8D=E8=BF=94=E5=9B=9E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/momirealms/craftengine/core/util/SNBTReader.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/SNBTReader.java b/core/src/main/java/net/momirealms/craftengine/core/util/SNBTReader.java index c4904715b..e90ff7d67 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/SNBTReader.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/SNBTReader.java @@ -171,6 +171,7 @@ public final class SNBTReader extends DefaultStringReader { // 先解析获取值的长度 int tokenStart = cursor; int lastWhitespace = 0; // 记录值末尾的空格数量,{a:炒鸡 大保健} 和 {a: 炒鸡 大保健 } 都应解析成 "炒鸡 大保健". + boolean contentHasWhitespace = false; // 记录值中有没有空格. while (cursor < length) { char c = peek(); if (c == ',' || c == ']' || c == '}') break; @@ -179,11 +180,15 @@ public final class SNBTReader extends DefaultStringReader { lastWhitespace++; // 遇到空格先增加值, 代表值尾部空格数量. continue; } - lastWhitespace = 0; // 遇到正常字符时清空记录的尾部空格数. + if (lastWhitespace > 0) { + lastWhitespace = 0; // 遇到正常字符时清空记录的尾部空格数. + contentHasWhitespace = true; + } } int tokenLength = cursor - tokenStart - lastWhitespace; // 计算值长度需要再减去尾部空格. if (tokenLength == 0) throw new IllegalArgumentException("Empty value at position " + tokenStart); String fullContent = string.substring(tokenStart, tokenStart + tokenLength); + if (contentHasWhitespace) return fullContent; // 如果值的中间有空格, 一定是字符串, 可直接返回. // 布尔值检查 if ("1B".equals(fullContent) || (tokenLength == 4 && matchesAt(tokenStart, "true"))) return Boolean.TRUE;