From 38cc396299bd3164d228b4aa8999b17630dfec9f Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 4 Apr 2024 18:53:53 -0400 Subject: [PATCH] Async Save Scripts files after Edit --- .../java/noppes/npcs/PacketHandlerServer.java | 9 ++++++ .../npcs/controllers/ScriptController.java | 31 ++++++++++++++----- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/main/java/noppes/npcs/PacketHandlerServer.java b/src/main/java/noppes/npcs/PacketHandlerServer.java index 6a4a150ca..dd64be6ca 100644 --- a/src/main/java/noppes/npcs/PacketHandlerServer.java +++ b/src/main/java/noppes/npcs/PacketHandlerServer.java @@ -466,8 +466,11 @@ public class PacketHandlerServer{ if(type == EnumPacketServer.ScriptPlayerGet) { getScripts(data,buffer,player); } else if(type == EnumPacketServer.ScriptPlayerSave) { + int tab = buffer.getInt(buffer.readerIndex()); saveScripts(data,buffer,player); ScriptController.Instance.lastPlayerUpdate = System.currentTimeMillis(); + if(tab == -1) + ScriptController.Instance.savePlayerScriptsSync(); } } @@ -476,8 +479,11 @@ public class PacketHandlerServer{ if (type == EnumPacketServer.ScriptForgeGet) { getScripts(data,buffer,player); } else if (type == EnumPacketServer.ScriptForgeSave) { + int tab = buffer.getInt(buffer.readerIndex()); saveScripts(data,buffer,player); ScriptController.Instance.lastForgeUpdate = System.currentTimeMillis(); + if(tab == -1) + ScriptController.Instance.saveForgeScriptsSync(); } } @@ -486,8 +492,11 @@ public class PacketHandlerServer{ if(type == EnumPacketServer.ScriptGlobalNPCGet) { getScripts(data,buffer,player); } else if(type == EnumPacketServer.ScriptGlobalNPCSave) { + int tab = buffer.getInt(buffer.readerIndex()); saveScripts(data,buffer,player); ScriptController.Instance.lastGlobalNpcUpdate = System.currentTimeMillis(); + if(tab == -1) + ScriptController.Instance.saveGlobalScriptsSync(); } } diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index 2ff38be7b..73b872e8f 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -4,6 +4,7 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import jdk.nashorn.api.scripting.ClassFilter; import jdk.nashorn.api.scripting.NashornScriptEngineFactory; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; @@ -24,12 +25,11 @@ import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; +import java.io.*; import java.util.*; +import static noppes.npcs.util.CustomNPCsThreader.customNPCThread; + public class ScriptController { public static ScriptController Instance; @@ -42,9 +42,7 @@ public class ScriptController { public File dir; public NBTTagCompound compound = new NBTTagCompound(); - private boolean loaded = false; public boolean shouldSave = false; - public PlayerDataScript playerScripts = new PlayerDataScript((EntityPlayer)null); public long lastPlayerUpdate = 0L; @@ -55,7 +53,6 @@ public class ScriptController { public long lastGlobalNpcUpdate = 0L; public ScriptController(){ - loaded = false; Instance = this; manager = new ScriptEngineManager(); if(!ConfigScript.ScriptingEnabled) @@ -176,6 +173,26 @@ public class ScriptController { } } + public synchronized void saveForgeScriptsSync(){ + customNPCThread.execute(this::saveForgeScripts); + } + + public synchronized void savePlayerScriptsSync(){ + customNPCThread.execute(() -> { + File file = this.playerScriptsFile(); + try { + NBTJsonUtil.SaveFile(file, this.playerScripts.writeToNBT(new NBTTagCompound())); + this.playerScripts.lastInited = -1L; + } catch (IOException | JsonException var4) { + var4.printStackTrace(); + } + }); + } + + public synchronized void saveGlobalScriptsSync(){ + customNPCThread.execute(this::saveGlobalNpcScripts); + } + public void loadCategories(){ dir = new File(CustomNpcs.getWorldSaveDirectory(), "scripts"); if(!dir.exists())