From be5f9ff2c8d7da63f32204f6525d59ef9efb4bdf Mon Sep 17 00:00:00 2001 From: Catnies Date: Mon, 23 Jun 2025 23:49:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=85=B7=E6=9C=89=E6=97=A0?= =?UTF-8?q?=E6=95=88=E5=90=8E=E7=BC=80=E6=97=B6=E6=8A=9B=E5=87=BA=E5=BC=82?= =?UTF-8?q?=E5=B8=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/core/util/SNBTDeserializer.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/SNBTDeserializer.java b/core/src/main/java/net/momirealms/craftengine/core/util/SNBTDeserializer.java index 7eaa5b89d..f98593616 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/SNBTDeserializer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/SNBTDeserializer.java @@ -152,7 +152,7 @@ public class SNBTDeserializer { } } // 没有扫描到结束引号 - throw new IllegalArgumentException("Unterminated string"); + throw new IllegalArgumentException("Unterminated string at " + start); } // 解析Key值 @@ -205,15 +205,14 @@ public class SNBTDeserializer { try { char lastChar = sourceContent[tokenStart + tokenLength - 1]; if (tokenLength > 1 && isTypeSuffix(lastChar)) { - String valueContent = new String(sourceContent, tokenStart, tokenLength - 1); return switch (lastChar) { case BYTE_SUFFIX -> parseByte(tokenStart, tokenLength - 1); case SHORT_SUFFIX -> parseShort(tokenStart, tokenLength - 1); case LONG_SUFFIX -> parseLong(tokenStart, tokenLength - 1); - case FLOAT_SUFFIX -> Float.parseFloat(valueContent); - case DOUBLE_SUFFIX -> Double.parseDouble(valueContent); - case BOOLEAN_SUFFIX -> parseBoolean(valueContent); - default -> Double.parseDouble(valueContent); + case FLOAT_SUFFIX -> Float.parseFloat(new String(sourceContent, tokenStart, tokenLength - 1)); + case DOUBLE_SUFFIX -> Double.parseDouble(new String(sourceContent, tokenStart, tokenLength - 1)); + case BOOLEAN_SUFFIX -> parseBoolean(new String(sourceContent, tokenStart, tokenLength - 1)); + default -> throw new IllegalArgumentException("Invalid suffixed value " + new String(sourceContent, tokenStart, tokenLength - 1)); }; } // 没有后缀就默认为 double 喵 @@ -321,12 +320,11 @@ public class SNBTDeserializer { } - // 跳过空格 - 优化24:手动展开循环,处理常见情况 + // 跳过空格 private void skipWhitespace() { while (position < length) { char c = sourceContent[position]; if (c > ' ') { break; } // 大于空格的字符都不是空白字符 - if (c == ' ' || c == '\t' || c == '\n' || c == '\r') { position++; } else {