修复无人机数据处理问题,为TagDataParser添加错误处理

This commit is contained in:
Light_Quanta 2025-07-16 02:54:06 +08:00
parent c39cb62469
commit 9edf8784df
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
2 changed files with 26 additions and 7 deletions

View file

@ -413,7 +413,17 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
var rotation = attachmentData.rotation(); var rotation = attachmentData.rotation();
if (attachmentData.displayData() != null) { 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( this.entityData.set(DISPLAY_DATA, List.of(

View file

@ -1,5 +1,6 @@
package com.atsuishio.superbwarfare.tools; package com.atsuishio.superbwarfare.tools;
import com.atsuishio.superbwarfare.Mod;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import net.minecraft.nbt.*; import net.minecraft.nbt.*;
@ -28,9 +29,13 @@ public class TagDataParser {
if (object == null) return tag; if (object == null) return tag;
for (var d : object.entrySet()) { for (var d : object.entrySet()) {
var parsed = parse(d.getValue(), tagModifier); try {
if (parsed == null) continue; var parsed = parse(d.getValue(), tagModifier);
tag.put(d.getKey(), parsed); if (parsed == null) continue;
tag.put(d.getKey(), parsed);
} catch (Exception e) {
Mod.LOGGER.error("Failed to parse tag {}: {}", d.getKey(), e);
}
} }
return tag; return tag;
@ -48,9 +53,13 @@ public class TagDataParser {
// 递归处理嵌套内容 // 递归处理嵌套内容
var tag = new CompoundTag(); var tag = new CompoundTag();
for (var d : object.getAsJsonObject().entrySet()) { for (var d : object.getAsJsonObject().entrySet()) {
var parsed = parse(d.getValue(), tagModifier); try {
if (parsed == null) continue; var parsed = parse(d.getValue(), tagModifier);
tag.put(d.getKey(), parsed); if (parsed == null) continue;
tag.put(d.getKey(), parsed);
} catch (Exception e) {
Mod.LOGGER.error("Failed to parse tag {}: {}", d.getKey(), e);
}
} }
return tag; return tag;
} else if (object.isJsonArray()) { } else if (object.isJsonArray()) {