From 8ca2cc58f0565d750a6957c669afbdf8d849a681 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 8 May 2023 23:47:16 -0400 Subject: [PATCH] cleanTagList() add Clones and Merge Temporary Tags while saving --- .../controllers/ServerCloneController.java | 42 +++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/ServerCloneController.java b/src/main/java/noppes/npcs/controllers/ServerCloneController.java index 7413bffa3..d9b754e62 100644 --- a/src/main/java/noppes/npcs/controllers/ServerCloneController.java +++ b/src/main/java/noppes/npcs/controllers/ServerCloneController.java @@ -6,6 +6,7 @@ import net.minecraft.entity.EntityList; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; import net.minecraft.util.ChatComponentText; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; @@ -18,7 +19,6 @@ import noppes.npcs.controllers.data.TagMap; import noppes.npcs.scripted.CustomNPCsException; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.util.NBTJsonUtil; -import org.lwjgl.Sys; import java.io.File; import java.io.FileInputStream; @@ -122,13 +122,12 @@ public class ServerCloneController implements ICloneHandler { File file = new File(dir, filename + "_new"); File file2 = new File(dir, filename); - NBTJsonUtil.SaveFile(file, compound); + addToTagMap(compound, name, tab); if(file2.exists()){ file2.delete(); } file.renameTo(file2); - addToTagMap(compound, name, tab); } catch (Exception e) { LogWriter.except(e); } @@ -181,6 +180,43 @@ public class ServerCloneController implements ICloneHandler { return name; } + public String addClone(NBTTagCompound nbttagcompound, String name, int tab, NBTTagCompound tempTags) { + cleanTagList(nbttagcompound, tempTags); + cleanTags(nbttagcompound); + saveClone(tab, name, nbttagcompound); + return name; + } + + public NBTTagCompound cleanTagList(NBTTagCompound nbttagcompound, NBTTagCompound tempTags){ + HashSet tagUUIDs = new HashSet(); + if(nbttagcompound.hasKey("TagUUIDs")){ + NBTTagList nbtTagList = nbttagcompound.getTagList("TagUUIDs",8); + for (int i = 0; i < nbtTagList.tagCount(); i++) { + tagUUIDs.add(UUID.fromString(nbtTagList.getStringTagAt(i))); + } + + nbttagcompound.removeTag("TagUUIDs"); + } + if(tempTags.hasKey("TempTagUUIDs")){ + NBTTagList nbtTagList = tempTags.getTagList("TempTagUUIDs",8); + for (int i = 0; i < nbtTagList.tagCount(); i++) { + tagUUIDs.add(UUID.fromString(nbtTagList.getStringTagAt(i))); + } + + tempTags.removeTag("TempTagUUIDs"); + } + + if(tagUUIDs.size() > 0){ + NBTTagList nbtTagList = new NBTTagList(); + for (UUID uuid : tagUUIDs) { + nbtTagList.appendTag(new NBTTagString(uuid.toString())); + } + nbttagcompound.setTag("TagUUIDs", nbtTagList); + } + + return nbttagcompound; + } + public boolean addToTagMap(NBTTagCompound nbttagcompound, String name, int tab){ HashSet tagUUIDs = new HashSet(); if(nbttagcompound.hasKey("TagUUIDs")){