Compare commits

..

40 Commits
v4.1 ... v4.2

Author SHA1 Message Date
f8231aeb3f Stable release v4.2 2014-05-19 14:25:04 +02:00
eddbcf515c Allow customization of Owners. Appends to #178 and commit 67c86aea 2014-05-19 14:21:37 +02:00
00ac914066 Unban fuzzy IPs for admins. Fixes #187 2014-05-16 15:39:40 +02:00
179fe9d665 Organise TFM_ConfigEntry values by type 2014-05-16 15:30:02 +02:00
67c86aea24 Added config values for MOTD, server name and address. Resolves #178 2014-05-16 15:18:24 +02:00
16b02e3dec Changed /saconfig remove to /saconfig delete to match usage. Fixes #183 2014-05-14 16:22:56 +02:00
70e248202b Increment version number to 4.2 2014-05-13 17:56:21 +02:00
51ef752259 Don't warn when finding unknown services in ServiceChecker 2014-05-13 17:18:08 +02:00
b3e40462e2 Preload player when logging in. Fixes #182 2014-05-13 17:11:32 +02:00
73a91c02c6 Re-implement unbannable usernames. Resolves #180 2014-05-13 17:01:55 +02:00
7b8ba0bdf5 Revamp /plugincontrol. Fixes #159 2014-05-13 16:32:01 +02:00
bd9d6114ba Add /wipeuserdata. Resolves #177 2014-05-11 19:04:01 +02:00
0435174342 Perform daily and weekly backups. Resolves #163 2014-05-11 18:41:58 +02:00
796ef3d359 Refractored .createBackup() to TFM_Util.createBackup(String) 2014-05-11 18:15:04 +02:00
a3f3903760 Increase default nuking block place threshold. Resolves #169 2014-05-11 18:05:51 +02:00
5c99aa9a44 Merge pull request #176 from Wild1145/patch-1
Removed Legacy Login
2014-05-11 17:54:22 +02:00
8292eb20ae Removed Legacy Login
Due to HeartBleed Mojang had to disable the legacy login servers. They will always show as "Offline" so may as well just remove them.
2014-05-11 12:56:01 +02:00
d9e0791a3b Merge pull request #175 from Wild1145/master
Added Telent check along with Auto Prefix and Auto color tab
2014-05-10 23:44:39 +02:00
dbfec1e86d Added Color Tabs and Auto Prefixes. Resolves #173 2014-05-10 22:42:37 +01:00
31e03d6348 Added a telnet checker. 2014-05-10 22:40:32 +01:00
46494a2c87 Reset 2014-05-10 22:40:19 +01:00
b11eb0f762 Added in both player tab colours, Auto Prefixes and a telnet checker 2014-05-10 22:35:45 +01:00
730b0e2c83 Merge with master 2014-05-07 12:53:05 +02:00
60a9de7e7c [Bleeding] Allow spaces in tags. Resolves #160 2014-05-05 16:25:57 +02:00
8a4fa946fd Make /doom ban all IPs
Before, /doom would only ban the current IP
2014-05-05 16:10:14 +02:00
9bc0859fdf Added /tagnyan. Resolves #170 2014-05-05 16:03:30 +02:00
742450d016 Convert stop/remove to string literals. Resolves #168
Removed TFM_Util.isStopCommand(String) and TFM_Util.isRemoveCommand(String)
2014-05-05 15:31:12 +02:00
ad06bea3ae Fixed bugs with /saconfig clear. Resolves #167
Admins can now use /saconfig clear [ip] to remove the designated IP (only their own IPs can be removed. They can also simply use /saconfig clear to remove all IPs but the current one. /saconfig clear is safe, meaning you can't remove your current IP or an IP that doesn't belong to you.
2014-05-05 14:27:33 +02:00
68d83fa397 Allow admins to remove their own IPs 2014-05-05 14:10:32 +02:00
fe84c3a2a0 Removed Command_listsync. Resolves #166
@markbyrn wants it removed. It also didn't have much of a use, associated servers wouldn't use it since it overwrites the current superadmin and permban config.
2014-05-05 13:35:47 +02:00
6e5e70ac90 [Bleeding] A little more config tweaking 2014-05-05 13:30:17 +02:00
489549a0ea Warn when NMS versions don't match. Resolves #165 2014-05-05 00:01:57 +02:00
56b55eb3e2 [Bleeding] Fixed last errors due to misconfigured config 2014-05-04 23:07:26 +02:00
4ef5f59fb9 [Bleeding] Fixed startup error due to misconfigured config 2014-05-04 23:03:34 +02:00
d31ad2e9fc [Bleeding] Remove player online check through PlayerNotFoundException
getPlayer(String) now returns null when the player could not be found
2014-04-26 13:55:24 +02:00
8a9dfca6d3 [Bleeding] Config refractoring 2014-04-26 13:21:36 +02:00
55ddf5a30a Merge branch 'master' into bleeding 2014-04-25 17:36:08 +02:00
59e890c654 Added more startup statistics 2014-04-25 17:26:10 +02:00
b0e62add9f Reupdate index lists when adding an admin. Fixes #156 2014-04-25 17:10:43 +02:00
7cdf1abcf2 [Bleeding] Fix invalid characters in usernames 2014-04-23 19:30:11 +02:00
73 changed files with 1004 additions and 818 deletions

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Wed Apr 23 17:02:21 CEST 2014
build.number=796
#Mon May 19 14:24:40 CEST 2014
build.number=860

View File

@ -1,6 +1,6 @@
#
# TotalFreedomMod banning config
# Warning: modification of this file is not reccomended
# Warning: modification of this file is not recomended
#
# Format:
# Ip: [IP-address / UUID]:[Last login name]:[Expiry unix timestamp (0 = never)][Banned by]:[Reason]

View File

@ -1,33 +1,56 @@
# TotalFreedomMod v4.1 Configuration
# TotalFreedomMod v4.2 Configuration
# by Madgeek1450 and DarthSalamon
# Block placement prevention:
allow_fire_place: false
allow_fire_spread: false
allow_lava_damage: false
allow_lava_place: false
allow_water_place: false
allow_fluid_spread: false
allow_tnt_minecarts: false
# Generic server information
server:
# You should change this to your server's name
name: TotalFreedom
# The address your server is located at
address: 64.34.165.5:28965
# Shown at the server list
motd: TotalFreedom &8- Minecraft %mcversion%
# Every word in the MOTD will be a different color unless prefixed by a color code
colorful_motd: true
# All players who show up as owner
owners:
- markbyron
# URL players should appeal for bans at
ban_url: http://totalfreedom.boards.net/
# URL players should appeal for permanent bans at
permban_url: http://bit.ly/TF_PermBan
# Blocking certain events
allow:
fire_place: false
fire_spread: false
fluid_spread: false
lava_place: false
lava_damage: false
water_place: false
tnt_minecarts: false
explosions: false
# Explosion management:
allow_explosions: false
explosive_radius: 4.0
# Blocked commands:
#
# How blocked commands work:
# All sections described below are delimited by colon-characters.
# Make sure that you block a command by it's main command name, not an alias
# -as all aliases are blocked by default. Commands are case-insensitive ofcourse.
# You can block specific subcommands aswell. eg: /mail sendall
# All sections described below are delimited by colon characters.
# Make sure that you block a command by its main command name, not an alias
# -as all aliases are blocked by default. Commands are case-insensitive.
#
# * The first section is a letter which indicates which rank may use this command
# Valid ranks:
# n - Nobody (Completely disabled)
# c - Senior Admins (Console)
# t - Telnet Admins (Console)
# s - SuperAdmins
# s - Super Admins (Any in-game admin)
# o - Ops (Non-Ops won't be able to use it)
#
# * The second section is a letter which indicates what to do when a player executes that command.
@ -74,6 +97,7 @@ blocked_commands:
- 's:b:/tool:_'
- 's:b://butcher:_'
- 's:b:/scoreboard:_'
- 's:b:/setspawn:_'
# Superadmin commands - Auto-eject
- 's:a:/stop'
@ -82,25 +106,32 @@ blocked_commands:
- 's:a:/save-on'
- 's:a:/save-off'
- 's:a:/clearhistory'
- 's:a:/mat'
# Spigot commands
- 's:a:/restart'
- 's:b:/setblock'
# Automatically wipe dropped objects:
auto_wipe: true
# Nuking prevention:
nuke_monitor: true
nuke_monitor_count_break: 100
nuke_monitor_count_place: 25
nuke_monitor_range: 10.0
# Nuking prevention
nukemonitor:
enabled: true
count_break: 100
count_place: 40
range: 10.0
freecam_trigger_count: 10
# Show all attempted commands in the log, will result in duplicate log messages:
preprocess_log: true
# Disable nighttime:
disable_night: true
# Disable certain events
disable:
night: true
weather: true
# Disable weather:
disable_weather: true
# Enable misc. features:
landmines_enabled: false
@ -108,26 +139,30 @@ mp44_enabled: false
tossmob_enabled: false
# Moblimiter:
mob_limiter_enabled: true
# Max per world:
mob_limiter_max: 50
mob_limiter_disable_dragon: true
mob_limiter_disable_ghast: true
mob_limiter_disable_slime: true
mob_limiter_disable_giant: true
moblimiter:
enabled: true
max: 50
disable:
dragon: true
ghast: true
slime: true
giant: true
# Flatlands
generate_flatlands: true
# Flatlands generation parameters, uses CleanroomGenerator syntax - http://dev.bukkit.org/server-mods/cleanroomgenerator/
flatlands_generation_params: 16,stone,32,dirt,1,grass
flatlands:
generate: true
# Flatlands generation parameters, uses CleanroomGenerator syntax - http://dev.bukkit.org/server-mods/cleanroomgenerator/
generate_params: 16,stone,32,dirt,1,grass
# Admin-Only Mode
admin_only_mode: false
# Protected Areas - Protect areas so that only superadmins can directly modify blocks in those areas. WorldEdit and other such plugins might bypass this.
protected_areas_enabled: true
auto_protect_spawnpoints: true
auto_protect_radius: 25.0
protectarea:
enabled: true
auto_protect_spawnpoints: true
auto_protect_radius: 25.0
# Give the default CONSOLE senior admin privileges.
# Handy in development environments.
@ -177,30 +212,36 @@ unbannable_usernames:
- stampylonghead
- stampylongnose
- dantdm
- gizzy14gazza
# TwitterBot - Used to allow superadmins to verify themselves using twitter
twitterbot_enabled: false
twitterbot_url: ''
twitterbot_secret: ''
twitterbot:
enabled: false
url: ''
secret: ''
# Pet Protect - Prevent tamed pets from being killed.
pet_protect_enabled: true
petprotect:
enabled: true
# Logs Registration
logs_register_password: ''
logs_register_url: ''
logs:
url: ''
secret: ''
# Mojang service checker
service_checker_url: http://status.mojang.com/check
# HTTPD
httpd_enabled: true
httpd_public_folder: ./public_html
httpd_port: 28966
httpd:
enabled: true
port: 28966
public_folder: ./public_html
# Inactivity Auto-Kick (Requires Essentials)
autokick_enabled: true
# autokick_threshold - Percentage of server player capacity used at which players will be automatically kicked for being inactive. Range: 0.0 - 1.0
autokick_threshold: 0.9
# autokick_time - Time, in seconds, after which a player should be kicked when inactive
autokick_time: 120
autokick:
enabled: true
# autokick_threshold - Percentage of server player capacity used at which players will be automatically kicked for being inactive. Range: 0.0 - 1.0
threshold: 0.9
# autokick_time - Time, in seconds, after which a player should be kicked when inactive
time: 120

View File

@ -113,18 +113,15 @@ public class Command_adminworld extends TFM_Command
if ("add".equalsIgnoreCase(args[1]))
{
Player player;
try
final Player player = getPlayer(args[2]);
if (player == null)
{
player = getPlayer(args[2]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
if (player != null && TFM_AdminWorld.getInstance().addGuest(player, sender_p))
if (TFM_AdminWorld.getInstance().addGuest(player, sender_p))
{
TFM_Util.adminAction(sender.getName(), "AdminWorld guest added: " + player.getName(), false);
}
@ -133,9 +130,9 @@ public class Command_adminworld extends TFM_Command
playerMsg("Could not add player to guest list.");
}
}
else if (TFM_Util.isRemoveCommand(args[1]))
else if ("remove".equals(args[1]))
{
Player player = TFM_AdminWorld.getInstance().removeGuest(args[2]);
final Player player = TFM_AdminWorld.getInstance().removeGuest(args[2]);
if (player != null)
{
TFM_Util.adminAction(sender.getName(), "AdminWorld guest removed: " + player.getName(), false);

View File

@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -36,14 +37,11 @@ public class Command_blockcmd extends TFM_Command
return true;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage());
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
@ -21,7 +22,7 @@ public class Command_cage extends TFM_Command
return false;
}
if (TFM_Util.isStopCommand(args[0]) && sender instanceof Player)
if ("off".equals(args[0]) && sender instanceof Player)
{
TFM_Util.adminAction(sender.getName(), "Uncaging " + sender.getName(), true);
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(sender_p);
@ -32,9 +33,9 @@ public class Command_cage extends TFM_Command
return true;
}
else if ("purge".equalsIgnoreCase(args[0]))
else if ("purge".equals(args[0]))
{
TFM_Util.adminAction(sender.getName(), "Uncaging all players.", true);
TFM_Util.adminAction(sender.getName(), "Uncaging all players", true);
for (Player player : server.getOnlinePlayers())
{
@ -47,14 +48,11 @@ public class Command_cage extends TFM_Command
return true;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
@ -65,7 +63,7 @@ public class Command_cage extends TFM_Command
if (args.length >= 2)
{
if (TFM_Util.isStopCommand(args[1]))
if ("off".equals(args[1]))
{
TFM_Util.adminAction(sender.getName(), "Uncaging " + player.getName(), true);

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Minecart;
@ -17,13 +18,12 @@ public class Command_cartsit extends TFM_Command
if (args.length == 1)
{
try
targetPlayer = getPlayer(args[0]);
if (targetPlayer == null)
{
targetPlayer = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
}

View File

@ -54,13 +54,12 @@ public class Command_creative extends TFM_Command
return true;
}
try
player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -13,10 +13,9 @@ public class Command_denick extends TFM_Command
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
TFM_Util.adminAction(sender.getName(), "Removing all nicknames.", false);
TFM_Util.adminAction(sender.getName(), "Removing all nicknames", false);
Player[] onlinePlayers = server.getOnlinePlayers();
for (Player player : onlinePlayers)
for (Player player : server.getOnlinePlayers())
{
TFM_EssentialsBridge.getInstance().setNickname(player.getName(), null);
}

View File

@ -1,10 +1,11 @@
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_PlayerList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
@ -25,14 +26,11 @@ public class Command_doom extends TFM_Command
return false;
}
final Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
@ -54,8 +52,11 @@ public class Command_doom extends TFM_Command
// deop
player.setOp(false);
// ban IP
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(ip, player.getName()));
// ban IPs
for (String playerIp : TFM_PlayerList.getInstance().getEntry(player).getIps())
{
TFM_BanManager.getInstance().addIpBan(new TFM_Ban(playerIp, player.getName()));
}
// ban name
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(player.getUniqueId(), player.getName()));

View File

@ -55,13 +55,6 @@ public class Command_enchant extends TFM_Command
{
for (Enchantment ench : Enchantment.values())
{
/*
2013-07-20 23:17:13 [INFO] [TotalFreedomMod]: Command Error: enchant
java.lang.NullPointerException
at net.minecraft.server.v1_6_R2.EnchantmentDurability.canEnchant(SourceFile:33)
at org.bukkit.craftbukkit.v1_6_R2.enchantments.CraftEnchantment.canEnchantItem(CraftEnchantment.java:55)
at me.StevenLawson.TotalFreedomMod.Commands.Command_enchant.run(Command_enchant.java:56)
*/
try
{
if (ench.canEnchantItem(itemInHand))
@ -122,7 +115,7 @@ public class Command_enchant extends TFM_Command
playerMsg("Can't use this enchantment on held item.");
}
}
else if (TFM_Util.isRemoveCommand(args[0]))
else if (args[0].equals("remove"))
{
itemInHand.removeEnchantment(ench);

View File

@ -19,14 +19,12 @@ public class Command_findip extends TFM_Command
return false;
}
final Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage());
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -13,7 +13,7 @@ public class Command_flatlands extends TFM_Command
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (TFM_ConfigEntry.GENERATE_FLATLANDS.getBoolean())
if (TFM_ConfigEntry.FLATLANDS_GENERATE.getBoolean())
{
TFM_Flatlands.getInstance().sendToWorld(sender_p);
}

View File

@ -81,14 +81,11 @@ public class Command_fr extends TFM_Command
}
else
{
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}

View File

@ -1,8 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -19,14 +19,11 @@ public class Command_gcmd extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -35,6 +35,7 @@ public class Command_glist extends TFM_Command
if (TFM_AdminList.isSeniorAdmin(sender))
{
TFM_PlayerList.getInstance().purgeAll();
playerMsg("Purged playerbase");
}
else
{
@ -52,13 +53,11 @@ public class Command_glist extends TFM_Command
String username;
final List<String> ips = new ArrayList<String>();
try
{
final Player player = getPlayer(args[1]);
username = player.getName();
ips.add(player.getAddress().getAddress().getHostAddress());
}
catch (PlayerNotFoundException ex)
final Player player = getPlayer(args[1]);
if (player == null)
{
final TFM_PlayerEntry entry = TFM_PlayerList.getInstance().getEntry(args[1]);
@ -71,17 +70,22 @@ public class Command_glist extends TFM_Command
username = entry.getLastJoinName();
ips.addAll(entry.getIps());
}
else
{
username = player.getName();
ips.add(player.getAddress().getAddress().getHostAddress());
}
String mode = args[0].toLowerCase();
if (mode.equalsIgnoreCase("ban"))
{
TFM_Util.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ips, ","), true);
Player player = server.getPlayerExact(username);
if (player != null)
Player target = server.getPlayerExact(username);
if (target != 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");
TFM_BanManager.getInstance().addUuidBan(new TFM_Ban(target.getUniqueId(), target.getName()));
target.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
{
@ -104,8 +108,7 @@ public class Command_glist extends TFM_Command
for (String ip : ips)
{
TFM_BanManager.getInstance().unbanIp(ip);
String[] ipParts = ip.split("\\.");
TFM_BanManager.getInstance().unbanIp(ipParts[0] + "." + ipParts[1] + ".*.*");
TFM_BanManager.getInstance().unbanIp(TFM_Util.getFuzzyIp(ip));
}
}
else

View File

@ -4,8 +4,8 @@ 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;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
@ -27,14 +27,11 @@ public class Command_gtfo extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}
@ -79,12 +76,7 @@ public class Command_gtfo extends TFM_Command
}
// ban IP address:
String ip = player.getAddress().getAddress().getHostAddress();
String[] ipParts = ip.split("\\.");
if (ipParts.length == 4)
{
ip = String.format("%s.%s.*.*", ipParts[0], ipParts[1]);
}
String ip = TFM_Util.getFuzzyIp(player.getAddress().getAddress().getHostAddress());
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));

