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> 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); }); } }