|
| 1 | +package com.denizenscript.clientizen.scripts; |
| 2 | + |
| 3 | +import com.denizenscript.clientizen.network.Channels; |
| 4 | +import com.denizenscript.clientizen.network.DataDeserializer; |
| 5 | +import com.denizenscript.clientizen.network.NetworkManager; |
| 6 | +import com.denizenscript.denizencore.DenizenCore; |
| 7 | +import com.denizenscript.denizencore.objects.ObjectFetcher; |
| 8 | +import com.denizenscript.denizencore.objects.core.ScriptTag; |
| 9 | +import com.denizenscript.denizencore.scripts.ScriptHelper; |
| 10 | +import com.denizenscript.denizencore.tags.TagContext; |
| 11 | +import com.denizenscript.denizencore.utilities.CoreConfiguration; |
| 12 | +import com.denizenscript.denizencore.utilities.CoreUtilities; |
| 13 | +import com.denizenscript.denizencore.utilities.ScriptUtilities; |
| 14 | +import com.denizenscript.denizencore.utilities.YamlConfiguration; |
| 15 | +import com.denizenscript.denizencore.utilities.debugging.Debug; |
| 16 | + |
| 17 | +import java.util.Map; |
| 18 | + |
| 19 | +public class ClientScriptHandler { |
| 20 | + |
| 21 | + public static void init() { |
| 22 | + NetworkManager.registerInChannel(Channels.SET_SCRIPTS, ClientScriptHandler::loadScriptsFrom); |
| 23 | + NetworkManager.registerInChannel(Channels.RUN_SCRIPT, ClientScriptHandler::handleScriptRun); |
| 24 | + } |
| 25 | + |
| 26 | + public static void loadScriptsFrom(DataDeserializer data) { |
| 27 | + Map<String, String> scriptsMap = data.readStringMap(); |
| 28 | + DenizenCore.runOnMainThread(() -> { |
| 29 | + ScriptHelper.buildAdditionalScripts.clear(); |
| 30 | + for (Map.Entry<String, String> entry : scriptsMap.entrySet()) { |
| 31 | + ScriptHelper.buildAdditionalScripts.add(scripts -> scripts.add(YamlConfiguration.load(ScriptHelper.clearComments(entry.getKey(), entry.getValue(), true)))); |
| 32 | + } |
| 33 | + DenizenCore.reloadScripts(true, null); |
| 34 | + }); |
| 35 | + } |
| 36 | + |
| 37 | + public static void handleScriptRun(DataDeserializer data) { |
| 38 | + String scriptStr = data.readString(); |
| 39 | + String path = data.readNullable(data::readString); |
| 40 | + Map<String, String> defMap = data.readStringMap(); |
| 41 | + DenizenCore.runOnMainThread(() -> { |
| 42 | + ScriptTag script = ScriptTag.valueOf(scriptStr, CoreUtilities.noDebugContext); |
| 43 | + if (script == null) { |
| 44 | + if (CoreConfiguration.debugExtraInfo) { |
| 45 | + Debug.echoError("Invalid script name to run received from server: " + scriptStr + "."); |
| 46 | + } |
| 47 | + return; |
| 48 | + } |
| 49 | + ScriptUtilities.createAndStartQueue(script.getContainer(), path, null, null, queue -> { |
| 50 | + TagContext context = DenizenCore.implementation.getTagContext(script.getContainer()); |
| 51 | + for (Map.Entry<String, String> entry : defMap.entrySet()) { |
| 52 | + queue.addDefinition(entry.getKey(), ObjectFetcher.pickObjectFor(entry.getValue(), context)); |
| 53 | + } |
| 54 | + }, null, "SERVER_RUN:" + script.getContainer().getName(), null, null); |
| 55 | + }); |
| 56 | + } |
| 57 | +} |
0 commit comments