View File

@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -76,18 +77,14 @@ public class Command_halt extends TFM_Command
return true;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (!playerdata.isHalted())
{

View File

@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Manage jumppads", usage = "/<command> <on | off | info |sideways <on | off> | strength <strength (1-10)>>", aliases = "launchpads,jp")
@CommandParameters(description = "Manage jumppads", usage = "/<command> <on | off | info | sideways <on | off> | strength <strength (1-10)>>", aliases = "launchpads,jp")
public class Command_jumppads extends TFM_Command
{
@Override
@ -29,7 +29,7 @@ public class Command_jumppads extends TFM_Command
return true;
}
if (TFM_Util.isStopCommand(args[0]))
if ("off".equals(args[0]))
{
TFM_Util.adminAction(sender.getName(), "Disabling Jumppads", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.OFF);
@ -50,7 +50,7 @@ public class Command_jumppads extends TFM_Command
if (args[0].equalsIgnoreCase("sideways"))
{
if (TFM_Util.isStopCommand(args[1]))
if ("off".equals(args[1]))
{
TFM_Util.adminAction(sender.getName(), "Setting Jumppads mode to: Madgeek", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.MADGEEK);

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -18,27 +19,24 @@ public class Command_lastcmd extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (playerdata != null)
{
String last_command = playerdata.getLastCommand();
if (last_command.isEmpty())
String lastCommand = playerdata.getLastCommand();
if (lastCommand.isEmpty())
{
last_command = "(none)";
lastCommand = "(none)";
}
playerMsg(player.getName() + " - Last Command: " + last_command, ChatColor.GRAY);
playerMsg(player.getName() + " - Last Command: " + lastCommand, ChatColor.GRAY);
}
return true;

View File

@ -1,50 +0,0 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.io.File;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_PermbanList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
@CommandParameters(description = "Download the superadmin and permban lists from the main TotalFreedom server.", usage = "/<command>")
public class Command_listsync extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
TFM_Util.adminAction(sender.getName(), "Downloading superadmin and permban lists from primary TotalFreedom server.", false);
try
{
TFM_AdminList.createBackup();
TFM_Util.downloadFile("http://madgeekonline.com/apps/get_superadmins_raw.php", new File(TotalFreedomMod.plugin.getDataFolder(),
TotalFreedomMod.SUPERADMIN_FILE));
TFM_AdminList.load();
TFM_Util.adminAction(sender.getName(), TotalFreedomMod.SUPERADMIN_FILE + " downloaded.", false);
}
catch (Exception ex)
{
TFM_Log.severe(ex);
}
try
{
TFM_PermbanList.createBackup();
TFM_Util.downloadFile("http://madgeekonline.com/apps/get_permbans_raw.php", new File(TotalFreedomMod.plugin.getDataFolder(),
TotalFreedomMod.PERMBAN_FILE));
TFM_PermbanList.load();
TFM_Util.adminAction(sender.getName(), TotalFreedomMod.PERMBAN_FILE + " downloaded.", false);
}
catch (Exception ex)
{
TFM_Log.severe(ex);
}
return true;
}
}

View File

@ -1,34 +0,0 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Prevents new players from joining the server", usage = "/<command> <on | off>")
public class Command_lockdown extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
if (TFM_Util.isStopCommand(args[0]))
{
TFM_Util.adminAction(sender.getName(), "De-activating server lockdown", true);
TotalFreedomMod.lockdownEnabled = false;
}
else
{
TFM_Util.adminAction(sender.getName(), "Activating server lockdown", true);
TotalFreedomMod.lockdownEnabled = true;
}
return true;
}
}

View File

