From cc2e8805d8b0c3249bc42b9b9d982ef104ce26c4 Mon Sep 17 00:00:00 2001 From: KAMKEEL Date: Wed, 22 Mar 2023 19:43:36 -0400 Subject: [PATCH] Create Tag Map --- .../controllers/ClientCloneController.java | 23 +++ .../controllers/ServerCloneController.java | 144 ++++++++++-------- .../noppes/npcs/controllers/data/TagMap.java | 10 +- 3 files changed, 111 insertions(+), 66 deletions(-) diff --git a/src/main/java/noppes/npcs/client/controllers/ClientCloneController.java b/src/main/java/noppes/npcs/client/controllers/ClientCloneController.java index b0cf6523d..afbf07d03 100644 --- a/src/main/java/noppes/npcs/client/controllers/ClientCloneController.java +++ b/src/main/java/noppes/npcs/client/controllers/ClientCloneController.java @@ -1,9 +1,14 @@ package noppes.npcs.client.controllers; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import noppes.npcs.CustomNpcs; import noppes.npcs.controllers.ServerCloneController; +import noppes.npcs.controllers.data.TagMap; import java.io.File; +import java.util.HashSet; +import java.util.UUID; public class ClientCloneController extends ServerCloneController{ public static ClientCloneController Instance; @@ -15,4 +20,22 @@ public class ClientCloneController extends ServerCloneController{ dir.mkdir(); return dir; } + + @Override + public boolean addToTagMap(NBTTagCompound nbttagcompound, String name, int tab){ + 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))); + } + } + if(tagUUIDs.size() > 0){ + TagMap tagMap = ClientTagMapController.Instance.getTagMap(tab); + tagMap.putClone(name, tagUUIDs); + ClientTagMapController.Instance.saveTagMap(tagMap); + return true; + } + return false; + } } diff --git a/src/main/java/noppes/npcs/controllers/ServerCloneController.java b/src/main/java/noppes/npcs/controllers/ServerCloneController.java index e29d26ea1..bed456118 100644 --- a/src/main/java/noppes/npcs/controllers/ServerCloneController.java +++ b/src/main/java/noppes/npcs/controllers/ServerCloneController.java @@ -14,44 +14,42 @@ import noppes.npcs.api.IPos; import noppes.npcs.api.IWorld; import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.handler.ICloneHandler; +import noppes.npcs.controllers.data.TagMap; import noppes.npcs.scripted.CustomNPCsException; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.util.NBTJsonUtil; import java.io.File; import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class ServerCloneController implements ICloneHandler { public static ServerCloneController Instance; - + public ServerCloneController(){ loadClones(); } - + private void loadClones(){ try { File dir = new File(getDir(), ".."); - File file = new File(dir, "clonednpcs.dat"); - // System.out.println(file.getAbsolutePath()); - // System.out.println(file.exists()); - if(file.exists()){ - Map> clones = loadOldClones(file); - file.delete(); + File file = new File(dir, "clonednpcs.dat"); + // System.out.println(file.getAbsolutePath()); + // System.out.println(file.exists()); + if(file.exists()){ + Map> clones = loadOldClones(file); + file.delete(); file = new File(dir, "clonednpcs.dat_old"); if(file.exists()) file.delete(); - + for(int tab : clones.keySet()){ Map map = clones.get(tab); for(String name: map.keySet()){ saveClone(tab, name, map.get(name)); } } - } + } } catch (Exception e) { LogWriter.except(e); } @@ -63,40 +61,40 @@ public class ServerCloneController implements ICloneHandler { dir.mkdir(); return dir; } - + private Map> loadOldClones(File file) throws Exception{ Map> clones = new HashMap>(); - NBTTagCompound nbttagcompound1 = CompressedStreamTools.readCompressed(new FileInputStream(file)); - NBTTagList list = nbttagcompound1.getTagList("Data", 10); - if(list == null){ - return clones; - } - for(int i = 0; i < list.tagCount(); i++) - { - NBTTagCompound compound = list.getCompoundTagAt(i); - if(!compound.hasKey("ClonedTab")){ - compound.setInteger("ClonedTab", 1); - } - - Map tab = clones.get(compound.getInteger("ClonedTab")); - if(tab == null) - clones.put(compound.getInteger("ClonedTab"), tab = new HashMap()); - - String name = compound.getString("ClonedName"); - int number = 1; - while(tab.containsKey(name)){ - number++; - name = String.format("%s%s", compound.getString("ClonedName"), number); - } - compound.removeTag("ClonedName"); - compound.removeTag("ClonedTab"); - compound.removeTag("ClonedDate"); - cleanTags(compound); - tab.put(name, compound); - } + NBTTagCompound nbttagcompound1 = CompressedStreamTools.readCompressed(new FileInputStream(file)); + NBTTagList list = nbttagcompound1.getTagList("Data", 10); + if(list == null){ + return clones; + } + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound compound = list.getCompoundTagAt(i); + if(!compound.hasKey("ClonedTab")){ + compound.setInteger("ClonedTab", 1); + } + + Map tab = clones.get(compound.getInteger("ClonedTab")); + if(tab == null) + clones.put(compound.getInteger("ClonedTab"), tab = new HashMap()); + + String name = compound.getString("ClonedName"); + int number = 1; + while(tab.containsKey(name)){ + number++; + name = String.format("%s%s", compound.getString("ClonedName"), number); + } + compound.removeTag("ClonedName"); + compound.removeTag("ClonedTab"); + compound.removeTag("ClonedDate"); + cleanTags(compound); + tab.put(name, compound); + } return clones; } - + public NBTTagCompound getCloneData(ICommandSender player, String name, int tab) { File file = new File(new File(getDir(), tab + ""), name + ".json"); if(!file.exists()){ @@ -113,22 +111,23 @@ public class ServerCloneController implements ICloneHandler { } return null; } - + public void saveClone(int tab, String name, NBTTagCompound compound){ try { File dir = new File(getDir(), tab + ""); if(!dir.exists()) dir.mkdir(); String filename = name + ".json"; - - File file = new File(dir, filename + "_new"); - File file2 = new File(dir, filename); - - NBTJsonUtil.SaveFile(file, compound); - if(file2.exists()){ - file2.delete(); - } - file.renameTo(file2); + + File file = new File(dir, filename + "_new"); + File file2 = new File(dir, filename); + + NBTJsonUtil.SaveFile(file, compound); + if(file2.exists()){ + file2.delete(); + } + file.renameTo(file2); + addToTagMap(compound, name, tab); } catch (Exception e) { LogWriter.except(e); } @@ -144,27 +143,44 @@ public class ServerCloneController implements ICloneHandler { } return list; } - + public boolean removeClone(String name, int tab){ - File file = new File(new File(getDir(), tab + ""), name + ".json"); - if(!file.exists()) - return false; - file.delete(); - return true; + File file = new File(new File(getDir(), tab + ""), name + ".json"); + if(!file.exists()) + return false; + file.delete(); + return true; } - + public String addClone(NBTTagCompound nbttagcompound, String name, int tab) { cleanTags(nbttagcompound); saveClone(tab, name, nbttagcompound); return name; } - + + public boolean addToTagMap(NBTTagCompound nbttagcompound, String name, int tab){ + 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))); + } + } + if(tagUUIDs.size() > 0){ + TagMap tagMap = ServerTagMapController.Instance.getTagMap(tab); + tagMap.putClone(name, tagUUIDs); + ServerTagMapController.Instance.saveTagMap(tagMap); + return true; + } + return false; + } + public void cleanTags(NBTTagCompound nbttagcompound){ if(nbttagcompound.hasKey("ItemGiverId")) nbttagcompound.setInteger("ItemGiverId", 0); if(nbttagcompound.hasKey("TransporterId")) nbttagcompound.setInteger("TransporterId", -1); - + nbttagcompound.removeTag("StartPosNew"); nbttagcompound.removeTag("StartPos"); nbttagcompound.removeTag("MovingPathNew"); @@ -187,7 +203,7 @@ public class ServerCloneController implements ICloneHandler { adv.setInteger("ItemGiverId", 0); nbttagcompound.setTag("TransformJob", adv); } - + if(nbttagcompound.hasKey("TransformAI")){ NBTTagCompound adv = nbttagcompound.getCompoundTag("TransformAI"); adv.removeTag("StartPosNew"); diff --git a/src/main/java/noppes/npcs/controllers/data/TagMap.java b/src/main/java/noppes/npcs/controllers/data/TagMap.java index f38fe3b90..79ed50b78 100644 --- a/src/main/java/noppes/npcs/controllers/data/TagMap.java +++ b/src/main/java/noppes/npcs/controllers/data/TagMap.java @@ -2,8 +2,6 @@ package noppes.npcs.controllers.data; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import noppes.npcs.controllers.ServerCloneController; -import noppes.npcs.controllers.TagController; import java.util.*; @@ -79,6 +77,14 @@ public class TagMap { return null; } + public void removeClone(String cloneName) { + tagMap.remove(cloneName); + } + + public void putClone(String cloneName, HashSet uuids) { + tagMap.put(cloneName, uuids); + } + public boolean hasTag(String cloneName, UUID tag) { HashSet uuids = getUUIDs(cloneName); if(uuids == null){