40 lines
1.8 KiB
Java
40 lines
1.8 KiB
Java
|
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);
|
||
|
});
|
||
|
}
|
||
|
}
|