From f84dd5477d72ce2e644947f36b1d687a0463efd9 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 17 Feb 2025 15:21:59 -0500 Subject: [PATCH] Linked Item Scripts + Effect Script Fix --- .../kamkeel/npcs/network/PacketHandler.java | 2 + .../npcs/network/enums/EnumRequestPacket.java | 2 +- .../script/item/LinkedItemScriptPacket.java | 104 +++++ .../client/gui/item/SubGuiLinkedItem.java | 7 + .../gui/script/GuiScriptLinkedItem.java | 411 ++++++++++++++++++ .../npcs/controllers/data/EffectScript.java | 8 - .../npcs/controllers/data/LinkedItem.java | 8 +- .../controllers/data/LinkedItemScript.java | 26 +- 8 files changed, 532 insertions(+), 36 deletions(-) create mode 100644 src/main/java/kamkeel/npcs/network/packets/request/script/item/LinkedItemScriptPacket.java create mode 100644 src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java diff --git a/src/main/java/kamkeel/npcs/network/PacketHandler.java b/src/main/java/kamkeel/npcs/network/PacketHandler.java index 0ae022094..67003b53b 100644 --- a/src/main/java/kamkeel/npcs/network/PacketHandler.java +++ b/src/main/java/kamkeel/npcs/network/PacketHandler.java @@ -67,6 +67,7 @@ import kamkeel.npcs.network.packets.request.role.RoleSavePacket; import kamkeel.npcs.network.packets.request.script.*; import kamkeel.npcs.network.packets.request.script.item.ItemScriptErrorPacket; import kamkeel.npcs.network.packets.request.script.item.ItemScriptPacket; +import kamkeel.npcs.network.packets.request.script.item.LinkedItemScriptPacket; import kamkeel.npcs.network.packets.request.tags.*; import kamkeel.npcs.network.packets.request.transform.TransformGetPacket; import kamkeel.npcs.network.packets.request.transform.TransformLoadPacket; @@ -128,6 +129,7 @@ public class PacketHandler { REQUEST_PACKET.registerPacket(new GlobalNPCScriptPacket()); REQUEST_PACKET.registerPacket(new ItemScriptPacket()); REQUEST_PACKET.registerPacket(new ItemScriptErrorPacket()); + REQUEST_PACKET.registerPacket(new LinkedItemScriptPacket()); REQUEST_PACKET.registerPacket(new NPCScriptPacket()); REQUEST_PACKET.registerPacket(new PlayerScriptPacket()); REQUEST_PACKET.registerPacket(new ScriptInfoPacket()); diff --git a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java index a971ace69..9709167e5 100644 --- a/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java +++ b/src/main/java/kamkeel/npcs/network/enums/EnumRequestPacket.java @@ -180,5 +180,5 @@ public enum EnumRequestPacket { EffectRemove, EffectSave, - ColorSet, LinkedItemSave, LinkedItemRemove, LinkedItemBuild, ColorBrush + ColorSet, LinkedItemSave, LinkedItemRemove, LinkedItemBuild, LinkedItemScript, ColorBrush } diff --git a/src/main/java/kamkeel/npcs/network/packets/request/script/item/LinkedItemScriptPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/script/item/LinkedItemScriptPacket.java new file mode 100644 index 000000000..b01f2adc5 --- /dev/null +++ b/src/main/java/kamkeel/npcs/network/packets/request/script/item/LinkedItemScriptPacket.java @@ -0,0 +1,104 @@ +package kamkeel.npcs.network.packets.request.script.item; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import kamkeel.npcs.network.*; +import kamkeel.npcs.network.enums.EnumRequestPacket; +import kamkeel.npcs.util.ByteBufUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.CustomNpcsPermissions; +import noppes.npcs.LogWriter; +import noppes.npcs.config.ConfigDebug; +import noppes.npcs.config.ConfigScript; +import noppes.npcs.controllers.LinkedItemController; +import noppes.npcs.controllers.data.*; + +import java.io.IOException; + +public final class LinkedItemScriptPacket extends AbstractPacket { + public static String packetName = "Request|LinkedItemScript"; + + private LinkedItemScriptPacket.Action type; + private int id; + private int page; + private int maxSize; + private NBTTagCompound compound; + + public LinkedItemScriptPacket() {} + + public LinkedItemScriptPacket(Action type, int id, int page, int maxSize, NBTTagCompound compound) { + this.type = type; + this.id = id; + this.page = page; + this.maxSize = maxSize; + this.compound = compound; + } + + @Override + public Enum getType() { + return EnumRequestPacket.LinkedItemScript; + } + + @Override + public PacketChannel getChannel() { + return PacketHandler.REQUEST_PACKET; + } + + @Override + public CustomNpcsPermissions.Permission getPermission(){ + return CustomNpcsPermissions.SCRIPT_PLAYER; + } + + @SideOnly(Side.CLIENT) + @Override + public void sendData(ByteBuf out) throws IOException { + out.writeInt(type.ordinal()); + out.writeInt(id); + + if(type == Action.SAVE){ + out.writeInt(this.page); + out.writeInt(this.maxSize); + ByteBufUtils.writeNBT(out, this.compound); + } + } + + @Override + public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { + if (!(player instanceof EntityPlayerMP)) + return; + + if (!ConfigScript.canScript(player, CustomNpcsPermissions.SCRIPT)) + return; + + Action requestedAction = Action.values()[in.readInt()]; + LinkedItem linkedItem = LinkedItemController.getInstance().get(in.readInt()); + if(linkedItem == null) + return; + + LinkedItemScript data = linkedItem.getOrCreateScriptHandler(); + if(requestedAction == Action.GET){ + PacketUtil.getScripts((IScriptHandler) data, (EntityPlayerMP) player); + } else { + data.saveScript(in); + if(ConfigDebug.PlayerLogging && FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER){ + LogWriter.script(String.format("[%s] (Player) %s SAVED EFFECT %s [%s]", "LINKED ITEM SCRIPTS", player.getCommandSenderName(), linkedItem.getName())); + } + } + } + + public static void Save(int effectID, int id, int maxSize, NBTTagCompound compound) { + PacketClient.sendClient(new LinkedItemScriptPacket(Action.SAVE, effectID, id, maxSize, compound)); + } + public static void Get(int effectID) { + PacketClient.sendClient(new LinkedItemScriptPacket(Action.GET, effectID, -1, -1, new NBTTagCompound())); + } + + private enum Action { + GET, + SAVE + } +} 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 f45b8557e..f1616fb86 100644 --- a/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java +++ b/src/main/java/noppes/npcs/client/gui/item/SubGuiLinkedItem.java @@ -4,6 +4,7 @@ import kamkeel.npcs.network.PacketClient; import kamkeel.npcs.network.packets.request.linked.LinkedItemSavePacket; import net.minecraft.client.gui.GuiButton; import noppes.npcs.client.gui.global.GuiNPCManageLinked; +import noppes.npcs.client.gui.script.GuiScriptLinkedItem; import noppes.npcs.client.gui.util.*; import noppes.npcs.controllers.data.LinkedItem; @@ -185,6 +186,12 @@ public class SubGuiLinkedItem extends SubGuiInterface implements ITextfieldListe if (id == -5) { close(); return; + } else if (id == -2) { + PacketClient.sendClient(new LinkedItemSavePacket(linkedItem.writeToNBT(false), originalName)); + GuiScriptLinkedItem scriptGUI = new GuiScriptLinkedItem(this.parent, linkedItem); + scriptGUI.setWorldAndResolution(mc, width, height); + scriptGUI.initGui(); + mc.currentScreen = scriptGUI; } else if (id == 9) { // OPEN COLOR PICKER } else if (id == 10) { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java new file mode 100644 index 000000000..d6849e60c --- /dev/null +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java @@ -0,0 +1,411 @@ +package noppes.npcs.client.gui.script; + +import kamkeel.npcs.network.packets.request.script.item.LinkedItemScriptPacket; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiConfirmOpenLink; +import net.minecraft.client.gui.GuiYesNo; +import net.minecraft.client.gui.GuiYesNoCallback; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.StatCollector; +import noppes.npcs.NBTTags; +import noppes.npcs.NoppesStringUtils; +import noppes.npcs.client.NoppesUtil; +import noppes.npcs.client.gui.global.GuiNPCManageLinked; +import noppes.npcs.client.gui.util.*; +import noppes.npcs.controllers.ScriptContainer; +import noppes.npcs.controllers.ScriptController; +import noppes.npcs.controllers.data.LinkedItem; +import noppes.npcs.controllers.data.LinkedItemScript; + +import java.util.*; + +public class GuiScriptLinkedItem extends GuiNPCInterface implements GuiYesNoCallback, IGuiData, ITextChangeListener, ICustomScrollListener, IJTextAreaListener, ITextfieldListener { + + private int activeTab = 0; + public Map> languages = new HashMap(); + private final int scriptLimit = 1; + public List hookList = new ArrayList(); + public String previousHookClicked = ""; + + public final GuiNPCManageLinked parent; + public final LinkedItem linkedItem; + private final LinkedItemScript scriptHandler; + + + public GuiScriptLinkedItem(GuiNPCManageLinked parent, LinkedItem linkedItem) { + this.drawDefaultBackground = true; + this.closeOnEsc = true; + this.xSize = 420; + this.setBackground("menubg.png"); + + this.parent = parent; + this.linkedItem = linkedItem; + this.scriptHandler = new LinkedItemScript(); + + hookList.add("init"); + hookList.add("tick"); + hookList.add("tossed"); + hookList.add("pickedUp"); + hookList.add("spawn"); + hookList.add("interact"); + hookList.add("rightClick"); + hookList.add("attack"); + hookList.add("startItem"); + hookList.add("usingItem"); + hookList.add("stopItem"); + hookList.add("finishItem"); + + LinkedItemScriptPacket.Get(linkedItem.id); + } + + public void initGui() { + this.ySize = (int)((double)this.xSize * 0.56); + if ((double)this.ySize > (double)this.height * 0.95) { + this.ySize = (int)((double)this.height * 0.95); + this.xSize = (int)((double)this.ySize / 0.56); + } + + this.bgScale = (float)this.xSize / 400.0F; + super.initGui(); + this.guiTop += 10; + int yoffset = (int)((double)this.ySize * 0.02); + GuiMenuTopButton top; + this.addTopButton(top = new GuiMenuTopButton(0, this.guiLeft + 4, this.guiTop - 17, "gui.settings")); + int topXoffset = 0; + int topYoffset = 0; + + + if (this.scriptHandler.container != null) { + this.addTopButton(top = new GuiMenuTopButton(1, top.xPosition + top.width + topXoffset, top.yPosition + topYoffset, "Script")); + + } else { + this.addTopButton(new GuiMenuTopButton(this.scriptLimit, top.xPosition + top.width, top.yPosition, "+")); + } + + top = this.getTopButton(this.activeTab); + if (top == null) { + this.activeTab = 0; + top = this.getTopButton(0); + } + + top.active = true; + if (this.activeTab == 1) { + GuiCustomScroll hooks = new GuiCustomScroll(this, 1); + hooks.allowUserInput = false; + hooks.setSize(108, 198); + hooks.guiLeft = this.guiLeft - 110; + hooks.guiTop = this.guiTop + 14; + + hooks.setUnsortedList(this.hookList); + this.addScroll(hooks); + GuiNpcLabel hookLabel = new GuiNpcLabel(0, "script.hooks", hooks.guiLeft, this.guiTop + 5); + hookLabel.color = 11184810; + this.addLabel(hookLabel); + ScriptContainer container = this.scriptHandler.container; + GuiScriptTextArea ta = new GuiScriptTextArea(this, 2, this.guiLeft + 1 + yoffset, this.guiTop + yoffset, this.xSize - 108 - yoffset, (int)((double)this.ySize * 0.96) - yoffset * 2, container == null ? "" : container.script); + ta.enableCodeHighlighting(); + ta.setListener(this); + this.addTextField(ta); + int left1 = this.guiLeft + this.xSize - 104; + this.addButton(new GuiNpcButton(102, left1, this.guiTop + yoffset, 60, 20, "gui.clear")); + this.addButton(new GuiNpcButton(101, left1 + 61, this.guiTop + yoffset, 60, 20, "gui.paste")); + this.addButton(new GuiNpcButton(100, left1, this.guiTop + 21 + yoffset, 60, 20, "gui.copy")); + this.addButton(new GuiNpcButton(105, left1 + 61, this.guiTop + 21 + yoffset, 60, 20, "gui.remove")); + + this.addButton(new GuiNpcButton(107, left1, this.guiTop + 66 + yoffset, 80, 20, "script.loadscript")); + // TODO Uncomment if script lists ever get added + this.getButton(107).enabled = false; + + GuiCustomScroll scroll = (new GuiCustomScroll(this, 0)).setUnselectable(); + scroll.setSize(100, (int)((double)this.ySize * 0.54) - yoffset * 2); + scroll.guiLeft = left1; + scroll.guiTop = this.guiTop + 88 + yoffset; + if (container != null) { + scroll.setList(container.scripts); + } + + this.addScroll(scroll); + } else { + GuiNpcTextArea var8 = new GuiNpcTextArea(2, this, this.guiLeft + 4 + yoffset, this.guiTop + 6 + yoffset, this.xSize - 160 - yoffset, (int)((float)this.ySize * 0.92F) - yoffset * 2, this.getConsoleText()); + var8.enabled = false; + this.addTextField(var8); + int var9 = this.guiLeft + this.xSize - 150; + this.addButton(new GuiNpcButton(100, var9, this.guiTop + 125, 60, 20, "gui.copy")); + this.addButton(new GuiNpcButton(102, var9, this.guiTop + 146, 60, 20, "gui.clear")); + this.addLabel(new GuiNpcLabel(1, "script.language", var9, this.guiTop + 15)); + this.addButton(new GuiNpcButton(103, var9 + 60, this.guiTop + 10, 80, 20, this.languages.keySet().toArray(new String[this.languages.keySet().size()]), this.getScriptIndex())); + this.getButton(103).enabled = !this.languages.isEmpty(); + this.addLabel(new GuiNpcLabel(2, "gui.enabled", var9, this.guiTop + 36)); + this.addButton(new GuiNpcButton(104, var9 + 60, this.guiTop + 31, 50, 20, new String[]{"gui.no", "gui.yes"}, this.scriptHandler.getEnabled() ? 1 : 0)); + if (this.player.worldObj.isRemote) { + this.addButton(new GuiNpcButton(106, var9, this.guiTop + 55, 150, 20, "script.openfolder")); + } + + this.addButton(new GuiNpcButton(109, var9, this.guiTop + 78, 80, 20, "gui.website")); + this.addButton(new GuiNpcButton(112, var9 + 81, this.guiTop + 78, 80, 20, "gui.forum")); + this.addButton(new GuiNpcButton(110, var9, this.guiTop + 99, 80, 20, "script.apidoc")); + this.addButton(new GuiNpcButton(111, var9 + 81, this.guiTop + 99, 80, 20, "script.apisrc")); + } + + this.xSize = 420; + this.ySize = 256; + } + + public void customScrollClicked(int i, int j, int k, GuiCustomScroll scroll) { + String hook = scroll.getSelected(); + if (this.previousHookClicked.equals(hook)) { + String addString = ""; + if (!this.getTextField(2).getText().isEmpty()) { + addString = addString + "\n"; + } + + addString = addString + "function " + hook + "(event) {\n \n}\n"; + this.getTextField(2).setText(this.getTextField(2).getText() + addString); + this.previousHookClicked = ""; + } else { + this.previousHookClicked = hook; + } + + } + + public void unFocused(GuiNpcTextField textfield) { + } + + private String getConsoleText() { + Map map = this.scriptHandler.getConsoleText(); + StringBuilder builder = new StringBuilder(); + Iterator var3 = map.entrySet().iterator(); + + while(var3.hasNext()) { + Map.Entry entry = (Map.Entry)var3.next(); + builder.insert(0, new Date((Long)entry.getKey()) + (String)entry.getValue() + "\n"); + } + + return builder.toString(); + } + + private int getScriptIndex() { + int i = 0; + + for(Iterator var2 = this.languages.keySet().iterator(); var2.hasNext(); ++i) { + String language = (String)var2.next(); + if (language.equalsIgnoreCase(this.scriptHandler.getLanguage())) { + return i; + } + } + + return 0; + } + + public void confirmClicked(boolean flag, int i) { + if (flag) { + if (i == 0) { + this.openLink("https://www.curseforge.com/minecraft/mc-mods/customnpc-plus"); + } + + if (i == 1) { + this.openLink("https://kamkeel.github.io/CustomNPC-Plus/"); + } + + if (i == 2) { + this.openLink("https://kamkeel.github.io/CustomNPC-Plus/"); + } + + if (i == 3) { + this.openLink("http://www.minecraftforge.net/forum/index.php/board,122.0.html"); + } + + if (i == 10) { + this.scriptHandler.container = null; + this.activeTab = 0; + } + + if (i == 101) { + this.getTextField(2).setText(NoppesStringUtils.getClipboardContents()); + this.setScript(); + } + + if (i == 102) { + if (this.activeTab == 1) { + ScriptContainer container = this.scriptHandler.container; + container.script = ""; + } else { + this.scriptHandler.clearConsole(); + } + + this.initGui(); + } + } + + this.displayGuiScreen(this); + } + + protected void actionPerformed(GuiButton guibutton) { + if (guibutton.id == 0) { + this.setScript(); + this.activeTab = 0; + this.initGui(); + } + + if (guibutton.id == this.scriptLimit) { + if (scriptHandler.container == null) + this.scriptHandler.container = new ScriptContainer(this.scriptHandler); + else + this.setScript(); + this.activeTab = 1; + this.initGui(); + } + + if (guibutton.id == 109) { + this.displayGuiScreen(new GuiConfirmOpenLink(this, "https://kamkeel.github.io/CustomNPC-Plus/", 0, true)); + } + + if (guibutton.id == 110) { + this.displayGuiScreen(new GuiConfirmOpenLink(this, "https://github.com/KAMKEEL/CustomNPC-Plus-API", 1, true)); + } + + if (guibutton.id == 111) { + this.displayGuiScreen(new GuiConfirmOpenLink(this, "https://github.com/Noppes/CustomNPCsAPI", 2, true)); + } + + if (guibutton.id == 112) { + this.displayGuiScreen(new GuiConfirmOpenLink(this, "http://www.minecraftforge.net/forum/index.php/board,122.0.html", 3, true)); + } + + if (guibutton.id == 100) { + NoppesStringUtils.setClipboardContents(this.getTextField(2).getText()); + } + + if (guibutton.id == 101) { + GuiYesNo guiyesno = new GuiYesNo(this, StatCollector.translateToLocal("gui.paste"), StatCollector.translateToLocal("gui.sure"), 101); + this.displayGuiScreen(guiyesno); + } + + GuiYesNo container1; + if (guibutton.id == 102) { + container1 = new GuiYesNo(this, StatCollector.translateToLocal("gui.clear"), StatCollector.translateToLocal("gui.sure"), 102); + this.displayGuiScreen(container1); + } + + if (guibutton.id == 103) { + this.scriptHandler.setLanguage(guibutton.displayString); + } + + if (guibutton.id == 104) { + this.scriptHandler.setEnabled(((GuiNpcButton)guibutton).getValue() == 1); + } + + if (guibutton.id == 105) { + container1 = new GuiYesNo(this, "", ((GuiNpcButton)guibutton).displayString, 10); + this.displayGuiScreen(container1); + } + + if (guibutton.id == 106) { + NoppesUtil.openFolder(ScriptController.Instance.dir); + } + + if (guibutton.id == 107) { + ScriptContainer container = this.scriptHandler.container; + if (container == null) { + container = new ScriptContainer(this.scriptHandler); + this.scriptHandler.container = container; + } + +// this.setSubGui(new EventGuiScriptList((List)this.languages.get(this.script.getLanguage()), container)); + } + + } + + private void setScript() { + if (this.activeTab == 1) { + ScriptContainer container = this.scriptHandler.container; + if (container == null) { + container = new ScriptContainer(this.scriptHandler); + this.scriptHandler.container = container; + } + + String text = this.getTextField(2).getText(); + text = text.replace("\r\n", "\n"); + text = text.replace("\r", "\n"); + container.script = text; + } + + } + + public void setGuiData(NBTTagCompound compound) { + if (!compound.hasKey("Tab")) { + this.scriptHandler.setLanguage(compound.getString("ScriptLanguage")); + this.scriptHandler.setEnabled(compound.getBoolean("ScriptEnabled")); + this.copiedSetGuiData(compound); + } else { + int tab = compound.getInteger("Tab"); + ScriptContainer container = new ScriptContainer(this.scriptHandler); + container.readFromNBT(compound.getCompoundTag("Script")); + this.scriptHandler.container = container; + this.initGui(); + } + + } + + private void copiedSetGuiData(NBTTagCompound compound) { + NBTTagList data = compound.getTagList("Languages", 10); + HashMap languages = new HashMap(); + + for(int i = 0; i < data.tagCount(); ++i) { + NBTTagCompound comp = data.getCompoundTagAt(i); + ArrayList scripts = new ArrayList(); + NBTTagList list = comp.getTagList("Scripts", 8); + + for(int j = 0; j < list.tagCount(); ++j) { + scripts.add(list.getStringTagAt(j)); + } + + languages.put(comp.getString("Language"), scripts); + } + + this.languages = languages; + this.initGui(); + } + + public void save() { + this.setScript(); + + List containers = this.scriptHandler.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + LinkedItemScriptPacket.Save(linkedItem.id, i, containers.size(), container.writeToNBT(new NBTTagCompound())); + } + NBTTagCompound scriptData = new NBTTagCompound(); + scriptData.setString("ScriptLanguage", this.scriptHandler.getLanguage()); + scriptData.setBoolean("ScriptEnabled", this.scriptHandler.getEnabled()); + scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.scriptHandler.getConsoleText())); + + LinkedItemScriptPacket.Save(linkedItem.id, -1, containers.size(), scriptData); + } + + public void textUpdate(String text) { + ScriptContainer container = this.scriptHandler.container; + if (container != null) { + container.script = text; + } + + } + + public void saveText(String text) { + ScriptContainer container = this.scriptHandler.container; + if (container != null) { + container.script = text; + } + + this.initGui(); + } + + @Override + public void close() { + this.save(); + parent.setWorldAndResolution(mc, width, height); + parent.initGui(); + mc.currentScreen = parent; + } +} diff --git a/src/main/java/noppes/npcs/controllers/data/EffectScript.java b/src/main/java/noppes/npcs/controllers/data/EffectScript.java index ec58bbfe8..16f8f1e63 100644 --- a/src/main/java/noppes/npcs/controllers/data/EffectScript.java +++ b/src/main/java/noppes/npcs/controllers/data/EffectScript.java @@ -61,14 +61,6 @@ public class EffectScript implements INpcScriptHandler { if (!this.isEnabled()) { return; } - - ScriptEngine engine = container.engine; - engine.put("API", NpcAPI.Instance()); - - for (Map.Entry engineObjects : NpcAPI.engineObjects.entrySet()) { - engine.put(engineObjects.getKey(), engineObjects.getValue()); - } - container.run(s, event); } diff --git a/src/main/java/noppes/npcs/controllers/data/LinkedItem.java b/src/main/java/noppes/npcs/controllers/data/LinkedItem.java index 2f9fe1221..df84cf842 100644 --- a/src/main/java/noppes/npcs/controllers/data/LinkedItem.java +++ b/src/main/java/noppes/npcs/controllers/data/LinkedItem.java @@ -230,6 +230,10 @@ public class LinkedItem implements ILinkedItem { return clone; } - // ADD / GET SETS FOR LINKED ITEM DISPLAY THINGS - + public LinkedItemScript getOrCreateScriptHandler() { + LinkedItemScript data = getScriptHandler(); + if (data == null) + setScriptHandler(data =new LinkedItemScript()); + return data; + } } diff --git a/src/main/java/noppes/npcs/controllers/data/LinkedItemScript.java b/src/main/java/noppes/npcs/controllers/data/LinkedItemScript.java index 9541d2ee6..4c46a4e32 100644 --- a/src/main/java/noppes/npcs/controllers/data/LinkedItemScript.java +++ b/src/main/java/noppes/npcs/controllers/data/LinkedItemScript.java @@ -22,7 +22,6 @@ public class LinkedItemScript implements INpcScriptHandler { public String scriptLanguage = "ECMAScript"; public boolean enabled = false; - public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setString("ScriptLanguage", scriptLanguage); compound.setBoolean("ScriptEnabled", enabled); @@ -43,10 +42,6 @@ public class LinkedItemScript implements INpcScriptHandler { return this; } - public void callScript(ScriptType type, PlayerEvent.EffectEvent event) { - callScript(type.function, event); - } - public boolean isEnabled() { return this.enabled && ScriptController.HasStart && container != null && ConfigScript.ScriptingEnabled; } @@ -61,14 +56,6 @@ public class LinkedItemScript implements INpcScriptHandler { if (!this.isEnabled()) { return; } - - ScriptEngine engine = container.engine; - engine.put("API", NpcAPI.Instance()); - - for (Map.Entry engineObjects : NpcAPI.engineObjects.entrySet()) { - engine.put(engineObjects.getKey(), engineObjects.getValue()); - } - container.run(s, event); } @@ -115,7 +102,7 @@ public class LinkedItemScript implements INpcScriptHandler { @Override public String noticeString() { - return ""; + return "LinkedItem"; } @Override @@ -173,15 +160,4 @@ public class LinkedItemScript implements INpcScriptHandler { this.setEnabled(compound.getBoolean("ScriptEnabled")); } } - - public enum ScriptType { - OnAdd("onAdded"), - OnTick("onTick"), - OnRemove("onRemove"); - - public final String function; - ScriptType(String functionName) { - this.function = functionName; - } - } }