From c0406958a3ecff227af0afd41f1b58c772bd656e Mon Sep 17 00:00:00 2001 From: "Luis C.M" Date: Sun, 29 May 2022 16:01:05 -0500 Subject: [PATCH] The script controller now checks whether a language can have objects loaded into it on startup, catching an exception and skipping that language as available if so. --- src/main/java/noppes/npcs/client/gui/GuiScript.java | 3 +-- .../noppes/npcs/controllers/ScriptController.java | 8 +++++++- .../npcs/{ => controllers/data}/DataScript.java | 12 ++++++++++-- .../npcs/controllers/data/ForgeDataScript.java | 7 +++++++ .../noppes/npcs/controllers/data/NPCDataScript.java | 7 +++++++ .../npcs/controllers/data/PlayerDataScript.java | 7 +++++++ .../java/noppes/npcs/entity/EntityNPCInterface.java | 8 +------- 7 files changed, 40 insertions(+), 12 deletions(-) rename src/main/java/noppes/npcs/{ => controllers/data}/DataScript.java (93%) diff --git a/src/main/java/noppes/npcs/client/gui/GuiScript.java b/src/main/java/noppes/npcs/client/gui/GuiScript.java index 44ecae3ec..ea7e4f3a9 100644 --- a/src/main/java/noppes/npcs/client/gui/GuiScript.java +++ b/src/main/java/noppes/npcs/client/gui/GuiScript.java @@ -8,8 +8,7 @@ import net.minecraft.client.gui.GuiYesNoCallback; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.server.MinecraftServer; -import noppes.npcs.CustomNpcs; -import noppes.npcs.DataScript; +import noppes.npcs.controllers.data.DataScript; import noppes.npcs.NoppesStringUtils; import noppes.npcs.client.Client; import noppes.npcs.client.NoppesUtil; diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index 066ef7193..dac601506 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -67,7 +67,13 @@ public class ScriptController { for(ScriptEngineFactory fac : manager.getEngineFactories()){ if(fac.getExtensions().isEmpty()) continue; - fac.getScriptEngine(); + ScriptEngine scriptEngine = fac.getScriptEngine(); + try { + scriptEngine.put("$RunTest",null); + } catch (Exception e) { + continue; + } + String ext = "." + fac.getExtensions().get(0).toLowerCase(); LogWriter.info(fac.getLanguageName() + ": " + ext); languages.put(fac.getLanguageName(), ext); diff --git a/src/main/java/noppes/npcs/DataScript.java b/src/main/java/noppes/npcs/controllers/data/DataScript.java similarity index 93% rename from src/main/java/noppes/npcs/DataScript.java rename to src/main/java/noppes/npcs/controllers/data/DataScript.java index 883550e11..1fdaee109 100644 --- a/src/main/java/noppes/npcs/DataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/DataScript.java @@ -1,4 +1,4 @@ -package noppes.npcs; +package noppes.npcs.controllers.data; import java.util.*; @@ -10,6 +10,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import noppes.npcs.EventHooks; import noppes.npcs.constants.EnumScriptType; import noppes.npcs.controllers.ScriptContainer; import noppes.npcs.controllers.IScriptHandler; @@ -58,7 +59,14 @@ public class DataScript implements IScriptHandler { public void readFromNBT(NBTTagCompound compound) { scripts = readScript(compound.getTagList("ScriptsContainers", 10)); - scriptLanguage = compound.getString("ScriptLanguage"); + this.scriptLanguage = compound.getString("ScriptLanguage"); + if (!ScriptController.Instance.languages.containsKey(scriptLanguage)) { + if (!ScriptController.Instance.languages.isEmpty()) { + this.scriptLanguage = (String) ScriptController.Instance.languages.keySet().toArray()[0]; + } else { + this.scriptLanguage = "ECMAScript"; + } + } enabled = compound.getBoolean("ScriptEnabled"); } diff --git a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java index f4e548b1b..50c449e3c 100644 --- a/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/ForgeDataScript.java @@ -38,6 +38,13 @@ public class ForgeDataScript implements IScriptHandler { public void readFromNBT(NBTTagCompound compound) { this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this); this.scriptLanguage = compound.getString("ScriptLanguage"); + if (!ScriptController.Instance.languages.containsKey(scriptLanguage)) { + if (!ScriptController.Instance.languages.isEmpty()) { + this.scriptLanguage = (String) ScriptController.Instance.languages.keySet().toArray()[0]; + } else { + this.scriptLanguage = "ECMAScript"; + } + } this.enabled = compound.getBoolean("ScriptEnabled"); } diff --git a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java index 621a6877b..24ea16816 100644 --- a/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/NPCDataScript.java @@ -41,6 +41,13 @@ public class NPCDataScript implements IScriptHandler { public void readFromNBT(NBTTagCompound compound) { this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this); this.scriptLanguage = compound.getString("ScriptLanguage"); + if (!ScriptController.Instance.languages.containsKey(scriptLanguage)) { + if (!ScriptController.Instance.languages.isEmpty()) { + this.scriptLanguage = (String) ScriptController.Instance.languages.keySet().toArray()[0]; + } else { + this.scriptLanguage = "ECMAScript"; + } + } this.enabled = compound.getBoolean("ScriptEnabled"); this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java index 7f8ea2e60..94e464571 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerDataScript.java @@ -47,6 +47,13 @@ public class PlayerDataScript implements IScriptHandler { public void readFromNBT(NBTTagCompound compound) { this.scripts = NBTTags.GetScript(compound.getTagList("Scripts", 10), this); this.scriptLanguage = compound.getString("ScriptLanguage"); + if (!ScriptController.Instance.languages.containsKey(scriptLanguage)) { + if (!ScriptController.Instance.languages.isEmpty()) { + this.scriptLanguage = (String) ScriptController.Instance.languages.keySet().toArray()[0]; + } else { + this.scriptLanguage = "ECMAScript"; + } + } this.enabled = compound.getBoolean("ScriptEnabled"); this.console = NBTTags.GetLongStringMap(compound.getTagList("ScriptConsole", 10)); } diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index 904b11d15..b637b4f17 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -62,17 +62,11 @@ import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumPotionType; import noppes.npcs.constants.EnumRoleType; import noppes.npcs.constants.EnumStandingType; -import noppes.npcs.controllers.data.Dialog; -import noppes.npcs.controllers.data.DialogOption; -import noppes.npcs.controllers.data.Faction; +import noppes.npcs.controllers.data.*; import noppes.npcs.controllers.FactionController; -import noppes.npcs.controllers.data.Line; import noppes.npcs.controllers.LinkedNpcController; import noppes.npcs.controllers.LinkedNpcController.LinkedData; import noppes.npcs.controllers.PlayerDataController; -import noppes.npcs.controllers.data.PlayerQuestData; -import noppes.npcs.controllers.data.QuestData; -import noppes.npcs.controllers.data.DataTransform; import noppes.npcs.entity.data.DataTimers; import noppes.npcs.roles.JobBard; import noppes.npcs.roles.JobFollower;