From 1ebf86f5750492bea54ea28cab82a7ae1111a2d6 Mon Sep 17 00:00:00 2001 From: itqop Date: Sat, 18 Oct 2025 22:55:47 +0300 Subject: [PATCH] stable --- src/main/java/org/itqop/whitelist/Config.java | 11 +- .../itqop/whitelist/WhitelistCommands.java | 100 +++++++++++------- 2 files changed, 71 insertions(+), 40 deletions(-) diff --git a/src/main/java/org/itqop/whitelist/Config.java b/src/main/java/org/itqop/whitelist/Config.java index 5cad88c..269576e 100644 --- a/src/main/java/org/itqop/whitelist/Config.java +++ b/src/main/java/org/itqop/whitelist/Config.java @@ -28,7 +28,7 @@ public final class Config { static final ModConfigSpec SPEC = BUILDER.build(); - + public static String apiBaseUrl; public static String apiKey; public static int requestTimeout; @@ -46,4 +46,13 @@ public final class Config { enableLogging = ENABLE_LOGGING.get(); enableWhitelist = ENABLE_WHITELIST.get(); } + + public static void save() { + ENABLE_WHITELIST.set(enableWhitelist); + ENABLE_LOGGING.set(enableLogging); + API_BASE_URL.set(apiBaseUrl); + API_KEY.set(apiKey); + REQUEST_TIMEOUT.set(requestTimeout); + SPEC.save(); + } } diff --git a/src/main/java/org/itqop/whitelist/WhitelistCommands.java b/src/main/java/org/itqop/whitelist/WhitelistCommands.java index 28bbf5d..dfc2318 100644 --- a/src/main/java/org/itqop/whitelist/WhitelistCommands.java +++ b/src/main/java/org/itqop/whitelist/WhitelistCommands.java @@ -8,13 +8,10 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.network.chat.Component; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.List; -import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -55,25 +52,36 @@ public class WhitelistCommands { private static int enableWhitelist(CommandContext ctx) { boolean changed = setEnableWhitelistPersisted(ctx, true); if (!changed) { - ctx.getSource().sendFailure(Component.literal("Whitelist already enabled")); + dispatchBack(ctx, () -> + ctx.getSource().sendFailure(Component.literal("Whitelist already enabled")) + ); return 0; } - ctx.getSource().sendSuccess(() -> Component.literal("Whitelist enabled"), true); + dispatchBack(ctx, () -> + ctx.getSource().sendSuccess(() -> Component.literal("Whitelist enabled"), true) + ); return 1; } private static int disableWhitelist(CommandContext ctx) { boolean changed = setEnableWhitelistPersisted(ctx, false); if (!changed) { - ctx.getSource().sendFailure(Component.literal("Whitelist already disabled")); + dispatchBack(ctx, () -> + ctx.getSource().sendFailure(Component.literal("Whitelist already disabled")) + ); return 0; } - ctx.getSource().sendSuccess(() -> Component.literal("Whitelist disabled"), true); + dispatchBack(ctx, () -> + ctx.getSource().sendSuccess(() -> Component.literal("Whitelist disabled"), true) + ); return 1; } private static int whitelistStatus(CommandContext ctx) { - ctx.getSource().sendSuccess(() -> Component.literal("Whitelist is " + (Config.enableWhitelist ? "ON" : "OFF")), false); + dispatchBack(ctx, () -> + ctx.getSource().sendSuccess(() -> + Component.literal("Whitelist is " + (Config.enableWhitelist ? "ON" : "OFF")), false) + ); return 1; } @@ -88,7 +96,10 @@ public class WhitelistCommands { String addedBy = getSourceName(ctx); String addedAt = Instant.now().toString(); - sendOnServer(ctx, Component.literal("Adding player to whitelist: " + player), false); + dispatchBack(ctx, () -> + ctx.getSource().sendSuccess(() -> + Component.literal("Adding player to whitelist: " + player), false) + ); CompletableFuture fut = API.addPlayer(player, addedBy, Instant.parse(addedAt), null, true, reason); @@ -96,9 +107,11 @@ public class WhitelistCommands { fut.thenAccept(entry -> dispatchBack(ctx, () -> { if (entry != null) { - ctx.getSource().sendSuccess(() -> Component.literal("Player " + player + " added"), false); + ctx.getSource().sendSuccess(() -> + Component.literal("Player " + player + " added"), false); } else { - ctx.getSource().sendFailure(Component.literal("Failed to add " + player)); + ctx.getSource().sendFailure( + Component.literal("Failed to add " + player)); } }) ); @@ -107,17 +120,27 @@ public class WhitelistCommands { private static int removePlayer(CommandContext ctx) { String player = StringArgumentType.getString(ctx, "player"); - sendOnServer(ctx, Component.literal("Removing player from whitelist: " + player), false); + + dispatchBack(ctx, () -> + ctx.getSource().sendSuccess(() -> + Component.literal("Removing player from whitelist: " + player), false) + ); + API.removePlayer(player).thenAccept(success -> dispatchBack(ctx, () -> { if (success) { - ctx.getSource().sendSuccess(() -> Component.literal("Player " + player + " removed"), false); - ServerPlayer sp = ctx.getSource().getServer().getPlayerList().getPlayerByName(player); + ctx.getSource().sendSuccess(() -> + Component.literal("Player " + player + " removed"), false); + + ServerPlayer sp = ctx.getSource().getServer() + .getPlayerList().getPlayerByName(player); if (sp != null) { - sp.connection.disconnect(Component.literal("Removed from whitelist")); + sp.connection.disconnect( + Component.literal("Removed from whitelist")); } } else { - ctx.getSource().sendFailure(Component.literal("Failed to remove " + player)); + ctx.getSource().sendFailure( + Component.literal("Failed to remove " + player)); } }) ); @@ -126,27 +149,23 @@ public class WhitelistCommands { private static int checkPlayer(CommandContext ctx) { String player = StringArgumentType.getString(ctx, "player"); + API.checkPlayer(player).thenAccept(resp -> dispatchBack(ctx, () -> { if (resp != null && resp.isSuccess()) { - String msg = resp.isWhitelisted() ? "is in whitelist" : "is NOT in whitelist"; - ctx.getSource().sendSuccess(() -> Component.literal(player + " " + msg), false); + String msg = resp.isWhitelisted() ? + "is in whitelist" : "is NOT in whitelist"; + ctx.getSource().sendSuccess(() -> + Component.literal(player + " " + msg), false); } else { - ctx.getSource().sendFailure(Component.literal("Check failed for " + player)); + ctx.getSource().sendFailure( + Component.literal("Check failed for " + player)); } }) ); return 1; } - private static void sendOnServer(CommandContext ctx, Component msg, boolean broadcast) { - if (broadcast) { - ctx.getSource().getServer().getPlayerList().broadcastSystemMessage(msg, false); - } else { - ctx.getSource().sendSuccess(() -> msg, false); - } - } - private static void dispatchBack(CommandContext ctx, Runnable task) { ctx.getSource().getServer().execute(task); } @@ -161,18 +180,21 @@ public class WhitelistCommands { private static boolean setEnableWhitelistPersisted(CommandContext ctx, boolean enabled) { boolean changed = Config.enableWhitelist != enabled; - Config.enableWhitelist = enabled; - WhitelistApiClient.refreshConfigFromSpec(); - ctx.getSource().getServer().submit(() -> {}).join(); + if (changed) { + Config.enableWhitelist = enabled; + WhitelistApiClient.refreshConfigFromSpec(); + + CompletableFuture.runAsync(() -> { + try { + Config.save(); + } catch (Exception e) { + dispatchBack(ctx, () -> + ctx.getSource().sendFailure( + Component.literal("Failed to save config: " + e.getMessage())) + ); + } + }); + } return changed; } - - private static String resolveUuid(MinecraftServer srv, String player) { - try { - ServerPlayer sp = srv.getPlayerList().getPlayerByName(player); - if (sp != null) return sp.getUUID().toString(); - } catch (Exception ignored) {} - UUID offline = UUID.nameUUIDFromBytes(("OfflinePlayer:" + player).getBytes(StandardCharsets.UTF_8)); - return offline.toString(); - } }