stable
This commit is contained in:
parent
215031ffff
commit
1ebf86f575
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> 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<WhitelistApiClient.WhitelistEntry> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> 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<CommandSourceStack> ctx, Runnable task) {
|
||||
ctx.getSource().getServer().execute(task);
|
||||
}
|
||||
|
|
@ -161,18 +180,21 @@ public class WhitelistCommands {
|
|||
|
||||
private static boolean setEnableWhitelistPersisted(CommandContext<CommandSourceStack> 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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue