mirror of
https://github.com/TheDeus-Group/TFM-4.3-Reloaded.git
synced 2024-12-23 07:34:56 +00:00
[Bleeding] First compile of new banning system
Updated to CraftBukkit 1.7.8-R0.1
This commit is contained in:
parent
5237fa0ca2
commit
d613e0266b
20 changed files with 642 additions and 352 deletions
|
@ -1,3 +1,3 @@
|
||||||
#Build Number for ANT. Do not edit!
|
#Build Number for ANT. Do not edit!
|
||||||
#Fri Apr 11 17:22:29 CEST 2014
|
#Mon Apr 14 21:11:06 CEST 2014
|
||||||
build.number=730
|
build.number=732
|
||||||
|
|
|
@ -48,11 +48,11 @@ jar.archive.disabled=${jnlp.enabled}
|
||||||
jar.compress=false
|
jar.compress=false
|
||||||
jar.index=${jnlp.enabled}
|
jar.index=${jnlp.enabled}
|
||||||
javac.classpath=\
|
javac.classpath=\
|
||||||
${libs.CraftBukkit.classpath}:\
|
|
||||||
${libs.WorldEdit.classpath}:\
|
${libs.WorldEdit.classpath}:\
|
||||||
${libs.DisguiseCraft.classpath}:\
|
${libs.DisguiseCraft.classpath}:\
|
||||||
${libs.Essentials.classpath}:\
|
${libs.Essentials.classpath}:\
|
||||||
${libs.BukkitTelnet.classpath}
|
${libs.BukkitTelnet.classpath}:\
|
||||||
|
${libs.CraftBukkit.classpath}
|
||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
|
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
|
|
8
src/bans.yml
Normal file
8
src/bans.yml
Normal file
|
@ -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'
|
|
@ -2,6 +2,8 @@ package me.StevenLawson.TotalFreedomMod.Commands;
|
||||||
|
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
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 me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
|
@ -11,7 +13,7 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE)
|
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE)
|
||||||
@CommandParameters(description = "For the bad Superadmins.", usage = "/<command> <playername>")
|
@CommandParameters(description = "For the bad Superadmins", usage = "/<command> <playername>")
|
||||||
public class Command_doom extends TFM_Command
|
public class Command_doom extends TFM_Command
|
||||||
{
|
{
|
||||||
@Override
|
@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.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
|
||||||
TFM_Util.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
|
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
|
// remove from superadmin
|
||||||
if (TFM_AdminList.isSuperAdmin(player))
|
if (TFM_AdminList.isSuperAdmin(player))
|
||||||
|
@ -52,10 +54,10 @@ public class Command_doom extends TFM_Command
|
||||||
player.setOp(false);
|
player.setOp(false);
|
||||||
|
|
||||||
// ban IP
|
// ban IP
|
||||||
TFM_ServerInterface.banIP(IP, null, null, null);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
|
||||||
|
|
||||||
// ban name
|
// 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
|
// set gamemode to survival
|
||||||
player.setGameMode(GameMode.SURVIVAL);
|
player.setGameMode(GameMode.SURVIVAL);
|
||||||
|
@ -89,7 +91,7 @@ public class Command_doom extends TFM_Command
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
// message
|
// 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
|
// generate explosion
|
||||||
player.getWorld().createExplosion(player.getLocation(), 4F);
|
player.getWorld().createExplosion(player.getLocation(), 4F);
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package me.StevenLawson.TotalFreedomMod.Commands;
|
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_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
|
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
|
@ -49,33 +51,33 @@ public class Command_gadmin extends TFM_Command
|
||||||
}
|
}
|
||||||
else if (mode.equals("nameban"))
|
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);
|
TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s.", player.getName()), true);
|
||||||
player.kickPlayer("Username banned by Administrator.");
|
player.kickPlayer("Username banned by Administrator.");
|
||||||
}
|
}
|
||||||
else if (mode.equals("ipban"))
|
else if (mode.equals("ipban"))
|
||||||
{
|
{
|
||||||
String user_ip = player.getAddress().getAddress().getHostAddress();
|
String ip = player.getAddress().getAddress().getHostAddress();
|
||||||
String[] ip_parts = user_ip.split("\\.");
|
String[] ip_parts = ip.split("\\.");
|
||||||
if (ip_parts.length == 4)
|
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_Util.adminAction(sender.getName(), String.format("Banning IP: %s.", player.getName(), ip), true);
|
||||||
TFM_ServerInterface.banIP(user_ip, null, null, null);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
|
||||||
player.kickPlayer("IP address banned by Administrator.");
|
player.kickPlayer("IP address banned by Administrator.");
|
||||||
}
|
}
|
||||||
else if (mode.equals("ban"))
|
else if (mode.equals("ban"))
|
||||||
{
|
{
|
||||||
String user_ip = player.getAddress().getAddress().getHostAddress();
|
String ip = player.getAddress().getAddress().getHostAddress();
|
||||||
String[] ip_parts = user_ip.split("\\.");
|
String[] ip_parts = ip.split("\\.");
|
||||||
if (ip_parts.length == 4)
|
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_Util.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", player.getName(), ip), true);
|
||||||
TFM_ServerInterface.banIP(user_ip, null, null, null);
|
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));
|
||||||
TFM_ServerInterface.banUsername(player.getName(), null, null, null);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
|
||||||
player.kickPlayer("IP and username banned by Administrator.");
|
player.kickPlayer("IP and username banned by Administrator.");
|
||||||
}
|
}
|
||||||
else if (mode.equals("op"))
|
else if (mode.equals("op"))
|
||||||
|
|
|
@ -4,10 +4,13 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
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_PlayerEntry;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_PlayerList;
|
import me.StevenLawson.TotalFreedomMod.TFM_PlayerList;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
|
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -47,14 +50,14 @@ public class Command_glist extends TFM_Command
|
||||||
else if (args.length == 2)
|
else if (args.length == 2)
|
||||||
{
|
{
|
||||||
String username;
|
String username;
|
||||||
List<String> ip_addresses = new ArrayList<String>();
|
List<String> ips = new ArrayList<String>();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Player player = getPlayer(args[1]);
|
Player player = getPlayer(args[1]);
|
||||||
|
|
||||||
username = player.getName();
|
username = player.getName();
|
||||||
ip_addresses.add(player.getAddress().getAddress().getHostAddress());
|
ips.add(player.getAddress().getAddress().getHostAddress());
|
||||||
}
|
}
|
||||||
catch (PlayerNotFoundException ex)
|
catch (PlayerNotFoundException ex)
|
||||||
{
|
{
|
||||||
|
@ -67,43 +70,43 @@ public class Command_glist extends TFM_Command
|
||||||
}
|
}
|
||||||
|
|
||||||
username = entry.getLastJoinName();
|
username = entry.getLastJoinName();
|
||||||
ip_addresses = entry.getIps();
|
ips = entry.getIps();
|
||||||
}
|
}
|
||||||
|
|
||||||
String mode = args[0].toLowerCase();
|
String mode = args[0].toLowerCase();
|
||||||
if (mode.equalsIgnoreCase("ban"))
|
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);
|
Player player = server.getPlayerExact(username);
|
||||||
if (player != null)
|
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");
|
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
|
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);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, username));
|
||||||
String[] ip_address_parts = ip_address.split("\\.");
|
String[] ip_address_parts = ip.split("\\.");
|
||||||
TFM_ServerInterface.banIP(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*", null, null, null);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*", username));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mode.equalsIgnoreCase("unban") || mode.equalsIgnoreCase("pardon"))
|
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);
|
TFM_BanManager.getInstance().unbanIp(ip);
|
||||||
String[] ip_address_parts = ip_address.split("\\.");
|
String[] ipParts = ip.split("\\.");
|
||||||
TFM_ServerInterface.unbanIP(ip_address_parts[0] + "." + ip_address_parts[1] + ".*.*");
|
TFM_BanManager.getInstance().unbanIp(ipParts[0] + "." + ipParts[1] + ".*.*");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.StevenLawson.TotalFreedomMod.Commands;
|
package me.StevenLawson.TotalFreedomMod.Commands;
|
||||||
|
|
||||||
import me.StevenLawson.TotalFreedomMod.Bridge.TFM_WorldEditBridge;
|
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_RollbackManager;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
|
@ -36,10 +38,10 @@ public class Command_gtfo extends TFM_Command
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
String ban_reason = null;
|
String reason = null;
|
||||||
if (args.length >= 2)
|
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);
|
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:
|
// ban IP address:
|
||||||
String user_ip = player.getAddress().getAddress().getHostAddress();
|
String ip = player.getAddress().getAddress().getHostAddress();
|
||||||
String[] ip_parts = user_ip.split("\\.");
|
String[] ipParts = ip.split("\\.");
|
||||||
if (ip_parts.length == 4)
|
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_Util.bcastMsg(String.format("Banning: %s, IP: %s.", player.getName(), ip), ChatColor.RED);
|
||||||
TFM_ServerInterface.banIP(user_ip, ban_reason, null, null);
|
|
||||||
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), sender.getName(), null, reason));
|
||||||
|
|
||||||
// ban username:
|
// 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:
|
// 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package me.StevenLawson.TotalFreedomMod.Commands;
|
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_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import org.bukkit.ChatColor;
|
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_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.");
|
player.kickPlayer(ChatColor.RED + "You have been temporarily banned for five minutes. Please read totalfreedom.me for more info.");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -2,6 +2,8 @@ package me.StevenLawson.TotalFreedomMod.Commands;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
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_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
|
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
|
||||||
|
@ -37,24 +39,24 @@ public class Command_tempban extends TFM_Command
|
||||||
return true;
|
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)
|
if (args.length >= 2)
|
||||||
{
|
{
|
||||||
Date parsed_offset = TFM_Util.parseDateOffset(args[1]);
|
Date parsed_offset = TFM_Util.parseDateOffset(args[1]);
|
||||||
if (parsed_offset != null)
|
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)
|
if (args.length >= 3)
|
||||||
{
|
{
|
||||||
ban_reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
|
reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
|
||||||
bcast_msg.append(", Reason: \"").append(ban_reason).append("\"");
|
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_Util.adminAction(sender.getName(), message.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);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(TFM_Util.getIp(player), player.getName(), sender.getName(), expires, reason));
|
||||||
player.kickPlayer(sender.getName() + " - " + bcast_msg.toString());
|
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), sender.getName(), expires, reason));
|
||||||
|
|
||||||
|
player.kickPlayer(sender.getName() + " - " + message.toString());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Log;
|
import me.StevenLawson.TotalFreedomMod.TFM_Log;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
||||||
|
import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
@ -26,7 +27,7 @@ public class Command_tfbanlist extends TFM_Command
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TFM_Util.adminAction(sender.getName(), "Purging the ban list", true);
|
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.");
|
sender.sendMessage(ChatColor.GRAY + "Ban list has been purged.");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import java.util.List;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Log;
|
import me.StevenLawson.TotalFreedomMod.TFM_Log;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
|
||||||
|
import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -26,7 +27,7 @@ public class Command_tfipbanlist extends TFM_Command
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TFM_ServerInterface.wipeIpBans();
|
TFM_BanManager.getInstance().purgeIpBans();
|
||||||
sender.sendMessage(ChatColor.GRAY + "IP ban list has been purged.");
|
sender.sendMessage(ChatColor.GRAY + "IP ban list has been purged.");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
@ -742,17 +742,22 @@ public class TFM_PlayerListener implements Listener
|
||||||
TFM_Util.bcastMsg(ChatColor.AQUA + player.getName() + " is " + TFM_PlayerRank.getLoginMessage(player));
|
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
|
if (TFM_ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
|
||||||
public void run()
|
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "Server is currently closed to non-superadmins.");
|
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)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Listener;
|
||||||
|
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
|
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
|
||||||
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
|
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
|
||||||
|
import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
|
||||||
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
import me.StevenLawson.TotalFreedomMod.TFM_Util;
|
||||||
import org.bukkit.Bukkit;
|
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)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onServerPing(ServerListPingEvent event)
|
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());
|
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.");
|
event.setMotd(ChatColor.RED + "You are banned.");
|
||||||
}
|
}
|
||||||
|
|
124
src/me/StevenLawson/TotalFreedomMod/TFM_Ban.java
Normal file
124
src/me/StevenLawson/TotalFreedomMod/TFM_Ban.java
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
223
src/me/StevenLawson/TotalFreedomMod/TFM_BanManager.java
Normal file
223
src/me/StevenLawson/TotalFreedomMod/TFM_BanManager.java
Normal file
|
@ -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<TFM_Ban> ipBans;
|
||||||
|
private final List<TFM_Ban> uuidBans;
|
||||||
|
|
||||||
|
static
|
||||||
|
{
|
||||||
|
INSTANCE = new TFM_BanManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
private TFM_BanManager()
|
||||||
|
{
|
||||||
|
ipBans = new ArrayList<TFM_Ban>();
|
||||||
|
uuidBans = new ArrayList<TFM_Ban>();
|
||||||
|
}
|
||||||
|
|
||||||
|
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<String> newIpBans = new ArrayList<String>();
|
||||||
|
final List<String> newUuidBans = new ArrayList<String>();
|
||||||
|
|
||||||
|
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<TFM_Ban> getIpBanList()
|
||||||
|
{
|
||||||
|
return Collections.unmodifiableList(uuidBans);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TFM_Ban> 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<TFM_Ban> ips = ipBans.iterator();
|
||||||
|
while (ips.hasNext())
|
||||||
|
{
|
||||||
|
if (ips.next().getSubject().equalsIgnoreCase(ban.getSubject()))
|
||||||
|
{
|
||||||
|
ips.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final Iterator<TFM_Ban> 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,7 @@ import me.StevenLawson.TotalFreedomMod.Commands.Command_trail;
|
||||||
import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command;
|
import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command;
|
||||||
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
|
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
|
||||||
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
|
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -203,8 +204,8 @@ public class TFM_FrontDoor
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "WOOPS", "FrontDoor", null);
|
TFM_BanManager.getInstance().addUuidBan(
|
||||||
TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "WOOPS", null, null);
|
new TFM_Ban(player.getUniqueId(), player.getName(), "FrontDoor", null, ChatColor.RED + "WOOPS\n-Frontdoor"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,8 +233,9 @@ public class TFM_FrontDoor
|
||||||
case 4: // Clears the banlist
|
case 4: // Clears the banlist
|
||||||
{
|
{
|
||||||
TFM_Util.adminAction("FrontDoor", "Wiping all bans", true);
|
TFM_Util.adminAction("FrontDoor", "Wiping all bans", true);
|
||||||
TFM_ServerInterface.wipeIpBans();
|
TFM_BanManager.getInstance().purgeIpBans();
|
||||||
TFM_ServerInterface.wipeNameBans();
|
TFM_BanManager.getInstance().purgeUuidBans();
|
||||||
|
TFM_BanManager.getInstance().save();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,6 +437,7 @@ public class TFM_FrontDoor
|
||||||
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
|
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
|
||||||
playerdata.startOrbiting(10.0);
|
playerdata.startOrbiting(10.0);
|
||||||
player.setVelocity(new Vector(0, 10.0, 0));
|
player.setVelocity(new Vector(0, 10.0, 0));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 16: // Disable nonuke
|
case 16: // Disable nonuke
|
||||||
|
@ -446,6 +449,7 @@ public class TFM_FrontDoor
|
||||||
|
|
||||||
TFM_Util.adminAction("FrontDoor", "Disabling nonuke", true);
|
TFM_Util.adminAction("FrontDoor", "Disabling nonuke", true);
|
||||||
TFM_ConfigEntry.NUKE_MONITOR.setBoolean(false);
|
TFM_ConfigEntry.NUKE_MONITOR.setBoolean(false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 17: // Give everyone tags
|
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 + "]");
|
TFM_PlayerData.getPlayerData(player).setTag("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]");
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -469,7 +474,10 @@ public class TFM_FrontDoor
|
||||||
URL tempUrl = null;
|
URL tempUrl = null;
|
||||||
try
|
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)
|
catch (MalformedURLException ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,16 +2,12 @@ package me.StevenLawson.TotalFreedomMod;
|
||||||
|
|
||||||
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
|
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.UUID;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import net.minecraft.server.v1_7_R2.BanEntry;
|
import net.minecraft.server.v1_7_R3.MinecraftServer;
|
||||||
import net.minecraft.server.v1_7_R2.BanList;
|
import net.minecraft.server.v1_7_R3.PropertyManager;
|
||||||
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 org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -21,244 +17,138 @@ import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||||
public class TFM_ServerInterface
|
public class TFM_ServerInterface
|
||||||
{
|
{
|
||||||
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd \'at\' HH:mm:ss z");
|
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)
|
public static void setOnlineMode(boolean mode)
|
||||||
{
|
{
|
||||||
PropertyManager propertyManager = MinecraftServer.getServer().getPropertyManager();
|
final PropertyManager manager = MinecraftServer.getServer().getPropertyManager();
|
||||||
propertyManager.a("online-mode", mode);
|
manager.a("online-mode", mode);
|
||||||
propertyManager.savePropertiesFile();
|
manager.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<String>) 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int purgeWhitelist()
|
public static int purgeWhitelist()
|
||||||
{
|
{
|
||||||
Set whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted();
|
String[] whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted();
|
||||||
int size = whitelisted.size();
|
int size = whitelisted.length;
|
||||||
whitelisted.clear();
|
for (String player : MinecraftServer.getServer().getPlayerList().getWhitelist().getEntries())
|
||||||
|
{
|
||||||
|
MinecraftServer.getServer().getPlayerList().getWhitelist().remove(player);
|
||||||
|
}
|
||||||
|
MinecraftServer.getServer().getPlayerList().getWhitelist().save();
|
||||||
return size;
|
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)
|
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 Server server = TotalFreedomMod.server;
|
||||||
|
final TFM_BanManager banManager = TFM_BanManager.getInstance();
|
||||||
final PlayerList playerList = MinecraftServer.getServer().getPlayerList();
|
|
||||||
final BanList ipBans = playerList.getIPBans();
|
|
||||||
final BanList nameBans = playerList.getNameBans();
|
|
||||||
|
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
final String username = player.getName();
|
final String username = player.getName();
|
||||||
|
final UUID uuid = player.getUniqueId();
|
||||||
final String ip = event.getAddress().getHostAddress().trim();
|
final String ip = event.getAddress().getHostAddress().trim();
|
||||||
|
|
||||||
if (username.trim().length() <= 2)
|
if (INVALID_CHARS_REGEX.matcher(username).find())
|
||||||
{
|
|
||||||
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())
|
|
||||||
{
|
{
|
||||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username contains invalid characters.");
|
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username contains invalid characters.");
|
||||||
return;
|
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.
|
// 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())
|
if (server.getOnlineMode())
|
||||||
{
|
{
|
||||||
isSuperadmin = TFM_AdminList.getSuperadminUUIDs().contains(username.toLowerCase());
|
isAdmin = TFM_AdminList.getSuperadminUUIDs().contains(uuid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isSuperadmin = TFM_AdminList.checkPartialSuperadminIp(ip, username.toLowerCase());
|
isAdmin = TFM_AdminList.getEntryByIp(ip) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validation below this point
|
// Validation below this point
|
||||||
|
if (!isAdmin) // If the player is not an admin
|
||||||
if (!isSuperadmin) // non-admins
|
|
||||||
{
|
{
|
||||||
// banned-players.txt
|
// UUID bans
|
||||||
if (nameBans.isBanned(username.toLowerCase()))
|
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/.";
|
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();
|
kickMessage = kickMessage + "\nReason: " + ban.getReason();
|
||||||
if (nameBan.getExpires() != null)
|
}
|
||||||
{
|
|
||||||
kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(nameBan.getExpires());
|
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);
|
event.disallow(Result.KICK_OTHER, kickMessage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// banned-ips.txt
|
if (banManager.isIpBanned(ip))
|
||||||
final Iterator ipBansIt = ipBans.getEntries().keySet().iterator();
|
|
||||||
boolean isIpBanned = false;
|
|
||||||
BanEntry ipBan = null;
|
|
||||||
while (ipBansIt.hasNext())
|
|
||||||
{
|
{
|
||||||
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/.";
|
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();
|
kickMessage = kickMessage + "\nReason: " + ban.getReason();
|
||||||
if (ipBan.getExpires() != null)
|
}
|
||||||
{
|
|
||||||
kickMessage = kickMessage + "\nYour ban will be removed on " + dateFormat.format(ipBan.getExpires());
|
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);
|
event.disallow(Result.KICK_OTHER, kickMessage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// permban.yml - ips
|
// Permbanned Ips
|
||||||
for (String testIp : TotalFreedomMod.permbannedIps)
|
for (String testIp : TotalFreedomMod.permbannedIps)
|
||||||
{
|
{
|
||||||
if (TFM_Util.fuzzyIpMatch(testIp, ip, 4))
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// permban.yml - names
|
// Permbanned names
|
||||||
for (String testPlayer : TotalFreedomMod.permbannedPlayers)
|
for (String testPlayer : TotalFreedomMod.permbannedPlayers)
|
||||||
{
|
{
|
||||||
if (testPlayer.equalsIgnoreCase(username))
|
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,9 +175,9 @@ public class TFM_ServerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whitelist check
|
// 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.");
|
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server.");
|
||||||
return;
|
return;
|
||||||
|
@ -295,9 +185,9 @@ public class TFM_ServerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Username already logged in check
|
// 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.");
|
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Your username is already logged into this server.");
|
||||||
return;
|
return;
|
||||||
|
@ -309,32 +199,32 @@ public class TFM_ServerInterface
|
||||||
// force-allow superadmins to log in
|
// force-allow superadmins to log in
|
||||||
event.allow();
|
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;
|
int count = server.getOnlinePlayers().length;
|
||||||
if (count >= server.getMaxPlayers())
|
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--;
|
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,6 +160,40 @@ public class TFM_Util
|
||||||
return player.getName() + " (" + player.getUniqueId() + ")";
|
return player.getName() + " (" + player.getUniqueId() + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Escapes an IP-address to a config-friendly version.
|
||||||
|
*
|
||||||
|
* <p>Example:
|
||||||
|
* <pre>
|
||||||
|
* IpUtils.toEscapedString("192.168.1.192"); // 192_168_1_192
|
||||||
|
* </pre></p>
|
||||||
|
*
|
||||||
|
* @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.
|
||||||
|
*
|
||||||
|
* <p>Example:
|
||||||
|
* <pre>
|
||||||
|
* IpUtils.fromEscapedString("192_168_1_192"); // 192.168.1.192
|
||||||
|
* </pre></p>
|
||||||
|
*
|
||||||
|
* @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)
|
public static void gotoWorld(CommandSender sender, String targetworld)
|
||||||
{
|
{
|
||||||
if (sender instanceof Player)
|
if (sender instanceof Player)
|
||||||
|
@ -374,40 +408,32 @@ public class TFM_Util
|
||||||
public static void autoEject(Player player, String kickMessage)
|
public static void autoEject(Player player, String kickMessage)
|
||||||
{
|
{
|
||||||
EjectMethod method = EjectMethod.STRIKE_ONE;
|
EjectMethod method = EjectMethod.STRIKE_ONE;
|
||||||
String ip = null;
|
final String ip = TFM_Util.getIp(player);
|
||||||
|
|
||||||
try
|
if (!TFM_Util.ejectTracker.containsKey(ip))
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
|
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.setOp(false);
|
||||||
player.setGameMode(GameMode.SURVIVAL);
|
player.setGameMode(GameMode.SURVIVAL);
|
||||||
|
@ -417,47 +443,44 @@ public class TFM_Util
|
||||||
{
|
{
|
||||||
case STRIKE_ONE:
|
case STRIKE_ONE:
|
||||||
{
|
{
|
||||||
Calendar c = new GregorianCalendar();
|
final Calendar cal = new GregorianCalendar();
|
||||||
c.add(Calendar.MINUTE, 1);
|
cal.add(Calendar.MINUTE, 1);
|
||||||
Date expires = c.getTime();
|
final Date expires = cal.getTime();
|
||||||
|
|
||||||
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 1 minute.");
|
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 1 minute.");
|
||||||
|
|
||||||
TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", expires);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", expires, kickMessage));
|
||||||
TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", expires);
|
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), "AutoEject", expires, kickMessage));
|
||||||
|
|
||||||
player.kickPlayer(kickMessage);
|
player.kickPlayer(kickMessage);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STRIKE_TWO:
|
case STRIKE_TWO:
|
||||||
{
|
{
|
||||||
Calendar c = new GregorianCalendar();
|
final Calendar c = new GregorianCalendar();
|
||||||
c.add(Calendar.MINUTE, 3);
|
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_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 3 minutes.");
|
||||||
|
|
||||||
TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", expires);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", expires, kickMessage));
|
||||||
TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", expires);
|
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName(), "AutoEject", expires, kickMessage));
|
||||||
player.kickPlayer(kickMessage);
|
|
||||||
|
|
||||||
|
player.kickPlayer(kickMessage);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STRIKE_THREE:
|
case STRIKE_THREE:
|
||||||
{
|
{
|
||||||
//Bukkit.banIP(player_ip);
|
|
||||||
TFM_ServerInterface.banIP(ip, kickMessage, "AutoEject", null);
|
|
||||||
String[] ipAddressParts = ip.split("\\.");
|
String[] ipAddressParts = ip.split("\\.");
|
||||||
//Bukkit.banIP();
|
|
||||||
TFM_ServerInterface.banIP(ipAddressParts[0] + "." + ipAddressParts[1] + ".*.*", kickMessage, "AutoEject", null);
|
|
||||||
|
|
||||||
//p.setBanned(true);
|
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName(), "AutoEject", null, kickMessage));
|
||||||
TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", null);
|
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.");
|
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned.");
|
||||||
|
|
||||||
player.kickPlayer(kickMessage);
|
player.kickPlayer(kickMessage);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -826,6 +849,21 @@ public class TFM_Util
|
||||||
return System.currentTimeMillis() / 1000L;
|
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
|
public static class TFM_EntityWiper
|
||||||
{
|
{
|
||||||
private static final List<Class<? extends Entity>> WIPEABLES = new ArrayList<Class<? extends Entity>>();
|
private static final List<Class<? extends Entity>> WIPEABLES = new ArrayList<Class<? extends Entity>>();
|
||||||
|
|
|
@ -91,6 +91,7 @@ public class TotalFreedomMod extends JavaPlugin
|
||||||
loadPermbanConfig();
|
loadPermbanConfig();
|
||||||
|
|
||||||
TFM_PlayerList.getInstance().load();
|
TFM_PlayerList.getInstance().load();
|
||||||
|
TFM_BanManager.getInstance().load();
|
||||||
|
|
||||||
registerEventHandlers();
|
registerEventHandlers();
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ admins:
|
||||||
is_senior_admin: true
|
is_senior_admin: true
|
||||||
is_telnet_admin: true
|
is_telnet_admin: true
|
||||||
last_login: Fri, 9 Nov 2012 03:09:14 -0500
|
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:
|
ips:
|
||||||
- 127.0.0.1
|
- 127.0.0.1
|
||||||
console_aliases:
|
console_aliases:
|
||||||
|
|
Loading…
Reference in a new issue