From 5cbab2581cc13b06f30aff9fd609c8cbc795e89f Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 17 Feb 2025 14:38:42 -0500 Subject: [PATCH] Linked Item Saving & Writing --- .../request/linked/LinkedGetPacket.java | 2 +- .../request/linked/LinkedItemSavePacket.java | 2 +- .../client/gui/global/GuiNPCManageLinked.java | 4 +- .../client/gui/item/SubGuiLinkedItem.java | 2 +- .../controllers/LinkedItemController.java | 4 +- .../npcs/controllers/data/LinkedItem.java | 38 +++++++++++++------ .../npcs/scripted/item/ScriptLinkedItem.java | 4 +- 7 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedGetPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedGetPacket.java index 90636bd9a..c47b2eebc 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedGetPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedGetPacket.java @@ -73,7 +73,7 @@ public final class LinkedGetPacket extends AbstractPacket { } else if (action == Action.ITEM) { int id = in.readInt(); LinkedItem data = LinkedItemController.getInstance().get(id); - NBTTagCompound compound = data.writeToNBT(); + NBTTagCompound compound = data.writeToNBT(false); GuiDataPacket.sendGuiData((EntityPlayerMP) player, compound); } } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedItemSavePacket.java b/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedItemSavePacket.java index 287a8b6f1..b4b866a9c 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedItemSavePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/linked/LinkedItemSavePacket.java @@ -64,7 +64,7 @@ public final class LinkedItemSavePacket extends AbstractPacket { String prevName = ByteBufUtils.readString(in); LinkedItem linkedItem = new LinkedItem(); - linkedItem.readFromNBT(ByteBufUtils.readNBT(in), false); + linkedItem.readFromNBT(ByteBufUtils.readNBT(in)); linkedItem.version++; LinkedItemController.getInstance().saveLinkedItem(linkedItem); diff --git a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java index d680fafb3..a6746ac56 100644 --- a/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java +++ b/src/main/java/noppes/npcs/client/gui/global/GuiNPCManageLinked.java @@ -205,7 +205,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, while (data.containsKey(name)) name += "_"; LinkedItem linkedItem = new LinkedItem(name); - PacketClient.sendClient(new LinkedItemSavePacket(linkedItem.writeToNBT(), "")); + PacketClient.sendClient(new LinkedItemSavePacket(linkedItem.writeToNBT(false), "")); } } if(button.id == 2){ @@ -383,7 +383,7 @@ public class GuiNPCManageLinked extends GuiNPCInterface2 implements IScrollData, loadedNPC = true; } else { this.linkedItem = new LinkedItem(); - this.linkedItem.readFromNBT(compound, false); + this.linkedItem.readFromNBT(compound); } initGui(); } diff --git a/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java b/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java index 0cf6e94c0..f45b8557e 100644 --- a/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java +++ b/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java @@ -251,7 +251,7 @@ public class SubGuiLinkedItem extends SubGuiInterface implements ITextfieldListe @Override public void close() { super.close(); - PacketClient.sendClient(new LinkedItemSavePacket(linkedItem.writeToNBT(), originalName)); + PacketClient.sendClient(new LinkedItemSavePacket(linkedItem.writeToNBT(false), originalName)); } public enum LinkedItemType { diff --git a/src/main/java/noppes/npcs/controllers/LinkedItemController.java b/src/main/java/noppes/npcs/controllers/LinkedItemController.java index af29b6d2f..e8d3f3147 100644 --- a/src/main/java/noppes/npcs/controllers/LinkedItemController.java +++ b/src/main/java/noppes/npcs/controllers/LinkedItemController.java @@ -100,7 +100,7 @@ public class LinkedItemController { continue; try { LinkedItem linkedItem = new LinkedItem(); - linkedItem.readFromNBT(NBTJsonUtil.LoadFile(file), false); + linkedItem.readFromNBT(NBTJsonUtil.LoadFile(file)); linkedItem.name = file.getName().substring(0, file.getName().length() - 5); if(linkedItem.id == -1){ @@ -181,7 +181,7 @@ public class LinkedItemController { File file2 = new File(dir, linkedItem.getName() + ".json"); try { - NBTJsonUtil.SaveFile(file, ((LinkedItem)linkedItem).writeToNBT()); + NBTJsonUtil.SaveFile(file, ((LinkedItem)linkedItem).writeToNBT(true)); if(file2.exists()) file2.delete(); file.renameTo(file2); diff --git a/src/main/java/noppes/npcs/controllers/data/LinkedItem.java b/src/main/java/noppes/npcs/controllers/data/LinkedItem.java index 240c1d8b6..2f9fe1221 100644 --- a/src/main/java/noppes/npcs/controllers/data/LinkedItem.java +++ b/src/main/java/noppes/npcs/controllers/data/LinkedItem.java @@ -1,7 +1,9 @@ package noppes.npcs.controllers.data; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants; import noppes.npcs.api.handler.data.ILinkedItem; +import noppes.npcs.controllers.CustomEffectController; import noppes.npcs.controllers.LinkedItemController; public class LinkedItem implements ILinkedItem { @@ -33,11 +35,11 @@ public class LinkedItem implements ILinkedItem { this.name = name; } - public INpcScriptHandler getScriptHandler() { - return LinkedItemController.getInstance().getScriptHandler(this.getId()); + public LinkedItemScript getScriptHandler() { + return (LinkedItemScript) LinkedItemController.getInstance().getScriptHandler(this.getId()); } - public NBTTagCompound writeToNBT() { + public NBTTagCompound writeToNBT(boolean saveScripts) { NBTTagCompound compound = new NBTTagCompound(); compound.setInteger("Id", this.id); compound.setInteger("Version", this.version); @@ -56,15 +58,19 @@ public class LinkedItem implements ILinkedItem { compound.setInteger("MaxItemUseDuration", this.maxItemUseDuration); compound.setInteger("ItemUseAction", this.itemUseAction); + + if (saveScripts) { + NBTTagCompound scriptData = new NBTTagCompound(); + LinkedItemScript handler = getScriptHandler(); + if (handler != null) + handler.writeToNBT(scriptData); + compound.setTag("ScriptData", scriptData); + } return compound; } - public void readFromNBT(NBTTagCompound compound, boolean checkID) { - if(checkID) - this.id = compound.hasKey("Id") ? compound.getInteger("Id") : LinkedItemController.getInstance().getUnusedId(); - else - this.id = compound.getInteger("Id"); - + public void readFromNBT(NBTTagCompound compound) { + this.id = compound.hasKey("Id") ? compound.getInteger("Id") : LinkedItemController.getInstance().getUnusedId(); this.name = compound.getString("Name"); this.version = compound.getInteger("Version"); @@ -81,12 +87,22 @@ public class LinkedItem implements ILinkedItem { this.maxItemUseDuration = compound.getInteger("MaxItemUseDuration"); this.itemUseAction = compound.getInteger("ItemUseAction"); + + if (compound.hasKey("ScriptData", Constants.NBT.TAG_COMPOUND)) { + LinkedItemScript handler = new LinkedItemScript(); + handler.readFromNBT(compound.getCompoundTag("ScriptData")); + setScriptHandler(handler); + } } public ILinkedItem save() { return LinkedItemController.getInstance().saveLinkedItem(this); } + public void setScriptHandler(LinkedItemScript handler) { + LinkedItemController.getInstance().linkedItemsScripts.put(this.id, handler); + } + @Override public int getId() { return id; @@ -208,9 +224,9 @@ public class LinkedItem implements ILinkedItem { } public LinkedItem clone() { - NBTTagCompound nbt = this.writeToNBT(); + NBTTagCompound nbt = this.writeToNBT(true); LinkedItem clone = new LinkedItem(this.name); - clone.readFromNBT(nbt, false); + clone.readFromNBT(nbt); return clone; } diff --git a/src/main/java/noppes/npcs/scripted/item/ScriptLinkedItem.java b/src/main/java/noppes/npcs/scripted/item/ScriptLinkedItem.java index 547a488f5..4dcaab574 100644 --- a/src/main/java/noppes/npcs/scripted/item/ScriptLinkedItem.java +++ b/src/main/java/noppes/npcs/scripted/item/ScriptLinkedItem.java @@ -197,14 +197,14 @@ public class ScriptLinkedItem extends ScriptCustomizableItem implements IItemLin public NBTTagCompound getItemNBT(NBTTagCompound compound) { this.itemDisplay.writeToNBT(compound); - compound.setTag(LinkedItem.LINKED_DATA_NBT_TAG, this.linkedItem.writeToNBT()); + compound.setTag(LinkedItem.LINKED_DATA_NBT_TAG, this.linkedItem.writeToNBT(false)); compound.setInteger(LinkedItem.LINKED_VERSION_VERSION_TAG, this.linkedVersion); return compound; } public void setItemNBT(NBTTagCompound compound) { this.itemDisplay.readFromNBT(compound); - this.linkedItem.readFromNBT(compound.getCompoundTag(LinkedItem.LINKED_DATA_NBT_TAG), false); + this.linkedItem.readFromNBT(compound.getCompoundTag(LinkedItem.LINKED_DATA_NBT_TAG)); this.linkedVersion = compound.getInteger(LinkedItem.LINKED_VERSION_VERSION_TAG); } }