Better-Whitelist/src/client/java/io/gitlab/jfronny/betterwhitelist/client/BetterWhitelistClient.java

60 lines
2.6 KiB
Java
Raw Normal View History

2023-03-12 20:46:47 +01:00
package io.gitlab.jfronny.betterwhitelist.client;
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
import io.gitlab.jfronny.muscript.compiler.Parser;
import io.gitlab.jfronny.muscript.data.Scope;
import io.gitlab.jfronny.muscript.data.dynamic.DCallable;
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
import io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal;
import net.fabricmc.api.*;
import net.fabricmc.fabric.api.client.networking.v1.ClientLoginNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
2023-03-12 21:00:56 +01:00
import net.minecraft.client.MinecraftClient;
2023-03-12 20:46:47 +01:00
import net.minecraft.network.PacketByteBuf;
2023-03-12 21:00:56 +01:00
import net.minecraft.text.TextContent;
2023-03-12 20:46:47 +01:00
2023-03-12 21:00:56 +01:00
import java.util.*;
2023-03-12 20:46:47 +01:00
import java.util.concurrent.CompletableFuture;
@Environment(EnvType.CLIENT)
public class BetterWhitelistClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
ClientLoginNetworking.registerGlobalReceiver(BetterWhitelist.LOGIN_CHANNEL, (client, handler, buf, listenerAdder) -> {
Scope fork = BetterWhitelist.SCOPE.fork();
2023-03-12 21:00:56 +01:00
fork.set("resourcePacks", MinecraftClient.getInstance()
.getResourcePackManager()
.getEnabledProfiles()
.stream()
.map(s -> DFinal.of(Map.of(
"name", DFinal.of(s.getName()),
"displayName", DFinal.of(toString(s.getDisplayName().getContent())),
"description", DFinal.of(toString(s.getDescription().getContent()))
)))
.toList());
2023-03-12 20:46:47 +01:00
String scriptSource = buf.readString();
BetterWhitelist.LOG.info("Received challenge: " + scriptSource);
DCallable script = Parser.parse(scriptSource).asDynamicExpr().get(fork).asCallable();
int paramSize = buf.readInt();
List<Dynamic<?>> params = new LinkedList<>();
for (int i = 0; i < paramSize; i++) {
2023-03-12 21:34:52 +01:00
params.add(Parser.parse(buf.readString()).asDynamicExpr().get(fork));
2023-03-12 20:46:47 +01:00
}
String resultString = Dynamic.serialize(script.call(DFinal.of(params)));
BetterWhitelist.LOG.info("Sending result: " + resultString);
PacketByteBuf resultBuf = PacketByteBufs.create();
resultBuf.writeString(resultString);
return CompletableFuture.completedFuture(resultBuf);
});
}
2023-03-12 21:00:56 +01:00
private String toString(TextContent text) {
StringBuilder sb = new StringBuilder();
text.visit(asString -> {
sb.append(asString);
return Optional.empty();
});
return sb.toString();
}
2023-03-12 20:46:47 +01:00
}