From 9edf8784df3a81695f1c231175159e9f1b9be151 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Wed, 16 Jul 2025 02:54:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E4=BA=BA=E6=9C=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E4=B8=BATagDataParser=E6=B7=BB=E5=8A=A0=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vehicle/DroneEntity.java | 12 ++++++++++- .../superbwarfare/tools/TagDataParser.java | 21 +++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java index 1c26dbc5f..9ae1dbffb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/DroneEntity.java @@ -413,7 +413,17 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity { var rotation = attachmentData.rotation(); if (attachmentData.displayData() != null) { - this.entityData.set(DISPLAY_ENTITY_TAG, TagDataParser.parse(attachmentData.displayData())); + this.entityData.set(DISPLAY_ENTITY_TAG, TagDataParser.parse(attachmentData.displayData(), name -> { + var uuid = player.getUUID(); + return switch (name) { + case "@sbw:owner" -> NbtUtils.createUUID(uuid); + case "@sbw:owner_string_lower" -> + StringTag.valueOf(uuid.toString().replace("-", "").toLowerCase(Locale.ENGLISH)); + case "@sbw:owner_string_upper" -> + StringTag.valueOf(uuid.toString().replace("-", "").toUpperCase(Locale.ENGLISH)); + default -> StringTag.valueOf(name); + }; + })); } this.entityData.set(DISPLAY_DATA, List.of( diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/TagDataParser.java b/src/main/java/com/atsuishio/superbwarfare/tools/TagDataParser.java index 03bd52032..ba26079c4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/TagDataParser.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/TagDataParser.java @@ -1,5 +1,6 @@ package com.atsuishio.superbwarfare.tools; +import com.atsuishio.superbwarfare.Mod; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.minecraft.nbt.*; @@ -28,9 +29,13 @@ public class TagDataParser { if (object == null) return tag; for (var d : object.entrySet()) { - var parsed = parse(d.getValue(), tagModifier); - if (parsed == null) continue; - tag.put(d.getKey(), parsed); + try { + var parsed = parse(d.getValue(), tagModifier); + if (parsed == null) continue; + tag.put(d.getKey(), parsed); + } catch (Exception e) { + Mod.LOGGER.error("Failed to parse tag {}: {}", d.getKey(), e); + } } return tag; @@ -48,9 +53,13 @@ public class TagDataParser { // 递归处理嵌套内容 var tag = new CompoundTag(); for (var d : object.getAsJsonObject().entrySet()) { - var parsed = parse(d.getValue(), tagModifier); - if (parsed == null) continue; - tag.put(d.getKey(), parsed); + try { + var parsed = parse(d.getValue(), tagModifier); + if (parsed == null) continue; + tag.put(d.getKey(), parsed); + } catch (Exception e) { + Mod.LOGGER.error("Failed to parse tag {}: {}", d.getKey(), e); + } } return tag; } else if (object.isJsonArray()) {