Skip to content

Commit bc24681

Browse files
authored
Cleanup script loading, support clientrun command (#13)
* Initial work * Cleanup scipt loading, async safety, queue id * Support sending nullable data, `path` is nullable * `ClientScriptHelper` to `ClientScriptHandler`
1 parent b5a63d5 commit bc24681

File tree

5 files changed

+69
-17
lines changed

5 files changed

+69
-17
lines changed

src/main/java/com/denizenscript/clientizen/Clientizen.java

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.denizenscript.clientizen.events.ClientizenScriptEventRegistry;
55
import com.denizenscript.clientizen.network.NetworkManager;
66
import com.denizenscript.clientizen.objects.ClientizenObjectRegistry;
7+
import com.denizenscript.clientizen.scripts.ClientScriptHandler;
78
import com.denizenscript.clientizen.scripts.commands.ClientizenCommandRegistry;
89
import com.denizenscript.clientizen.scripts.containers.ClientizenContainerRegistry;
910
import com.denizenscript.clientizen.tags.ClientizenTagContext;
@@ -74,6 +75,7 @@ public void onInitializeClient() {
7475
// Initialize Clientizen systems
7576
NetworkManager.init();
7677
ClientizenDebugScreen.register();
78+
ClientScriptHandler.init();
7779

7880
// Check for the client scripts folder
7981
File scriptsFolder = DenizenCore.implementation.getScriptFolder();

src/main/java/com/denizenscript/clientizen/network/Channels.java

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ public class Channels {
77
public static final Identifier SEND_CONFIRM = Clientizen.id("receive_confirmation");
88
public static final Identifier SET_SCRIPTS = Clientizen.id("set_scripts");
99
public static final Identifier FIRE_EVENT = Clientizen.id("fire_event");
10+
public static final Identifier RUN_SCRIPT = Clientizen.id("run_script");
1011
}

src/main/java/com/denizenscript/clientizen/network/DataDeserializer.java

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.HashMap;
88
import java.util.List;
99
import java.util.Map;
10+
import java.util.function.Supplier;
1011

1112
public class DataDeserializer {
1213

@@ -16,6 +17,10 @@ public DataDeserializer(ByteBuf buf) {
1617
this.buf = buf;
1718
}
1819

20+
public boolean readBoolean() {
21+
return buf.readBoolean();
22+
}
23+
1924
public int readInt() {
2025
return buf.readInt();
2126
}
@@ -69,4 +74,8 @@ public Map<String, List<String>> readStringListMap() {
6974
}
7075
return stringListMap;
7176
}
77+
78+
public <T> T readNullable(Supplier<T> readMethod) {
79+
return readBoolean() ? readMethod.get() : null;
80+
}
7281
}

src/main/java/com/denizenscript/clientizen/network/NetworkManager.java

-17
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
package com.denizenscript.clientizen.network;
22

3-
import com.denizenscript.denizencore.DenizenCore;
4-
import com.denizenscript.denizencore.scripts.ScriptHelper;
5-
import com.denizenscript.denizencore.utilities.YamlConfiguration;
63
import com.denizenscript.denizencore.utilities.debugging.Debug;
74
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
85
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
96
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
107
import net.minecraft.util.Identifier;
118

12-
import java.util.Map;
13-
149
public class NetworkManager {
1510

1611
public static void init() {
@@ -19,18 +14,6 @@ public static void init() {
1914
Debug.log("Sending join confirmation packet...");
2015
send(Channels.SEND_CONFIRM, null);
2116
}));
22-
23-
// Register receivers
24-
registerInChannel(Channels.SET_SCRIPTS, (message) -> {
25-
Map<String, String> scriptsMap = message.readStringMap();
26-
DenizenCore.runOnMainThread(() -> {
27-
ScriptHelper.buildAdditionalScripts.clear();
28-
for (Map.Entry<String, String> entry : scriptsMap.entrySet()) {
29-
ScriptHelper.buildAdditionalScripts.add(scripts -> scripts.add(YamlConfiguration.load(ScriptHelper.clearComments(entry.getKey(), entry.getValue(), true))));
30-
}
31-
DenizenCore.reloadScripts(true, null);
32-
});
33-
});
3417
}
3518

3619
public static void registerInChannel(Identifier channel, ClientizenReceiver receiver) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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

Comments
 (0)