diff --git a/src/client/java/io/gitlab/jfronny/betterwhitelist/client/BetterWhitelistClient.java b/src/client/java/io/gitlab/jfronny/betterwhitelist/client/BetterWhitelistClient.java index 21cb886..480d37f 100644 --- a/src/client/java/io/gitlab/jfronny/betterwhitelist/client/BetterWhitelistClient.java +++ b/src/client/java/io/gitlab/jfronny/betterwhitelist/client/BetterWhitelistClient.java @@ -9,10 +9,11 @@ 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.client.MinecraftClient; import net.minecraft.network.PacketByteBuf; +import net.minecraft.text.TextContent; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.concurrent.CompletableFuture; @Environment(EnvType.CLIENT) @@ -21,6 +22,16 @@ public class BetterWhitelistClient implements ClientModInitializer { public void onInitializeClient() { ClientLoginNetworking.registerGlobalReceiver(BetterWhitelist.LOGIN_CHANNEL, (client, handler, buf, listenerAdder) -> { Scope fork = BetterWhitelist.SCOPE.fork(); + 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()); String scriptSource = buf.readString(); BetterWhitelist.LOG.info("Received challenge: " + scriptSource); DCallable script = Parser.parse(scriptSource).asDynamicExpr().get(fork).asCallable(); @@ -36,4 +47,13 @@ public class BetterWhitelistClient implements ClientModInitializer { return CompletableFuture.completedFuture(resultBuf); }); } + + private String toString(TextContent text) { + StringBuilder sb = new StringBuilder(); + text.visit(asString -> { + sb.append(asString); + return Optional.empty(); + }); + return sb.toString(); + } }