Skip to content

Commit

Permalink
Change "ncp ban ..." command to use the vanilla command.
Browse files Browse the repository at this point in the history
This should be better in case the vanilla command allows UUIDs some day.
At least during testing in uuids did not work, so we added a warning
message if uuids are used for banning.

Using player names for actions should be safe anyway.
  • Loading branch information
asofold committed Jun 15, 2014
1 parent 754fea9 commit 5d8f77f
Showing 1 changed file with 42 additions and 10 deletions.
@@ -1,9 +1,10 @@
package fr.neatmonster.nocheatplus.command.actions;

import java.util.List;
import java.util.UUID;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
Expand All @@ -14,6 +15,7 @@
import fr.neatmonster.nocheatplus.logging.LogUtil;
import fr.neatmonster.nocheatplus.permissions.Permissions;
import fr.neatmonster.nocheatplus.players.DataManager;
import fr.neatmonster.nocheatplus.utilities.IdUtil;

public class BanCommand extends BaseCommand {

Expand All @@ -23,32 +25,62 @@ public BanCommand(JavaPlugin plugin) {

@Override
public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {

// TODO: Consider supporting vanilla syntax or removing this command :p.

// Args contains "ban" as first arg.
if (args.length < 2) return false;
final String name = args[1];
if (args.length < 2) {
return false;
}
final String name = args[1].trim();
final String reason;
if (args.length > 2) reason = AbstractCommand.join(args, 2);
else reason = "";
if (args.length > 2) {
reason = AbstractCommand.join(args, 2);
}
else {
reason = "";
}
ban(sender, name, reason);
return true;
}

/**
*
* @param sender
* @param name Trimmed name.
* @param reason
*/
void ban(CommandSender sender, String name, String reason) {
final Server server = Bukkit.getServer();
Player player = DataManager.getPlayer(name);
// Pro logic below.
if (player == null && !IdUtil.isValidMinecraftUserName(name)) {
UUID id = IdUtil.UUIDFromStringSafe(name);
if (id != null) {
LogUtil.logWarning("Banning by UUID might not work (" + id.toString()+"), relay to the vanilla command.");
} else {
LogUtil.logWarning("Might not be a valid user name: " + name);
}
}
if (player != null){
player.kickPlayer(reason);
}
OfflinePlayer offlinePlayer = Bukkit.getServer().getOfflinePlayer(name);
offlinePlayer.setBanned(true);
LogUtil.logInfo("[NoCheatPlus] (" + sender.getName() + ") Banned " + offlinePlayer.getName() + " : " + reason);
// Relay to the server command for compatibility reasons.
server.dispatchCommand(server.getConsoleSender(), "ban " + name);
logBan(sender, player, name, reason);

}

private void logBan(CommandSender sender, Player player, String name, String reason) {
LogUtil.logInfo("[NoCheatPlus] (" + sender.getName() + ") Banned " + name + (player != null ? ("/" + player.getName()) : "") + " : " + reason);
}

/* (non-Javadoc)
* @see fr.neatmonster.nocheatplus.command.AbstractCommand#onTabComplete(org.bukkit.command.CommandSender, org.bukkit.command.Command, java.lang.String, java.lang.String[])
*/
@Override
public List<String> onTabComplete(CommandSender sender, Command command,
String alias, String[] args) {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
// TODO: Consider adding player names and other.
return null;
}

Expand Down

0 comments on commit 5d8f77f

Please sign in to comment.