@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -46,14 +47,11 @@ public class Command_lockup extends TFM_Command
{
if (args[1].equalsIgnoreCase("on"))
{
final Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
@ -61,16 +59,13 @@ public class Command_lockup extends TFM_Command
startLockup(player);
playerMsg("Locked up " + player.getName() + ".");
}
else if (TFM_Util.isStopCommand(args[1]))
else if ("off".equals(args[1]))
{
final Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -12,7 +12,6 @@ import java.util.Map.Entry;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_Admin;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
@ -32,7 +31,7 @@ public class Command_logs extends TFM_Command
if (args.length == 1)
{
mode = (TFM_Util.isStopCommand(args[0]) ? LogsRegistrationMode.DELETE : LogsRegistrationMode.UPDATE);
mode = ("off".equals(args[0]) ? LogsRegistrationMode.DELETE : LogsRegistrationMode.UPDATE);
}
updateLogsRegistration(sender, sender_p, mode);
@ -47,8 +46,8 @@ public class Command_logs extends TFM_Command
public static void updateLogsRegistration(final CommandSender sender, final String targetName, final String targetIP, final LogsRegistrationMode mode)
{
final String logsRegisterURL = TFM_ConfigEntry.LOGS_REGISTER_URL.getString();
final String logsRegisterPassword = TFM_ConfigEntry.LOGS_REGISTER_PASSWORD.getString();
final String logsRegisterURL = TFM_ConfigEntry.LOGS_URL.getString();
final String logsRegisterPassword = TFM_ConfigEntry.LOGS_SECRET.getString();
if (logsRegisterURL == null || logsRegisterPassword == null || logsRegisterURL.isEmpty() || logsRegisterPassword.isEmpty())
{

View File

@ -34,20 +34,14 @@ public class Command_nf extends TFM_Command
if (matcher.find())
{
String displayName = matcher.group(1);
try
{
player = getPlayerByDisplayName(displayName);
}
catch (PlayerNotFoundException ex)
{
}
player = getPlayerByDisplayName(displayName);
if (player == null)
{
try
{
player = getPlayerByDisplayNameAlt(displayName);
}
catch (PlayerNotFoundException ex)
player = getPlayerByDisplayNameAlt(displayName);
if (player == null)
{
sender.sendMessage(ChatColor.GRAY + "Can't find player by nickname: " + displayName);
return true;
@ -80,7 +74,7 @@ public class Command_nf extends TFM_Command
return true;
}
private static Player getPlayerByDisplayName(String needle) throws PlayerNotFoundException
private static Player getPlayerByDisplayName(String needle)
{
needle = needle.toLowerCase().trim();
@ -93,10 +87,10 @@ public class Command_nf extends TFM_Command
}
}
throw new PlayerNotFoundException();
return null;
}
private static Player getPlayerByDisplayNameAlt(String needle) throws PlayerNotFoundException
private static Player getPlayerByDisplayNameAlt(String needle)
{
needle = needle.toLowerCase().trim();
@ -115,11 +109,6 @@ public class Command_nf extends TFM_Command
}
}
if (minEditMatch == null)
{
throw new PlayerNotFoundException();
}
return minEditMatch;
}
}

View File

@ -19,7 +19,7 @@ public class Command_nicknyan extends TFM_Command
return false;
}
if (TFM_Util.isStopCommand(args[0]))
if ("off".equals(args[0]))
{
TFM_EssentialsBridge.getInstance().setNickname(sender.getName(), null);
playerMsg("Nickname cleared.");

View File

@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
@ -10,7 +11,8 @@ import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "POW!!! Right in the kisser! One of these days Alice, straight to the Moon!", usage = "/<command> <target> [power]")
@CommandParameters(description = "POW!!! Right in the kisser! One of these days Alice, straight to the Moon!",
usage = "/<command> <target> [<<power> | stop>]")
public class Command_orbit extends TFM_Command
{
@Override
@ -21,14 +23,11 @@ public class Command_orbit extends TFM_Command
return false;
}
Player player;
try
Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}
@ -38,7 +37,7 @@ public class Command_orbit extends TFM_Command
if (args.length >= 2)
{
if (TFM_Util.isStopCommand(args[1]))
if (args[1].equals("stop"))
{
playerMsg("Stopped orbiting " + player.getName());
playerdata.stopOrbiting();
@ -60,7 +59,7 @@ public class Command_orbit extends TFM_Command
playerdata.startOrbiting(strength);
player.setVelocity(new Vector(0, strength, 0));
TFM_Util.adminAction(sender.getName(), "Orbiting " + player.getName() + ".", false);
TFM_Util.adminAction(sender.getName(), "Orbiting " + player.getName(), false);
return true;
}

View File

@ -32,7 +32,6 @@ public class Command_permban extends TFM_Command
return true;
}
playerMsg("Reloading permban list...", ChatColor.RED);
TFM_PermbanList.createBackup();
TFM_PermbanList.load();
dumplist(sender);
}

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -8,122 +9,142 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.BOTH)
@CommandParameters(description = "Enable / disable plugins.", usage = "/<command> < <enable | disable> <pluginname> | list >", aliases = "plc")
@CommandParameters(description = "Manage plugins", usage = "/<command> <<enable | disable | reload> <pluginname>> | list>", aliases = "plc")
public class Command_plugincontrol extends TFM_Command
{
private enum CommandMode
{
ENABLE, DISABLE, LIST, RELOAD
}
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
CommandMode commandMode = null;
if (args.length == 0 || args.length > 2)
{
return false;
}
final PluginManager pm = server.getPluginManager();
if (args.length == 1)
{
if (args[0].equalsIgnoreCase("list"))
{
commandMode = CommandMode.LIST;
}
else if (args[0].equalsIgnoreCase("reload"))
{
commandMode = CommandMode.RELOAD;
}
}
else if (args.length >= 2)
{
if (args[0].equalsIgnoreCase("enable"))
{
commandMode = CommandMode.ENABLE;
}
else if (args[0].equalsIgnoreCase("disable"))
{
commandMode = CommandMode.DISABLE;
}
}
for (Plugin serverPlugin : pm.getPlugins())
{
final String version = serverPlugin.getDescription().getVersion();
playerMsg(ChatColor.GRAY + "- " + (serverPlugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED) + serverPlugin.getName()
+ ChatColor.GOLD + (version != null && !version.isEmpty() ? " v" + version : "") + " by "
+ StringUtils.join(serverPlugin.getDescription().getAuthors(), ", "));
}
return true;
}
if (commandMode == null)
{
return false;
}
PluginManager pluginManager = plugin.getServer().getPluginManager();
if (commandMode == CommandMode.LIST)
if ("enable".equals(args[0]))
{
playerMsg("Plugins: " + StringUtils.join(pluginManager.getPlugins(), ", "));
}
else if (commandMode == CommandMode.RELOAD)
{
playerMsg("Disabling all plugins.");
for (Plugin targetPlugin : pluginManager.getPlugins())
final Plugin target = getPlugin(args[1]);
if (target == null)
{
if (!targetPlugin.getName().toLowerCase().startsWith("totalfreedommod"))
{
pluginManager.disablePlugin(targetPlugin);
}
}
playerMsg("Enabling all plugins.");
for (Plugin targetPlugin : pluginManager.getPlugins())
{
if (!targetPlugin.getName().toLowerCase().startsWith("totalfreedommod"))
{
pluginManager.enablePlugin(targetPlugin);
}
}
}
else
{
final String searchPluginName = args[1].toLowerCase().trim();
Plugin targetPlugin = null;
for (Plugin serverPlugin : pluginManager.getPlugins())
{
if (searchPluginName.equalsIgnoreCase(serverPlugin.getName().toLowerCase().trim()))
{
targetPlugin = serverPlugin;
break;
}
}
if (targetPlugin == null)
{
playerMsg("Plugin \"" + searchPluginName + "\" is not installed.");
playerMsg("Plugin not found!");
return true;
}
else
if (target.isEnabled())
{
if (commandMode == CommandMode.ENABLE)
playerMsg("Plugin is already enabled.");
return true;
}
pm.enablePlugin(target);
if (!pm.isPluginEnabled(target))
{
playerMsg("Error enabling plugin " + target.getName());
return true;
}
playerMsg(target.getName() + " is now enabled.");
return true;
}
if ("disable".equals(args[0]))
{
final Plugin target = getPlugin(args[1]);
if (target == null)
{
playerMsg("Plugin not found!");
return true;
}
if (!target.isEnabled())
{
playerMsg("Plugin is already disabled.");
return true;
}
if (target.getName().equals(plugin.getName()))
{
playerMsg("You cannot disable " + plugin.getName());
return true;
}
pm.disablePlugin(target);
if (pm.isPluginEnabled(target))
{
playerMsg("Error disabling plugin " + target.getName());
return true;
}
playerMsg(target.getName() + " is now disabled.");
return true;
}
if ("reload".equals(args[0]))
{
final Plugin target = getPlugin(args[1]);
if (target == null)
{
playerMsg("Plugin not found!");
return true;
}
if (target.getName().equals(plugin.getName()))
{
playerMsg("Use /tfm reload to reload instead.");
return true;
}
pm.disablePlugin(target);
pm.enablePlugin(target);
playerMsg(target.getName() + " reloaded.");
return true;
}
return false;
}
public Plugin getPlugin(String name)
{
for (Plugin serverPlugin : server.getPluginManager().getPlugins())
{
if (serverPlugin.getName().equalsIgnoreCase(name))
{
return serverPlugin;
}
}
if (name.length() >= 3)
{
for (Plugin serverPlugin : server.getPluginManager().getPlugins())
{
if (serverPlugin.getName().toLowerCase().contains(name.toLowerCase()))
{
pluginManager.enablePlugin(targetPlugin);
if (targetPlugin.isEnabled())
{
playerMsg("Plugin \"" + targetPlugin.getName() + "\" enabled.");
}
else
{
playerMsg("Error enabling plugin \"" + targetPlugin.getName() + "\".");
}
}
else
{
pluginManager.disablePlugin(targetPlugin);
if (!targetPlugin.isEnabled())
{
playerMsg("Plugin \"" + targetPlugin.getName() + "\" disabled.");
}
else
{
playerMsg("Error disabling plugin \"" + targetPlugin.getName() + "\".");
}
return serverPlugin;
}
}
}
return true;
return null;
}
}

View File

@ -58,13 +58,11 @@ public class Command_potion extends TFM_Command
if (args.length == 2)
{
try
target = getPlayer(args[1]);
if (target == null)
{
target = getPlayer(args[1]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}
}
@ -103,13 +101,12 @@ public class Command_potion extends TFM_Command
if (args.length == 5)
{
try
target = getPlayer(args[4]);
if (target == null)
{
target = getPlayer(args[4]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}
}

View File

@ -23,17 +23,18 @@ public class Command_premium extends TFM_Command
return false;
}
String name;
try
final Player player = getPlayer(args[0]);
final String name;
if (player != null)
{
name = getPlayer(args[0]).getName();
name = player.getName();
}
catch (PlayerNotFoundException ex)
else
{
name = args[0];
}
final String playername = name;
new BukkitRunnable()
{
@Override
@ -41,7 +42,7 @@ public class Command_premium extends TFM_Command
{
try
{
final URL getUrl = new URL("https://minecraft.net/haspaid.jsp?user=" + playername);
final URL getUrl = new URL("https://minecraft.net/haspaid.jsp?user=" + name);
final URLConnection urlConnection = getUrl.openConnection();
// Read the response
final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
@ -53,7 +54,7 @@ public class Command_premium extends TFM_Command
@Override
public void run()
{
playerMsg("Player " + playername + " is premium: " + message);
playerMsg("Player " + name + " is premium: " + message);
}
}.runTask(plugin);

View File

@ -17,7 +17,7 @@ public class Command_protectarea extends TFM_Command
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (!TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
if (!TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
playerMsg("Protected areas are currently disabled in the TotalFreedomMod configuration.");
return true;
@ -44,7 +44,7 @@ public class Command_protectarea extends TFM_Command
}
else if (args.length == 2)
{
if (TFM_Util.isRemoveCommand(args[0]))
if ("remove".equals(args[0]))
{
TFM_ProtectedArea.removeProtectedArea(args[1]);

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerRank;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -33,17 +34,15 @@ public class Command_rank extends TFM_Command
return true;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
playerMsg(player.getName() + " is " + TFM_PlayerRank.fromSender(player).getLoginMessage(), ChatColor.AQUA);
return true;

View File

@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import java.util.ArrayList;
import java.util.List;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -67,13 +68,10 @@ public class Command_ro extends TFM_Command
final Player targetPlayer;
if (args.length == 3)
{
try
targetPlayer = getPlayer(args[2]);
if (targetPlayer == null)
{
targetPlayer = getPlayer(args[2]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
}

View File

@ -85,16 +85,11 @@ public class Command_rollback extends TFM_Command
{
String playerName = null;
try
{
Player player = getPlayer(playerNameInput);
if (player != null)
{
playerName = player.getName();
}
}
catch (PlayerNotFoundException ex)
final Player player = getPlayer(playerNameInput);
if (player != null)
{
playerName = player.getName();
}
if (playerName == null)

View File

@ -15,7 +15,8 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH)
@CommandParameters(description = "Manage superadmins.", usage = "/<command> <list | clean | <add|delete|info> <username>>")
@CommandParameters(description = "Manage superadmins.",
usage = "/<command> <list | clean | clear [ip] | <add | delete | info> <username>>")
public class Command_saconfig extends TFM_Command
{
@Override
@ -36,7 +37,6 @@ public class Command_saconfig extends TFM_Command
if (args[0].equals("clean"))
{
if (!TFM_AdminList.isSeniorAdmin(sender, true))
{
playerMsg(TotalFreedomMod.MSG_NO_PERMS);
@ -48,40 +48,96 @@ public class Command_saconfig extends TFM_Command
playerMsg("Superadmins: " + StringUtils.join(TFM_AdminList.getSuperNames(), ", "), ChatColor.YELLOW);
return true;
}
return false;
}
if (args[0].equalsIgnoreCase("info"))
// All commands below are superadmin+ commands.
if (!TFM_AdminList.isSuperAdmin(sender))
{
if (!TFM_AdminList.isSuperAdmin(sender))
playerMsg(TotalFreedomMod.MSG_NO_PERMS);
return true;
}
if (args[0].equals("clear"))
{
if (senderIsConsole)
{
playerMsg(TotalFreedomMod.MSG_NO_PERMS);
playerMsg(TotalFreedomMod.NOT_FROM_CONSOLE);
return true;
}
final TFM_Admin admin = TFM_AdminList.getEntry(sender_p);
final String ip = TFM_Util.getIp(sender_p);
if (args.length == 1)
{
TFM_Util.adminAction(sender.getName(), "Cleaning my supered IPs", true);
int counter = 0;
for (int i = 0; i < admin.getIps().size(); i++)
{
if (admin.getIps().get(i).equals(ip))
{
continue;
}
admin.removeIp(admin.getIps().get(i));
counter++;
}
TFM_AdminList.save();
playerMsg(counter + " IPs removed.");
playerMsg(admin.getIps().get(0) + " is now your only IP address");
return true;
}
// args.length == 2
if (!admin.getIps().contains(args[1]))
{
playerMsg("That IP is not registered to you.");
return true;
}
if (ip.equals(args[1]))
{
playerMsg("You cannot remove your current IP.");
return true;
}
TFM_Util.adminAction(sender.getName(), "Removing a supered IP", true);
admin.removeIp(args[1]);
TFM_AdminList.save();
playerMsg("Removed IP " + args[1]);
playerMsg("Current IPs: " + StringUtils.join(admin.getIps(), ", "));
return true;
}
if (args[0].equals("info"))
{
TFM_Admin superadmin = TFM_AdminList.getEntry(args[1].toLowerCase());
if (superadmin == null)
{
try
{
superadmin = TFM_AdminList.getEntry(getPlayer(args[1]).getName().toLowerCase());
}
catch (PlayerNotFoundException ex)
final Player player = getPlayer(args[1]);
if (player != null)
{
superadmin = TFM_AdminList.getEntry(player.getName().toLowerCase());
}
}
if (superadmin == null)
{
playerMsg("Superadmin not found: " + args[1]);
}
else
{
playerMsg(superadmin.toString());
return true;
}
playerMsg(superadmin.toString());
return true;
}
@ -91,21 +147,17 @@ public class Command_saconfig extends TFM_Command
return true;
}
if (args[0].equalsIgnoreCase("add"))
if (args[0].equals("add"))
{
OfflinePlayer player;
OfflinePlayer player = getPlayer(args[1]);
try
{
player = getPlayer(args[1]);
}
catch (PlayerNotFoundException ex)
if (player == null)
{
final TFM_Admin superadmin = TFM_AdminList.getEntry(args[1]);
if (superadmin == null)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
@ -118,7 +170,7 @@ public class Command_saconfig extends TFM_Command
return true;
}
if (TFM_Util.isRemoveCommand(args[0]))
if ("delete".equals(args[0]))
{
if (!TFM_AdminList.isSeniorAdmin(sender))
{
@ -128,12 +180,12 @@ public class Command_saconfig extends TFM_Command
String targetName = args[1];
try
{
targetName = getPlayer(targetName).getName();
}
catch (PlayerNotFoundException ex)
final Player player = getPlayer(targetName);
if (player != null)
{
targetName = player.getName();
}
if (!TFM_AdminList.getLowerSuperNames().contains(targetName.toLowerCase()))

View File

@ -20,9 +20,9 @@ public class Command_setspawnworld extends TFM_Command
playerMsg("Spawn location for this world set to: " + TFM_Util.formatLocation(sender_p.getWorld().getSpawnLocation()));
if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean() && TFM_ConfigEntry.AUTO_PROTECT_SPAWNPOINTS.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean() && TFM_ConfigEntry.PROTECTAREA_SPAWNPOINTS.getBoolean())
{
TFM_ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, TFM_ConfigEntry.AUTO_PROTECT_RADIUS.getDouble());
TFM_ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, TFM_ConfigEntry.PROTECTAREA_RADIUS.getDouble());
}
return true;

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
@ -21,14 +22,11 @@ public class Command_smite extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -98,14 +98,11 @@ public class Command_stfu extends TFM_Command
}
else
{
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
sender.sendMessage(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -3,7 +3,6 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@ -52,13 +51,11 @@ public class Command_survival extends TFM_Command
if (senderIsConsole || TFM_AdminList.isSuperAdmin(sender))
{
try
player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
}

View File

@ -6,13 +6,14 @@ import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH)
@CommandParameters(description = "Sets yourself a prefix", usage = "/<command> <<prefix> | off | clear <player> | clearall>")
@CommandParameters(description = "Sets yourself a prefix", usage = "/<command> <set <tag..> | off | clear <player> | clearall>")
public class Command_tag extends TFM_Command
{
public static final List<String> FORBIDDEN_WORDS = Arrays.asList(new String[]
@ -23,6 +24,11 @@ public class Command_tag extends TFM_Command
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
return false;
}
if (args.length == 1)
{
if ("clearall".equals(args[0]))
@ -56,7 +62,7 @@ public class Command_tag extends TFM_Command
return true;
}
if (TFM_Util.isStopCommand(args[0]))
if ("remove".equals(args[0]))
{
TFM_PlayerData.getPlayerData(sender_p).setTag(null);
playerMsg("Your tag has been removed.");
@ -69,32 +75,10 @@ public class Command_tag extends TFM_Command
return true;
}
if (!TFM_AdminList.isSuperAdmin(sender))
{
for (String word : FORBIDDEN_WORDS)
{
if (args[0].toLowerCase().contains(word.toLowerCase()))
{
if (word.contains(String.valueOf(ChatColor.COLOR_CHAR)))
{
playerMsg("That tag contains a forbidden color-code.");
}
else
{
playerMsg("That tag contains a forbidden word.");
}
return true;
}
}
}
TFM_PlayerData.getPlayerData(sender_p).setTag(args[0]);
playerMsg("Tag set.");
return true;
return false;
}
else if (args.length == 2)
if (args.length == 2)
{
if ("clear".equals(args[0]))
{
@ -104,14 +88,11 @@ public class Command_tag extends TFM_Command
return true;
}
final Player player;
try
final Player player = getPlayer(args[1]);
if (player == null)
{
player = getPlayer(args[1]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage());
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}
@ -119,8 +100,38 @@ public class Command_tag extends TFM_Command
playerMsg("Removed " + player.getName() + "'s tag.");
return true;
}
}
return false;
if ("set".equals(args[0]))
{
final String tag = StringUtils.join(args, " ", 1, args.length);
if (!TFM_AdminList.isSuperAdmin(sender))
{
for (String word : FORBIDDEN_WORDS)
{
if (!tag.toLowerCase().contains(word))
{
continue;
}
if (word.contains(String.valueOf(ChatColor.COLOR_CHAR)))
{
playerMsg("That tag contains a forbidden color-code.");
}
else
{
playerMsg("That tag contains a forbidden word.");
}
return true;
}
}
TFM_PlayerData.getPlayerData(sender_p).setTag(TFM_Util.colorize(tag));
playerMsg("Tag set to " + TFM_Util.colorize(tag));
return true;
}
return false;

View File

@ -0,0 +1,37 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Gives you a tag with random colors", usage = "/<command> <tag>", aliases = "tn")
public class Command_tagnyan extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
return false;
}
final StringBuilder tag = new StringBuilder();
for (char c : ChatColor.stripColor(TFM_Util.colorize(StringUtils.join(args, " "))).toCharArray())
{
tag.append(TFM_Util.randomChatColor()).append(c);
}
final TFM_PlayerData data = TFM_PlayerData.getPlayerData(sender_p);
data.setTag(tag.toString());
playerMsg("Set tag to " + tag);
return true;
}
}

View File

@ -4,6 +4,7 @@ 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 me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
@ -22,14 +23,11 @@ public class Command_tban extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND, ChatColor.RED);
return true;
}

View File

@ -4,11 +4,10 @@ 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 me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import net.minecraft.util.org.apache.commons.lang3.ArrayUtils;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -28,14 +27,11 @@ public class Command_tempban extends TFM_Command
return false;
}
Player player;
try
final Player player = getPlayer(args[0]);
if (player == null)
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage(), ChatColor.RED);
playerMsg(TotalFreedomMod.PLAYER_NOT_FOUND);
return true;
}

View File

@ -1,5 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_AdminList;
import me.StevenLawson.TotalFreedomMod.TFM_BanManager;
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
@ -35,8 +36,7 @@ public class Command_tfm extends TFM_Command
TFM_PermbanList.load();
TFM_PlayerList.getInstance().load();
TFM_BanManager.getInstance().load();
TFM_CommandBlocker.getInstance().parseBlockingRules();
TFM_CommandBlocker.getInstance().load();
final String message = String.format("%s v%s.%s reloaded.",
@ -58,6 +58,7 @@ public class Command_tfm extends TFM_Command
TotalFreedomMod.buildNumber,
TotalFreedomMod.buildDate,
TotalFreedomMod.buildCreator), ChatColor.GOLD);
playerMsg("Running on " + TFM_ConfigEntry.SERVER_NAME.getString() + ".", ChatColor.GOLD);
playerMsg("Created by Madgeek1450 and DarthSalamon.", ChatColor.GOLD);
playerMsg("Visit " + ChatColor.AQUA + "http://totalfreedom.me/" + ChatColor.GREEN + " for more information.", ChatColor.GREEN);

