diff --git a/src/main/java/kamkeel/npcs/command/ScriptCommand.java b/src/main/java/kamkeel/npcs/command/ScriptCommand.java index 41415cb81..61b380dbd 100644 --- a/src/main/java/kamkeel/npcs/command/ScriptCommand.java +++ b/src/main/java/kamkeel/npcs/command/ScriptCommand.java @@ -12,6 +12,7 @@ public class ScriptCommand extends CommandKamkeelBase { @SubCommand(desc = "Reload scripts data and folders.") public Boolean reload(ICommandSender sender, String args[]) { ScriptController.Instance.loadCategories(); + ScriptController.Instance.syncClientScripts(null); if (ScriptController.Instance.loadPlayerScripts()) sendResult(sender, "Reload player scripts successfully"); diff --git a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java index 7cea2467e..231eeecac 100644 --- a/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java +++ b/src/main/java/kamkeel/npcs/network/packets/request/script/ScriptFilesPacket.java @@ -5,22 +5,20 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import kamkeel.npcs.network.*; import kamkeel.npcs.network.enums.EnumRequestPacket; -import kamkeel.npcs.network.packets.data.large.GuiDataPacket; import kamkeel.npcs.util.ByteBufUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.nbt.NBTTagString; import noppes.npcs.CustomNpcsPermissions; -import noppes.npcs.config.ConfigScript; +import noppes.npcs.NBTTags; import noppes.npcs.controllers.ScriptController; import java.io.IOException; -import java.util.List; +import java.util.HashMap; +import java.util.Map; public final class ScriptFilesPacket extends AbstractPacket { - public static String packetName = "Request|ScriptLanguages"; + public static String packetName = "Request|ScriptFiles"; private String lang; @@ -38,7 +36,7 @@ public final class ScriptFilesPacket extends AbstractPacket { @Override public PacketChannel getChannel() { - return PacketHandler.REQUEST_PACKET; + return PacketHandler.DATA_PACKET; } @Override @@ -49,33 +47,49 @@ public final class ScriptFilesPacket extends AbstractPacket { @SideOnly(Side.CLIENT) @Override public void sendData(ByteBuf out) throws IOException { - ByteBufUtils.writeString(out, this.lang); + ByteBufUtils.writeNBT(out, getScriptsNbt(lang)); } @Override public void receiveData(ByteBuf in, EntityPlayer player) throws IOException { - if (!(player instanceof EntityPlayerMP)) - return; + NBTTagCompound compound = ByteBufUtils.readNBT(in); - if (!ConfigScript.canScript(player, CustomNpcsPermissions.SCRIPT)) - return; + String lang = compound.getString("lang"); + String ext = compound.getString("ext"); + Map scripts = NBTTags.getStringStringMap(compound.getTagList("Scripts", 10)); - lang = ByteBufUtils.readString(in); + ScriptController cont = ScriptController.Instance; + if (!cont.languages.containsKey(lang) && ext != null) + cont.languages.put(lang, ext); + for (Map.Entry script : scripts.entrySet()) { + cont.scripts.put(script.getKey(), script.getValue()); + } + } + + public NBTTagCompound getScriptsNbt(String lang) { NBTTagCompound compound = new NBTTagCompound(); - List files = ScriptController.Instance.getScripts(lang); + compound.setString("lang", lang); - if (!files.isEmpty()) { - NBTTagList scripts = new NBTTagList(); - for (String script : files) - scripts.appendTag(new NBTTagString(script)); - compound.setTag("Scripts", scripts); + Map scriptss = new HashMap<>(); + String ext = ScriptController.Instance.languages.get(lang); + if (ext != null) { + for (Map.Entry script : ScriptController.Instance.scripts.entrySet()) { + if (script.getKey().endsWith(ext)) + scriptss.put(script.getKey(), script.getValue()); + } + compound.setString("ext", ext); } - GuiDataPacket.sendGuiData((EntityPlayerMP) player, compound); + compound.setTag("Scripts", NBTTags.nbtStringStringMap(scriptss)); + return compound; } - public static void Get(String lang) { - PacketClient.sendClient(new ScriptFilesPacket(lang)); + public static void sendToAll(String lang) { + PacketHandler.Instance.sendToAll(new ScriptFilesPacket(lang)); + } + + public static void sendToPlayer(EntityPlayerMP player, String lang) { + PacketHandler.Instance.sendToPlayer(new ScriptFilesPacket(lang), player); } } diff --git a/src/main/java/noppes/npcs/ServerTickHandler.java b/src/main/java/noppes/npcs/ServerTickHandler.java index 62f53399b..9cbc331e2 100644 --- a/src/main/java/noppes/npcs/ServerTickHandler.java +++ b/src/main/java/noppes/npcs/ServerTickHandler.java @@ -7,15 +7,11 @@ import cpw.mods.fml.common.gameevent.TickEvent.Phase; import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.controllers.SyncController; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.MinecraftServer; import net.minecraft.world.WorldServer; -import noppes.npcs.client.AnalyticsTracking; +import noppes.npcs.controllers.ScriptController; import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.controllers.data.action.ActionManager; -import java.net.InetAddress; -import java.net.UnknownHostException; - public class ServerTickHandler { @SubscribeEvent @@ -64,6 +60,7 @@ public class ServerTickHandler { ProfileController.Instance.login(player); SyncController.beginLogin(player); SyncController.syncEffects(player); + ScriptController.Instance.syncClientScripts(player); } @SubscribeEvent diff --git a/src/main/java/noppes/npcs/controllers/ScriptController.java b/src/main/java/noppes/npcs/controllers/ScriptController.java index 210f71a76..b0787a282 100644 --- a/src/main/java/noppes/npcs/controllers/ScriptController.java +++ b/src/main/java/noppes/npcs/controllers/ScriptController.java @@ -3,7 +3,9 @@ package noppes.npcs.controllers; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import jdk.nashorn.api.scripting.ClassFilter; import jdk.nashorn.api.scripting.NashornScriptEngineFactory; +import kamkeel.npcs.network.packets.request.script.ScriptFilesPacket; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; @@ -230,6 +232,14 @@ public class ScriptController { customNPCThread.execute(this::saveGlobalNpcScripts); } + public void syncClientScripts(EntityPlayerMP player) { + if (player != null) { + ScriptFilesPacket.sendToPlayer(player, "Java"); + } else { + ScriptFilesPacket.sendToAll("Java"); + } + } + public void loadCategories() { dir = new File(CustomNpcs.getWorldSaveDirectory(), "scripts"); if (!dir.exists())