From 8c3b46d4f410083f6492ca1840e869a2835206bf Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 13 Mar 2024 03:33:46 -0400 Subject: [PATCH] Smaller Sync Packets for Quest / Dialog / Faction Data --- .../gui/global/GuiNPCManageDialogs.java | 5 - .../client/gui/global/GuiNPCManageQuest.java | 7 +- .../java/noppes/npcs/config/ConfigMain.java | 24 ++ .../java/noppes/npcs/constants/SyncType.java | 4 +- .../npcs/controllers/DialogController.java | 2 +- .../npcs/controllers/QuestController.java | 4 +- .../npcs/controllers/RecipeController.java | 4 - .../npcs/controllers/SyncController.java | 288 +++++++++++++----- .../npcs/controllers/data/DialogCategory.java | 11 + .../npcs/controllers/data/QuestCategory.java | 12 +- 10 files changed, 267 insertions(+), 94 deletions(-) diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageDialogs.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageDialogs.java index 8eb6abc88..7bf3ed03a 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageDialogs.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageDialogs.java @@ -157,7 +157,6 @@ public class GuiNPCManageDialogs extends GuiNPCInterface2 implements IScrollGrou int id = guibutton.id; // Edit Cat if(id == 6){ - saveType(false); if(category != null && category.id > -1){ setSubGui(new SubGuiEditText(category.title)); } @@ -167,7 +166,6 @@ public class GuiNPCManageDialogs extends GuiNPCInterface2 implements IScrollGrou } // Add Cat if(id == 4){ - saveType(false); String name = "New"; while(catData.containsKey(name)) name += "_"; @@ -181,7 +179,6 @@ public class GuiNPCManageDialogs extends GuiNPCInterface2 implements IScrollGrou } // Remove Cat if(id == 5){ - saveType(false); if(catData.containsKey(catScroll.getSelected())) { Client.sendData(EnumPacketServer.DialogCategoryRemove, category.id); clearCategory(); @@ -323,12 +320,10 @@ public class GuiNPCManageDialogs extends GuiNPCInterface2 implements IScrollGrou public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { if(guiCustomScroll.id == 0) { - saveType(false); getCategory(false); } if(guiCustomScroll.id == 1) { - saveType(false); getDialog(false); } } diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageQuest.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageQuest.java index 17b081ba4..11c292d66 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageQuest.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageQuest.java @@ -161,7 +161,6 @@ public class GuiNPCManageQuest extends GuiNPCInterface2 implements IScrollGroup, int id = guibutton.id; // Edit Cat if(id == 6){ - saveType(false); if(category != null && category.id > -1){ setSubGui(new SubGuiEditText(category.title)); } @@ -171,7 +170,6 @@ public class GuiNPCManageQuest extends GuiNPCInterface2 implements IScrollGroup, } // Add Cat if(id == 4){ - saveType(false); String name = "New"; while(catData.containsKey(name)) name += "_"; @@ -185,7 +183,6 @@ public class GuiNPCManageQuest extends GuiNPCInterface2 implements IScrollGroup, } // Remove Cat if(id == 5){ - saveType(false); if(catData.containsKey(catScroll.getSelected())) { Client.sendData(EnumPacketServer.QuestCategoryRemove, category.id); clearCategory(); @@ -302,7 +299,7 @@ public class GuiNPCManageQuest extends GuiNPCInterface2 implements IScrollGroup, catData.put(category.title, category.id); catScroll.replace(old,category.title); } - saveType(false); + saveType(false); } } } @@ -327,12 +324,10 @@ public class GuiNPCManageQuest extends GuiNPCInterface2 implements IScrollGroup, public void customScrollClicked(int i, int j, int k, GuiCustomScroll guiCustomScroll) { if(guiCustomScroll.id == 0) { - saveType(false); getCategory(false); } if(guiCustomScroll.id == 1) { - saveType(false); getQuest(false); } } diff --git a/src/main/java/noppes/npcs/config/ConfigMain.java b/src/main/java/noppes/npcs/config/ConfigMain.java index dd5f6e407..50a3ec37e 100644 --- a/src/main/java/noppes/npcs/config/ConfigMain.java +++ b/src/main/java/noppes/npcs/config/ConfigMain.java @@ -16,6 +16,7 @@ public class ConfigMain public final static String GENERAL = "General"; public final static String NPC = "NPC"; public final static String UPDATE = "Update"; + public final static String SYNC = "SYNC"; /** * General Main Properties @@ -110,6 +111,19 @@ public class ConfigMain public static Property TrackedQuestUpdateFrequencyProperty; public static int TrackedQuestUpdateFrequency = 5; + /** + * Sync Properties + **/ + + public static Property SyncQuestAutoProperty; + public static boolean SyncQuestAuto = true; + + public static Property SyncDialogAutoProperty; + public static boolean SyncDialogAuto = true; + + public static Property SyncFactionAutoProperty; + public static boolean SyncFactionAuto = true; + public static void init(File configFile) { config = new Configuration(configFile); @@ -202,6 +216,16 @@ public class ConfigMain TrackedQuestUpdateFrequencyProperty = config.get(UPDATE, "Tracked Quest Update Frequency", 5, "How often in seconds to update a players tracked quest. [Only applies to Item Quest currently]"); TrackedQuestUpdateFrequency = TrackedQuestUpdateFrequencyProperty.getInt(5); + // Sync + SyncQuestAutoProperty = config.get(SYNC, "Auto Sync Quest Data", true, "If enabled client will all Quest Data upon joining the world"); + SyncQuestAuto = SyncQuestAutoProperty.getBoolean(true); + + SyncDialogAutoProperty = config.get(SYNC, "Auto Sync Dialog Data", true, "If enabled client will all Dialog Data upon joining the world"); + SyncDialogAuto = SyncDialogAutoProperty.getBoolean(true); + + SyncFactionAutoProperty = config.get(SYNC, "Auto Sync Faction Data", true, "If enabled client will all Faction Data upon joining the world"); + SyncFactionAuto = SyncFactionAutoProperty.getBoolean(true); + // Convert to Legacy if(CustomNpcs.legacyExist){ EnableUpdateChecker = LegacyConfig.EnableUpdateChecker; diff --git a/src/main/java/noppes/npcs/constants/SyncType.java b/src/main/java/noppes/npcs/constants/SyncType.java index 031f73bc5..9cbdc289d 100644 --- a/src/main/java/noppes/npcs/constants/SyncType.java +++ b/src/main/java/noppes/npcs/constants/SyncType.java @@ -6,7 +6,5 @@ public class SyncType { public static final int QUEST_CATEGORY = 3; public static final int DIALOG = 4; public static final int DIALOG_CATEGORY = 5; - public static final int RECIPE_NORMAL = 6; - public static final int RECIPE_CARPENTRY = 7; - public static final int PLAYER_DATA = 8; + public static final int PLAYER_DATA = 6; } diff --git a/src/main/java/noppes/npcs/controllers/DialogController.java b/src/main/java/noppes/npcs/controllers/DialogController.java index e63bc8188..b25f88c91 100644 --- a/src/main/java/noppes/npcs/controllers/DialogController.java +++ b/src/main/java/noppes/npcs/controllers/DialogController.java @@ -230,7 +230,7 @@ public class DialogController implements IDialogHandler { dir.mkdirs(); } categories.put(category.id, category); - Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.DIALOG_CATEGORY, category.writeNBT(new NBTTagCompound())); + SyncController.updateDialogCat(category); } public void removeCategory(int category){ diff --git a/src/main/java/noppes/npcs/controllers/QuestController.java b/src/main/java/noppes/npcs/controllers/QuestController.java index f7441b784..e8ec57f7d 100644 --- a/src/main/java/noppes/npcs/controllers/QuestController.java +++ b/src/main/java/noppes/npcs/controllers/QuestController.java @@ -177,8 +177,8 @@ public class QuestController implements IQuestHandler { dir.mkdirs(); } categories.put(category.id, category); - Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.QUEST_CATEGORY, category.writeNBT(new NBTTagCompound())); - } + SyncController.updateQuestCat(category); + } private boolean containsCategoryName(String name) { name = name.toLowerCase(); for(QuestCategory cat : categories.values()){ diff --git a/src/main/java/noppes/npcs/controllers/RecipeController.java b/src/main/java/noppes/npcs/controllers/RecipeController.java index 8fdec5df3..639c746ce 100644 --- a/src/main/java/noppes/npcs/controllers/RecipeController.java +++ b/src/main/java/noppes/npcs/controllers/RecipeController.java @@ -208,10 +208,6 @@ public class RecipeController implements IRecipeHandler { return null; globalRecipes.remove(recipe.id); anvilRecipes.remove(recipe.id); - if(recipe.isGlobal) - Server.sendToAll(EnumPacketClient.SYNC_REMOVE, SyncType.RECIPE_NORMAL, id); - else - Server.sendToAll(EnumPacketClient.SYNC_REMOVE, SyncType.RECIPE_CARPENTRY, id); saveCategories(); reloadGlobalRecipes(globalRecipes); return recipe; diff --git a/src/main/java/noppes/npcs/controllers/SyncController.java b/src/main/java/noppes/npcs/controllers/SyncController.java index 2265a6971..ad702bc80 100644 --- a/src/main/java/noppes/npcs/controllers/SyncController.java +++ b/src/main/java/noppes/npcs/controllers/SyncController.java @@ -4,14 +4,11 @@ import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.server.MinecraftServer; -import noppes.npcs.CustomNpcs; -import noppes.npcs.NBTTags; import noppes.npcs.Server; +import noppes.npcs.config.ConfigMain; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.SyncType; import noppes.npcs.controllers.data.*; -import noppes.npcs.items.ItemScripted; import java.util.HashMap; @@ -21,58 +18,77 @@ public class SyncController { NBTTagList list = new NBTTagList(); NBTTagCompound compound = new NBTTagCompound(); - for(Faction faction : FactionController.getInstance().factions.values()){ - NBTTagCompound factioNBT = new NBTTagCompound(); - faction.writeNBT(factioNBT); - list.appendTag(factioNBT); - if(list.tagCount() > 20){ - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.FACTION, compound); - list = new NBTTagList(); - } - } - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.FACTION, compound); + //////////////////////////////////////////////////////////////////////////////// + // Faction Sync + if(ConfigMain.SyncFactionAuto){ + for(Faction faction : FactionController.getInstance().factions.values()){ + NBTTagCompound factioNBT = new NBTTagCompound(); + faction.writeNBT(factioNBT); + list.appendTag(factioNBT); + if(list.tagCount() > 20){ + compound = new NBTTagCompound(); + compound.setTag("Data", list); + Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.FACTION, compound); + list = new NBTTagList(); + } + } + compound = new NBTTagCompound(); + compound.setTag("Data", list); + Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.FACTION, compound); + } + //////////////////////////////////////////////////////////////////////////////// - for(QuestCategory category : QuestController.Instance.categories.values()){ - Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, category.writeNBT(new NBTTagCompound())); - } - Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.QUEST_CATEGORY, new NBTTagCompound()); + //////////////////////////////////////////////////////////////////////////////// + // Quest Sync + if(ConfigMain.SyncQuestAuto){ + for(QuestCategory category : QuestController.Instance.categories.values()){ + NBTTagCompound questCompound; + NBTTagList questList = new NBTTagList(); + for(int questID : category.quests.keySet()){ + Quest quest = category.quests.get(questID); + questList.appendTag(quest.writeToNBT(new NBTTagCompound())); + if(questList.tagCount() > 50){ + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, questCompound); + questList = new NBTTagList(); + } + } + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, questCompound); + } + Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.QUEST_CATEGORY, new NBTTagCompound()); + } + //////////////////////////////////////////////////////////////////////////////// - for(DialogCategory category : DialogController.Instance.categories.values()){ - Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, category.writeNBT(new NBTTagCompound())); - } - Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.DIALOG_CATEGORY, new NBTTagCompound()); - - list = new NBTTagList(); - for(RecipeCarpentry category : RecipeController.Instance.globalRecipes.values()){ - list.appendTag(category.writeNBT()); - if(list.tagCount() > 10){ - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.RECIPE_NORMAL, compound); - list = new NBTTagList(); - } - } - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.RECIPE_NORMAL, compound); - - list = new NBTTagList(); - for(RecipeCarpentry category : RecipeController.Instance.anvilRecipes.values()){ - list.appendTag(category.writeNBT()); - if(list.tagCount() > 10){ - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.RECIPE_CARPENTRY, compound); - list = new NBTTagList(); - } - } - compound = new NBTTagCompound(); - compound.setTag("Data", list); - Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.RECIPE_CARPENTRY, compound); + //////////////////////////////////////////////////////////////////////////////// + // Dialog Sync + if(ConfigMain.SyncDialogAuto){ + for(DialogCategory category : DialogController.Instance.categories.values()){ + NBTTagCompound dialogCompound; + NBTTagList dialogList = new NBTTagList(); + for(int dialogID : category.dialogs.keySet()){ + Dialog dialog = category.dialogs.get(dialogID); + dialogList.appendTag(dialog.writeToNBT(new NBTTagCompound())); + if(dialogList.tagCount() > 50){ + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, dialogCompound); + dialogList = new NBTTagList(); + } + } + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendData(player, EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, dialogCompound); + } + Server.sendData(player, EnumPacketClient.SYNC_END, SyncType.DIALOG_CATEGORY, new NBTTagCompound()); + } + //////////////////////////////////////////////////////////////////////////////// PlayerData data = PlayerData.get(player); if(data != null) @@ -80,19 +96,99 @@ public class SyncController { } public static void syncAllDialogs() { - for(DialogCategory category : DialogController.Instance.categories.values()){ - Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, category.writeNBT(new NBTTagCompound())); - } - Server.sendToAll(EnumPacketClient.SYNC_END, SyncType.DIALOG_CATEGORY, new NBTTagCompound()); + if(ConfigMain.SyncDialogAuto){ + for(DialogCategory category : DialogController.Instance.categories.values()){ + NBTTagCompound dialogCompound; + NBTTagList dialogList = new NBTTagList(); + for(int dialogID : category.dialogs.keySet()){ + Dialog dialog = category.dialogs.get(dialogID); + dialogList.appendTag(dialog.writeToNBT(new NBTTagCompound())); + if(dialogList.tagCount() > 50){ + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, dialogCompound); + dialogList = new NBTTagList(); + } + } + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.DIALOG_CATEGORY, dialogCompound); + } + Server.sendToAll(EnumPacketClient.SYNC_END, SyncType.DIALOG_CATEGORY, new NBTTagCompound()); + } } public static void syncAllQuests() { - for(QuestCategory category : QuestController.Instance.categories.values()){ - Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, category.writeNBT(new NBTTagCompound())); - } - Server.sendToAll(EnumPacketClient.SYNC_END, SyncType.QUEST_CATEGORY, new NBTTagCompound()); + if(ConfigMain.SyncQuestAuto){ + for(QuestCategory category : QuestController.Instance.categories.values()){ + NBTTagCompound questCompound; + NBTTagList questList = new NBTTagList(); + for(int questID : category.quests.keySet()){ + Quest quest = category.quests.get(questID); + questList.appendTag(quest.writeToNBT(new NBTTagCompound())); + if(questList.tagCount() > 50){ + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, questCompound); + questList = new NBTTagList(); + } + } + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", category.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_ADD, SyncType.QUEST_CATEGORY, questCompound); + } + Server.sendToAll(EnumPacketClient.SYNC_END, SyncType.QUEST_CATEGORY, new NBTTagCompound()); + } } + public static void updateQuestCat(QuestCategory questCategory) { + if(ConfigMain.SyncQuestAuto){ + NBTTagCompound questCompound; + NBTTagList questList = new NBTTagList(); + for(int questID : questCategory.quests.keySet()){ + Quest quest = questCategory.quests.get(questID); + questList.appendTag(quest.writeToNBT(new NBTTagCompound())); + if(questList.tagCount() > 50){ + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", questCategory.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.QUEST_CATEGORY, questCompound); + questList = new NBTTagList(); + } + } + questCompound = new NBTTagCompound(); + questCompound.setTag("Data", questList); + questCompound.setTag("CatNBT", questCategory.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.QUEST_CATEGORY, questCompound); + } + } + + public static void updateDialogCat(DialogCategory dialogCategory) { + if(ConfigMain.SyncDialogAuto){ + NBTTagCompound dialogCompound; + NBTTagList dialogList = new NBTTagList(); + for(int questID : dialogCategory.dialogs.keySet()){ + Dialog dialog = dialogCategory.dialogs.get(questID); + dialogList.appendTag(dialog.writeToNBT(new NBTTagCompound())); + if(dialogList.tagCount() > 50){ + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", dialogCategory.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.DIALOG_CATEGORY, dialogCompound); + dialogList = new NBTTagList(); + } + } + dialogCompound = new NBTTagCompound(); + dialogCompound.setTag("Data", dialogList); + dialogCompound.setTag("CatNBT", dialogCategory.writeSmallNBT(new NBTTagCompound())); + Server.sendToAll(EnumPacketClient.SYNC_UPDATE, SyncType.DIALOG_CATEGORY, dialogCompound); + } + } + public static void clientSync(int synctype, NBTTagCompound compound, boolean syncEnd) { if(synctype == SyncType.FACTION){ NBTTagList list = compound.getTagList("Data", 10); @@ -109,9 +205,21 @@ public class SyncController { } else if(synctype == SyncType.QUEST_CATEGORY){ if(!compound.hasNoTags()){ - QuestCategory category = new QuestCategory(); - category.readNBT(compound); - QuestController.Instance.categoriesSync.put(category.id, category); + QuestCategory category = new QuestCategory(); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + NBTTagList list = compound.getTagList("Data", 10); + if(QuestController.Instance.categoriesSync.containsKey(category.id)){ + category = QuestController.Instance.categoriesSync.get(category.id); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + } + for(int i = 0; i < list.tagCount(); i++) + { + Quest quest = new Quest(); + quest.readNBT(list.getCompoundTagAt(i)); + quest.category = category; + category.quests.put(quest.id, quest); + } + QuestController.Instance.categoriesSync.put(category.id, category); } if(syncEnd){ HashMap quests = new HashMap(); @@ -127,9 +235,21 @@ public class SyncController { } else if(synctype == SyncType.DIALOG_CATEGORY){ if(!compound.hasNoTags()){ - DialogCategory category = new DialogCategory(); - category.readNBT(compound); - DialogController.Instance.categoriesSync.put(category.id, category); + DialogCategory category = new DialogCategory(); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + NBTTagList list = compound.getTagList("Data", 10); + if(DialogController.Instance.categoriesSync.containsKey(category.id)){ + category = DialogController.Instance.categoriesSync.get(category.id); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + } + for(int i = 0; i < list.tagCount(); i++) + { + Dialog dialog = new Dialog(); + dialog.readNBT(list.getCompoundTagAt(i)); + dialog.category = category; + category.dialogs.put(dialog.id, dialog); + } + DialogController.Instance.categoriesSync.put(category.id, category); } if(syncEnd){ HashMap dialogs = new HashMap(); @@ -160,9 +280,21 @@ public class SyncController { category.dialogs.put(dialog.id, dialog); } else if(synctype == SyncType.DIALOG_CATEGORY){ - DialogCategory category = new DialogCategory(); - category.readNBT(compound); - DialogController.Instance.categories.put(category.id, category); + DialogCategory category = new DialogCategory(); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + NBTTagList list = compound.getTagList("Data", 10); + if(DialogController.Instance.categoriesSync.containsKey(category.id)){ + category = DialogController.Instance.categoriesSync.get(category.id); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + } + for(int i = 0; i < list.tagCount(); i++) + { + Dialog dialog = new Dialog(); + dialog.readNBT(list.getCompoundTagAt(i)); + dialog.category = category; + category.dialogs.put(dialog.id, dialog); + } + DialogController.Instance.categoriesSync.put(category.id, category); } else if(synctype == SyncType.QUEST){ QuestCategory category = QuestController.Instance.categories.get(buffer.readInt()); @@ -174,7 +306,19 @@ public class SyncController { } else if(synctype == SyncType.QUEST_CATEGORY){ QuestCategory category = new QuestCategory(); - category.readNBT(compound); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + NBTTagList list = compound.getTagList("Data", 10); + if(QuestController.Instance.categoriesSync.containsKey(category.id)){ + category = QuestController.Instance.categoriesSync.get(category.id); + category.readSmallNBT(compound.getCompoundTag("CatNBT")); + } + for(int i = 0; i < list.tagCount(); i++) + { + Quest quest = new Quest(); + quest.readNBT(list.getCompoundTagAt(i)); + quest.category = category; + category.quests.put(quest.id, quest); + } QuestController.Instance.categories.put(category.id, category); } } diff --git a/src/main/java/noppes/npcs/controllers/data/DialogCategory.java b/src/main/java/noppes/npcs/controllers/data/DialogCategory.java index 27e02684e..7bac90e68 100644 --- a/src/main/java/noppes/npcs/controllers/data/DialogCategory.java +++ b/src/main/java/noppes/npcs/controllers/data/DialogCategory.java @@ -48,6 +48,17 @@ public class DialogCategory implements IDialogCategory { return dialogCat; } + public NBTTagCompound writeSmallNBT(NBTTagCompound dialogCat) { + dialogCat.setInteger("Slot", id); + dialogCat.setString("Title", title); + return dialogCat; + } + + public void readSmallNBT(NBTTagCompound compound){ + id = compound.getInteger("Slot"); + title = compound.getString("Title"); + } + public List dialogs() { return new ArrayList(this.dialogs.values()); } diff --git a/src/main/java/noppes/npcs/controllers/data/QuestCategory.java b/src/main/java/noppes/npcs/controllers/data/QuestCategory.java index a9086efb2..8cf178971 100644 --- a/src/main/java/noppes/npcs/controllers/data/QuestCategory.java +++ b/src/main/java/noppes/npcs/controllers/data/QuestCategory.java @@ -47,7 +47,17 @@ public class QuestCategory implements IQuestCategory { return nbttagcompound; } - + + public NBTTagCompound writeSmallNBT(NBTTagCompound nbttagcompound) { + nbttagcompound.setInteger("Slot", id); + nbttagcompound.setString("Title", title); + return nbttagcompound; + } + + public void readSmallNBT(NBTTagCompound nbttagcompound) { + id = nbttagcompound.getInteger("Slot"); + title = nbttagcompound.getString("Title"); + } public List quests() { return new ArrayList(this.quests.values());