From 2b5fcc12cc087fb8f20ba26b7e577a59abfb404d Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 29 May 2025 20:42:36 -0400 Subject: [PATCH 01/12] Load Imported Scripts first --- .../npcs/controllers/ScriptContainer.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/ScriptContainer.java b/src/main/java/noppes/npcs/controllers/ScriptContainer.java index bb2ef4500..07ddbfde4 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptContainer.java +++ b/src/main/java/noppes/npcs/controllers/ScriptContainer.java @@ -92,22 +92,20 @@ public class ScriptContainer { private String getFullCode() { if (!this.evaluated) { - this.fullscript = this.script; - if (!this.fullscript.isEmpty()) { - this.fullscript = this.fullscript + "\n"; - } - - Iterator var1 = this.scripts.iterator(); - - while (var1.hasNext()) { - String loc = (String) var1.next(); - String code = (String) ScriptController.Instance.scripts.get(loc); + // build includes first + StringBuilder sb = new StringBuilder(); + for (String loc : this.scripts) { + String code = ScriptController.Instance.scripts.get(loc); if (code != null && !code.isEmpty()) { - this.fullscript = this.fullscript + code + "\n"; + sb.append(code).append("\n"); } } - - this.unknownFunctions = new HashSet(); + // then your per‐hook script + if (this.script != null && !this.script.isEmpty()) { + sb.append(this.script).append("\n"); + } + this.fullscript = sb.toString(); + this.unknownFunctions = new HashSet<>(); } return this.fullscript; } From d119a7524ed6eb0e0f32ed1e42392e3d661d1576 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 29 May 2025 20:59:01 -0400 Subject: [PATCH 02/12] Fix getTopBlock --- src/main/java/noppes/npcs/scripted/ScriptWorld.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/noppes/npcs/scripted/ScriptWorld.java b/src/main/java/noppes/npcs/scripted/ScriptWorld.java index a413910a3..e2396e1bb 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptWorld.java +++ b/src/main/java/noppes/npcs/scripted/ScriptWorld.java @@ -136,7 +136,11 @@ public class ScriptWorld implements IWorld { } public IBlock getTopBlock(int x, int z) { - return NpcAPI.Instance().getIBlock(this, x, world.getTopSolidOrLiquidBlock(x, z), z); + int yAbove = world.getTopSolidOrLiquidBlock(x, z); + if (yAbove <= 0) { + return null; + } + return NpcAPI.Instance().getIBlock(this, x, yAbove - 1, z); } public IBlock getTopBlock(IPos pos) { From 810e29ca75d9c41b84afae4cc4fc012660fee814 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Fri, 30 May 2025 04:07:56 +0300 Subject: [PATCH 03/12] Refactored addData to setData Added hasData --- src/api | 2 +- .../java/noppes/npcs/controllers/data/action/Action.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/api b/src/api index 445fc594f..5c6b16e75 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 445fc594f37683976b8f0d5c09289d6a5b6f9d03 +Subproject commit 5c6b16e75f35da078ba1f0c88421cc8e84bc6534 diff --git a/src/main/java/noppes/npcs/controllers/data/action/Action.java b/src/main/java/noppes/npcs/controllers/data/action/Action.java index f4737b3a6..9bf4e745e 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -1,7 +1,6 @@ package noppes.npcs.controllers.data.action; import noppes.npcs.api.handler.data.IAction; -import noppes.npcs.config.ConfigScript; import noppes.npcs.scripted.ScriptedActionManager; import java.util.HashMap; @@ -128,7 +127,7 @@ public class Action implements IAction { } @Override - public IAction addData(String key, Object v) { + public IAction setData(String key, Object v) { dataStore.put(key, v); return this; } @@ -139,6 +138,11 @@ public class Action implements IAction { return this; } + @Override + public boolean hasData(String key) { + return dataStore.containsKey(key); + } + @Override public int getUpdateEveryXTick() { return updateEveryXTick; From 236b901e617dde2abfe52b47280f68d7237de2c9 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 29 May 2025 21:09:58 -0400 Subject: [PATCH 04/12] Add a Pre-Load Boolean to Scripts to they don't save Empty --- .../java/kamkeel/npcs/network/PacketUtil.java | 4 +++ .../noppes/npcs/client/gui/GuiScript.java | 8 +++-- .../client/gui/script/GuiNPCEventScripts.java | 27 ++++++++++------ .../client/gui/script/GuiScriptAllNPCs.java | 27 ++++++++++------ .../client/gui/script/GuiScriptBlock.java | 7 ++-- .../client/gui/script/GuiScriptEffect.java | 32 +++++++++++-------- .../client/gui/script/GuiScriptForge.java | 27 ++++++++++------ .../client/gui/script/GuiScriptInterface.java | 4 ++- .../npcs/client/gui/script/GuiScriptItem.java | 7 ++-- .../gui/script/GuiScriptLinkedItem.java | 30 ++++++++++------- .../client/gui/script/GuiScriptPlayers.java | 27 ++++++++++------ 11 files changed, 129 insertions(+), 71 deletions(-) diff --git a/src/main/java/kamkeel/npcs/network/PacketUtil.java b/src/main/java/kamkeel/npcs/network/PacketUtil.java index 2ca723b93..f262bce45 100644 --- a/src/main/java/kamkeel/npcs/network/PacketUtil.java +++ b/src/main/java/kamkeel/npcs/network/PacketUtil.java @@ -230,6 +230,10 @@ public class PacketUtil { tabCompound.setInteger("TotalScripts", containers.size()); GuiDataPacket.sendGuiData(player, tabCompound); } + + NBTTagCompound loadComplete = new NBTTagCompound(); + loadComplete.setInteger("LoadComplete", 1); + GuiDataPacket.sendGuiData(player, loadComplete); } public static void saveScripts(IScriptHandler data, ByteBuf buffer) throws IOException { diff --git a/src/main/java/noppes/npcs/client/gui/GuiScript.java b/src/main/java/noppes/npcs/client/gui/GuiScript.java index 761354dd3..1786708e2 100644 --- a/src/main/java/noppes/npcs/client/gui/GuiScript.java +++ b/src/main/java/noppes/npcs/client/gui/GuiScript.java @@ -27,6 +27,7 @@ public class GuiScript extends GuiNPCInterface implements IGuiData, GuiYesNoCall public Map> languages = new HashMap>(); private static int activeConsole = 0; + boolean loaded = false; public GuiScript(EntityNPCInterface npc) { super(npc); @@ -258,12 +259,15 @@ public class GuiScript extends GuiNPCInterface implements IGuiData, GuiYesNoCall } this.languages = languages; initGui(); + loaded = true; } @Override public void save() { - setScript(); - NPCScriptPacket.Save(script.writeToNBT(new NBTTagCompound())); + if(loaded){ + setScript(); + NPCScriptPacket.Save(script.writeToNBT(new NBTTagCompound())); + } } @Override diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiNPCEventScripts.java b/src/main/java/noppes/npcs/client/gui/script/GuiNPCEventScripts.java index 282ffe792..0fe589c8f 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiNPCEventScripts.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiNPCEventScripts.java @@ -39,6 +39,11 @@ public class GuiNPCEventScripts extends GuiScriptInterface { } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -58,16 +63,18 @@ public class GuiNPCEventScripts extends GuiScriptInterface { } public void save() { - super.save(); - List containers = this.script.getScripts(); - for (int i = 0; i < containers.size(); i++) { - ScriptContainer container = containers.get(i); - EventScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + if(loaded) { + super.save(); + List containers = this.script.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + EventScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + } + NBTTagCompound scriptData = new NBTTagCompound(); + scriptData.setString("ScriptLanguage", this.script.getLanguage()); + scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); + scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); + EventScriptPacket.Save(-1, containers.size(), scriptData); } - NBTTagCompound scriptData = new NBTTagCompound(); - scriptData.setString("ScriptLanguage", this.script.getLanguage()); - scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); - scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); - EventScriptPacket.Save(-1, containers.size(), scriptData); } } diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java index ef6a06c62..5ab933754 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java @@ -35,6 +35,11 @@ public class GuiScriptAllNPCs extends GuiScriptInterface { } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -54,16 +59,18 @@ public class GuiScriptAllNPCs extends GuiScriptInterface { } public void save() { - super.save(); - List containers = this.script.getScripts(); - for (int i = 0; i < containers.size(); i++) { - ScriptContainer container = containers.get(i); - GlobalNPCScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + if(loaded){ + super.save(); + List containers = this.script.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + GlobalNPCScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + } + NBTTagCompound scriptData = new NBTTagCompound(); + scriptData.setString("ScriptLanguage", this.script.getLanguage()); + scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); + scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); + GlobalNPCScriptPacket.Save(-1, containers.size(), scriptData); } - NBTTagCompound scriptData = new NBTTagCompound(); - scriptData.setString("ScriptLanguage", this.script.getLanguage()); - scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); - scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); - GlobalNPCScriptPacket.Save(-1, containers.size(), scriptData); } } diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptBlock.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptBlock.java index ba2cc9de7..0f0fbc192 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptBlock.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptBlock.java @@ -30,10 +30,13 @@ public class GuiScriptBlock extends GuiScriptInterface { public void setGuiData(NBTTagCompound compound) { this.tileScripted.setNBT(compound); super.setGuiData(compound); + loaded = true; } public void save() { - super.save(); - BlockScriptPacket.Save(tileScripted.xCoord, tileScripted.yCoord, tileScripted.zCoord, this.tileScripted.getNBT(new NBTTagCompound())); + if(loaded) { + super.save(); + BlockScriptPacket.Save(tileScripted.xCoord, tileScripted.yCoord, tileScripted.zCoord, this.tileScripted.getNBT(new NBTTagCompound())); + } } } diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptEffect.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptEffect.java index 7cc692a8e..5348a6958 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptEffect.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptEffect.java @@ -29,7 +29,7 @@ public class GuiScriptEffect extends GuiNPCInterface implements GuiYesNoCallback public final GuiNPCManageEffects parent; public final CustomEffect effect; private final EffectScript scriptHandler; - + boolean loaded = false; public GuiScriptEffect(GuiNPCManageEffects parent, CustomEffect effect) { this.drawDefaultBackground = true; @@ -315,6 +315,11 @@ public class GuiScriptEffect extends GuiNPCInterface implements GuiYesNoCallback } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { this.scriptHandler.setLanguage(compound.getString("ScriptLanguage")); this.scriptHandler.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -326,7 +331,6 @@ public class GuiScriptEffect extends GuiNPCInterface implements GuiYesNoCallback this.scriptHandler.container = container; this.initGui(); } - } private void copiedSetGuiData(NBTTagCompound compound) { @@ -350,19 +354,21 @@ public class GuiScriptEffect extends GuiNPCInterface implements GuiYesNoCallback } public void save() { - this.setScript(); + if(loaded) { + this.setScript(); - List containers = this.scriptHandler.getScripts(); - for (int i = 0; i < containers.size(); i++) { - ScriptContainer container = containers.get(i); - EffectScriptPacket.Save(effect.id, i, containers.size(), container.writeToNBT(new NBTTagCompound())); + List containers = this.scriptHandler.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + EffectScriptPacket.Save(effect.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())); + + EffectScriptPacket.Save(effect.id, -1, containers.size(), scriptData); } - NBTTagCompound scriptData = new NBTTagCompound(); - scriptData.setString("ScriptLanguage", this.scriptHandler.getLanguage()); - scriptData.setBoolean("ScriptEnabled", this.scriptHandler.getEnabled()); - scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.scriptHandler.getConsoleText())); - - EffectScriptPacket.Save(effect.id, -1, containers.size(), scriptData); } public void textUpdate(String text) { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java index 34ebc20e0..e8460a6ce 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java @@ -65,6 +65,11 @@ public class GuiScriptForge extends GuiScriptInterface { } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -84,16 +89,18 @@ public class GuiScriptForge extends GuiScriptInterface { } public void save() { - super.save(); - List containers = this.script.getScripts(); - for (int i = 0; i < containers.size(); i++) { - ScriptContainer container = containers.get(i); - ForgeScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + if(loaded) { + super.save(); + List containers = this.script.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + ForgeScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + } + NBTTagCompound scriptData = new NBTTagCompound(); + scriptData.setString("ScriptLanguage", this.script.getLanguage()); + scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); + scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); + ForgeScriptPacket.Save(-1, containers.size(), scriptData); } - NBTTagCompound scriptData = new NBTTagCompound(); - scriptData.setString("ScriptLanguage", this.script.getLanguage()); - scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); - scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); - ForgeScriptPacket.Save(-1, containers.size(), scriptData); } } diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java index a0f1d3f1a..5de8a7ba2 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptInterface.java @@ -25,6 +25,7 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb public Map> languages = new HashMap(); private int scriptLimit = 1; public List hookList = new ArrayList(); + protected boolean loaded = false; public GuiScriptInterface() { this.drawDefaultBackground = true; @@ -338,7 +339,8 @@ public class GuiScriptInterface extends GuiNPCInterface implements GuiYesNoCallb } public void save() { - this.setScript(); + if(loaded) + this.setScript(); } public void textUpdate(String text) { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptItem.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptItem.java index 6f3ad27ea..9b12d2bb6 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptItem.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptItem.java @@ -44,12 +44,15 @@ public class GuiScriptItem extends GuiScriptInterface { this.item.setMCNbt(compound); this.item.loadScriptData(); super.setGuiData(compound); + loaded = true; } } public void save() { - super.save(); - ItemScriptPacket.Save(this.item.getMCNbt()); + if(loaded) { + super.save(); + ItemScriptPacket.Save(this.item.getMCNbt()); + } } protected String getConsoleText() { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java index 5e99de749..4d2727de6 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptLinkedItem.java @@ -30,6 +30,7 @@ public class GuiScriptLinkedItem extends GuiNPCInterface implements GuiYesNoCall public final GuiNPCManageLinked parent; public final LinkedItem linkedItem; private final LinkedItemScript scriptHandler; + boolean loaded = false; public GuiScriptLinkedItem(GuiNPCManageLinked parent, LinkedItem linkedItem) { this.drawDefaultBackground = true; @@ -326,6 +327,11 @@ public class GuiScriptLinkedItem extends GuiNPCInterface implements GuiYesNoCall } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { this.scriptHandler.setLanguage(compound.getString("ScriptLanguage")); this.scriptHandler.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -361,19 +367,21 @@ public class GuiScriptLinkedItem extends GuiNPCInterface implements GuiYesNoCall } public void save() { - this.setScript(); + if(loaded) { + 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())); + 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); } - 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) { diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java index f9b25f61e..33566f932 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java @@ -90,6 +90,11 @@ public class GuiScriptPlayers extends GuiScriptInterface { } public void setGuiData(NBTTagCompound compound) { + if(compound.hasKey("LoadComplete")){ + loaded = true; + return; + } + if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); @@ -109,16 +114,18 @@ public class GuiScriptPlayers extends GuiScriptInterface { } public void save() { - super.save(); - List containers = this.script.getScripts(); - for (int i = 0; i < containers.size(); i++) { - ScriptContainer container = containers.get(i); - PlayerScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + if(loaded) { + super.save(); + List containers = this.script.getScripts(); + for (int i = 0; i < containers.size(); i++) { + ScriptContainer container = containers.get(i); + PlayerScriptPacket.Save(i, containers.size(), container.writeToNBT(new NBTTagCompound())); + } + NBTTagCompound scriptData = new NBTTagCompound(); + scriptData.setString("ScriptLanguage", this.script.getLanguage()); + scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); + scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); + PlayerScriptPacket.Save(-1, containers.size(), scriptData); } - NBTTagCompound scriptData = new NBTTagCompound(); - scriptData.setString("ScriptLanguage", this.script.getLanguage()); - scriptData.setBoolean("ScriptEnabled", this.script.getEnabled()); - scriptData.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.script.getConsoleText())); - PlayerScriptPacket.Save(-1, containers.size(), scriptData); } } From b490e04bb0f0cf07c0e2538af1f6c9e89abc9382 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 30 May 2025 05:24:16 -0400 Subject: [PATCH 05/12] Remove Downloading --- src/main/java/noppes/npcs/client/ImageDownloadAlt.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/noppes/npcs/client/ImageDownloadAlt.java b/src/main/java/noppes/npcs/client/ImageDownloadAlt.java index c53706b9d..003e05159 100644 --- a/src/main/java/noppes/npcs/client/ImageDownloadAlt.java +++ b/src/main/java/noppes/npcs/client/ImageDownloadAlt.java @@ -98,8 +98,6 @@ public class ImageDownloadAlt extends SimpleTexture { this.imageThread = new Thread("Texture Downloader #" + threadDownloadCounter.incrementAndGet()) { public void run() { HttpURLConnection connection = null; - ImageDownloadAlt.logger.debug("Downloading http texture from {} to {}", new Object[]{ImageDownloadAlt.this.imageUrl, ImageDownloadAlt.this.cacheFile}); - try { URL url = new URL(ImageDownloadAlt.this.imageUrl); connection = (HttpURLConnection) (url).openConnection(Minecraft.getMinecraft().getProxy()); From 07640d9b6befc9c328ef0a99584be5c50e18562a Mon Sep 17 00:00:00 2001 From: Kam Date: Sun, 1 Jun 2025 23:17:52 -0400 Subject: [PATCH 06/12] Fix Negative Value Floats Only --- src/main/java/noppes/npcs/client/gui/SubGuiMagic.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/noppes/npcs/client/gui/SubGuiMagic.java b/src/main/java/noppes/npcs/client/gui/SubGuiMagic.java index c60f851a4..5609d013d 100644 --- a/src/main/java/noppes/npcs/client/gui/SubGuiMagic.java +++ b/src/main/java/noppes/npcs/client/gui/SubGuiMagic.java @@ -93,6 +93,8 @@ public class SubGuiMagic extends SubGuiInterface implements ITextfieldListener, addLabel(new GuiNpcLabel(50, "magic.interaction", guiLeft + 170, guiTop + 30 + 160 + 5)); interactionField = new GuiNpcTextField(90, this, fontRendererObj, guiLeft + 245, guiTop + 30 + 160, 45, 20, ""); interactionField.setFloatsOnly(); + interactionField.setMinMaxDefaultFloat(-Float.MAX_VALUE, Float.MAX_VALUE, 0.0f); + addTextField(interactionField); if (selectedInteraction != null) { interactionField.setText(interactionValues.get(selectedInteraction) + ""); From b86c1ceabb0925bd5c5dc6253275bb21a1694827 Mon Sep 17 00:00:00 2001 From: Kam Date: Sun, 1 Jun 2025 23:46:51 -0400 Subject: [PATCH 07/12] Fix Couch Rendering --- src/main/java/noppes/npcs/blocks/tiles/TileVariant.java | 6 ++++++ .../client/renderer/blocks/BlockCouchWoolRenderer.java | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/blocks/tiles/TileVariant.java b/src/main/java/noppes/npcs/blocks/tiles/TileVariant.java index 81abe288f..f893a4d05 100644 --- a/src/main/java/noppes/npcs/blocks/tiles/TileVariant.java +++ b/src/main/java/noppes/npcs/blocks/tiles/TileVariant.java @@ -7,6 +7,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Facing; import static noppes.npcs.items.ItemNpcTool.BRUSH_COLOR_TAG; @@ -18,6 +19,11 @@ public class TileVariant extends TileEntity { public int variant = 14; public int rotation; + // Rotation = 0 Couch is Facing North + // Rotation = 1 Couch is Facing East + // Rotation = 2 Couch is Facing South + // Rotation = 3 Couch is Facing West + public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); version = compound.getInteger("CNPCVersion"); diff --git a/src/main/java/noppes/npcs/client/renderer/blocks/BlockCouchWoolRenderer.java b/src/main/java/noppes/npcs/client/renderer/blocks/BlockCouchWoolRenderer.java index bba634853..9933d47d7 100644 --- a/src/main/java/noppes/npcs/client/renderer/blocks/BlockCouchWoolRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/blocks/BlockCouchWoolRenderer.java @@ -100,7 +100,7 @@ public class BlockCouchWoolRenderer extends BlockRendererInterface { setCouchWood(var1.getBlockMetadata()); if (tile.hasCornerLeft) { GL11.glPushMatrix(); - GL11.glRotatef(90, 0, 1, 0); + GL11.glRotatef(270, 0, 1, 0); modelCouchCorner.CouchBack.render(0.0625F); GL11.glPopMatrix(); } else if (tile.hasCornerRight) @@ -119,8 +119,12 @@ public class BlockCouchWoolRenderer extends BlockRendererInterface { float[] color = ColorUtil.hexToRGB(tile.color); GL11.glColor3f(color[0], color[1], color[2]); - if (tile.hasCornerLeft) + if (tile.hasCornerLeft){ + GL11.glPushMatrix(); + GL11.glRotatef(270, 0, 1, 0); modelCouchCorner.Cussion.render(0.0625F); + GL11.glPopMatrix(); + } else if (tile.hasCornerRight) modelCouchCorner.Cussion.render(0.0625F); else if (tile.hasLeft && tile.hasRight) From 2b6f63a3e3a7051206f4698848d98720a9f23f2c Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Jun 2025 14:56:29 -0400 Subject: [PATCH 08/12] Right Click Event for Players --- src/api | 2 +- src/main/java/noppes/npcs/EventHooks.java | 5 +++ .../noppes/npcs/ScriptItemEventHandler.java | 1 + .../noppes/npcs/ScriptPlayerEventHandler.java | 43 +++++++++++++++++-- .../client/gui/script/GuiScriptPlayers.java | 1 + .../npcs/controllers/data/DataScript.java | 2 +- .../scripted/event/player/PlayerEvent.java | 35 +++++++++++++++ 7 files changed, 84 insertions(+), 5 deletions(-) diff --git a/src/api b/src/api index 5c6b16e75..bbbea878f 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 5c6b16e75f35da078ba1f0c88421cc8e84bc6534 +Subproject commit bbbea878fe30ea033112b0c5f1604417d4197447 diff --git a/src/main/java/noppes/npcs/EventHooks.java b/src/main/java/noppes/npcs/EventHooks.java index 34269f4a1..17f9e2dd6 100644 --- a/src/main/java/noppes/npcs/EventHooks.java +++ b/src/main/java/noppes/npcs/EventHooks.java @@ -390,6 +390,11 @@ public class EventHooks { return NpcAPI.EVENT_BUS.post(event); } + public static boolean onPlayerRightClick(PlayerDataScript handler, PlayerEvent.RightClickEvent event) { + handler.callScript(EnumScriptType.RIGHT_CLICK, event); + return NpcAPI.EVENT_BUS.post(event); + } + public static boolean onProfileChange(PlayerDataScript handler, IPlayer player, IProfile profile, int newSlot, int prevSlot, boolean post) { PlayerEvent.ProfileEvent.Changed event = new PlayerEvent.ProfileEvent.Changed(player, profile, newSlot, prevSlot, post); handler.callScript(EnumScriptType.PROFILE_CHANGE, event); diff --git a/src/main/java/noppes/npcs/ScriptItemEventHandler.java b/src/main/java/noppes/npcs/ScriptItemEventHandler.java index 02f4ee08f..7aa6b8a45 100644 --- a/src/main/java/noppes/npcs/ScriptItemEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptItemEventHandler.java @@ -154,6 +154,7 @@ public class ScriptItemEventHandler { ItemNpcTool.setColor(held.getTagCompound(), color); e.setCanceled(true); + return; } } } diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index e4e1c0f81..3a2ab7fe4 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -23,6 +23,7 @@ import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.*; import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.world.BlockEvent; +import noppes.npcs.api.IWorld; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.item.IItemCustomizable; import noppes.npcs.config.ConfigMain; @@ -34,8 +35,10 @@ import noppes.npcs.controllers.ScriptController; import noppes.npcs.controllers.data.*; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.items.ItemNpcTool; +import noppes.npcs.items.ItemScripted; import noppes.npcs.quests.QuestItem; import noppes.npcs.scripted.NpcAPI; +import noppes.npcs.scripted.event.ItemEvent; import static noppes.npcs.config.ConfigMain.TrackedQuestUpdateFrequency; @@ -123,9 +126,43 @@ public class ScriptPlayerEventHandler { if (!event.entityPlayer.worldObj.isRemote && event.entityPlayer.worldObj instanceof WorldServer && event.entityPlayer instanceof EntityPlayerMP) { PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); - IPlayer scriptPlayer = (IPlayer) NpcAPI.Instance().getIEntity(event.entityPlayer); - noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(scriptPlayer, 1, NpcAPI.Instance().getIEntity(event.target)); - event.setCanceled(EventHooks.onPlayerInteract(handler, ev)); + IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer); + + noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target)); + boolean rightClick = EventHooks.onPlayerRightClick(handler, rightClickEvent); + + noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent ev = new noppes.npcs.scripted.event.player.PlayerEvent.InteractEvent(ip, 1, NpcAPI.Instance().getIEntity(event.target)); + boolean interact = EventHooks.onPlayerInteract(handler, ev); + + event.setCanceled(rightClick || interact); + } + } + + @SubscribeEvent + public void invoke(PlayerInteractEvent event) { + if (event.entityPlayer == null || event.entityPlayer.worldObj == null || event.entityPlayer.worldObj.isRemote || !(event.entityPlayer instanceof EntityPlayerMP)) + return; + + IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer); + PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); + PlayerData pd = PlayerData.get(event.entityPlayer); + if (pd == null) { + return; + } + + if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_AIR){ + if (pd.hadInteract) { + pd.hadInteract = false; + return; + } + noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 0, null); + event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent)); + } else if (event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK){ + pd.hadInteract = true; + IWorld iw = (IWorld) NpcAPI.Instance().getIWorld(event.world); + Object blockCtx = NpcAPI.Instance().getIBlock(iw, event.x, event.y, event.z); + noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent rightClickEvent = new noppes.npcs.scripted.event.player.PlayerEvent.RightClickEvent(ip, 2, blockCtx); + event.setCanceled(EventHooks.onPlayerRightClick(handler, rightClickEvent)); } } diff --git a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java index 33566f932..6948ce89f 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java @@ -18,6 +18,7 @@ public class GuiScriptPlayers extends GuiScriptInterface { hookList.add(EnumScriptType.INIT.function); hookList.add(EnumScriptType.TICK.function); hookList.add(EnumScriptType.INTERACT.function); + hookList.add(EnumScriptType.RIGHT_CLICK.function); hookList.add(EnumScriptType.ATTACK.function); hookList.add(EnumScriptType.ATTACKED.function); hookList.add(EnumScriptType.DAMAGED_ENTITY.function); diff --git a/src/main/java/noppes/npcs/controllers/data/DataScript.java b/src/main/java/noppes/npcs/controllers/data/DataScript.java index f27b83990..514da2dac 100644 --- a/src/main/java/noppes/npcs/controllers/data/DataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/DataScript.java @@ -242,7 +242,7 @@ public class DataScript implements INpcScriptHandler { @Override public void callScript(String hookName, Event event) { try { - EnumScriptType enumScriptType = EnumScriptType.valueOf(hookName); + EnumScriptType enumScriptType = EnumScriptType.valueOfIgnoreCase(hookName); this.callScript(enumScriptType, event); } catch (IllegalArgumentException ignored) { } diff --git a/src/main/java/noppes/npcs/scripted/event/player/PlayerEvent.java b/src/main/java/noppes/npcs/scripted/event/player/PlayerEvent.java index 0fae26ab0..bf2225176 100644 --- a/src/main/java/noppes/npcs/scripted/event/player/PlayerEvent.java +++ b/src/main/java/noppes/npcs/scripted/event/player/PlayerEvent.java @@ -13,13 +13,16 @@ import noppes.npcs.api.IDamageSource; import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IEntityLivingBase; import noppes.npcs.api.entity.IPlayer; +import noppes.npcs.api.event.IItemEvent; import noppes.npcs.api.event.IPlayerEvent; import noppes.npcs.api.handler.data.IPlayerEffect; import noppes.npcs.api.handler.data.IProfile; +import noppes.npcs.api.item.IItemCustomizable; import noppes.npcs.api.item.IItemStack; import noppes.npcs.constants.EnumScriptType; import noppes.npcs.scripted.NpcAPI; import noppes.npcs.scripted.event.CustomNPCsEvent; +import noppes.npcs.scripted.event.ItemEvent; public class PlayerEvent extends CustomNPCsEvent implements IPlayerEvent { public final IPlayer player; @@ -650,6 +653,38 @@ public class PlayerEvent extends CustomNPCsEvent implements IPlayerEvent { } } + @Cancelable + public static class RightClickEvent extends PlayerEvent implements IPlayerEvent.RightClickEvent { + + /** + * 0:air, 1:entity, 2:block + */ + public final int type; + public final Object target; + + public RightClickEvent(IPlayer player, int type, Object target) { + super(player); + this.type = type; + this.target = target; + } + + public String getHookName() { + return EnumScriptType.RIGHT_CLICK.function; + } + + public int getType() { + return type; + } + + public Object getTarget() { + return target; + } + + public IPlayer getPlayer() { + return player; + } + } + public static class UpdateEvent extends PlayerEvent implements IPlayerEvent.UpdateEvent { public UpdateEvent(IPlayer player) { super(player); From 20583d9b0d9c8d7c416a768a6033416dde74c120 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Jun 2025 15:01:31 -0400 Subject: [PATCH 09/12] Fix CustomGuiClose Event --- .../network/packets/player/customgui/CustomGuiClosePacket.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/kamkeel/npcs/network/packets/player/customgui/CustomGuiClosePacket.java b/src/main/java/kamkeel/npcs/network/packets/player/customgui/CustomGuiClosePacket.java index 51bfacaa0..a94b6c4a3 100644 --- a/src/main/java/kamkeel/npcs/network/packets/player/customgui/CustomGuiClosePacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/player/customgui/CustomGuiClosePacket.java @@ -49,9 +49,6 @@ public final class CustomGuiClosePacket extends AbstractPacket { @Override public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { - if (!(player.openContainer instanceof ContainerCustomGui)) - return; - NBTTagCompound comp = ByteBufUtils.readNBT(in); EventHooks.onCustomGuiClose((IPlayer) NpcAPI.Instance().getIEntity(player), (new ScriptGui()).fromNBT(comp)); } From e9f810dc21b2eb3b633be4b85844f62873d50029 Mon Sep 17 00:00:00 2001 From: luisc Date: Mon, 2 Jun 2025 14:08:59 -0500 Subject: [PATCH 10/12] set role on client side before opening role editors --- .../java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java index 04cce9dc3..aa00ed09f 100644 --- a/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java +++ b/src/main/java/noppes/npcs/client/gui/mainmenu/GuiNpcAdvanced.java @@ -119,6 +119,7 @@ public class GuiNpcAdvanced extends GuiNPCInterface2 implements IGuiData { @Override public void setGuiData(NBTTagCompound compound) { if (compound.hasKey("RoleData")) { + npc.advanced.setRole(compound.getByte("RoleData")); if (npc.roleInterface != null) npc.roleInterface.readFromNBT(compound); From 7b6c7c1c337863849d48ae04cb3be07febf52c64 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Jun 2025 15:09:24 -0400 Subject: [PATCH 11/12] Update ScriptPlayerEventHandler.java --- src/main/java/noppes/npcs/ScriptPlayerEventHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java index 3a2ab7fe4..8f8ffbb2f 100644 --- a/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptPlayerEventHandler.java @@ -143,6 +143,9 @@ public class ScriptPlayerEventHandler { if (event.entityPlayer == null || event.entityPlayer.worldObj == null || event.entityPlayer.worldObj.isRemote || !(event.entityPlayer instanceof EntityPlayerMP)) return; + if(event.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) + return; + IPlayer ip = NoppesUtilServer.getIPlayer(event.entityPlayer); PlayerDataScript handler = ScriptController.Instance.getPlayerScripts(event.entityPlayer); PlayerData pd = PlayerData.get(event.entityPlayer); From 49757c7cb53715e799fc44e7e535ea1ac63599d1 Mon Sep 17 00:00:00 2001 From: Kam Date: Mon, 2 Jun 2025 17:31:40 -0400 Subject: [PATCH 12/12] 1.10.1 --- build.gradle | 2 +- src/main/java/noppes/npcs/CustomNpcs.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 03ba50702..2c7b271e8 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'idea' } -version = "1.10" +version = "1.10.1" group= "kamkeel.customnpc-plus" archivesBaseName = "CustomNPC-Plus" diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 8a99d066e..f4c2947ac 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -41,7 +41,7 @@ import noppes.npcs.scripted.NpcAPI; import java.io.File; import java.util.Set; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.10") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.10.1") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy")