diff --git a/module/cmd-kick/nb-configuration.xml b/module/cmd-kick/nb-configuration.xml new file mode 100644 index 00000000..7e465924 --- /dev/null +++ b/module/cmd-kick/nb-configuration.xml @@ -0,0 +1,31 @@ + + + + + + project + NEW_LINE + NEW_LINE + NEW_LINE + true + true + true + true + true + true + true + true + true + true + + diff --git a/module/cmd-kick/pom.xml b/module/cmd-kick/pom.xml new file mode 100644 index 00000000..a43919ef --- /dev/null +++ b/module/cmd-kick/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + + net.md-5 + bungeecord-module + 1.19-R0.1-SNAPSHOT + ../pom.xml + + + net.md-5 + bungeecord-module-cmd-kick + 1.19-R0.1-SNAPSHOT + jar + + cmd_kick + Provides the gkick command + diff --git a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java new file mode 100644 index 00000000..6dab5cc8 --- /dev/null +++ b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java @@ -0,0 +1,72 @@ +package net.md_5.bungee.module.cmd.kick; + +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableSet; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; +import net.md_5.bungee.api.plugin.TabExecutor; + +public class CommandKick extends Command implements TabExecutor +{ + + public CommandKick() + { + super( "gkick", "bungeecord.command.kick" ); + } + + @Override + public void execute(CommandSender sender, String[] args) + { + if ( args.length == 0 ) + { + sender.sendMessage( ProxyServer.getInstance().getTranslation( "username_needed" ) ); + } else + { + ProxiedPlayer player = ProxyServer.getInstance().getPlayer( args[0] ); + + if ( player == null ) + { + sender.sendMessage( TextComponent.fromLegacyText( ProxyServer.getInstance().getTranslation( "user_not_online" ) ) ); + return; + } + + if ( args.length == 1 ) + { + player.disconnect( TextComponent.fromLegacyText( ProxyServer.getInstance().getTranslation( "kick_message" ) ) ); + } else + { + String[] reason = new String[ args.length - 1 ]; + System.arraycopy( args, 1, reason, 0, reason.length ); + player.disconnect( TextComponent.fromLegacyText( ChatColor.translateAlternateColorCodes( '&', Joiner.on( ' ' ).join( reason ) ) ) ); + } + } + } + + @Override + public Iterable onTabComplete(CommandSender sender, String[] args) + { + if ( args.length == 1 ) + { + Set matches = new HashSet<>(); + String search = args[0].toLowerCase( Locale.ROOT ); + for ( ProxiedPlayer player : ProxyServer.getInstance().getPlayers() ) + { + if ( player.getName().toLowerCase( Locale.ROOT ).startsWith( search ) ) + { + matches.add( player.getName() ); + } + } + return matches; + } else + { + return ImmutableSet.of(); + } + } +} diff --git a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java new file mode 100644 index 00000000..82b2332b --- /dev/null +++ b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java @@ -0,0 +1,13 @@ +package net.md_5.bungee.module.cmd.kick; + +import net.md_5.bungee.api.plugin.Plugin; + +public class PluginKick extends Plugin +{ + + @Override + public void onEnable() + { + getProxy().getPluginManager().registerCommand( this, new CommandKick() ); + } +} diff --git a/module/cmd-kick/src/main/resources/plugin.yml b/module/cmd-kick/src/main/resources/plugin.yml new file mode 100644 index 00000000..142d6901 --- /dev/null +++ b/module/cmd-kick/src/main/resources/plugin.yml @@ -0,0 +1,5 @@ +name: ${project.name} +main: net.md_5.bungee.module.cmd.kick.PluginKick +version: ${describe} +description: ${project.description} +author: ${module.author} diff --git a/module/pom.xml b/module/pom.xml index cbc26049..961560dc 100644 --- a/module/pom.xml +++ b/module/pom.xml @@ -21,6 +21,7 @@ cmd-alert cmd-find + cmd-kick cmd-list cmd-send cmd-server diff --git a/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java b/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java index 2691b8b8..150d8739 100644 --- a/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java +++ b/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java @@ -95,7 +95,7 @@ public class YamlConfig implements ConfigurationAdapter } ) ); set( "permissions.admin", Arrays.asList( new String[] { - "bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload" + "bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload", "bungeecord.command.kick" } ) ); } diff --git a/proxy/src/main/resources/messages.properties b/proxy/src/main/resources/messages.properties index 2b05a2dd..58380d4a 100644 --- a/proxy/src/main/resources/messages.properties +++ b/proxy/src/main/resources/messages.properties @@ -39,3 +39,4 @@ command_perms_groups=\u00a76You have the following groups: {0} command_perms_permission=\u00a79- {0} command_ip=\u00a79IP of {0} is {1} illegal_chat_characters=\u00a7cillegal characters in chat ({0}) +kick_message=\u00a7cYou have been kicked off the proxy.