summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit/command
diff options
context:
space:
mode:
authormbax <matt@phozop.net>2014-02-03 22:16:14 -0700
committerturt2live <travpc@gmail.com>2014-02-07 23:49:44 -0700
commitf5689165ad8daa6a1fa94b95a1e58a4b84fc65a3 (patch)
tree514cc9b0bbfdb17c53e8c384a968015571a8f9e2 /src/main/java/org/bukkit/command
parent21b8ff719e35dfec381c304cbc771e238025174d (diff)
downloadbukkit-f5689165ad8daa6a1fa94b95a1e58a4b84fc65a3.tar
bukkit-f5689165ad8daa6a1fa94b95a1e58a4b84fc65a3.tar.gz
bukkit-f5689165ad8daa6a1fa94b95a1e58a4b84fc65a3.tar.lz
bukkit-f5689165ad8daa6a1fa94b95a1e58a4b84fc65a3.tar.xz
bukkit-f5689165ad8daa6a1fa94b95a1e58a4b84fc65a3.zip
Add banning API and resolve associated command issues. Adds BUKKIT-3535.
Fixes BUKKIT-5371 and BUKKIT-4285 Prior to this commit, ban reasons were not supported by banning commands. Additionally, the player(s) affected by the ban-ip command would not have been removed from the server via a kick. The Bukkit API lacked support for modifying various attributes associated with bans, such as the reason and expiration date. This caused various plugins to use external or other means to store a ban reason, making the built-in banning system on the server partially useless. Now the ban commands will accept reasons for the bans as well as kick the player from the server once banned. That means that if an IP is banned that all players using that IP will be removed from the server. The API provided now supports editing the ban reason, creation date, expiration date and source. The ban list has also been created to provide this information more easily. Editing the data requires an implementing plugin to manually save the information with the provided method in BanEntry or BanList once changes have been made. The addition of this API has deprecated the use of OfflinePlayer#setBanned() as it has been replaced by BanList#addBan().
Diffstat (limited to 'src/main/java/org/bukkit/command')
-rw-r--r--src/main/java/org/bukkit/command/defaults/BanCommand.java6
-rw-r--r--src/main/java/org/bukkit/command/defaults/BanIpCommand.java21
-rw-r--r--src/main/java/org/bukkit/command/defaults/BanListCommand.java19
-rw-r--r--src/main/java/org/bukkit/command/defaults/PardonCommand.java3
4 files changed, 36 insertions, 13 deletions
diff --git a/src/main/java/org/bukkit/command/defaults/BanCommand.java b/src/main/java/org/bukkit/command/defaults/BanCommand.java
index 69b12135..df891b80 100644
--- a/src/main/java/org/bukkit/command/defaults/BanCommand.java
+++ b/src/main/java/org/bukkit/command/defaults/BanCommand.java
@@ -2,7 +2,9 @@ package org.bukkit.command.defaults;
import java.util.List;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
+import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@@ -27,8 +29,8 @@ public class BanCommand extends VanillaCommand {
return false;
}
- // TODO: Ban Reason support
- Bukkit.getOfflinePlayer(args[0]).setBanned(true);
+ String reason = args.length > 0 ? StringUtils.join(args, ' ', 1, args.length) : null;
+ Bukkit.getBanList(BanList.Type.NAME).addBan(args[0], reason, null, sender.getName());
Player player = Bukkit.getPlayer(args[0]);
if (player != null) {
diff --git a/src/main/java/org/bukkit/command/defaults/BanIpCommand.java b/src/main/java/org/bukkit/command/defaults/BanIpCommand.java
index 0d7b2997..6f7c8bd8 100644
--- a/src/main/java/org/bukkit/command/defaults/BanIpCommand.java
+++ b/src/main/java/org/bukkit/command/defaults/BanIpCommand.java
@@ -3,7 +3,9 @@ package org.bukkit.command.defaults;
import java.util.List;
import java.util.regex.Pattern;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
+import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
@@ -30,9 +32,10 @@ public class BanIpCommand extends VanillaCommand {
return false;
}
- // TODO: Ban Reason support
+ String reason = args.length > 0 ? StringUtils.join(args, ' ', 1, args.length) : null;
+
if (ipValidity.matcher(args[0]).matches()) {
- processIPBan(args[0], sender);
+ processIPBan(args[0], sender, reason);
} else {
Player player = Bukkit.getPlayer(args[0]);
@@ -41,15 +44,21 @@ public class BanIpCommand extends VanillaCommand {
return false;
}
- processIPBan(player.getAddress().getAddress().getHostAddress(), sender);
+ processIPBan(player.getAddress().getAddress().getHostAddress(), sender, reason);
}
return true;
}
- private void processIPBan(String ip, CommandSender sender) {
- // TODO: Kick on ban
- Bukkit.banIP(ip);
+ private void processIPBan(String ip, CommandSender sender, String reason) {
+ Bukkit.getBanList(BanList.Type.IP).addBan(ip, reason, null, sender.getName());
+
+ // Find all matching players and kick
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ if (player.getAddress().getAddress().getHostAddress().equals(ip)) {
+ player.kickPlayer("You have been IP banned.");
+ }
+ }
Command.broadcastCommandMessage(sender, "Banned IP Address " + ip);
}
diff --git a/src/main/java/org/bukkit/command/defaults/BanListCommand.java b/src/main/java/org/bukkit/command/defaults/BanListCommand.java
index 45f2ea03..262a2371 100644
--- a/src/main/java/org/bukkit/command/defaults/BanListCommand.java
+++ b/src/main/java/org/bukkit/command/defaults/BanListCommand.java
@@ -4,8 +4,10 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.Validate;
+import org.bukkit.BanEntry;
+import org.bukkit.BanList;
import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
+import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.util.StringUtil;
@@ -25,9 +27,18 @@ public class BanListCommand extends VanillaCommand {
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
if (!testPermission(sender)) return true;
- // TODO: ips support
+ BanList.Type banType = BanList.Type.NAME;
+ if (args.length > 0) {
+ if (args[0].equalsIgnoreCase("ips")) {
+ banType = BanList.Type.IP;
+ } else if (!args[0].equalsIgnoreCase("players")) {
+ sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
+ return false;
+ }
+ }
+
StringBuilder message = new StringBuilder();
- OfflinePlayer[] banlist = Bukkit.getServer().getBannedPlayers().toArray(new OfflinePlayer[0]);
+ BanEntry[] banlist = Bukkit.getBanList(banType).getBanEntries().toArray(new BanEntry[0]);
for (int x = 0; x < banlist.length; x++) {
if (x != 0) {
@@ -37,7 +48,7 @@ public class BanListCommand extends VanillaCommand {
message.append(", ");
}
}
- message.append(banlist[x].getName());
+ message.append(banlist[x].getTarget());
}
sender.sendMessage("There are " + banlist.length + " total banned players:");
diff --git a/src/main/java/org/bukkit/command/defaults/PardonCommand.java b/src/main/java/org/bukkit/command/defaults/PardonCommand.java
index 692f0f26..82c7a954 100644
--- a/src/main/java/org/bukkit/command/defaults/PardonCommand.java
+++ b/src/main/java/org/bukkit/command/defaults/PardonCommand.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.Validate;
+import org.bukkit.BanList;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
@@ -29,7 +30,7 @@ public class PardonCommand extends VanillaCommand {
return false;
}
- Bukkit.getOfflinePlayer(args[0]).setBanned(false);
+ Bukkit.getBanList(BanList.Type.NAME).pardon(args[0]);
Command.broadcastCommandMessage(sender, "Pardoned " + args[0]);
return true;
}