Compare commits
No commits in common. "master" and "1.0.3" have entirely different histories.
@ -1,17 +1,17 @@
|
||||
plugins {
|
||||
id("jfmod") version "1.6-SNAPSHOT"
|
||||
id("jfmod") version "1.5-SNAPSHOT"
|
||||
}
|
||||
|
||||
allprojects { group = "io.gitlab.jfronny" }
|
||||
base.archivesName = "better-whitelist"
|
||||
|
||||
val muscriptVersion = "2.0.0-SNAPSHOT"
|
||||
val fabricVersion = "0.89.1+1.20.2"
|
||||
val muscriptVersion = "1.5-SNAPSHOT"
|
||||
jfMod {
|
||||
minecraftVersion = "1.21"
|
||||
minecraftVersion = "1.20.2"
|
||||
yarn("build.1")
|
||||
loaderVersion = "0.15.11"
|
||||
libJfVersion = "3.16.0"
|
||||
fabricApiVersion = "0.100.1+1.21"
|
||||
loaderVersion = "0.14.22"
|
||||
libJfVersion = "3.13.1"
|
||||
|
||||
modrinth {
|
||||
projectId = "better-whitelist"
|
||||
@ -20,16 +20,12 @@ jfMod {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
modImplementation("net.fabricmc.fabric-api:fabric-networking-api-v1")
|
||||
modImplementation("net.fabricmc.fabric-api:fabric-command-api-v2")
|
||||
include(modImplementation("io.gitlab.jfronny:muscript-all:$muscriptVersion")!!)
|
||||
modImplementation("io.gitlab.jfronny.libjf:libjf-base")
|
||||
modImplementation(fabricApi.module("fabric-networking-api-v1", fabricVersion))
|
||||
modImplementation(fabricApi.module("fabric-command-api-v2", fabricVersion))
|
||||
include(modImplementation("io.gitlab.jfronny:muscript:$muscriptVersion")!!)
|
||||
modImplementation("io.gitlab.jfronny.libjf:libjf-base:${jfMod.libJfVersion.get()}")
|
||||
|
||||
// Dev env
|
||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil")
|
||||
modLocalRuntime("com.terraformersmc:modmenu:11.0.0-beta.1")
|
||||
// for modmenu
|
||||
modLocalRuntime("net.fabricmc.fabric-api:fabric-resource-loader-v0")
|
||||
modLocalRuntime("net.fabricmc.fabric-api:fabric-screen-api-v1")
|
||||
modLocalRuntime("net.fabricmc.fabric-api:fabric-key-binding-api-v1")
|
||||
modLocalRuntime("io.gitlab.jfronny.libjf:libjf-devutil:${jfMod.libJfVersion.get()}")
|
||||
modLocalRuntime("com.terraformersmc:modmenu:8.0.0-beta.2")
|
||||
}
|
||||
|
@ -1,16 +1,12 @@
|
||||
package io.gitlab.jfronny.betterwhitelist.client;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.gitlab.jfronny.betterwhitelist.DSerializer;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.ChallengePacket;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.HandshakePacket;
|
||||
import io.gitlab.jfronny.muscript.core.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.data.additional.DFinal;
|
||||
import io.gitlab.jfronny.muscript.data.additional.context.Scope;
|
||||
import io.gitlab.jfronny.muscript.compiler.MuScriptVersion;
|
||||
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.parser.Parser;
|
||||
import io.gitlab.jfronny.muscript.runtime.Runtime;
|
||||
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;
|
||||
@ -21,41 +17,38 @@ import net.minecraft.text.TextContent;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
import static io.gitlab.jfronny.muscript.ast.context.ExprUtils.asDynamic;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class BetterWhitelistClient implements ClientModInitializer {
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
BetterWhitelist.initialize();
|
||||
|
||||
ClientLoginNetworking.registerGlobalReceiver(BetterWhitelist.HANDSHAKE_CHANNEL, (client, handler, buf, listenerAdder) -> {
|
||||
// buf also contains the server version
|
||||
PacketByteBuf resultBuf = PacketByteBufs.create();
|
||||
HandshakePacket.CODEC.encode(resultBuf, new HandshakePacket(BetterWhitelist.PROTOCOL_VERSION));
|
||||
resultBuf.writeInt(BetterWhitelist.PROTOCOL_VERSION);
|
||||
return CompletableFuture.completedFuture(resultBuf);
|
||||
});
|
||||
|
||||
ClientLoginNetworking.registerGlobalReceiver(BetterWhitelist.CHALLENGE_CHANNEL, (client, handler, buf, listenerAdder) -> {
|
||||
ChallengePacket packet = ChallengePacket.CODEC.decode(buf);
|
||||
Scope fork = BetterWhitelist.SCOPE.fork();
|
||||
fork.set("resourcePacks", MinecraftClient.getInstance()
|
||||
.getResourcePackManager()
|
||||
.getEnabledProfiles()
|
||||
.stream()
|
||||
.map(s -> DFinal.of(Map.of(
|
||||
"name", DFinal.of(s.getId()),
|
||||
"name", DFinal.of(s.getName()),
|
||||
"displayName", DFinal.of(toString(s.getDisplayName().getContent())),
|
||||
"description", DFinal.of(toString(s.getDescription().getContent()))
|
||||
)))
|
||||
.toList());
|
||||
BetterWhitelist.LOG.info("Received challenge: " + packet.challenge());
|
||||
DCallable script = Runtime.evaluate(asDynamic(Parser.parse(MuScriptVersion.DEFAULT, packet.challenge())), fork).asCallable();
|
||||
String scriptSource = buf.readString();
|
||||
BetterWhitelist.LOG.info("Received challenge: " + scriptSource);
|
||||
DCallable script = Parser.parse(MuScriptVersion.DEFAULT, scriptSource).asDynamicExpr().get(fork).asCallable();
|
||||
int paramSize = buf.readInt();
|
||||
List<Dynamic> params = new LinkedList<>();
|
||||
for (String param : packet.params()) {
|
||||
params.add(Runtime.evaluate(asDynamic(Parser.parse(MuScriptVersion.DEFAULT, param)), fork));
|
||||
for (int i = 0; i < paramSize; i++) {
|
||||
params.add(Parser.parse(MuScriptVersion.DEFAULT, buf.readString()).asDynamicExpr().get(fork));
|
||||
}
|
||||
String resultString = DSerializer.serialize(script.call(DFinal.of(params)));
|
||||
String resultString = Dynamic.serialize(script.call(DFinal.of(params)));
|
||||
BetterWhitelist.LOG.info("Sending result: " + resultString);
|
||||
PacketByteBuf resultBuf = PacketByteBufs.create();
|
||||
resultBuf.writeString(resultString);
|
||||
|
@ -1,15 +1,11 @@
|
||||
package io.gitlab.jfronny.betterwhitelist;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.ChallengePacket;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.ChallengeResponsePacket;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.HandshakePacket;
|
||||
import io.gitlab.jfronny.commons.logger.SystemLoggerPlus;
|
||||
import io.gitlab.jfronny.muscript.core.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.data.additional.DFinal;
|
||||
import io.gitlab.jfronny.muscript.data.additional.context.Scope;
|
||||
import io.gitlab.jfronny.muscript.data.additional.libs.StandardLib;
|
||||
import io.gitlab.jfronny.commons.logging.Logger;
|
||||
import io.gitlab.jfronny.muscript.compiler.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.libs.StandardLib;
|
||||
import io.gitlab.jfronny.muscript.data.Scope;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.*;
|
||||
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.fabricmc.loader.api.ModContainer;
|
||||
import net.fabricmc.loader.api.metadata.ModDependency;
|
||||
@ -19,13 +15,13 @@ import net.minecraft.util.Identifier;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static io.gitlab.jfronny.muscript.data.additional.DFinal.of;
|
||||
import static io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal.of;
|
||||
|
||||
public class BetterWhitelist {
|
||||
public static final String MOD_ID = "better-whitelist";
|
||||
public static final SystemLoggerPlus LOG = SystemLoggerPlus.forName(MOD_ID);
|
||||
public static final Identifier HANDSHAKE_CHANNEL = Identifier.of(MOD_ID, "handshake");
|
||||
public static final Identifier CHALLENGE_CHANNEL = Identifier.of(MOD_ID, "challenge");
|
||||
public static final Logger LOG = Logger.forName(MOD_ID);
|
||||
public static final Identifier HANDSHAKE_CHANNEL = new Identifier(MOD_ID, "handshake");
|
||||
public static final Identifier CHALLENGE_CHANNEL = new Identifier(MOD_ID, "challenge");
|
||||
public static final int PROTOCOL_VERSION = 1;
|
||||
public static final ModMetadata MOD_METADATA = FabricLoader.getInstance().getModContainer(MOD_ID).orElseThrow().getMetadata();
|
||||
public static final Scope SCOPE = StandardLib.createScope(MuScriptVersion.DEFAULT);
|
||||
@ -45,16 +41,12 @@ public class BetterWhitelist {
|
||||
.<Dynamic>map(BetterWhitelist::wrap)
|
||||
.orElse(new DNull());
|
||||
}).set("println", args -> {
|
||||
String s = args.isEmpty() ? "" : args.size() == 1 ? args.get(0).asString().getValue() : args.toString();
|
||||
String s = args.size() == 0 ? "" : args.size() == 1 ? args.get(0).asString().getValue() : args.toString();
|
||||
System.out.println(s);
|
||||
return of(s);
|
||||
});
|
||||
}
|
||||
|
||||
public static void initialize() {
|
||||
// Initialization for things like registering packet types would go here
|
||||
}
|
||||
|
||||
private static DObject wrap(ModContainer mod) {
|
||||
return of(Map.of(
|
||||
"id", of(mod.getMetadata().getId()),
|
||||
|
@ -1,25 +0,0 @@
|
||||
package io.gitlab.jfronny.betterwhitelist;
|
||||
|
||||
import io.gitlab.jfronny.muscript.ast.DynamicExpr;
|
||||
import io.gitlab.jfronny.muscript.ast.context.ExprUtils;
|
||||
import io.gitlab.jfronny.muscript.core.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.data.additional.DataExprMapper;
|
||||
import io.gitlab.jfronny.muscript.data.additional.libs.StandardLib;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||
import io.gitlab.jfronny.muscript.parser.Parser;
|
||||
import io.gitlab.jfronny.muscript.runtime.Runtime;
|
||||
import io.gitlab.jfronny.muscript.serialize.Decompiler;
|
||||
|
||||
import static io.gitlab.jfronny.muscript.ast.context.ExprUtils.asDynamic;
|
||||
|
||||
public class DSerializer {
|
||||
public static String serialize(Dynamic d) {
|
||||
return Decompiler.decompile(DataExprMapper.map(d));
|
||||
}
|
||||
|
||||
public static Dynamic deserialize(String s) {
|
||||
DynamicExpr dynamicExpr = asDynamic(Parser.parse(MuScriptVersion.DEFAULT, s));
|
||||
if (!ExprUtils.isDirect(dynamicExpr)) throw new RuntimeException("Invalid dynamic");
|
||||
return Runtime.evaluate(dynamicExpr, StandardLib.createScope(MuScriptVersion.DEFAULT));
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package io.gitlab.jfronny.betterwhitelist.packet;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.network.codec.PacketCodec;
|
||||
import net.minecraft.network.codec.PacketCodecs;
|
||||
import net.minecraft.network.packet.CustomPayload;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public record ChallengePacket(String challenge, List<String> params) implements CustomPayload {
|
||||
public static final Id<ChallengePacket> ID = new CustomPayload.Id<>(BetterWhitelist.CHALLENGE_CHANNEL);
|
||||
public static final PacketCodec<PacketByteBuf, ChallengePacket> CODEC = PacketCodec.tuple(
|
||||
PacketCodecs.STRING, ChallengePacket::challenge,
|
||||
PacketCodecs.<ByteBuf, String>toList().apply(PacketCodecs.STRING), ChallengePacket::params,
|
||||
ChallengePacket::new);
|
||||
|
||||
@Override
|
||||
public Id<? extends CustomPayload> getId() {
|
||||
return ID;
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package io.gitlab.jfronny.betterwhitelist.packet;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.codec.PacketCodec;
|
||||
import net.minecraft.network.codec.PacketCodecs;
|
||||
import net.minecraft.network.packet.CustomPayload;
|
||||
|
||||
public record ChallengeResponsePacket(String message) implements CustomPayload {
|
||||
public static final CustomPayload.Id<ChallengeResponsePacket> ID = new CustomPayload.Id<>(BetterWhitelist.CHALLENGE_CHANNEL);
|
||||
public static final PacketCodec<ByteBuf, ChallengeResponsePacket> CODEC = PacketCodecs.STRING.xmap(ChallengeResponsePacket::new, ChallengeResponsePacket::message);
|
||||
|
||||
@Override
|
||||
public Id<? extends CustomPayload> getId() {
|
||||
return ID;
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
package io.gitlab.jfronny.betterwhitelist.packet;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.network.codec.PacketCodec;
|
||||
import net.minecraft.network.codec.PacketCodecs;
|
||||
import net.minecraft.network.packet.CustomPayload;
|
||||
|
||||
public record HandshakePacket(int version) implements CustomPayload {
|
||||
public static final CustomPayload.Id<HandshakePacket> ID = new CustomPayload.Id<>(BetterWhitelist.HANDSHAKE_CHANNEL);
|
||||
public static final PacketCodec<ByteBuf, HandshakePacket> CODEC = PacketCodecs.INTEGER.xmap(HandshakePacket::new, HandshakePacket::version);
|
||||
|
||||
@Override
|
||||
public Id<? extends CustomPayload> getId() {
|
||||
return ID;
|
||||
}
|
||||
}
|
@ -3,21 +3,18 @@ package io.gitlab.jfronny.betterwhitelist.server;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.gitlab.jfronny.betterwhitelist.DSerializer;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.ChallengeResponsePacket;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.HandshakePacket;
|
||||
import io.gitlab.jfronny.betterwhitelist.server.mixin.ServerLoginNetworkHandlerAccessor;
|
||||
import io.gitlab.jfronny.commons.StringFormatter;
|
||||
import io.gitlab.jfronny.muscript.ast.context.Script;
|
||||
import io.gitlab.jfronny.muscript.core.LocationalException;
|
||||
import io.gitlab.jfronny.muscript.core.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.parser.Parser;
|
||||
import io.gitlab.jfronny.muscript.compiler.MuScriptVersion;
|
||||
import io.gitlab.jfronny.muscript.compiler.Parser;
|
||||
import io.gitlab.jfronny.muscript.data.Script;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||
import io.gitlab.jfronny.muscript.error.LocationalException;
|
||||
import net.fabricmc.api.DedicatedServerModInitializer;
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.networking.v1.*;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.network.ServerLoginNetworkHandler;
|
||||
import net.minecraft.text.Text;
|
||||
@ -38,8 +35,6 @@ public class BetterWhitelistServer implements DedicatedServerModInitializer {
|
||||
|
||||
@Override
|
||||
public void onInitializeServer() {
|
||||
BetterWhitelist.initialize();
|
||||
|
||||
CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
|
||||
dispatcher.register(
|
||||
literal(BetterWhitelist.MOD_ID)
|
||||
@ -53,9 +48,9 @@ public class BetterWhitelistServer implements DedicatedServerModInitializer {
|
||||
GameProfile gp = profile(handler);
|
||||
Challenge challenge = new Challenge(gp, sender);
|
||||
challenges.put(gp, challenge);
|
||||
PacketByteBuf buf = PacketByteBufs.create();
|
||||
HandshakePacket.CODEC.encode(buf, new HandshakePacket(BetterWhitelist.PROTOCOL_VERSION));
|
||||
challenge.sender.sendPacket(BetterWhitelist.HANDSHAKE_CHANNEL, buf);
|
||||
PacketByteBuf handshake = PacketByteBufs.create();
|
||||
handshake.writeInt(BetterWhitelist.PROTOCOL_VERSION);
|
||||
challenge.sender.sendPacket(BetterWhitelist.HANDSHAKE_CHANNEL, handshake);
|
||||
synchronizer.waitFor(challenge.challengeCompleted);
|
||||
});
|
||||
|
||||
@ -64,15 +59,13 @@ public class BetterWhitelistServer implements DedicatedServerModInitializer {
|
||||
handler.disconnect(Text.literal("This server requires better-whitelist to be installed"));
|
||||
return;
|
||||
}
|
||||
LoginPacketSender rns = (LoginPacketSender) responseSender;
|
||||
HandshakePacket packet = HandshakePacket.CODEC.decode(buf);
|
||||
try {
|
||||
if (packet.version() != BetterWhitelist.PROTOCOL_VERSION) {
|
||||
if (buf.readInt() != BetterWhitelist.PROTOCOL_VERSION) {
|
||||
handler.disconnect(Text.literal("This server requires a version of better-whitelist supporting the protocol version " + BetterWhitelist.PROTOCOL_VERSION));
|
||||
return;
|
||||
}
|
||||
Challenge challenge = challenges.get(profile(handler));
|
||||
challenge.sender = rns;
|
||||
challenge.sender = responseSender;
|
||||
Util.getMainWorkerExecutor().execute(new FutureTask<>(() -> {
|
||||
try {
|
||||
ServerScope.run(script, challenge);
|
||||
@ -105,13 +98,12 @@ public class BetterWhitelistServer implements DedicatedServerModInitializer {
|
||||
handler.disconnect(Text.literal("This server requires better-whitelist to be installed"));
|
||||
return;
|
||||
}
|
||||
LoginPacketSender rns = (LoginPacketSender) responseSender;
|
||||
ChallengeResponsePacket packet = ChallengeResponsePacket.CODEC.decode(buf);
|
||||
try {
|
||||
Challenge ch = challenges.get(profile(handler));
|
||||
ch.sender = rns;
|
||||
BetterWhitelist.LOG.info("Got response from " + ch.profile.getName() + ": " + packet.message());
|
||||
ch.response.complete(DSerializer.deserialize(packet.message()));
|
||||
ch.sender = responseSender;
|
||||
String response = buf.readString();
|
||||
BetterWhitelist.LOG.info("Got response from " + ch.profile.getName() + ": " + response);
|
||||
ch.response.complete(Dynamic.deserialize(response));
|
||||
} catch (Throwable t) {
|
||||
BetterWhitelist.LOG.error("Failed login", t);
|
||||
handler.disconnect(Text.literal("Invalid dynamic"));
|
||||
|
@ -2,16 +2,15 @@ package io.gitlab.jfronny.betterwhitelist.server;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||
import net.fabricmc.fabric.api.networking.v1.LoginPacketSender;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
|
||||
class Challenge {
|
||||
public final ManualFuture<?> challengeCompleted = new ManualFuture<>();
|
||||
public final ManualFuture<Dynamic> response = new ManualFuture<>();
|
||||
public final GameProfile profile;
|
||||
public LoginPacketSender sender;
|
||||
public PacketSender sender;
|
||||
|
||||
public Challenge(GameProfile profile, LoginPacketSender sender) {
|
||||
public Challenge(GameProfile profile, PacketSender sender) {
|
||||
this.profile = profile;
|
||||
this.sender = sender;
|
||||
}
|
||||
|
@ -1,15 +1,12 @@
|
||||
package io.gitlab.jfronny.betterwhitelist.server;
|
||||
|
||||
import io.gitlab.jfronny.betterwhitelist.BetterWhitelist;
|
||||
import io.gitlab.jfronny.betterwhitelist.DSerializer;
|
||||
import io.gitlab.jfronny.betterwhitelist.packet.ChallengePacket;
|
||||
import io.gitlab.jfronny.muscript.ast.context.Script;
|
||||
import io.gitlab.jfronny.muscript.core.LocationalException;
|
||||
import io.gitlab.jfronny.muscript.data.additional.DFinal;
|
||||
import io.gitlab.jfronny.muscript.data.additional.context.Scope;
|
||||
import io.gitlab.jfronny.muscript.data.Scope;
|
||||
import io.gitlab.jfronny.muscript.data.Script;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.DNull;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
|
||||
import io.gitlab.jfronny.muscript.runtime.Runtime;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal;
|
||||
import io.gitlab.jfronny.muscript.error.LocationalException;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
|
||||
@ -21,7 +18,7 @@ import java.util.concurrent.TimeoutException;
|
||||
public class ServerScope {
|
||||
public static Dynamic run(Script script, Challenge challenge) {
|
||||
try {
|
||||
return Runtime.run(script, fork(challenge));
|
||||
return script.run(fork(challenge));
|
||||
} catch (LocationalException le) {
|
||||
for (Throwable t = le; t != null; t = t.getCause()) {
|
||||
if (t instanceof ServerScope.AssertFail af) throw af;
|
||||
@ -37,12 +34,14 @@ public class ServerScope {
|
||||
return new DNull();
|
||||
}).set("challenge", args -> {
|
||||
if (args.isEmpty()) throw new IllegalArgumentException("Invalid number of arguments for challenge: expected 1 or more but got 0");
|
||||
String challengeString = DSerializer.serialize(args.get(0).asCallable());
|
||||
BetterWhitelist.LOG.info("Sending challenge to " + challenge.profile.getName() + ": " + challengeString);
|
||||
List<String> params = args.getValue().subList(1, args.size()).stream().map(DSerializer::serialize).toList();
|
||||
challenge.response.reset();
|
||||
PacketByteBuf buf = PacketByteBufs.create();
|
||||
ChallengePacket.CODEC.encode(buf, new ChallengePacket(challengeString, params));
|
||||
String challengeString = Dynamic.serialize(args.get(0).asCallable());
|
||||
BetterWhitelist.LOG.info("Sending challenge to " + challenge.profile.getName() + ": " + challengeString);
|
||||
buf.writeString(challengeString);
|
||||
List<? extends Dynamic> params = args.getValue().subList(1, args.size());
|
||||
buf.writeInt(params.size());
|
||||
params.forEach(p -> buf.writeString(Dynamic.serialize(p)));
|
||||
challenge.response.reset();
|
||||
challenge.sender.sendPacket(BetterWhitelist.CHALLENGE_CHANNEL, buf);
|
||||
try {
|
||||
return challenge.response.get(1, TimeUnit.SECONDS);
|
||||
|
Loading…
Reference in New Issue
Block a user