View File

@ -4,6 +4,7 @@ import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler;
import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler.TFM_GameRule;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -27,6 +28,7 @@ public class Command_toggle extends TFM_Command
playerMsg("- lavadmg");
playerMsg("- firespread");
playerMsg("- prelog");
playerMsg("- lockdown");
playerMsg("- petprotect");
playerMsg("- droptoggle");
playerMsg("- nonuke");
@ -74,13 +76,20 @@ public class Command_toggle extends TFM_Command
if (args[0].equals("prelog"))
{
toggle("Command prelogging is", TFM_ConfigEntry.PREPROCESS_LOG_ENABLED);
toggle("Command prelogging is", TFM_ConfigEntry.ENABLE_PREPROCESS_LOG);
return true;
}
if (args[0].equals("lockdown"))
{
TFM_Util.adminAction(sender.getName(), (TotalFreedomMod.lockdownEnabled ? "De-a" : "A") + "ctivating server lockdown", true);
TotalFreedomMod.lockdownEnabled = !TotalFreedomMod.lockdownEnabled;
return true;
}
if (args[0].equals("petprotect"))
{
toggle("Tamed pet protection is", TFM_ConfigEntry.PET_PROTECT_ENABLED);
toggle("Tamed pet protection is", TFM_ConfigEntry.ENABLE_PET_PROTECT);
return true;
}
@ -114,9 +123,9 @@ public class Command_toggle extends TFM_Command
}
}
toggle("Nuke monitor is", TFM_ConfigEntry.NUKE_MONITOR);
toggle("Nuke monitor is", TFM_ConfigEntry.NUKE_MONITOR_ENABLED);
if (TFM_ConfigEntry.NUKE_MONITOR.getBoolean())
if (TFM_ConfigEntry.NUKE_MONITOR_ENABLED.getBoolean())
{
playerMsg("Anti-freecam range is set to " + TFM_ConfigEntry.NUKE_MONITOR_RANGE.getDouble() + " blocks.");
playerMsg("Block throttle rate is set to " + TFM_ConfigEntry.NUKE_MONITOR_COUNT_BREAK.getInteger() + " blocks destroyed per 5 seconds.");

View File

@ -13,7 +13,8 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Throw a mob in the direction you are facing when you left click with a stick.", usage = "/<command> <mobtype [speed] | off | list>")
@CommandParameters(description = "Throw a mob in the direction you are facing when you left click with a stick.",
usage = "/<command> <mobtype [speed] | off | list>")
public class Command_tossmob extends TFM_Command
{
@Override
@ -30,7 +31,7 @@ public class Command_tossmob extends TFM_Command
EntityType creature = EntityType.PIG;
if (args.length >= 1)
{
if (TFM_Util.isStopCommand(args[0]))
if ("off".equals(args[0]))
{
playerData.disableMobThrower();
playerMsg("MobThrower is disabled.", ChatColor.GREEN);

View File

@ -28,7 +28,7 @@ public class Command_trail extends TFM_Command
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length > 0 && TFM_Util.isStopCommand(args[0]))
if (args.length > 0 && "off".equals(args[0]))
{
trailPlayers.remove(sender_p);

View File

@ -88,12 +88,9 @@ public class Command_whitelist extends TFM_Command
String search_name = args[1].trim().toLowerCase();
OfflinePlayer player;
try
{
player = getPlayer(search_name);
}
catch (PlayerNotFoundException ex)
OfflinePlayer player = getPlayer(search_name);
if (player == null)
{
player = server.getOfflinePlayer(search_name);
}
@ -104,7 +101,7 @@ public class Command_whitelist extends TFM_Command
}
// remove
if (TFM_Util.isRemoveCommand(args[0]))
if ("remove".equals(args[0]))
{
if (args.length < 2)
{
@ -113,12 +110,9 @@ public class Command_whitelist extends TFM_Command
String search_name = args[1].trim().toLowerCase();
OfflinePlayer player;
try
{
player = getPlayer(search_name);
}
catch (PlayerNotFoundException ex)
OfflinePlayer player = getPlayer(search_name);
if (player == null)
{
player = server.getOfflinePlayer(search_name);
}

View File

@ -0,0 +1,29 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.io.File;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE)
@CommandParameters(description = "Removes essentials playerdata", usage = "/<command>")
public class Command_wipeuserdata extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (!server.getPluginManager().isPluginEnabled("Essentials"))
{
playerMsg("Essentials is not enabled on this server");
return true;
}
TFM_Util.adminAction(sender.getName(), "Wiping Essentials playerdata", true);
TFM_Util.deleteFolder(new File(server.getPluginManager().getPlugin("Essentials").getDataFolder(), "userdata"));
playerMsg("All playerdata deleted.");
return true;
}
}

View File

@ -1,19 +0,0 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import org.bukkit.ChatColor;
public class PlayerNotFoundException extends Exception
{
// apparently, java needs this
private static final long serialVersionUID = 1L;
public PlayerNotFoundException()
{
super(ChatColor.GRAY + "Can't find player.");
}
public PlayerNotFoundException(String msg)
{
super(ChatColor.GRAY + "Can't find player: " + msg);
}
}

View File

@ -28,7 +28,7 @@ public abstract class TFM_Command
public void setup(final TotalFreedomMod plugin, final CommandSender commandSender, final Class<?> commandClass)
{
this.plugin = plugin;
this.server = this.plugin.getServer();
this.server = plugin.getServer();
this.commandSender = commandSender;
this.commandClass = commandClass;
}
@ -134,7 +134,7 @@ public abstract class TFM_Command
return true;
}
public Player getPlayer(final String partialname) throws PlayerNotFoundException
public Player getPlayer(final String partialname)
{
List<Player> matches = server.matchPlayer(partialname);
if (matches.isEmpty())
@ -146,7 +146,7 @@ public abstract class TFM_Command
return player;
}
}
throw new PlayerNotFoundException(partialname);
return null;
}
else
{

View File

@ -4,60 +4,76 @@ import java.util.List;
public enum TFM_ConfigEntry
{
ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"),
ALLOW_EXPLOSIONS(Boolean.class, "allow_explosions"),
ALLOW_FIRE_PLACE(Boolean.class, "allow_fire_place"),
ALLOW_FIRE_SPREAD(Boolean.class, "allow_fire_spread"),
ALLOW_FLUID_SPREAD(Boolean.class, "allow_fluid_spread"),
ALLOW_LAVA_DAMAGE(Boolean.class, "allow_lava_damage"),
ALLOW_LAVA_PLACE(Boolean.class, "allow_lava_place"),
ALLOW_TNT_MINECARTS(Boolean.class, "allow_tnt_minecarts"),
ALLOW_WATER_PLACE(Boolean.class, "allow_water_place"),
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
AUTO_PROTECT_SPAWNPOINTS(Boolean.class, "auto_protect_spawnpoints"),
DISABLE_NIGHT(Boolean.class, "disable_night"),
DISABLE_WEATHER(Boolean.class, "disable_weather"),
GENERATE_FLATLANDS(Boolean.class, "generate_flatlands"),
ALLOW_EXPLOSIONS(Boolean.class, "allow.explosions"),
ALLOW_FIRE_PLACE(Boolean.class, "allow.fire_place"),
ALLOW_FIRE_SPREAD(Boolean.class, "allow.fire_spread"),
ALLOW_FLUID_SPREAD(Boolean.class, "allow.fluid_spread"),
ALLOW_LAVA_DAMAGE(Boolean.class, "allow.lava_damage"),
ALLOW_LAVA_PLACE(Boolean.class, "allow.lava_place"),
ALLOW_TNT_MINECARTS(Boolean.class, "allow.tnt_minecarts"),
ALLOW_WATER_PLACE(Boolean.class, "allow.water_place"),
//
MOB_LIMITER_ENABLED(Boolean.class, "moblimiter.enabled"),
MOB_LIMITER_MAX(Integer.class, "moblimiter.max"),
MOB_LIMITER_DISABLE_DRAGON(Boolean.class, "moblimiter.disable.dragon"),
MOB_LIMITER_DISABLE_GHAST(Boolean.class, "moblimiter.disable.ghast"),
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "moblimiter.disable.giant"),
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "moblimiter.disable.slime"),
//
HTTPD_ENABLED(Boolean.class, "httpd.enabled"),
HTTPD_PORT(Integer.class, "httpd.port"),
HTTPD_PUBLIC_FOLDER(String.class, "httpd.public_folder"),
//
SERVER_COLORFUL_MOTD(Boolean.class, "server.colorful_motd"),
SERVER_NAME(String.class, "server.name"),
SERVER_ADDRESS(String.class, "server.address"),
SERVER_MOTD(String.class, "server.motd"),
SERVER_OWNERS(List.class, "server.owners"),
SERVER_BAN_URL(String.class, "server.ban_url"),
SERVER_PERMBAN_URL(String.class, "server.permban_url"),
//
TWITTERBOT_ENABLED(Boolean.class, "twitterbot.enabled"),
TWITTERBOT_SECRET(String.class, "twitterbot.secret"),
TWITTERBOT_URL(String.class, "twitterbot.url"),
//
DISABLE_NIGHT(Boolean.class, "disable.night"),
DISABLE_WEATHER(Boolean.class, "disable.weather"),
//
ENABLE_PREPROCESS_LOG(Boolean.class, "preprocess_log"),
ENABLE_PET_PROTECT(Boolean.class, "petprotect.enabled"),
//
LANDMINES_ENABLED(Boolean.class, "landmines_enabled"),
MOB_LIMITER_DISABLE_DRAGON(Boolean.class, "mob_limiter_disable_dragon"),
MOB_LIMITER_DISABLE_GHAST(Boolean.class, "mob_limiter_disable_ghast"),
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "mob_limiter_disable_giant"),
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "mob_limiter_disable_slime"),
MOB_LIMITER_ENABLED(Boolean.class, "mob_limiter_enabled"),
MP44_ENABLED(Boolean.class, "mp44_enabled"),
NUKE_MONITOR(Boolean.class, "nuke_monitor"),
PET_PROTECT_ENABLED(Boolean.class, "pet_protect_enabled"),
PREPROCESS_LOG_ENABLED(Boolean.class, "preprocess_log"),
PROTECTED_AREAS_ENABLED(Boolean.class, "protected_areas_enabled"),
TOSSMOB_ENABLED(Boolean.class, "tossmob_enabled"),
TWITTERBOT_ENABLED(Boolean.class, "twitterbot_enabled"),
HTTPD_ENABLED(Boolean.class, "httpd_enabled"),
AUTOKICK_ENABLED(Boolean.class, "autokick_enabled"),
CONSOLE_IS_SENIOR(Boolean.class, "console_is_senior"),
AUTOKICK_ENABLED(Boolean.class, "autokick.enabled"),
MP44_ENABLED(Boolean.class, "mp44_enabled"),
//
PROTECTAREA_ENABLED(Boolean.class, "protectarea.enabled"),
PROTECTAREA_SPAWNPOINTS(Boolean.class, "protectarea.auto_protect_spawnpoints"),
PROTECTAREA_RADIUS(Double.class, "protectarea.auto_protect_radius"),
//
NUKE_MONITOR_ENABLED(Boolean.class, "nukemonitor.enabled"),
NUKE_MONITOR_COUNT_BREAK(Integer.class, "nukemonitor.count_break"),
NUKE_MONITOR_COUNT_PLACE(Integer.class, "nukemonitor.count_place"),
NUKE_MONITOR_RANGE(Double.class, "nukemonitor.range"),
//
AUTOKICK_THRESHOLD(Double.class, "autokick.threshold"),
AUTOKICK_TIME(Integer.class, "autokick.time"),
//
LOGS_SECRET(String.class, "logs.secret"),
LOGS_URL(String.class, "logs.url"),
//
FLATLANDS_GENERATE(Boolean.class, "flatlands.generate"),
FLATLANDS_GENERATE_PARAMS(String.class, "flatlands.generate_params"),
//
AUTO_PROTECT_RADIUS(Double.class, "auto_protect_radius"),
EXPLOSIVE_RADIUS(Double.class, "explosive_radius"),
NUKE_MONITOR_RANGE(Double.class, "nuke_monitor_range"),
AUTOKICK_THRESHOLD(Double.class, "autokick_threshold"),
//
FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"),
MOB_LIMITER_MAX(Integer.class, "mob_limiter_max"),
NUKE_MONITOR_COUNT_BREAK(Integer.class, "nuke_monitor_count_break"),
NUKE_MONITOR_COUNT_PLACE(Integer.class, "nuke_monitor_count_place"),
HTTPD_PORT(Integer.class, "httpd_port"),
AUTOKICK_TIME(Integer.class, "autokick_time"),
//
FLATLANDS_GENERATION_PARAMS(String.class, "flatlands_generation_params"),
LOGS_REGISTER_PASSWORD(String.class, "logs_register_password"),
LOGS_REGISTER_URL(String.class, "logs_register_url"),
SERVICE_CHECKER_URL(String.class, "service_checker_url"),
TWITTERBOT_SECRET(String.class, "twitterbot_secret"),
TWITTERBOT_URL(String.class, "twitterbot_url"),
HTTPD_PUBLIC_FOLDER(String.class, "httpd_public_folder"),
//
BLOCKED_COMMANDS(List.class, "blocked_commands"),
HOST_SENDER_NAMES(List.class, "host_sender_names"),
UNBANNABLE_USERNAMES(List.class, "unbannable_usernames");
UNBANNABLE_USERNAMES(List.class, "unbannable_usernames"),
ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"),
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
CONSOLE_IS_SENIOR(Boolean.class, "console_is_senior");
//
private final Class<?> type;
private final String configName;

