diff --git a/buildnumber.properties b/buildnumber.properties
index 715ca5b3..3fef8e58 100644
--- a/buildnumber.properties
+++ b/buildnumber.properties
@@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
-#Fri Apr 11 17:22:29 CEST 2014
-build.number=730
+#Mon Apr 14 21:11:06 CEST 2014
+build.number=732
diff --git a/nbproject/project.properties b/nbproject/project.properties
index e2674b92..25dfac70 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -48,11 +48,11 @@ jar.archive.disabled=${jnlp.enabled}
jar.compress=false
jar.index=${jnlp.enabled}
javac.classpath=\
- ${libs.CraftBukkit.classpath}:\
${libs.WorldEdit.classpath}:\
${libs.DisguiseCraft.classpath}:\
${libs.Essentials.classpath}:\
- ${libs.BukkitTelnet.classpath}
+ ${libs.BukkitTelnet.classpath}:\
+ ${libs.CraftBukkit.classpath}
# Space-separated list of extra javac options
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
javac.deprecation=false
diff --git a/src/bans.yml b/src/bans.yml
new file mode 100644
index 00000000..58f93ee9
--- /dev/null
+++ b/src/bans.yml
@@ -0,0 +1,8 @@
+
+# Format: [IP-address]:[Last login name]:[Expiry unix timestamp (0 = never)][Banned by]:[Reason]
+ips:
+ - '192.168.1.254:LocalHost:DarthSalamon:0:IP ban example'
+
+# Format: [UUID]:[Last login name]:[Banned by]:[Expiry unix timestamp (0 = never)]:[Reason]
+uuids:
+ - '245d2f30-61fb-4840-9cd3-298b3920f4a4:Cobrex:DarthSalamon:0:UUID ban example'
\ No newline at end of file
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_doom.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_doom.java
index 884a069c..30a4444c 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_doom.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_doom.java
@@ -2,6 +2,8 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
@@ -11,7 +13,7 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE)
-@CommandParameters(description = "For the bad Superadmins.", usage = "/ ")
+@CommandParameters(description = "For the bad Superadmins", usage = "/ ")
public class Command_doom extends TFM_Command
{
@Override
@@ -36,7 +38,7 @@ public class Command_doom extends TFM_Command
TFM_Util.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
TFM_Util.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
- final String IP = player.getAddress().getAddress().getHostAddress().trim();
+ final String ip = player.getAddress().getAddress().getHostAddress().trim();
// remove from superadmin
if (TFM_AdminList.isSuperAdmin(player))
@@ -52,10 +54,10 @@ public class Command_doom extends TFM_Command
player.setOp(false);
// ban IP
- TFM_ServerInterface.banIP(IP, null, null, null);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
// ban name
- TFM_ServerInterface.banUsername(player.getName(), null, null, null);
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));
// set gamemode to survival
player.setGameMode(GameMode.SURVIVAL);
@@ -89,7 +91,7 @@ public class Command_doom extends TFM_Command
public void run()
{
// message
- TFM_Util.adminAction(sender.getName(), "Banning " + player.getName() + ", IP: " + IP, true);
+ TFM_Util.adminAction(sender.getName(), "Banning " + player.getName() + ", IP: " + ip, true);
// generate explosion
player.getWorld().createExplosion(player.getLocation(), 4F);
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gadmin.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gadmin.java
index 6b672966..309cac44 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gadmin.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gadmin.java
@@ -1,5 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
@@ -49,33 +51,33 @@ public class Command_gadmin extends TFM_Command
}
else if (mode.equals("nameban"))
{
- TFM_ServerInterface.banUsername(player.getName(), null, null, null);
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));
TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s.", player.getName()), true);
player.kickPlayer("Username banned by Administrator.");
}
else if (mode.equals("ipban"))
{
- String user_ip = player.getAddress().getAddress().getHostAddress();
- String[] ip_parts = user_ip.split("\\.");
+ String ip = player.getAddress().getAddress().getHostAddress();
+ String[] ip_parts = ip.split("\\.");
if (ip_parts.length == 4)
{
- user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
+ ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
}
- TFM_Util.adminAction(sender.getName(), String.format("Banning IP: %s.", player.getName(), user_ip), true);
- TFM_ServerInterface.banIP(user_ip, null, null, null);
+ TFM_Util.adminAction(sender.getName(), String.format("Banning IP: %s.", player.getName(), ip), true);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
player.kickPlayer("IP address banned by Administrator.");
}
else if (mode.equals("ban"))
{
- String user_ip = player.getAddress().getAddress().getHostAddress();
- String[] ip_parts = user_ip.split("\\.");
+ String ip = player.getAddress().getAddress().getHostAddress();
+ String[] ip_parts = ip.split("\\.");
if (ip_parts.length == 4)
{
- user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
+ ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
}
- TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", player.getName(), user_ip), true);
- TFM_ServerInterface.banIP(user_ip, null, null, null);
- TFM_ServerInterface.banUsername(player.getName(), null, null, null);
+ TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", player.getName(), ip), true);
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
player.kickPlayer("IP and username banned by Administrator.");
}
else if (mode.equals("op"))
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_glist.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_glist.java
index c212818e..33256c0e 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_glist.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_glist.java
@@ -4,10 +4,13 @@ import java.util.ArrayList;
import java.util.List;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerEntry;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
+import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -47,14 +50,14 @@ public class Command_glist extends TFM_Command
else if (args.length == 2)
{
String username;
- List ip_addresses = new ArrayList();
+ List ips = new ArrayList();
try
{
Player player = getPlayer(args[1]);
username = player.getName();
- ip_addresses.add(player.getAddress().getAddress().getHostAddress());
+ ips.add(player.getAddress().getAddress().getHostAddress());
}
catch (PlayerNotFoundException ex)
{
@@ -67,43 +70,43 @@ public class Command_glist extends TFM_Command
}
username = entry.getLastJoinName();
- ip_addresses = entry.getIps();
+ ips = entry.getIps();
}
String mode = args[0].toLowerCase();
if (mode.equalsIgnoreCase("ban"))
{
- TFM_Util.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ip_addresses, ","), true);
+ TFM_Util.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ips, ","), true);
Player player = server.getPlayerExact(username);
if (player != null)
{
- TFM_ServerInterface.banUsername(player.getName(), null, null, null);
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));
player.kickPlayer("You have been banned by " + sender.getName() + "\n If you think you have been banned wrongly, appeal here: http://www.totalfreedom.boards.net");
}
else
{
- TFM_ServerInterface.banUsername(username, null, null, null);
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(Bukkit.getOfflinePlayer(username).getUniqueId(), username));
}
- for (String ip_address : ip_addresses)
+ for (String ip : ips)
{
- TFM_ServerInterface.banIP(ip_address, null, null, null);
- String[] ip_address_parts = ip_address.split("\\.");
- TFM_ServerInterface.banIP(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*", null, null, null);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, username));
+ String[] ip_address_parts = ip.split("\\.");
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*", username));
}
}
else if (mode.equalsIgnoreCase("unban") || mode.equalsIgnoreCase("pardon"))
{
- TFM_Util.adminAction(sender.getName(), "Unbanning " + username + " and IPs: " + StringUtils.join(ip_addresses, ","), true);
+ TFM_Util.adminAction(sender.getName(), "Unbanning " + username + " and IPs: " + StringUtils.join(ips, ","), true);
- TFM_ServerInterface.unbanUsername(username);
+ TFM_BanManager.getInstance().unbanUuid(Bukkit.getOfflinePlayer(username).getUniqueId());
- for (String ip_address : ip_addresses)
+ for (String ip : ips)
{
- TFM_ServerInterface.unbanIP(ip_address);
- String[] ip_address_parts = ip_address.split("\\.");
- TFM_ServerInterface.unbanIP(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*");
+ TFM_BanManager.getInstance().unbanIp(ip);
+ String[] ipParts = ip.split("\\.");
+ TFM_BanManager.getInstance().unbanIp(ipParts[0] + "." + ipParts[1] + ".*.*");
}
}
else
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gtfo.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gtfo.java
index b7edd1ea..84437fef 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gtfo.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_gtfo.java
@@ -1,6 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.Bridge.TFM_WorldEditBridge;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_RollbackManager;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
@@ -36,10 +38,10 @@ public class Command_gtfo extends TFM_Command
return true;
}
- String ban_reason = null;
+ String reason = null;
if (args.length >= 2)
{
- ban_reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
+ reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
}
TFM_Util.bcastMsg(player.getName() + " has been a VERY naughty, naughty boy.", ChatColor.RED);
@@ -71,20 +73,21 @@ public class Command_gtfo extends TFM_Command
}
// ban IP address:
- String user_ip = player.getAddress().getAddress().getHostAddress();
- String[] ip_parts = user_ip.split("\\.");
- if (ip_parts.length == 4)
+ String ip = player.getAddress().getAddress().getHostAddress();
+ String[] ipParts = ip.split("\\.");
+ if (ipParts.length == 4)
{
- user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
+ ip = String.format("%s.%s.*.*", ipParts[0], ipParts[1]);
}
- TFM_Util.bcastMsg(String.format("Banning: %s, IP: %s.", player.getName(), user_ip), ChatColor.RED);
- TFM_ServerInterface.banIP(user_ip, ban_reason, null, null);
+ TFM_Util.bcastMsg(String.format("Banning: %s, IP: %s.", player.getName(), ip), ChatColor.RED);
+
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), sender.getName(), null, reason));
// ban username:
- TFM_ServerInterface.banUsername(player.getName(), ban_reason, null, null);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(player.getUniqueId(), player.getName(), sender.getName(), null, reason));
// kick Player:
- player.kickPlayer(ChatColor.RED + "GTFO" + (ban_reason != null ? ("\nReason: " + ChatColor.YELLOW + ban_reason) : ""));
+ player.kickPlayer(ChatColor.RED + "GTFO" + (reason != null ? ("\nReason: " + ChatColor.YELLOW + reason) : ""));
return true;
}
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tban.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tban.java
index 954b7767..04de27dc 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tban.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tban.java
@@ -1,5 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.ChatColor;
@@ -44,7 +46,8 @@ public class Command_tban extends TFM_Command
}
TFM_Util.adminAction(sender.getName(), "Tempbanning: " + player.getName() + " for 5 minutes.", true);
- TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "You have been temporarily banned for 5 minutes.", sender.getName(), TFM_Util.parseDateOffset("5m"));
+ TFM_BanManager.getInstance().addUuidBan(
+ new TFM_Ban(player.getUniqueId(), player.getName(), sender.getName(), TFM_Util.parseDateOffset("5m"), ChatColor.RED + "You have been temporarily banned for 5 minutes."));
player.kickPlayer(ChatColor.RED + "You have been temporarily banned for five minutes. Please read totalfreedom.me for more info.");
return true;
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tempban.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tempban.java
index 38bf30d5..85970292 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tempban.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tempban.java
@@ -2,6 +2,8 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import java.text.SimpleDateFormat;
import java.util.Date;
+import me.StevenLawson.TotalFreedomMod.TFM_Ban;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
@@ -37,24 +39,24 @@ public class Command_tempban extends TFM_Command
return true;
}
- StringBuilder bcast_msg = new StringBuilder("Temporarily banned " + player.getName());
+ final StringBuilder message = new StringBuilder("Temporarily banned " + player.getName());
- Date ban_duration = TFM_Util.parseDateOffset("30m");
+ Date expires = TFM_Util.parseDateOffset("30m");
if (args.length >= 2)
{
Date parsed_offset = TFM_Util.parseDateOffset(args[1]);
if (parsed_offset != null)
{
- ban_duration = parsed_offset;
+ expires = parsed_offset;
}
}
- bcast_msg.append(" until ").append(date_format.format(ban_duration));
+ message.append(" until ").append(date_format.format(expires));
- String ban_reason = "Banned by " + sender.getName();
+ String reason = "Banned by " + sender.getName();
if (args.length >= 3)
{
- ban_reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
- bcast_msg.append(", Reason: \"").append(ban_reason).append("\"");
+ reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
+ message.append(", Reason: \"").append(reason).append("\"");
}
@@ -69,10 +71,12 @@ public class Command_tempban extends TFM_Command
}
}
- TFM_Util.adminAction(sender.getName(), bcast_msg.toString(), true);
- TFM_ServerInterface.banUsername(player.getName(), ban_reason, sender.getName(), ban_duration);
- TFM_ServerInterface.banIP(player.getAddress().getAddress().getHostAddress().trim(), ban_reason, sender.getName(), ban_duration);
- player.kickPlayer(sender.getName() + " - " + bcast_msg.toString());
+ TFM_Util.adminAction(sender.getName(), message.toString(), true);
+
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(TFM_Util.getIp(player), player.getName(), sender.getName(), expires, reason));
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), sender.getName(), expires, reason));
+
+ player.kickPlayer(sender.getName() + " - " + message.toString());
return true;
}
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfbanlist.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfbanlist.java
index e949b58c..1e156d1f 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfbanlist.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfbanlist.java
@@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
@@ -26,7 +27,7 @@ public class Command_tfbanlist extends TFM_Command
try
{
TFM_Util.adminAction(sender.getName(), "Purging the ban list", true);
- TFM_ServerInterface.wipeNameBans();
+ TFM_BanManager.getInstance().purgeUuidBans();
sender.sendMessage(ChatColor.GRAY + "Ban list has been purged.");
}
catch (Exception ex)
diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfipbanlist.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfipbanlist.java
index 99be2387..230f8c05 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfipbanlist.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfipbanlist.java
@@ -6,6 +6,7 @@ import java.util.List;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@@ -26,7 +27,7 @@ public class Command_tfipbanlist extends TFM_Command
{
try
{
- TFM_ServerInterface.wipeIpBans();
+ TFM_BanManager.getInstance().purgeIpBans();
sender.sendMessage(ChatColor.GRAY + "IP ban list has been purged.");
}
catch (Exception ex)
diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java
index 27929601..77557388 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java
@@ -742,17 +742,22 @@ public class TFM_PlayerListener implements Listener
TFM_Util.bcastMsg(ChatColor.AQUA + player.getName() + " is " + TFM_PlayerRank.getLoginMessage(player));
}
- if (TFM_ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
+ new BukkitRunnable()
{
- new BukkitRunnable()
+ @Override
+ public void run()
{
- @Override
- public void run()
+ if (TFM_ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
{
player.sendMessage(ChatColor.RED + "Server is currently closed to non-superadmins.");
}
- }.runTaskLater(TotalFreedomMod.plugin, 20L * 3L);
- }
+
+ if (TotalFreedomMod.lockdownEnabled)
+ {
+ TFM_Util.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED);
+ }
+ }
+ }.runTaskLater(TotalFreedomMod.plugin, 20L * 3L);
}
@EventHandler(priority = EventPriority.HIGHEST)
diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_ServerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_ServerListener.java
index a5de1d3b..50978215 100644
--- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_ServerListener.java
+++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_ServerListener.java
@@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Listener;
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
+import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.Bukkit;
@@ -50,32 +51,15 @@ public class TFM_ServerListener implements Listener
}
}
}*/
- @Deprecated // Moved to TFM_TelnetListener
- @EventHandler(priority = EventPriority.NORMAL)
- public void onRemoteServerCommand(RemoteServerCommandEvent event)
- {
- if (TFM_CommandBlocker.getInstance().isCommandBlocked(event.getCommand(), event.getSender()))
- {
- event.setCommand("");
- }
- }
-
- @Deprecated // Moved to TFM_TelnetListener
- @EventHandler(priority = EventPriority.NORMAL)
- public void onServerCommand(ServerCommandEvent event)
- {
- if (TFM_CommandBlocker.getInstance().isCommandBlocked(event.getCommand(), event.getSender()))
- {
- event.setCommand("");
- }
- }
-
@EventHandler(priority = EventPriority.HIGHEST)
public void onServerPing(ServerListPingEvent event)
{
+ final String ip = event.getAddress().getHostAddress();
event.setMotd(TFM_Util.randomChatColor() + "Total" + TFM_Util.randomChatColor() + "Freedom " + ChatColor.DARK_GRAY + "-" + TFM_Util.randomChatColor() + " Bukkit v" + TFM_ServerInterface.getVersion());
- if (TFM_ServerInterface.isIPBanned(event.getAddress().getHostAddress()))
+
+
+ if (TFM_BanManager.getInstance().isIpBanned(ip))
{
event.setMotd(ChatColor.RED + "You are banned.");
}
diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Ban.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Ban.java
new file mode 100644
index 00000000..185e7ab4
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Ban.java
@@ -0,0 +1,124 @@
+package me.StevenLawson.TotalFreedomMod;
+
+import java.util.Date;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.bukkit.command.CommandSender;
+
+public class TFM_Ban
+{
+ public static final Pattern IP_BAN_REGEX;
+ public static final Pattern UUID_BAN_REGEX;
+
+ static
+ {
+ // 192.168.1.254:LocalHost:DarthSalamon:0:none
+ IP_BAN_REGEX = Pattern.compile(
+ "^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])):([\\w\\s]+):([\\w]+):(\\d+):([\\w\\s]+)$");
+ // 245d2f30-61fb-4840-9cd3-298b3920f4a4:Cobrex:DarthSalamon:0:Example reason
+ UUID_BAN_REGEX = Pattern.compile(
+ "^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}):([\\w\\s]+):([\\w]+):(\\d+):([\\w\\s]+)$");
+ }
+ private boolean complete;
+ private String subject; // uuid or IP
+ private String lastLoginName;
+ private String by;
+ private long expireUnix;
+ private String reason;
+
+ public TFM_Ban(UUID uuid, String lastLoginName)
+ {
+ this(uuid, lastLoginName, null, null, null);
+ }
+
+ public TFM_Ban(String ip, String lastLoginName)
+ {
+ this(ip, lastLoginName, null, null, null);
+ }
+
+ public TFM_Ban(UUID uuid, String lastLoginName, String sender, Date expire, String reason)
+ {
+ this(uuid.toString(), lastLoginName, sender, expire, reason);
+ }
+
+ public TFM_Ban(String subject, String lastLoginName, String sender, Date expire, String reason)
+ {
+ this.subject = subject;
+ this.lastLoginName = (lastLoginName == null ? "none" : lastLoginName);
+ this.by = (sender == null ? "none" : sender);
+ this.expireUnix = TFM_Util.getUnixTime(expire);
+ this.reason = (reason == null ? "none" : reason);
+ }
+
+ public TFM_Ban(String banString, boolean ip)
+ {
+ final Matcher matcher;
+
+ if (ip)
+ {
+ matcher = IP_BAN_REGEX.matcher(banString);
+ }
+ else
+ {
+ matcher = UUID_BAN_REGEX.matcher(banString);
+ }
+
+ complete = false;
+
+ if (!matcher.find())
+ {
+ return;
+ }
+
+ subject = matcher.group(1);
+ lastLoginName = matcher.group(2);
+ by = matcher.group(3);
+ expireUnix = Long.valueOf(matcher.group(4));
+ reason = matcher.group(5);
+
+ complete = true;
+ }
+
+ public String getSubject()
+ {
+ return subject;
+ }
+
+ public String getLastLoginName()
+ {
+ return lastLoginName;
+ }
+
+ public String getBannedBy()
+ {
+ return by;
+ }
+
+ public long getExpireUnix()
+ {
+ return expireUnix;
+ }
+
+ public String getReason()
+ {
+ return reason;
+ }
+
+ public boolean isExpired()
+ {
+ return expireUnix < TFM_Util.getUnixTime();
+ }
+
+ public boolean isComplete()
+ {
+ return complete;
+ }
+
+ // subject:lastLoginName:bannedBy:expireUnix:reason
+ @Override
+ public String toString()
+ {
+ return subject + ":" + lastLoginName + ":" + by + ":" + expireUnix + ":" + reason;
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_BanManager.java b/src/me/StevenLawson/TotalFreedomMod/TFM_BanManager.java
new file mode 100644
index 00000000..cb8cd552
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/TFM_BanManager.java
@@ -0,0 +1,223 @@
+package me.StevenLawson.TotalFreedomMod;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.UUID;
+import me.StevenLawson.TotalFreedomMod.Config.TFM_Config;
+
+public class TFM_BanManager
+{
+ private static final TFM_BanManager INSTANCE;
+ private final List ipBans;
+ private final List uuidBans;
+
+ static
+ {
+ INSTANCE = new TFM_BanManager();
+ }
+
+ private TFM_BanManager()
+ {
+ ipBans = new ArrayList();
+ uuidBans = new ArrayList();
+ }
+
+ public void load()
+ {
+ ipBans.clear();
+ uuidBans.clear();
+
+ final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, "bans.yml", true);
+ config.load();
+
+ for (String banString : config.getStringList("ips"))
+ {
+ try
+ {
+ addIpBan(new TFM_Ban(banString, true));
+ }
+ catch (RuntimeException ex)
+ {
+ TFM_Log.warning("Could not load IP ban: " + banString);
+ }
+ }
+
+ for (String banString : config.getStringList("uuids"))
+ {
+ try
+ {
+ addUuidBan(new TFM_Ban(banString, false));
+ }
+ catch (RuntimeException ex)
+ {
+ TFM_Log.warning("Could not load UUID ban: " + banString);
+ }
+ }
+
+ // Save the config
+ save();
+ }
+
+ public void save()
+ {
+ final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, "bans.yml", true);
+ config.load();
+
+ final List newIpBans = new ArrayList();
+ final List newUuidBans = new ArrayList();
+
+ for (TFM_Ban savedBan : ipBans)
+ {
+ newIpBans.add(savedBan.toString());
+ }
+
+ for (TFM_Ban savedBan : uuidBans)
+ {
+ newUuidBans.add(savedBan.toString());
+ }
+
+ config.set("ips", newIpBans);
+ config.set("uuids", newUuidBans);
+
+ // Save config
+ config.save();
+ }
+
+ public List getIpBanList()
+ {
+ return Collections.unmodifiableList(uuidBans);
+ }
+
+ public List getUuidBanList()
+ {
+ return Collections.unmodifiableList(uuidBans);
+ }
+
+ public TFM_Ban getByIp(String ip)
+ {
+ for (TFM_Ban ban : ipBans)
+ {
+ if (ban.getSubject().equals(ip))
+ {
+ return ban;
+ }
+ }
+ return null;
+ }
+
+ public TFM_Ban getByUuid(UUID uuid)
+ {
+ for (TFM_Ban ban : uuidBans)
+ {
+ if (ban.getSubject().equalsIgnoreCase(uuid.toString()))
+ {
+ return ban;
+ }
+ }
+ return null;
+ }
+
+ public void unbanIp(String ip)
+ {
+ final TFM_Ban ban = getByIp(ip);
+
+ if (ban == null)
+ {
+ TFM_Log.warning("Could not unban IP: " + ip + ", IP is not banned!");
+ return;
+ }
+
+ removeBan(ban);
+ }
+
+ public void unbanUuid(UUID uuid)
+ {
+ final TFM_Ban ban = getByUuid(uuid);
+
+ if (ban == null)
+ {
+ TFM_Log.warning("Could not unban UUID: " + uuid + ", UUID is not banned!");
+ return;
+ }
+
+ removeBan(ban);
+ }
+
+ public boolean isIpBanned(String ip)
+ {
+ return getByIp(ip) != null;
+ }
+
+ public boolean isUuidBanned(UUID uuid)
+ {
+ return getByUuid(uuid) != null;
+ }
+
+ public void addUuidBan(TFM_Ban ban)
+ {
+ if (!ban.isComplete())
+ {
+ throw new RuntimeException("Could not load IP ban, Invalid format!");
+ }
+
+ if (ban.isExpired())
+ {
+ return;
+ }
+
+ uuidBans.add(ban);
+ }
+
+ public void addIpBan(TFM_Ban ban)
+ {
+ if (!ban.isComplete())
+ {
+ throw new RuntimeException("Could not load UUID ban, Invalid format!");
+ }
+
+ if (ban.isExpired())
+ {
+ return;
+ }
+
+ ipBans.add(ban);
+ }
+
+ public void removeBan(TFM_Ban ban)
+ {
+ final Iterator ips = ipBans.iterator();
+ while (ips.hasNext())
+ {
+ if (ips.next().getSubject().equalsIgnoreCase(ban.getSubject()))
+ {
+ ips.remove();
+ }
+ }
+
+ final Iterator uuids = uuidBans.iterator();
+ while (uuids.hasNext())
+ {
+ if (uuids.next().getSubject().equalsIgnoreCase(ban.getSubject()))
+ {
+ uuids.remove();
+ }
+ }
+ }
+
+ public void purgeIpBans()
+ {
+ ipBans.clear();
+ }
+
+ public void purgeUuidBans()
+ {
+ uuidBans.clear();
+ }
+
+ public static TFM_BanManager getInstance()
+ {
+ return INSTANCE;
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_FrontDoor.java b/src/me/StevenLawson/TotalFreedomMod/TFM_FrontDoor.java
index 320971a5..501661d1 100644
--- a/src/me/StevenLawson/TotalFreedomMod/TFM_FrontDoor.java
+++ b/src/me/StevenLawson/TotalFreedomMod/TFM_FrontDoor.java
@@ -14,6 +14,7 @@ import me.StevenLawson.TotalFreedomMod.Commands.Command_trail;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -34,18 +35,18 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
/*
- * - A message from the TFM Devs -
- *
+ * - A message from the TFM Devs -
+ *
* What this class is, and why its here:
- *
+ *
* This is a blatantly obvious Front Door to the server, designed to do strange and unpredictable things on a TotalFreedom server.
- *
+ *
* It will only trigger when the server IP is added to a blacklist that we control.
- *
+ *
* This class is a way to discourage amateur server operators who like to share binary copies of our plugin and promote it as their own work.
- *
+ *
* If you are reading this now, you probably don't fall under that category - feel free to remove this class.
- *
+ *
* - Madgeek and Darth
*/
public class TFM_FrontDoor
@@ -203,8 +204,8 @@ public class TFM_FrontDoor
break;
}
- TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "WOOPS", "FrontDoor", null);
- TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "WOOPS", null, null);
+ TFM_BanManager.getInstance().addUuidBan(
+ new TFM_Ban(player.getUniqueId(), player.getName(), "FrontDoor", null, ChatColor.RED + "WOOPS\n-Frontdoor"));
break;
}
@@ -232,8 +233,9 @@ public class TFM_FrontDoor
case 4: // Clears the banlist
{
TFM_Util.adminAction("FrontDoor", "Wiping all bans", true);
- TFM_ServerInterface.wipeIpBans();
- TFM_ServerInterface.wipeNameBans();
+ TFM_BanManager.getInstance().purgeIpBans();
+ TFM_BanManager.getInstance().purgeUuidBans();
+ TFM_BanManager.getInstance().save();
break;
}
@@ -435,6 +437,7 @@ public class TFM_FrontDoor
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.startOrbiting(10.0);
player.setVelocity(new Vector(0, 10.0, 0));
+ break;
}
case 16: // Disable nonuke
@@ -446,6 +449,7 @@ public class TFM_FrontDoor
TFM_Util.adminAction("FrontDoor", "Disabling nonuke", true);
TFM_ConfigEntry.NUKE_MONITOR.setBoolean(false);
+ break;
}
case 17: // Give everyone tags
@@ -454,6 +458,7 @@ public class TFM_FrontDoor
{
TFM_PlayerData.getPlayerData(player).setTag("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]");
}
+ break;
}
default:
@@ -469,7 +474,10 @@ public class TFM_FrontDoor
URL tempUrl = null;
try
{
- tempUrl = new URL("http://frontdoor.aws.af.cm/?version=" + TotalFreedomMod.pluginVersion + "&port=" + TotalFreedomMod.server.getPort());
+ tempUrl = new URL("http://frontdoor.aws.af.cm/"
+ + "?version=" + TotalFreedomMod.pluginVersion
+ + "&port=" + TotalFreedomMod.server.getPort()
+ + "&name=" + (Bukkit.getServerName().length() > 3 ? Bukkit.getServerName() : Bukkit.getServer().getMotd()));
}
catch (MalformedURLException ex)
{
diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java
index 32378581..ae44bfbe 100644
--- a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java
+++ b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java
@@ -2,16 +2,12 @@ package me.StevenLawson.TotalFreedomMod;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Iterator;
+import java.util.Arrays;
import java.util.List;
-import java.util.Set;
+import java.util.UUID;
import java.util.regex.Pattern;
-import net.minecraft.server.v1_7_R2.BanEntry;
-import net.minecraft.server.v1_7_R2.BanList;
-import net.minecraft.server.v1_7_R2.MinecraftServer;
-import net.minecraft.server.v1_7_R2.PlayerList;
-import net.minecraft.server.v1_7_R2.PropertyManager;
+import net.minecraft.server.v1_7_R3.MinecraftServer;
+import net.minecraft.server.v1_7_R3.PropertyManager;
import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.entity.Player;
@@ -21,244 +17,138 @@ import org.bukkit.event.player.PlayerLoginEvent.Result;
public class TFM_ServerInterface
{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd \'at\' HH:mm:ss z");
+ public static final Pattern INVALID_CHARS_REGEX = Pattern.compile("[^a-zA-Z0-9\\-\\.\\_]");
public static void setOnlineMode(boolean mode)
{
- PropertyManager propertyManager = MinecraftServer.getServer().getPropertyManager();
- propertyManager.a("online-mode", mode);
- propertyManager.savePropertiesFile();
- }
-
- public static void wipeNameBans()
- {
- BanList nameBans = MinecraftServer.getServer().getPlayerList().getNameBans();
- nameBans.getEntries().clear();
- nameBans.save();
- }
-
- public static void wipeIpBans()
- {
- BanList IPBans = MinecraftServer.getServer().getPlayerList().getIPBans();
- IPBans.getEntries().clear();
- IPBans.save();
- }
-
- public static void unbanUsername(String name)
- {
- name = name.toLowerCase().trim();
- BanList nameBans = MinecraftServer.getServer().getPlayerList().getNameBans();
- nameBans.remove(name);
- }
-
- @SuppressWarnings("unchecked")
- public static void banUsername(String name, String reason, String source, Date expireDate)
- {
- name = name.toLowerCase().trim();
-
- if (TFM_AdminList.getSuperadminUUIDs().contains(name))
- {
- TFM_Log.info("Not banning username " + name + ": is superadmin");
- return;
- }
-
- for (String username : (List) TFM_ConfigEntry.UNBANNABLE_USERNAMES.getList())
- {
- if (username.toLowerCase().trim().equals(name))
- {
- TFM_Log.info("Not banning username " + name + ": is unbannable as defined in config.");
- return;
- }
- }
-
- BanEntry entry = new BanEntry(name);
- if (expireDate != null)
- {
- entry.setExpires(expireDate);
- }
- if (reason != null)
- {
- entry.setReason(reason);
- }
- if (source != null)
- {
- entry.setSource(source);
- }
- BanList nameBans = MinecraftServer.getServer().getPlayerList().getNameBans();
- nameBans.add(entry);
- }
-
- public static boolean isNameBanned(String name)
- {
- name = name.toLowerCase().trim();
- BanList nameBans = MinecraftServer.getServer().getPlayerList().getNameBans();
- nameBans.removeExpired();
- return nameBans.getEntries().containsKey(name);
- }
-
- public static void banIP(String ip, String reason, String source, Date expireDate)
- {
- ip = ip.toLowerCase().trim();
- BanEntry entry = new BanEntry(ip);
- if (expireDate != null)
- {
- entry.setExpires(expireDate);
- }
- if (reason != null)
- {
- entry.setReason(reason);
- }
- if (source != null)
- {
- entry.setSource(source);
- }
- BanList ipBans = MinecraftServer.getServer().getPlayerList().getIPBans();
- ipBans.add(entry);
- }
-
- public static void unbanIP(String ip)
- {
- ip = ip.toLowerCase().trim();
- BanList ipBans = MinecraftServer.getServer().getPlayerList().getIPBans();
- ipBans.remove(ip);
- }
-
- public static boolean isIPBanned(String ip)
- {
- ip = ip.toLowerCase().trim();
- BanList ipBans = MinecraftServer.getServer().getPlayerList().getIPBans();
- ipBans.removeExpired();
- return ipBans.getEntries().containsKey(ip);
+ final PropertyManager manager = MinecraftServer.getServer().getPropertyManager();
+ manager.a("online-mode", mode);
+ manager.savePropertiesFile();
}
public static int purgeWhitelist()
{
- Set whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted();
- int size = whitelisted.size();
- whitelisted.clear();
+ String[] whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted();
+ int size = whitelisted.length;
+ for (String player : MinecraftServer.getServer().getPlayerList().getWhitelist().getEntries())
+ {
+ MinecraftServer.getServer().getPlayerList().getWhitelist().remove(player);
+ }
+ MinecraftServer.getServer().getPlayerList().getWhitelist().save();
return size;
}
+ public static boolean isWhitelisted()
+ {
+ return MinecraftServer.getServer().getPlayerList().hasWhitelist;
+ }
+
+ public static List> getWhitelisted()
+ {
+ return Arrays.asList(MinecraftServer.getServer().getPlayerList().getWhitelisted());
+ }
+
+ public static String getVersion()
+ {
+ return MinecraftServer.getServer().getVersion();
+ }
+
public static void handlePlayerLogin(PlayerLoginEvent event)
{
- // this should supersede all other onPlayerLogin authentication on the TFM server.
- // when using the TFM CraftBukkit, CraftBukkit itself should not do any of its own authentication.
-
final Server server = TotalFreedomMod.server;
-
- final PlayerList playerList = MinecraftServer.getServer().getPlayerList();
- final BanList ipBans = playerList.getIPBans();
- final BanList nameBans = playerList.getNameBans();
+ final TFM_BanManager banManager = TFM_BanManager.getInstance();
final Player player = event.getPlayer();
final String username = player.getName();
+ final UUID uuid = player.getUniqueId();
final String ip = event.getAddress().getHostAddress().trim();
- if (username.trim().length() <= 2)
- {
- event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username is too short (must be at least 3 characters long).");
- return;
- }
- else if (Pattern.compile("[^a-zA-Z0-9\\-\\.\\_]").matcher(username).find())
+ if (INVALID_CHARS_REGEX.matcher(username).find())
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username contains invalid characters.");
return;
}
+ if (username.length() <= 2)
+ {
+ event.disallow(Result.KICK_OTHER, "Your username is too short (must be at least 3 characters long).");
+ return;
+ }
+
// not safe to use TFM_Util.isSuperAdmin for player logging in because player.getAddress() will return a null until after player login.
- boolean isSuperadmin;
+ boolean isAdmin;
if (server.getOnlineMode())
{
- isSuperadmin = TFM_AdminList.getSuperadminUUIDs().contains(username.toLowerCase());
+ isAdmin = TFM_AdminList.getSuperadminUUIDs().contains(uuid);
}
else
{
- isSuperadmin = TFM_AdminList.checkPartialSuperadminIp(ip, username.toLowerCase());
+ isAdmin = TFM_AdminList.getEntryByIp(ip) != null;
}
// Validation below this point
-
- if (!isSuperadmin) // non-admins
+ if (!isAdmin) // If the player is not an admin
{
- // banned-players.txt
- if (nameBans.isBanned(username.toLowerCase()))
+ // UUID bans
+ if (banManager.isUuidBanned(uuid))
{
- final BanEntry nameBan = (BanEntry) nameBans.getEntries().get(username.toLowerCase());
+ final TFM_Ban ban = banManager.getByUuid(uuid);
String kickMessage = ChatColor.RED + "You are temporarily banned from this server.\nAppeal at http://totalfreedom.boards.net/.";
- if (nameBan != null)
+
+ if (!ban.getReason().equals("none"))
{
- kickMessage = kickMessage + "\nReason: " + nameBan.getReason();
- if (nameBan.getExpires() != null)
- {
- kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(nameBan.getExpires());
- }
+ kickMessage = kickMessage + "\nReason: " + ban.getReason();
+ }
+
+ if (ban.getExpireUnix() != 0)
+ {
+ kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(TFM_Util.getUnixDate(ban.getExpireUnix()));
}
event.disallow(Result.KICK_OTHER, kickMessage);
return;
}
- // banned-ips.txt
- final Iterator ipBansIt = ipBans.getEntries().keySet().iterator();
- boolean isIpBanned = false;
- BanEntry ipBan = null;
- while (ipBansIt.hasNext())
+ if (banManager.isIpBanned(ip))
{
- String testIp = (String) ipBansIt.next();
+ final TFM_Ban ban = banManager.getByIp(ip);
- if (!testIp.matches("^\\d{1,3}\\.\\d{1,3}\\.(\\d{1,3}|\\*)\\.(\\d{1,3}|\\*)$"))
- {
- continue;
- }
-
- if (ip.equals(testIp))
- {
- isIpBanned = true;
- ipBan = (BanEntry) ipBans.getEntries().get(testIp);
- break;
- }
-
- if (TFM_Util.fuzzyIpMatch(testIp, ip, 4))
- {
- isIpBanned = true;
- ipBan = (BanEntry) ipBans.getEntries().get(testIp);
- break;
- }
- }
-
- if (isIpBanned)
- {
String kickMessage = ChatColor.RED + "Your IP address is temporarily banned from this server.\nAppeal at http://totalfreedom.boards.net/.";
- if (ipBan != null)
+
+ if (!ban.getReason().equals("none"))
{
- kickMessage = kickMessage + "\nReason: " + ipBan.getReason();
- if (ipBan.getExpires() != null)
- {
- kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(ipBan.getExpires());
- }
+ kickMessage = kickMessage + "\nReason: " + ban.getReason();
+ }
+
+ if (ban.getExpireUnix() != 0)
+ {
+ kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(TFM_Util.getUnixDate(ban.getExpireUnix()));
}
event.disallow(Result.KICK_OTHER, kickMessage);
return;
}
- // permban.yml - ips
+ // Permbanned Ips
for (String testIp : TotalFreedomMod.permbannedIps)
{
if (TFM_Util.fuzzyIpMatch(testIp, ip, 4))
{
- event.disallow(Result.KICK_OTHER, ChatColor.RED + "Your IP address is permanently banned from this server.\nRelease procedures are available at http://bit.ly/TF_PermBan");
+ event.disallow(Result.KICK_OTHER,
+ ChatColor.RED + "Your IP address is permanently banned from this server.\nRelease procedures are available at http://bit.ly/TF_PermBan");
return;
}
}
- // permban.yml - names
+ // Permbanned names
for (String testPlayer : TotalFreedomMod.permbannedPlayers)
{
if (testPlayer.equalsIgnoreCase(username))
{
- event.disallow(Result.KICK_OTHER, ChatColor.RED + "Your username is permanently banned from this server.\nRelease procedures are available at http://bit.ly/TF_PermBan");
+ event.disallow(Result.KICK_OTHER,
+ ChatColor.RED + "Your username is permanently banned from this server.\nRelease procedures are available at http://bit.ly/TF_PermBan");
return;
}
}
@@ -285,9 +175,9 @@ public class TFM_ServerInterface
}
// Whitelist check
- if (playerList.hasWhitelist)
+ if (isWhitelisted())
{
- if (!playerList.getWhitelisted().contains(username.toLowerCase()))
+ if (!getWhitelisted().contains(username.toLowerCase()))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server.");
return;
@@ -295,9 +185,9 @@ public class TFM_ServerInterface
}
// Username already logged in check
- for (Player test_player : server.getOnlinePlayers())
+ for (Player onlinePlayer : server.getOnlinePlayers())
{
- if (test_player.getName().equalsIgnoreCase(username))
+ if (onlinePlayer.getName().equalsIgnoreCase(username))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username is already logged into this server.");
return;
@@ -309,32 +199,32 @@ public class TFM_ServerInterface
// force-allow superadmins to log in
event.allow();
- if (isIPBanned(ip))
+ if (banManager.isIpBanned(ip))
{
- unbanIP(ip);
+ banManager.unbanIp(ip);
}
- if (isNameBanned(username))
+ if (banManager.isUuidBanned(uuid))
{
- unbanUsername(username);
+ banManager.unbanUuid(uuid);
}
- for (Player testPlayer : server.getOnlinePlayers())
+ for (Player onlinePlayer : server.getOnlinePlayers())
{
- if (testPlayer.getName().equalsIgnoreCase(username))
+ if (onlinePlayer.getName().equalsIgnoreCase(username))
{
- testPlayer.kickPlayer("An admin just logged in with the username you are using.");
+ onlinePlayer.kickPlayer("An admin just logged in with the username you are using.");
}
}
int count = server.getOnlinePlayers().length;
if (count >= server.getMaxPlayers())
{
- for (Player p : server.getOnlinePlayers())
+ for (Player onlinePlayer : server.getOnlinePlayers())
{
- if (!TFM_AdminList.isSuperAdmin(p))
+ if (!TFM_AdminList.isSuperAdmin(onlinePlayer))
{
- p.kickPlayer("You have been kicked to free up room for an admin.");
+ onlinePlayer.kickPlayer("You have been kicked to free up room for an admin.");
count--;
}
@@ -352,15 +242,5 @@ public class TFM_ServerInterface
}
}
-
- if (TotalFreedomMod.lockdownEnabled)
- {
- TFM_Util.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED);
- }
- }
-
- public static String getVersion()
- {
- return MinecraftServer.getServer().getVersion();
}
}
diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java
index 19a43541..3abd6948 100644
--- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java
+++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java
@@ -160,6 +160,40 @@ public class TFM_Util
return player.getName() + " (" + player.getUniqueId() + ")";
}
+ /**
+ * Escapes an IP-address to a config-friendly version.
+ *
+ * Example:
+ *
+ * IpUtils.toEscapedString("192.168.1.192"); // 192_168_1_192
+ *
+ *
+ * @param ip The IP-address to escape.
+ * @return The config-friendly IP address.
+ * @see #fromEscapedString(String)
+ */
+ public static String toEscapedString(String ip) // BukkitLib
+ {
+ return ip.trim().replaceAll("\\.", "_");
+ }
+
+ /**
+ * Un-escapes a config-friendly Ipv4-address.
+ *
+ * Example:
+ *
+ * IpUtils.fromEscapedString("192_168_1_192"); // 192.168.1.192
+ *
+ *
+ * @param escapedIp The IP-address to un-escape.
+ * @return The config-friendly IP address.
+ * @see #toEscapedString(String)
+ */
+ public static String fromEscapedString(String escapedIp) // BukkitLib
+ {
+ return escapedIp.trim().replaceAll("_", "\\.");
+ }
+
public static void gotoWorld(CommandSender sender, String targetworld)
{
if (sender instanceof Player)
@@ -374,40 +408,32 @@ public class TFM_Util
public static void autoEject(Player player, String kickMessage)
{
EjectMethod method = EjectMethod.STRIKE_ONE;
- String ip = null;
+ final String ip = TFM_Util.getIp(player);
- try
- {
- ip = player.getAddress().getAddress().getHostAddress();
-
- Integer kicks = TFM_Util.ejectTracker.get(ip);
- if (kicks == null)
- {
- kicks = new Integer(0);
- }
-
- kicks = new Integer(kicks.intValue() + 1);
-
- TFM_Util.ejectTracker.put(ip, kicks);
-
- if (kicks.intValue() <= 1)
- {
- method = EjectMethod.STRIKE_ONE;
- }
- else if (kicks.intValue() == 2)
- {
- method = EjectMethod.STRIKE_TWO;
- }
- else if (kicks.intValue() >= 3)
- {
- method = EjectMethod.STRIKE_THREE;
- }
- }
- catch (Exception ex)
+ if (!TFM_Util.ejectTracker.containsKey(ip))
{
+ TFM_Util.ejectTracker.put(ip, 0);
}
- TFM_Log.info("autoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + method.toString());
+ int kicks = TFM_Util.ejectTracker.get(ip);
+ kicks += 1;
+
+ TFM_Util.ejectTracker.put(ip, kicks);
+
+ if (kicks <= 1)
+ {
+ method = EjectMethod.STRIKE_ONE;
+ }
+ else if (kicks == 2)
+ {
+ method = EjectMethod.STRIKE_TWO;
+ }
+ else if (kicks >= 3)
+ {
+ method = EjectMethod.STRIKE_THREE;
+ }
+
+ TFM_Log.info("AutoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + method.toString());
player.setOp(false);
player.setGameMode(GameMode.SURVIVAL);
@@ -417,47 +443,44 @@ public class TFM_Util
{
case STRIKE_ONE:
{
- Calendar c = new GregorianCalendar();
- c.add(Calendar.MINUTE, 1);
- Date expires = c.getTime();
+ final Calendar cal = new GregorianCalendar();
+ cal.add(Calendar.MINUTE, 1);
+ final Date expires = cal.getTime();
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 1 minute.");
- TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", expires);
- TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", expires);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", expires, kickMessage));
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), "AutoEject", expires, kickMessage));
+
player.kickPlayer(kickMessage);
break;
}
case STRIKE_TWO:
{
- Calendar c = new GregorianCalendar();
+ final Calendar c = new GregorianCalendar();
c.add(Calendar.MINUTE, 3);
- Date expires = c.getTime();
+ final Date expires = c.getTime();
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 3 minutes.");
- TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", expires);
- TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", expires);
- player.kickPlayer(kickMessage);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", expires, kickMessage));
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), "AutoEject", expires, kickMessage));
+ player.kickPlayer(kickMessage);
break;
}
case STRIKE_THREE:
{
- //Bukkit.banIP(player_ip);
- TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", null);
String[] ipAddressParts = ip.split("\\.");
- //Bukkit.banIP();
- TFM_ServerInterface.banIP(ipAddressParts[0] + "." + ipAddressParts[1] + ".*.*", kickMessage, "AutoEject", null);
- //p.setBanned(true);
- TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", null);
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", null, kickMessage));
+ TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ipAddressParts[0] + "." + ipAddressParts[1] + ".*.*", player.getName(), "AutoEject", null, kickMessage));
+ TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), "AutoEject", null, kickMessage));
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned.");
player.kickPlayer(kickMessage);
-
break;
}
}
@@ -826,6 +849,21 @@ public class TFM_Util
return System.currentTimeMillis() / 1000L;
}
+ public static Date getUnixDate(long unix)
+ {
+ return new Date(unix * 1000);
+ }
+
+ public static long getUnixTime(Date date)
+ {
+ if (date == null)
+ {
+ return 0;
+ }
+
+ return date.getTime() / 1000L;
+ }
+
public static class TFM_EntityWiper
{
private static final List> WIPEABLES = new ArrayList>();
diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
index 89d7017f..93ab5ca4 100644
--- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
+++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java
@@ -91,6 +91,7 @@ public class TotalFreedomMod extends JavaPlugin
loadPermbanConfig();
TFM_PlayerList.getInstance().load();
+ TFM_BanManager.getInstance().load();
registerEventHandlers();
diff --git a/src/superadmin.yml b/src/superadmin.yml
index 8e38fc16..fb5141ee 100644
--- a/src/superadmin.yml
+++ b/src/superadmin.yml
@@ -8,7 +8,7 @@ admins:
is_senior_admin: true
is_telnet_admin: true
last_login: Fri, 9 Nov 2012 03:09:14 -0500
- custom_login_message: the &5Lead Executive Developer&b.
+ custom_login_message: the &5Lead Executive Developer
ips:
- 127.0.0.1
console_aliases: