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

40 lines
1.8 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;
import net.minecraft.network.PacketByteBuf;
import java.util.LinkedList;
import java.util.List;
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();
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++) {
params.add(Dynamic.deserialize(buf.readString()));
}
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);
});
}
}