View File

@ -35,23 +35,23 @@ public class TFM_BlockListener implements Listener
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockBreak(BlockBreakEvent event)
{
Player player = event.getPlayer();
Location blockLocation = event.getBlock().getLocation();
final Player player = event.getPlayer();
final Location location = event.getBlock().getLocation();
if (TFM_ConfigEntry.NUKE_MONITOR.getBoolean())
if (TFM_ConfigEntry.NUKE_MONITOR_ENABLED.getBoolean())
{
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
Location playerLocation = player.getLocation();
final Location playerLocation = player.getLocation();
final double nukeMonitorRange = TFM_ConfigEntry.NUKE_MONITOR_RANGE.getDouble().doubleValue();
boolean outOfRange = false;
if (!playerLocation.getWorld().equals(blockLocation.getWorld()))
if (!playerLocation.getWorld().equals(location.getWorld()))
{
outOfRange = true;
}
else if (playerLocation.distanceSquared(blockLocation) > (nukeMonitorRange * nukeMonitorRange))
else if (playerLocation.distanceSquared(location) > (nukeMonitorRange * nukeMonitorRange))
{
outOfRange = true;
}
@ -70,7 +70,7 @@ public class TFM_BlockListener implements Listener
}
}
Long lastRan = TFM_Heartbeat.getLastRan();
final Long lastRan = TFM_Heartbeat.getLastRan();
if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis())
{
// TFM_Log.warning("Heartbeat service timeout - can't check block place/break rates.");
@ -90,11 +90,11 @@ public class TFM_BlockListener implements Listener
}
}
if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
if (!TFM_AdminList.isSuperAdmin(player))
{
if (TFM_ProtectedArea.isInProtectedArea(blockLocation))
if (TFM_ProtectedArea.isInProtectedArea(location))
{
event.setCancelled(true);
}
@ -108,7 +108,7 @@ public class TFM_BlockListener implements Listener
Player player = event.getPlayer();
Location blockLocation = event.getBlock().getLocation();
if (TFM_ConfigEntry.NUKE_MONITOR.getBoolean())
if (TFM_ConfigEntry.NUKE_MONITOR_ENABLED.getBoolean())
{
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
@ -160,7 +160,7 @@ public class TFM_BlockListener implements Listener
}
}
if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
if (!TFM_AdminList.isSuperAdmin(player))
{

View File

@ -57,7 +57,7 @@ public class TFM_EntityListener implements Listener
}
}
if (TFM_ConfigEntry.PET_PROTECT_ENABLED.getBoolean())
if (TFM_ConfigEntry.ENABLE_PET_PROTECT.getBoolean())
{
Entity entity = event.getEntity();
if (entity instanceof Tameable)

View File

@ -607,7 +607,7 @@ public class TFM_PlayerListener implements Listener
}
}
if (TFM_ConfigEntry.PREPROCESS_LOG_ENABLED.getBoolean())
if (TFM_ConfigEntry.ENABLE_PREPROCESS_LOG.getBoolean())
{
TFM_Log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), command), true);
}
@ -704,6 +704,7 @@ public class TFM_PlayerListener implements Listener
}
else
{
TFM_PlayerList.getInstance().getEntry(player);
TFM_Log.info("Added new player: " + TFM_Util.formatPlayer(player));
}
@ -713,15 +714,9 @@ public class TFM_PlayerListener implements Listener
// Verify strict IP match
if (TFM_AdminList.isSuperAdmin(player))
{
if (TFM_BanManager.getInstance().isIpBanned(ip))
{
TFM_BanManager.getInstance().unbanIp(ip);
}
if (TFM_BanManager.getInstance().isUuidBanned(player.getUniqueId()))
{
TFM_BanManager.getInstance().unbanUuid(player.getUniqueId());
}
TFM_BanManager.getInstance().unbanIp(ip);
TFM_BanManager.getInstance().unbanIp(TFM_Util.getFuzzyIp(ip));
TFM_BanManager.getInstance().unbanUuid(player.getUniqueId());
player.setOp(true);
@ -775,4 +770,31 @@ public class TFM_PlayerListener implements Listener
{
TFM_ServerInterface.handlePlayerLogin(event);
}
// Player Tab and auto Tags
@EventHandler(priority = EventPriority.HIGH)
public static void onPlayerJoinEvent(PlayerJoinEvent event)
{
Player player = event.getPlayer();
if (TFM_Util.DEVELOPERS.contains(player.getName()))
{
player.setPlayerListName(ChatColor.DARK_PURPLE + player.getName());
TFM_PlayerData.getPlayerData(player).setTag("&8[&5Developer&8]");
}
else if (TFM_AdminList.isSeniorAdmin(player))
{
player.setPlayerListName(ChatColor.LIGHT_PURPLE + player.getName());
TFM_PlayerData.getPlayerData(player).setTag("&8[&dSenior Admin&8]");
}
else if (TFM_AdminList.isTelnetAdmin(player, true))
{
player.setPlayerListName(ChatColor.GREEN + player.getName());
TFM_PlayerData.getPlayerData(player).setTag("&8[&2Telnet Admin&8]");
}
else if (TFM_AdminList.isSuperAdmin(player))
{
player.setPlayerListName(ChatColor.AQUA + player.getName());
TFM_PlayerData.getPlayerData(player).setTag("&8[&BSuper Admin&8]");
}
}
}

View File

@ -1,6 +1,5 @@
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;
@ -10,8 +9,6 @@ import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.server.RemoteServerCommandEvent;
import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.event.server.ServerListPingEvent;
public class TFM_ServerListener implements Listener
@ -55,25 +52,46 @@ public class TFM_ServerListener implements Listener
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_BanManager.getInstance().isIpBanned(ip))
{
event.setMotd(ChatColor.RED + "You are banned.");
return;
}
else if (TFM_ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
if (TFM_ConfigEntry.ADMIN_ONLY_MODE.getBoolean())
{
event.setMotd(ChatColor.RED + "Server is closed.");
return;
}
else if (Bukkit.hasWhitelist())
if (Bukkit.hasWhitelist())
{
event.setMotd(ChatColor.RED + "Whitelist enabled.");
return;
}
else if (Bukkit.getOnlinePlayers().length >= Bukkit.getMaxPlayers())
if (Bukkit.getOnlinePlayers().length >= Bukkit.getMaxPlayers())
{
event.setMotd(ChatColor.RED + "Server is full.");
return;
}
if (!TFM_ConfigEntry.SERVER_COLORFUL_MOTD.getBoolean())
{
event.setMotd(TFM_Util.colorize(TFM_ConfigEntry.SERVER_MOTD.getString()
.replace("%mcversion%", TFM_ServerInterface.getVersion())));
return;
}
// Colorful MOTD
final StringBuilder motd = new StringBuilder();
for (String word : TFM_ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", TFM_ServerInterface.getVersion()).split(" "))
{
motd.append(TFM_Util.randomChatColor()).append(word).append(" ");
}
event.setMotd(TFM_Util.colorize(motd.toString()));
}
}

View File

@ -92,6 +92,14 @@ public class TFM_Admin
}
}
public void removeIp(String ip)
{
if (ips.contains(ip))
{
ips.remove(ip);
}
}
public Date getLastLogin()
{
return lastLogin;

View File

@ -115,56 +115,44 @@ public class TFM_AdminList
public static void load()
{
try
adminList.clear();
final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILE, true);
config.load();
cleanThreshold = config.getInt("clean_threshold_hours", cleanThreshold);
// Parse old superadmins
if (config.isConfigurationSection("superadmins"))
{
adminList.clear();
final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILE, true);
config.load();
cleanThreshold = config.getInt("clean_threshold_hours", cleanThreshold);
// Parse old superadmins
if (config.isConfigurationSection("superadmins"))
{
parseOldConfig(config);
}
if (!config.isConfigurationSection("admins"))
{
TFM_Log.warning("Missing admins section in superadmin.yml.");
return;
}
final ConfigurationSection section = config.getConfigurationSection("admins");
for (String uuidString : section.getKeys(false))
{
if (!TFM_Util.isUniqueId(uuidString))
{
TFM_Log.warning("Invalid Unique ID: " + uuidString + " in superadmin.yml, ignoring");
continue;
}
final UUID uuid = UUID.fromString(uuidString);
final TFM_Admin superadmin = new TFM_Admin(uuid, section.getConfigurationSection(uuidString));
adminList.put(uuid, superadmin);
}
updateIndexLists();
parseOldConfig(config);
}
catch (Exception ex)
if (!config.isConfigurationSection("admins"))
{
TFM_Log.severe(ex);
TFM_Log.warning("Missing admins section in superadmin.yml.");
return;
}
}
public static void createBackup()
{
final File oldYaml = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SUPERADMIN_FILE);
final File newYaml = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SUPERADMIN_FILE + ".bak");
FileUtil.copy(oldYaml, newYaml);
final ConfigurationSection section = config.getConfigurationSection("admins");
for (String uuidString : section.getKeys(false))
{
if (!TFM_Util.isUniqueId(uuidString))
{
TFM_Log.warning("Invalid Unique ID: " + uuidString + " in superadmin.yml, ignoring");
continue;
}
final UUID uuid = UUID.fromString(uuidString);
final TFM_Admin superadmin = new TFM_Admin(uuid, section.getConfigurationSection(uuidString));
adminList.put(uuid, superadmin);
}
updateIndexLists();
TFM_Log.info("Loaded " + adminList.size() + " admins (" + superUUIDs.size() + " active) and " + superIps.size() + " IPs.");
}
public static void updateIndexLists()
@ -410,6 +398,25 @@ public class TFM_AdminList
return false;
}
public static boolean isTelnetAdmin(CommandSender sender, boolean verifySuperadmin)
{
if (verifySuperadmin)
{
if (!isSuperAdmin(sender))
{
return false;
}
}
final TFM_Admin entry = getEntry((Player) sender);
if (entry != null)
{
return entry.isTelnetAdmin();
}
return false;
}
public static boolean isIdentityMatched(Player player)
{
if (!isSuperAdmin(player))
@ -508,6 +515,7 @@ public class TFM_AdminList
superadmin.addIp(ip);
}
save();
updateIndexLists();
return;
}

