Spaces:
Build error
Build error
package net.minecraft.server.commands; | |
import com.google.common.net.InetAddresses; | |
import com.mojang.brigadier.CommandDispatcher; | |
import com.mojang.brigadier.arguments.StringArgumentType; | |
import com.mojang.brigadier.context.CommandContext; | |
import com.mojang.brigadier.exceptions.CommandSyntaxException; | |
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; | |
import java.util.List; | |
import javax.annotation.Nullable; | |
import net.minecraft.commands.CommandSourceStack; | |
import net.minecraft.commands.Commands; | |
import net.minecraft.commands.arguments.MessageArgument; | |
import net.minecraft.commands.arguments.selector.EntitySelector; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.server.level.ServerPlayer; | |
import net.minecraft.server.players.IpBanList; | |
import net.minecraft.server.players.IpBanListEntry; | |
public class BanIpCommands { | |
private static final SimpleCommandExceptionType ERROR_INVALID_IP = new SimpleCommandExceptionType(Component.translatable("commands.banip.invalid")); | |
private static final SimpleCommandExceptionType ERROR_ALREADY_BANNED = new SimpleCommandExceptionType(Component.translatable("commands.banip.failed")); | |
public static void register(CommandDispatcher<CommandSourceStack> p_136528_) { | |
p_136528_.register( | |
Commands.literal("ban-ip") | |
.requires(p_136532_ -> p_136532_.hasPermission(3)) | |
.then( | |
Commands.argument("target", StringArgumentType.word()) | |
.executes(p_136538_ -> banIpOrName(p_136538_.getSource(), StringArgumentType.getString(p_136538_, "target"), null)) | |
.then( | |
Commands.argument("reason", MessageArgument.message()) | |
.executes( | |
p_136530_ -> banIpOrName( | |
p_136530_.getSource(), | |
StringArgumentType.getString(p_136530_, "target"), | |
MessageArgument.getMessage(p_136530_, "reason") | |
) | |
) | |
) | |
) | |
); | |
} | |
private static int banIpOrName(CommandSourceStack p_136534_, String p_136535_, Component p_136536_)throws CommandSyntaxException { | |
if (InetAddresses.isInetAddress(p_136535_)) { | |
return banIp(p_136534_, p_136535_, p_136536_); | |
} else { | |
ServerPlayer serverplayer = p_136534_.getServer().getPlayerList().getPlayerByName(p_136535_); | |
if (serverplayer != null) { | |
return banIp(p_136534_, serverplayer.getIpAddress(), p_136536_); | |
} else { | |
throw ERROR_INVALID_IP.create(); | |
} | |
} | |
} | |
private static int banIp(CommandSourceStack p_136540_, String p_136541_, Component p_136542_)throws CommandSyntaxException { | |
IpBanList ipbanlist = p_136540_.getServer().getPlayerList().getIpBans(); | |
if (ipbanlist.isBanned(p_136541_)) { | |
throw ERROR_ALREADY_BANNED.create(); | |
} else { | |
List<ServerPlayer> list = p_136540_.getServer().getPlayerList().getPlayersWithAddress(p_136541_); | |
IpBanListEntry ipbanlistentry = new IpBanListEntry(p_136541_, null, p_136540_.getTextName(), null, p_136542_ == null ? null : p_136542_.getString()); | |
ipbanlist.add(ipbanlistentry); | |
p_136540_.sendSuccess(() -> Component.translatable("commands.banip.success", p_136541_, ipbanlistentry.getReason()), true); | |
if (!list.isEmpty()) { | |
p_136540_.sendSuccess(() -> Component.translatable("commands.banip.info", list.size(), EntitySelector.joinNames(list)), true); | |
} | |
for (ServerPlayer serverplayer : list) { | |
serverplayer.connection.disconnect(Component.translatable("multiplayer.disconnect.ip_banned")); | |
} | |
return list.size(); | |
} | |
} | |
} |