From 5b589768f66b698b3452eea58c6a80cf9c358fda Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Tue, 21 Feb 2023 12:45:48 -0600 Subject: [PATCH] Player, Forge, & NPC script console changes, & further fix to concurrent modification exception on script container. --- src/api | 2 +- .../java/noppes/npcs/PacketHandlerServer.java | 10 +--- .../client/gui/script/GuiScriptAllNPCs.java | 1 - .../client/gui/script/GuiScriptForge.java | 1 - .../client/gui/script/GuiScriptPlayers.java | 1 - .../npcs/controllers/ScriptContainer.java | 4 +- .../npcs/controllers/ScriptController.java | 2 + .../controllers/data/ForgeDataScript.java | 44 ++++++++------- .../npcs/controllers/data/IScriptHandler.java | 2 - .../npcs/controllers/data/NPCDataScript.java | 42 +++++++------- .../controllers/data/PlayerDataScript.java | 56 +++++++------------ 11 files changed, 77 insertions(+), 88 deletions(-) diff --git a/src/api b/src/api index d43bfd724..861f7e3a6 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit d43bfd72427542d3fbb37ef49895aca37d4ea237 +Subproject commit 861f7e3a6f2b8528d6ef46a28fd00604fc43e8c1 diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index c6abaa515..180e4c54a 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -245,7 +245,6 @@ public class PacketHandlerServer{ } } data.setEnabled(compound.getBoolean("ScriptEnabled")); - data.setConsoleText(NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10))); } } @@ -255,8 +254,7 @@ public class PacketHandlerServer{ this.getScripts(data,buffer,player); } else if(type == EnumPacketServer.ScriptPlayerSave) { this.saveScripts(data,buffer,player); - ScriptController.Instance.lastLoaded = System.currentTimeMillis(); - ScriptController.Instance.playerScripts.lastInited = System.currentTimeMillis(); + ScriptController.Instance.lastPlayerUpdate = System.currentTimeMillis(); } } @@ -266,8 +264,7 @@ public class PacketHandlerServer{ this.getScripts(data,buffer,player); } else if (type == EnumPacketServer.ScriptForgeSave) { this.saveScripts(data,buffer,player); - ScriptController.Instance.lastLoaded = System.currentTimeMillis(); - ScriptController.Instance.forgeScripts.lastInited = System.currentTimeMillis(); + ScriptController.Instance.lastForgeUpdate = System.currentTimeMillis(); } } @@ -277,8 +274,7 @@ public class PacketHandlerServer{ this.getScripts(data,buffer,player); } else if(type == EnumPacketServer.ScriptNPCSave) { this.saveScripts(data,buffer,player); - ScriptController.Instance.lastLoaded = System.currentTimeMillis(); - ScriptController.Instance.npcScripts.lastInited = System.currentTimeMillis(); + ScriptController.Instance.lastNpcUpdate = System.currentTimeMillis(); } } 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 ecc521801..32324f5cb 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptAllNPCs.java @@ -21,7 +21,6 @@ public class GuiScriptAllNPCs extends GuiScriptInterface { if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); - script.setConsoleText(NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10))); super.setGuiData(compound); } else { int tab = compound.getInteger("Tab"); 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 f7f5a39a4..d20e21073 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptForge.java @@ -26,7 +26,6 @@ public class GuiScriptForge extends GuiScriptInterface { if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); - script.setConsoleText(NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10))); super.setGuiData(compound); } else { int tab = compound.getInteger("Tab"); 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 01e356467..b51a7c0bf 100644 --- a/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java +++ b/src/main/java/noppes/npcs/client/gui/script/GuiScriptPlayers.java @@ -28,7 +28,6 @@ public class GuiScriptPlayers extends GuiScriptInterface { if (!compound.hasKey("Tab")) { script.setLanguage(compound.getString("ScriptLanguage")); script.setEnabled(compound.getBoolean("ScriptEnabled")); - script.setConsoleText(NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10))); super.setGuiData(compound); } else { int tab = compound.getInteger("Tab"); diff --git a/src/main/java/noppes/npcs/controllers/ScriptContainer.java b/src/main/java/noppes/npcs/controllers/ScriptContainer.java index 2e61c8b40..254f6a739 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptContainer.java +++ b/src/main/java/noppes/npcs/controllers/ScriptContainer.java @@ -155,8 +155,8 @@ public class ScriptContainer { } engine.put("API", NpcAPI.Instance()); - Set> engineEntries = NpcAPI.engineObjects.entrySet(); - for (Map.Entry objectEntry : engineEntries) { + HashMap engineEntries = new HashMap<>(NpcAPI.engineObjects); + for (Map.Entry objectEntry : engineEntries.entrySet()) { engine.put(objectEntry.getKey(),objectEntry.getValue()); } diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index 53e0ba4f8..b5303dd49 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -47,8 +47,10 @@ public class ScriptController { public long lastPlayerUpdate = 0L; public ForgeDataScript forgeScripts = new ForgeDataScript(); + public long lastForgeUpdate = 0L; public NPCDataScript npcScripts = new NPCDataScript((EntityNPCInterface) null); + public long lastNpcUpdate = 0L; public ScriptController(){ loaded = false; diff --git a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java index e73207aed..fe14b2496 100644 --- a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java @@ -21,15 +21,14 @@ public class ForgeDataScript implements IScriptHandler { private List scripts = new ArrayList(); private String scriptLanguage = "ECMAScript"; public long lastInited = -1L; + private long lastForgeUpdate = -1L; private boolean enabled = false; - private Map console = new TreeMap(); public ForgeDataScript() { } public void clear() { this.scripts = new ArrayList(); - this.console = new TreeMap(); } public void readFromNBT(NBTTagCompound compound) { @@ -47,7 +46,6 @@ public class ForgeDataScript implements IScriptHandler { } } this.enabled = compound.getBoolean("ScriptEnabled"); - this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } public NBTTagCompound writeToNBT(NBTTagCompound compound) { @@ -57,7 +55,6 @@ public class ForgeDataScript implements IScriptHandler { } compound.setString("ScriptLanguage", this.scriptLanguage); compound.setBoolean("ScriptEnabled", this.enabled); - compound.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.console)); return compound; } @@ -68,23 +65,24 @@ public class ForgeDataScript implements IScriptHandler { public void callScript(String type, Event event) { if(this.isEnabled()) { - if (ScriptController.Instance.lastLoaded > this.lastInited) { + if (ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastForgeUpdate > this.lastForgeUpdate) { this.lastInited = ScriptController.Instance.lastLoaded; + this.lastForgeUpdate = ScriptController.Instance.lastForgeUpdate; + + for (ScriptContainer script : this.scripts) { + script.errored = false; + } + if (!type.equals("init")) { EventHooks.onForgeInit(this); } } - int i = 0; for (ScriptContainer script : this.scripts) { - script.run(type, event); + if(script == null || script.errored || !script.hasCode() ) + continue; - for (Entry longStringEntry : script.console.entrySet()) { - if (!ScriptController.Instance.forgeScripts.console.containsKey(longStringEntry.getKey())) { - ScriptController.Instance.forgeScripts.console.put(longStringEntry.getKey(), " tab " + (i + 1) + ":\n" + longStringEntry.getValue()); - } - } - i++; + script.run(type, event); } } } @@ -125,14 +123,22 @@ public class ForgeDataScript implements IScriptHandler { return "ForgeScript"; } - public void setConsoleText(Map map) { - this.console = map; + public Map getConsoleText() { + TreeMap map = new TreeMap<>(); + int tab = 0; + for (ScriptContainer script : this.getScripts()) { + ++tab; + + for (Entry longStringEntry : script.console.entrySet()) { + map.put(longStringEntry.getKey(), " tab " + tab + ":\n" + longStringEntry.getValue()); + } + } + return map; } - public Map getConsoleText() { - return this.console; - } public void clearConsole() { - this.console.clear(); + for (ScriptContainer script : this.getScripts()) { + script.console.clear(); + } } } diff --git a/src/main/java/noppes/npcs/controllers/data/IScriptHandler.java b/src/main/java/noppes/npcs/controllers/data/IScriptHandler.java index 9f05591aa..8b90a1fae 100644 --- a/src/main/java/noppes/npcs/controllers/data/IScriptHandler.java +++ b/src/main/java/noppes/npcs/controllers/data/IScriptHandler.java @@ -31,8 +31,6 @@ public interface IScriptHandler { String noticeString(); - void setConsoleText(Map map); - Map getConsoleText(); void clearConsole(); diff --git a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java index 54addfa5b..715e18e6f 100644 --- a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java @@ -23,8 +23,8 @@ public class NPCDataScript implements IScriptHandler { private EntityNPCInterface npc; private ICustomNpc npcAPI; public long lastInited = -1L; + private long lastNpcUpdate = -1L; public boolean enabled = false; - private Map console = new TreeMap(); public NPCDataScript(EntityNPCInterface npc) { if(npc != null) { @@ -32,7 +32,6 @@ public class NPCDataScript implements IScriptHandler { } } public void clear() { - this.console = new TreeMap(); this.scripts = new ArrayList(); } public void readFromNBT(NBTTagCompound compound) { @@ -50,7 +49,6 @@ public class NPCDataScript implements IScriptHandler { } } this.enabled = compound.getBoolean("ScriptEnabled"); - this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("TotalScripts",this.scripts.size()); @@ -59,26 +57,25 @@ public class NPCDataScript implements IScriptHandler { } compound.setString("ScriptLanguage", this.scriptLanguage); compound.setBoolean("ScriptEnabled", this.enabled); - compound.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.console)); return compound; } public void callScript(EnumScriptType type, Event event) { if (this.isEnabled()) { - if (ScriptController.Instance.lastLoaded > this.lastInited) { + if (ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastNpcUpdate > this.lastNpcUpdate) { this.lastInited = ScriptController.Instance.lastLoaded; + this.lastNpcUpdate = ScriptController.Instance.lastNpcUpdate; + + for (ScriptContainer script : this.scripts) { + script.errored = false; + } } - int i = 0; for (ScriptContainer script : this.scripts) { - script.run(type, event); + if(script == null || script.errored || !script.hasCode() ) + continue; - for (Map.Entry longStringEntry : script.console.entrySet()) { - if (!ScriptController.Instance.npcScripts.console.containsKey(longStringEntry.getKey())) { - ScriptController.Instance.npcScripts.console.put(longStringEntry.getKey(), " tab " + (i + 1) + ":\n" + longStringEntry.getValue()); - } - } - i++; + script.run(type, event); } } } @@ -122,16 +119,23 @@ public class NPCDataScript implements IScriptHandler { return this.npcAPI; } - public void setConsoleText(Map map) { - this.console = map; - } - public Map getConsoleText() { - return this.console; + TreeMap map = new TreeMap<>(); + int tab = 0; + for (ScriptContainer script : this.getScripts()) { + ++tab; + + for (Map.Entry longStringEntry : script.console.entrySet()) { + map.put(longStringEntry.getKey(), " tab " + tab + ":\n" + longStringEntry.getValue()); + } + } + return map; } public void clearConsole() { - this.console.clear(); + for (ScriptContainer script : this.getScripts()) { + script.console.clear(); + } } public static final class ToStringHelper { diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java index 8073fa896..d1df5801f 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java @@ -31,8 +31,6 @@ public class PlayerDataScript implements IScriptHandler { private long lastPlayerUpdate = 0L; public long lastInited = -1L; public boolean enabled = false; - private Map console = new TreeMap(); - public List errored = new ArrayList(); public PlayerDataScript(EntityPlayer player) { if(player != null) { @@ -40,8 +38,6 @@ public class PlayerDataScript implements IScriptHandler { } } public void clear() { - this.console = new TreeMap(); - this.errored = new ArrayList(); this.scripts = new ArrayList(); } public void readFromNBT(NBTTagCompound compound) { @@ -59,7 +55,6 @@ public class PlayerDataScript implements IScriptHandler { } } this.enabled = compound.getBoolean("ScriptEnabled"); - this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("TotalScripts",this.scripts.size()); @@ -68,47 +63,31 @@ public class PlayerDataScript implements IScriptHandler { } compound.setString("ScriptLanguage", this.scriptLanguage); compound.setBoolean("ScriptEnabled", this.enabled); - compound.setTag("ScriptConsole", NBTTags.NBTLongStringMap(this.console)); return compound; } public void callScript(EnumScriptType type, Event event) { if (this.isEnabled()) { - ScriptContainer script; if (ScriptController.Instance.lastLoaded > this.lastInited || ScriptController.Instance.lastPlayerUpdate > this.lastPlayerUpdate) { this.lastInited = ScriptController.Instance.lastLoaded; - errored.clear(); - this.lastPlayerUpdate = ScriptController.Instance.lastPlayerUpdate; + for (ScriptContainer scriptContainer : this.scripts) { + scriptContainer.errored = false; + } + if (type != EnumScriptType.INIT) { noppes.npcs.scripted.event.PlayerEvent playerEvent = (noppes.npcs.scripted.event.PlayerEvent)event; EventHooks.onPlayerInit(this, playerEvent.player); } } - for(int i = 0; i < ScriptController.Instance.playerScripts.scripts.size(); ++i) { - script = (ScriptContainer)ScriptController.Instance.playerScripts.scripts.get(i); - if (!errored.contains(i)) { - if(script == null || script.errored || !script.hasCode() || ScriptController.Instance.playerScripts.errored.contains(i)) - continue; + for (ScriptContainer script : this.scripts) { + if(script == null || script.errored || !script.hasCode() ) + continue; - script.run(type, event); - - if (script.errored) { - ScriptController.Instance.playerScripts.errored.add(i); - } - - for (Entry longStringEntry : script.console.entrySet()) { - if (!ScriptController.Instance.playerScripts.console.containsKey(longStringEntry.getKey())) { - ScriptController.Instance.playerScripts.console.put(longStringEntry.getKey(), " tab " + (i + 1) + ":\n" + longStringEntry.getValue()); - } - } - - script.console.clear(); - } + script.run(type, event); } - } } @@ -152,16 +131,23 @@ public class PlayerDataScript implements IScriptHandler { return this.playerAPI; } - public void setConsoleText(Map map) { - this.console = map; - } - public Map getConsoleText() { - return this.console; + TreeMap map = new TreeMap<>(); + int tab = 0; + for (ScriptContainer script : this.getScripts()) { + ++tab; + + for (Entry longStringEntry : script.console.entrySet()) { + map.put(longStringEntry.getKey(), " tab " + tab + ":\n" + longStringEntry.getValue()); + } + } + return map; } public void clearConsole() { - this.console.clear(); + for (ScriptContainer script : this.getScripts()) { + script.console.clear(); + } } public static final class ToStringHelper {