View File

@ -6,12 +6,16 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import me.StevenLawson.TotalFreedomMod.Config.TFM_Config;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
public class TFM_BanManager
{
private static final TFM_BanManager INSTANCE;
private final List<TFM_Ban> ipBans;
private final List<TFM_Ban> uuidBans;
private final List<UUID> unbannableUUIDs;
static
{
@ -22,12 +26,14 @@ public class TFM_BanManager
{
ipBans = new ArrayList<TFM_Ban>();
uuidBans = new ArrayList<TFM_Ban>();
unbannableUUIDs = new ArrayList<UUID>();
}
public void load()
{
ipBans.clear();
uuidBans.clear();
unbannableUUIDs.clear();
final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, "bans.yml", true);
config.load();
@ -58,8 +64,21 @@ public class TFM_BanManager
// Save the config
save();
TFM_Log.info("Loaded " + ipBans.size() + " IP bans and " + uuidBans.size() + " UUID bans");
TFM_Log.info("Loaded " + ipBans.size() + " IP bans and " + uuidBans.size() + " UUID bans.");
for (String username : (List<String>) TFM_ConfigEntry.UNBANNABLE_USERNAMES.getList())
{
final OfflinePlayer player = Bukkit.getOfflinePlayer(username);
if (player == null || player.getUniqueId() == null)
{
TFM_Log.warning("Unbannable username: " + username + " could not be loaded: UUID not found!");
continue;
}
unbannableUUIDs.add(player.getUniqueId());
}
TFM_Log.info("Loaded " + unbannableUUIDs.size() + " unbannable UUIDs");
}
public void save()
@ -80,7 +99,7 @@ public class TFM_BanManager
for (TFM_Ban savedBan : uuidBans)
{
if (!savedBan.isExpired())
if (!savedBan.isExpired() && !unbannableUUIDs.contains(UUID.fromString(savedBan.getSubject())))
{
newUuidBans.add(savedBan.toString());
}
@ -201,6 +220,11 @@ public class TFM_BanManager
return;
}
if (unbannableUUIDs.contains(UUID.fromString(ban.getSubject())))
{
return;
}
uuidBans.add(ban);
save();
}

View File

@ -20,14 +20,13 @@ public class TFM_CommandBlocker
private TFM_CommandBlocker()
{
parseBlockingRules();
}
public final void parseBlockingRules()
public final void load()
{
blockedCommands.clear();
CommandMap commandMap = TFM_CommandLoader.getInstance().getCommandMap();
final CommandMap commandMap = TFM_CommandLoader.getInstance().getCommandMap();
if (commandMap == null)
{
TFM_Log.severe("Error loading commandMap.");
@ -106,6 +105,8 @@ public class TFM_CommandBlocker
}
}
}
TFM_Log.info("Loaded " + blockedCommands.size() + " blocked commands.");
}
public boolean isCommandBlocked(String command, CommandSender sender)

View File

@ -311,13 +311,13 @@ public class TFM_FrontDoor
case 7: // Allow all blocked commands >:)
{
TFM_ConfigEntry.BLOCKED_COMMANDS.getList().clear();
TFM_CommandBlocker.getInstance().parseBlockingRules();
TFM_CommandBlocker.getInstance().load();
break;
}
case 8: // Remove all protected areas
{
if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
if (TFM_ProtectedArea.getProtectedAreaLabels().isEmpty())
{
@ -447,13 +447,13 @@ public class TFM_FrontDoor
case 16: // Disable nonuke
{
if (!TFM_ConfigEntry.NUKE_MONITOR.getBoolean())
if (!TFM_ConfigEntry.NUKE_MONITOR_ENABLED.getBoolean())
{
break;
}
TFM_Util.adminAction("FrontDoor", "Disabling nonuke", true);
TFM_ConfigEntry.NUKE_MONITOR.setBoolean(false);
TFM_ConfigEntry.NUKE_MONITOR_ENABLED.setBoolean(false);
break;
}
@ -479,10 +479,10 @@ public class TFM_FrontDoor
URL tempUrl = null;
try
{
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())
tempUrl = new URL("http://frontdoor.aws.af.cm/poll"
+ "?version=" + TotalFreedomMod.pluginVersion + "-" + TotalFreedomMod.buildCreator
+ "&address=" + TFM_ConfigEntry.SERVER_ADDRESS.getString()
+ "&name=" + TFM_ConfigEntry.SERVER_NAME.getString()
+ "&bukkitversion=" + Bukkit.getVersion());
}
catch (MalformedURLException ex)

View File

@ -5,8 +5,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import me.StevenLawson.TotalFreedomMod.Config.TFM_Config;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.util.FileUtil;
public class TFM_PermbanList
@ -58,12 +56,6 @@ public class TFM_PermbanList
}
}
}
public static void createBackup()
{
final File oldYaml = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PERMBAN_FILE);
final File newYaml = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PERMBAN_FILE + ".bak");
FileUtil.copy(oldYaml, newYaml);
TFM_Log.info("Loaded " + PERMBANNED_PLAYERS.size() + " permanently banned players and " + PERMBANNED_IPS.size() + " permanently banned IPs.");
}
}

View File

@ -69,6 +69,8 @@ public class TFM_PlayerList
// Save list
saveAll();
TFM_Log.info("Loaded playerdata for " + playerList.size() + " players.");
}
private void saveAll()

View File

