package net.minecraft.server.commands; import com.mojang.authlib.GameProfile; import com.mojang.brigadier.CommandDispatcher; import java.util.HashSet; import java.util.Set; import java.util.UUID; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.commands.arguments.UuidArgument; import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerConfigurationPacketListenerImpl; public class DebugConfigCommand { public static void register(CommandDispatcher dispatcher) { dispatcher.register( Commands.literal("debugconfig") .requires(commandSourceStack -> commandSourceStack.hasPermission(3)) .then( Commands.literal("config") .then( Commands.argument("target", EntityArgument.player()) .executes(commandContext -> config(commandContext.getSource(), EntityArgument.getPlayer(commandContext, "target"))) ) ) .then( Commands.literal("unconfig") .then( Commands.argument("target", UuidArgument.uuid()) .suggests( (commandContext, suggestionsBuilder) -> SharedSuggestionProvider.suggest(getUuidsInConfig(commandContext.getSource().getServer()), suggestionsBuilder) ) .executes(commandContext -> unconfig(commandContext.getSource(), UuidArgument.getUuid(commandContext, "target"))) ) ) ); } private static Iterable getUuidsInConfig(MinecraftServer server) { Set set = new HashSet(); for (Connection connection : server.getConnection().getConnections()) { if (connection.getPacketListener() instanceof ServerConfigurationPacketListenerImpl serverConfigurationPacketListenerImpl) { set.add(serverConfigurationPacketListenerImpl.getOwner().getId().toString()); } } return set; } private static int config(CommandSourceStack source, ServerPlayer target) { GameProfile gameProfile = target.getGameProfile(); target.connection.switchToConfig(); source.sendSuccess(() -> Component.literal("Switched player " + gameProfile.getName() + "(" + gameProfile.getId() + ") to config mode"), false); return 1; } private static int unconfig(CommandSourceStack source, UUID target) { for (Connection connection : source.getServer().getConnection().getConnections()) { if (connection.getPacketListener() instanceof ServerConfigurationPacketListenerImpl serverConfigurationPacketListenerImpl && serverConfigurationPacketListenerImpl.getOwner().getId().equals(target)) { serverConfigurationPacketListenerImpl.returnToWorld(); } } source.sendFailure(Component.literal("Can't find player to unconfig")); return 0; } }