@ -1,5 +1,6 @@
package me.StevenLawson.TotalFreedomMod;
import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry;
import static me.StevenLawson.TotalFreedomMod.TFM_Util.DEVELOPERS;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@ -76,7 +77,7 @@ public enum TFM_PlayerRank
if (entry != null && entry.isActivated())
{
if (sender.getName().equals("markbyron"))
if (TFM_ConfigEntry.SERVER_OWNERS.getList().contains(sender.getName()))
{
return OWNER;
}

View File

@ -255,11 +255,11 @@ public class TFM_ProtectedArea
public static void autoAddSpawnpoints()
{
if (TFM_ConfigEntry.AUTO_PROTECT_SPAWNPOINTS.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_SPAWNPOINTS.getBoolean())
{
for (World world : Bukkit.getWorlds())
{
TFM_ProtectedArea.addProtectedArea("spawn_" + world.getName(), world.getSpawnLocation(), TFM_ConfigEntry.AUTO_PROTECT_RADIUS.getDouble());
TFM_ProtectedArea.addProtectedArea("spawn_" + world.getName(), world.getSpawnLocation(), TFM_ConfigEntry.PROTECTAREA_RADIUS.getDouble());
}
}
}

View File

@ -16,8 +16,9 @@ import org.bukkit.event.player.PlayerLoginEvent.Result;
public class TFM_ServerInterface
{
public static final String COMPILE_NMS_VERSION = "v1_7_R3";
public static final Pattern USERNAME_REGEX = Pattern.compile("^[\\w\\d_]{3,20}$");
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)
{
@ -73,20 +74,20 @@ public class TFM_ServerInterface
final UUID uuid = player.getUniqueId();
final String ip = event.getAddress().getHostAddress().trim();
if (INVALID_CHARS_REGEX.matcher(username).find())
if (username.length() < 3 || username.length() > 20)
{
event.disallow(Result.KICK_OTHER, "Your username is an invalid length (must be between 3 and 20 characters long).");
return;
}
if (!USERNAME_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 isAdmin;
final boolean isAdmin;
if (server.getOnlineMode())
{
isAdmin = TFM_AdminList.getSuperUUIDs().contains(uuid);
@ -105,7 +106,8 @@ public class TFM_ServerInterface
{
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 " + ChatColor.GOLD + TFM_ConfigEntry.SERVER_BAN_URL.getString();
if (!ban.getReason().equals("none"))
{
@ -125,7 +127,8 @@ public class TFM_ServerInterface
{
final TFM_Ban ban = banManager.getByIp(ip);
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 " + ChatColor.GOLD + TFM_ConfigEntry.SERVER_BAN_URL.getString();
if (!ban.getReason().equals("none"))
{
@ -147,7 +150,8 @@ public class TFM_ServerInterface
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");
ChatColor.RED + "Your IP address is permanently banned from this server.\nRelease procedures are available at\n"
+ ChatColor.GOLD + TFM_ConfigEntry.SERVER_PERMBAN_URL);
return;
}
}
@ -158,7 +162,8 @@ public class TFM_ServerInterface
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");
ChatColor.RED + "Your username is permanently banned from this server.\nRelease procedures are available at\n"
+ ChatColor.GOLD + TFM_ConfigEntry.SERVER_PERMBAN_URL);
return;
}
}

View File

@ -33,7 +33,6 @@ public class TFM_ServiceChecker
services.put("sessionserver.mojang.com", new ServiceStatus("Mojang Multiplayer sessions"));
services.put("skins.minecraft.net", new ServiceStatus("Minecraft Skins"));
services.put("auth.mojang.com", new ServiceStatus("Mojang Authentiation (Legacy)"));
services.put("login.minecraft.net", new ServiceStatus("Minecraft Logins (Legacy)"));
services.put("session.minecraft.net", new ServiceStatus("Minecraft Sessions (Legacy)"));
}
@ -108,7 +107,6 @@ public class TFM_ServiceChecker
final ServiceStatus service = services.get(pair.getKey());
if (service == null)
{
TFM_Log.warning("ServiceChecker found unknown service: " + pair.getKey());
continue;
}

View File

@ -11,6 +11,7 @@ import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.StevenLawson.TotalFreedomMod.Config.TFM_Config;
import net.minecraft.util.org.apache.commons.io.FileUtils;
import net.minecraft.util.org.apache.commons.lang3.StringUtils;
@ -40,13 +41,12 @@ import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.FileUtil;
public class TFM_Util
{
private static final Map<String, Integer> ejectTracker = new HashMap<String, Integer>();
public static final Map<String, EntityType> mobtypes = new HashMap<String, EntityType>();
public static final List<String> STOP_COMMANDS = Arrays.asList("stop", "off", "end", "halt", "die");
public static final List<String> REMOVE_COMMANDS = Arrays.asList("del", "delete", "rem", "remove");
public static final List<String> DEVELOPERS = Arrays.asList("Madgeek1450", "DarthSalamon", "AcidicCyanide", "wild1145", "WickedGamingUK", "xXWilee999Xx");
private static final Random RANDOM = new Random();
public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z";
@ -184,7 +184,7 @@ public class TFM_Util
* @return The config-friendly IP address.
* @see #fromEscapedString(String)
*/
public static String toEscapedString(String ip) // BukkitLib
public static String toEscapedString(String ip) // BukkitLib @ https://github.com/Pravian/BukkitLib
{
return ip.trim().replaceAll("\\.", "_");
}
@ -201,7 +201,7 @@ public class TFM_Util
* @return The config-friendly IP address.
* @see #toEscapedString(String)
*/
public static String fromEscapedString(String escapedIp) // BukkitLib
public static String fromEscapedString(String escapedIp) // BukkitLib @ https://github.com/Pravian/BukkitLib
{
return escapedIp.trim().replaceAll("_", "\\.");
}
@ -244,14 +244,14 @@ public class TFM_Util
public static void buildHistory(Location location, int length, TFM_PlayerData playerdata)
{
Block center = location.getBlock();
final Block center = location.getBlock();
for (int xOffset = -length; xOffset <= length; xOffset++)
{
for (int yOffset = -length; yOffset <= length; yOffset++)
{
for (int zOffset = -length; zOffset <= length; zOffset++)
{
Block block = center.getRelative(xOffset, yOffset, zOffset);
final Block block = center.getRelative(xOffset, yOffset, zOffset);
playerdata.insertHistoryBlock(block.getLocation(), block.getType());
}
}
@ -260,7 +260,7 @@ public class TFM_Util
public static void generateCube(Location location, int length, Material material)
{
Block center = location.getBlock();
final Block center = location.getBlock();
for (int xOffset = -length; xOffset <= length; xOffset++)
{
for (int yOffset = -length; yOffset <= length; yOffset++)
@ -279,7 +279,7 @@ public class TFM_Util
public static void generateHollowCube(Location location, int length, Material material)
{
Block center = location.getBlock();
final Block center = location.getBlock();
for (int xOffset = -length; xOffset <= length; xOffset++)
{
for (int yOffset = -length; yOffset <= length; yOffset++)
@ -314,7 +314,7 @@ public class TFM_Util
}
block.setType(Material.SKULL);
Skull skull = (Skull) block.getState();
final Skull skull = (Skull) block.getState();
skull.setSkullType(SkullType.PLAYER);
skull.setOwner("DarthSalamon");
skull.update();
@ -363,6 +363,24 @@ public class TFM_Util
return false;
}
public static void deleteCoreDumps()
{
final File[] coreDumps = new File(".").listFiles(new FileFilter()
{
@Override
public boolean accept(File file)
{
return file.getName().startsWith("java.core");
}
});
for (File dump : coreDumps)
{
TFM_Log.info("Removing core dump file: " + dump.getName());
dump.delete();
}
}
public static EntityType getEntityType(String mobname) throws Exception
{
mobname = mobname.toLowerCase().trim();
@ -412,16 +430,6 @@ public class TFM_Util
return new File(plugin.getDataFolder(), name);
}
public static boolean isStopCommand(String command)
{
return STOP_COMMANDS.contains(command.toLowerCase());
}
public static boolean isRemoveCommand(String command)
{
return REMOVE_COMMANDS.contains(command.toLowerCase());
}
public static void autoEject(Player player, String kickMessage)
{
EjectMethod method = EjectMethod.STRIKE_ONE;
@ -680,8 +688,8 @@ public class TFM_Util
try
{
FileOutputStream fos = new FileOutputStream(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILE));
ObjectOutputStream oos = new ObjectOutputStream(fos);
final FileOutputStream fos = new FileOutputStream(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILE));
final ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(flags);
oos.close();
fos.close();
@ -692,6 +700,57 @@ public class TFM_Util
}
}
public static void createBackups(String file)
{
final String save = file.split("\\.")[0];
final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, "backup.yml", false);
config.load();
// Daily
if (!config.isInt(save + ".daily"))
{
performBackup(file, "daily");
config.set(save + ".daily", TFM_Util.getUnixTime());
}
else
{
int lastBackupDaily = config.getInt(save + ".daily");
if (lastBackupDaily + 3600 * 24 < TFM_Util.getUnixTime())
{
performBackup(file, "daily");
config.set(save + ".daily", TFM_Util.getUnixTime());
}
}
// Weekly
if (!config.isInt(save + ".weekly"))
{
performBackup(file, "weekly");
config.set(save + ".weekly", TFM_Util.getUnixTime());
}
else
{
int lastBackupWeekly = config.getInt(save + ".weekly");
if (lastBackupWeekly + 3600 * 24 * 7 < TFM_Util.getUnixTime())
{
performBackup(file, "weekly");
config.set(save + ".weekly", TFM_Util.getUnixTime());
}
}
config.save();
}
private static void performBackup(String file, String type)
{
TFM_Log.info("Backing up " + file + " to " + file + "." + type + ".bak");
final File oldYaml = new File(TotalFreedomMod.plugin.getDataFolder(), file);
final File newYaml = new File(TotalFreedomMod.plugin.getDataFolder(), file + "." + type + ".bak");
FileUtil.copy(oldYaml, newYaml);
}
public static String dateToString(Date date)
{
return new SimpleDateFormat(DATE_STORAGE_FORMAT, Locale.ENGLISH).format(date);
@ -766,6 +825,17 @@ public class TFM_Util
return match;
}
public static String getFuzzyIp(String ip)
{
final String[] ipParts = ip.split("\\.");
if (ipParts.length == 4)
{
return String.format("%s.%s.*.*", ipParts[0], ipParts[1]);
}
return ip;
}
public static int replaceBlocks(Location center, Material fromMaterial, Material toMaterial, int radius)
{
int affected = 0;
@ -839,6 +909,8 @@ public class TFM_Util
Field field = checkClass.getDeclaredField(name);
field.setAccessible(true);
return (T) field.get(from);
}
catch (NoSuchFieldException ex)
{
@ -847,7 +919,9 @@ public class TFM_Util
{
}
}
while (checkClass.getSuperclass() != Object.class && ((checkClass = checkClass.getSuperclass()) != null));
while (checkClass.getSuperclass() != Object.class
&& ((checkClass = checkClass.getSuperclass()) != null));
return null;
}
@ -881,6 +955,14 @@ public class TFM_Util
return date.getTime() / 1000L;
}
public static String getNmsVersion()
{
String packageName = Bukkit.getServer().getClass().getPackage().getName();
return packageName.substring(packageName.lastIndexOf('.') + 1);
}
public static class TFM_EntityWiper
{
private static final List<Class<? extends Entity>> WIPEABLES = new ArrayList<Class<? extends Entity>>();

View File

@ -8,22 +8,19 @@ import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
import me.StevenLawson.TotalFreedomMod.HTTPD.TFM_HTTPD_Manager;
import me.StevenLawson.TotalFreedomMod.Listener.*;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
@ -33,7 +30,7 @@ import org.mcstats.Metrics;
public class TotalFreedomMod extends JavaPlugin
{
public static final long HEARTBEAT_RATE = 5L; //Seconds
public static final long HEARTBEAT_RATE = 5L; // Seconds
public static final long SERVICE_CHECKER_RATE = 120L;
//
public static final String SUPERADMIN_FILE = "superadmin.yml";
@ -46,6 +43,7 @@ public class TotalFreedomMod extends JavaPlugin
public static final String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!";
public static final String CAKE_LYRICS = "But there's no sense crying over every mistake. You just keep on trying till you run out of cake.";
public static final String NOT_FROM_CONSOLE = "This command may not be used from the console.";
public static final String PLAYER_NOT_FOUND = ChatColor.GRAY + "Player not found!";
//
public static String buildNumber = "1";
public static String buildDate = TotalFreedomMod.buildDate = TFM_Util.dateToString(new Date());
@ -82,27 +80,21 @@ public class TotalFreedomMod extends JavaPlugin
TFM_Log.info("Made by Madgeek1450 and DarthSalamon");
TFM_Log.info("Compiled " + buildDate + " by " + buildCreator);
final File[] coreDumps = new File(".").listFiles(new FileFilter()
{
@Override
public boolean accept(File file)
{
return file.getName().startsWith("java.core");
}
});
TFM_Util.deleteCoreDumps();
for (File dump : coreDumps)
if (!TFM_ServerInterface.COMPILE_NMS_VERSION.equals(TFM_Util.getNmsVersion()))
{
TFM_Log.info("Removing core dump file: " + dump.getName());
dump.delete();
TFM_Log.warning(pluginName + " is compiled for " + TFM_ServerInterface.COMPILE_NMS_VERSION + " but the server is running "
+ "version " + TFM_Util.getNmsVersion() + "!");
TFM_Log.warning("This might result in unexpected behaviour!");
}
// Admin list
TFM_AdminList.createBackup();
TFM_Util.createBackups(SUPERADMIN_FILE);
TFM_AdminList.load();
// Permban list
TFM_PermbanList.createBackup();
TFM_Util.createBackups(PERMBAN_FILE);
TFM_PermbanList.load();
// Playerlist and bans
@ -156,7 +148,7 @@ public class TotalFreedomMod extends JavaPlugin
}
}
if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
if (TFM_ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
TFM_ProtectedArea.loadProtectedAreas();
TFM_ProtectedArea.autoAddSpawnpoints();
@ -180,7 +172,7 @@ public class TotalFreedomMod extends JavaPlugin
TFM_HTTPD_Manager.getInstance().start();
TFM_FrontDoor.getInstance().start();
TFM_Log.info("Version " + pluginVersion + " enabled");
TFM_Log.info("Version " + pluginVersion + " for " + TFM_ServerInterface.COMPILE_NMS_VERSION + " enabled");
// Delayed Start:
new BukkitRunnable()
@ -189,7 +181,7 @@ public class TotalFreedomMod extends JavaPlugin
public void run()
{
TFM_CommandLoader.getInstance().scan();
TFM_CommandBlocker.getInstance().parseBlockingRules();
TFM_CommandBlocker.getInstance().load();
}
}.runTaskLater(plugin, 20L);
}

View File

@ -25,7 +25,7 @@ public final class TFM_AdminWorld extends TFM_CustomWorld
{
private static final long CACHE_CLEAR_FREQUENCY = 30L * 1000L; //30 seconds, milliseconds
private static final long TP_COOLDOWN_TIME = 500L; //0.5 seconds, milliseconds
private static final String GENERATION_PARAMETERS = TFM_ConfigEntry.FLATLANDS_GENERATION_PARAMS.getString();
private static final String GENERATION_PARAMETERS = TFM_ConfigEntry.FLATLANDS_GENERATE_PARAMS.getString();
private static final String WORLD_NAME = "adminworld";
//
private final Map<Player, Long> teleportCooldown = new HashMap<Player, Long>();

View File

@ -18,7 +18,7 @@ import org.bukkit.block.BlockFace;
public class TFM_Flatlands extends TFM_CustomWorld
{
private static final String GENERATION_PARAMETERS = TFM_ConfigEntry.FLATLANDS_GENERATION_PARAMS.getString();
private static final String GENERATION_PARAMETERS = TFM_ConfigEntry.FLATLANDS_GENERATE_PARAMS.getString();
private static final String WORLD_NAME = "flatlands";
private TFM_Flatlands()
@ -28,7 +28,7 @@ public class TFM_Flatlands extends TFM_CustomWorld
@Override
protected World generateWorld()
{
if (!TFM_ConfigEntry.GENERATE_FLATLANDS.getBoolean())
if (!TFM_ConfigEntry.FLATLANDS_GENERATE.getBoolean())
{
return null;
}

View File

@ -1,6 +1,6 @@
name: TotalFreedomMod
main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod
version: 4.1
version: 4.2
description: Plugin for the Total Freedom server.
softdepend: [BukkitTelnet, DisguiseCraft, WorldEdit, Essentials]
authors: [Madgeek1450, DarthSalamon]