diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 090b4bb..f3a00bd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,16 @@ # Contributing to TFM 4.3 Reloaded # -TFM 4.3 Reloaded is a CraftBukkit server plugin designed primarily to support legacy TotalFreedom clones. However, it can be used in a variety of other configurations with minimal fuss. -For those who wish to contribute, we encourage you to fork the repository and submit pull requests. Below you will find guidelines that explain this process in further detail. +TFM 4.3 Reloaded is a CraftBukkit server plugin designed primarily to support legacy TotalFreedom +clones. However, it can be used in a variety of other configurations with minimal fuss. + +For those who wish to contribute, we encourage you to fork the repository and submit pull requests. +Below you will find guidelines that explain this process in further detail. ## Quick Guide ## -1. Create or find an issue on our [Issue Tracker](https://github.com/TotalFreedom/TFM 4.3 Reloaded/issues). -2. Does your change fits TFM 4.3 Reloaded's goals? + +1. Create or find an issue on our [Issue Tracker](https://github.com/TotalFreedom/TFM 4.3 + Reloaded/issues). +2. Does your change fit TFM 4.3 Reloaded's goals? 3. Fork TFM 4.3 Reloaded if you haven't done so already. 4. Make a branch dedicated to your change. 5. Make your change. @@ -13,60 +18,74 @@ For those who wish to contribute, we encourage you to fork the repository and su 7. Push your branch and submit a pull request. ## Getting Started ## + * Search the issue tracker for your bug report or feature request. * If the issue does not exist already, create it. - * Clearly describe the issue. - * If your issue is a bug, describe the steps needed to reproduce it. - * If your issue is a feature request, ensure it fits TFM 4.3 Reloaded's goals and describe your feature in detail. + * Clearly describe the issue. + * If your issue is a bug, describe the steps needed to reproduce it. + * If your issue is a feature request, ensure it fits TFM 4.3 Reloaded's goals and describe your + feature in detail. * Fork the repository on GitHub. ## Does the change fit TFM 4.3 Reloaded's goals? ## -As a rough guideline, ask yourself the following questions to determine if your proposed change fits the TFM 4.3 Reloaded project's goals. Please remember that this is only a rough guideline and may or may not reflect the definitive answer to this question. -* Is the change in line with the principles of "Total Freedom"? - TotalFreedom is a freedom-based server. We don't normally make changes that restrict players unless absolutely necessary. +As a rough guideline, ask yourself the following questions to determine if your proposed change fits +the TFM 4.3 Reloaded project's goals. Please remember that this is only a rough guideline and may or +may not reflect the definitive answer to this question. -* Is the change directed towards the TotalFreedom server? - Changes must be directed towards the TotalFreedom server. Changes such as adding ranks, adding the name of other TotalFreedom-like servers will not likely be accepted. +* Is the change in line with the principles of "Total Freedom"? TotalFreedom is a freedom-based + server. We don't normally make changes that restrict players unless absolutely necessary. -* Does the change add a feature that involves micromanagement? - Pull requests that involve adding a micromanagement feature will likely not be accepted. This includes shorthands for multiple commands. +* Is the change directed towards the TotalFreedom server? Changes must be directed towards the + TotalFreedom server. Changes such as adding ranks, adding the name of other TotalFreedom-like + servers will not likely be accepted. -* Is a similar feature already present? - Features that have very similar alternatives will not be added. For example: A command that temporarily bans a player from the server is very similar to the _/tban_ command and thus will likely not be accepted. +* Does the change add a feature that involves micromanagement? Pull requests that involve adding a + micromanagement feature will likely not be accepted. This includes shorthands for multiple + commands. + +* Is a similar feature already present? Features that have very similar alternatives will not be + added. For example: A command that temporarily bans a player from the server is very similar to + the _/tban_ command and thus will likely not be accepted. ## Making Changes ## + * Create a topic branch from where you want to base your work. - * This is usually the master branch. - * Name your branch something relevant to the change you are going to make. - * To quickly create a topic branch based on master, use `git checkout master` followed by `git checkout -b `. Avoid working directly on the `master` branch. + * This is usually the master branch. + * Name your branch something relevant to the change you are going to make. + * To quickly create a topic branch based on master, use `git checkout master` followed + by `git checkout -b `. Avoid working directly on the `master` branch. * Make sure your change meets our [code requirements](#code-requirements). ### Code requirements ### -* Code must be written in [Allman style](http://en.wikipedia.org/wiki/Indent_style#Allman_style), and that it follows [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf).__ -* No tabs; use 4 spaces for indentation. + +* Code must be written in [Google style](https://google.github.io/styleguide/javaguide.html), and + that it + follows [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf) + .__ +* No spaces, use 4 tabs for indentation. * No trailing whitespaces for code lines, comments or configuration files. -* No CRLF line endings, only LF is allowed. - * For Windows-based machines, you can configure Git to do this for your by running `git config --global core.autocrlf true`. - * If you're running a Linux or Mac OSX, you should run `git config --global core.autocrlf input` instead. - * For more information about line feeds. See this [this article](http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/). * No 80 character line limit or 'weird' midstatement newlines. * Additions should be compiled, complete and tested before committing. -* Avoid using `org.bukkit.Server.dispatchCommand()`. Commits that make use of it will likely be rejected. +* Avoid using `org.bukkit.Server.dispatchCommand()`. Commits that make use of it will likely be + rejected. * Files must always end with a newline. * Avoid nested code structures. +* Avoid poor code. ## Committing your changes ## + * Check for unnecessary whitespace with `git diff --check` before committing. * Describe your changes in the commit description. * For a prolonged description, continue on a new line. * The first description line should be once sentence and should not exceed 10 words. * The first description line should contain either: - * For a bug-related issue: "Resolves _#issue_". - * For a feature request: "Fixes _#issue_". - * "#issue" is the issue number number you based your work on. + * For a bug-related issue: "Resolves _#issue_". + * For a feature request: "Fixes _#issue_". + * "#issue" is the issue number number you based your work on. #### Example commit message #### + ``` 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. @@ -75,21 +94,28 @@ meaning you can't remove your current IP or an IP that doesn't belong to you. ``` ## Submitting Your Changes ## + * Push your changes to the topic branch in your fork of the repository. * Submit a pull request to this repository. - * Explain in detail what each one of your commits changes and point out any big changes. + * Explain in detail what each one of your commits changes and point out any big changes. * Wait as a developer evaluates your changes. * Do not add any prefixes or tags. ## Tips - How To Get Your Pull Request Accepted ## -* Please make sure your changes are written such as other features would be. For example: Commands have their own class and extend TFM_Command. + +* Please make sure your changes are written such as other features would be. For example: Commands + have their own class and extend FreedomCommand. * Do not increment the version number. -* If you want to add multiple changes, please make one pull request per change. This way, it's easier to accept your changes faster and won't block the other changes if there is an issue with a specific line of code. +* If you want to add multiple changes, please make one pull request per change. This way, it's + easier to accept your changes faster and won't block the other changes if there is an issue with a + specific line of code. * Please avoid having to add files in the main namespace where possible. -* Please refrain from using an excessive amount of commits. As few as possible is generally the best. -* Please do not spread your contribution over several pull-requests. +* Please refrain from using an excessive amount of commits. As few as possible is generally the + best. +* Please do not spread your contribution over several pull-requests unless strictly necessary. ## Additional Resources ## + * [Bug tracker](https://github.com/TheDeus-Group/TFM-4.3-Reloaded/issues/) * [General GitHub documentation](http://help.github.com/) * [GitHub pull request documentation](http://help.github.com/send-pull-requests/) diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/Log.java b/src/main/java/me/StevenLawson/TotalFreedomMod/Log.java index 0024d46..58bd844 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/Log.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/Log.java @@ -3,105 +3,85 @@ package me.StevenLawson.TotalFreedomMod; import java.util.logging.Level; import java.util.logging.Logger; -public class Log -{ - private static final Logger FALLBACK_LOGGER = Logger.getLogger("Minecraft-Server"); - private static Logger serverLogger = null; - private static Logger pluginLogger = null; +public class Log { - private Log() - { - throw new AssertionError(); - } + private static final Logger FALLBACK_LOGGER = Logger.getLogger("Minecraft-Server"); + private static Logger serverLogger = null; + private static Logger pluginLogger = null; - // Level.INFO: - public static void info(String message) - { - info(message, false); - } + private Log() { + throw new AssertionError(); + } - public static void info(String message, Boolean raw) - { - log(Level.INFO, message, raw); - } + // Level.INFO: + public static void info(String message) { + info(message, false); + } - public static void info(Throwable ex) - { - log(Level.INFO, ex); - } + public static void info(String message, Boolean raw) { + log(Level.INFO, message, raw); + } - // Level.WARNING: - public static void warning(String message) - { - warning(message, false); - } + public static void info(Throwable ex) { + log(Level.INFO, ex); + } - public static void warning(String message, Boolean raw) - { - log(Level.WARNING, message, raw); - } + // Level.WARNING: + public static void warning(String message) { + warning(message, false); + } - public static void warning(Throwable ex) - { - log(Level.WARNING, ex); - } + public static void warning(String message, Boolean raw) { + log(Level.WARNING, message, raw); + } - // Level.SEVERE: - public static void severe(String message) - { - severe(message, false); - } + public static void warning(Throwable ex) { + log(Level.WARNING, ex); + } - public static void severe(String message, Boolean raw) - { - log(Level.SEVERE, message, raw); - } + // Level.SEVERE: + public static void severe(String message) { + severe(message, false); + } - public static void severe(Throwable ex) - { - log(Level.SEVERE, ex); - } + public static void severe(String message, Boolean raw) { + log(Level.SEVERE, message, raw); + } - // Utility - private static void log(Level level, String message, boolean raw) - { - getLogger(raw).log(level, message); - } + public static void severe(Throwable ex) { + log(Level.SEVERE, ex); + } - private static void log(Level level, Throwable throwable) - { - getLogger(false).log(level, null, throwable); - } + // Utility + private static void log(Level level, String message, boolean raw) { + getLogger(raw).log(level, message); + } - public static void setServerLogger(Logger logger) - { - serverLogger = logger; - } + private static void log(Level level, Throwable throwable) { + getLogger(false).log(level, null, throwable); + } - public static void setPluginLogger(Logger logger) - { - pluginLogger = logger; - } + private static Logger getLogger(boolean raw) { + if (raw || pluginLogger == null) { + return (serverLogger != null ? serverLogger : FALLBACK_LOGGER); + } else { + return pluginLogger; + } + } - private static Logger getLogger(boolean raw) - { - if (raw || pluginLogger == null) - { - return (serverLogger != null ? serverLogger : FALLBACK_LOGGER); - } - else - { - return pluginLogger; - } - } + public static Logger getPluginLogger() { + return (pluginLogger != null ? pluginLogger : FALLBACK_LOGGER); + } - public static Logger getPluginLogger() - { - return (pluginLogger != null ? pluginLogger : FALLBACK_LOGGER); - } + public static void setPluginLogger(Logger logger) { + pluginLogger = logger; + } - public static Logger getServerLogger() - { - return (serverLogger != null ? serverLogger : FALLBACK_LOGGER); - } + public static Logger getServerLogger() { + return (serverLogger != null ? serverLogger : FALLBACK_LOGGER); + } + + public static void setServerLogger(Logger logger) { + serverLogger = logger; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/Server.java b/src/main/java/me/StevenLawson/TotalFreedomMod/Server.java index a6c1b4f..804f521 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/Server.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/Server.java @@ -1,275 +1,246 @@ package me.StevenLawson.TotalFreedomMod; +import static me.StevenLawson.TotalFreedomMod.listener.PlayerListener.DEFAULT_PORT; + import com.earth2me.essentials.utils.DateUtil; +import java.lang.management.ManagementFactory; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; import me.StevenLawson.TotalFreedomMod.ban.PermbanList; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.SynchronousUtil; import me.StevenLawson.TotalFreedomMod.util.Utilities; -import net.md_5.bungee.api.chat.TextComponent; import net.minecraft.server.v1_8_R3.EntityPlayer; import net.minecraft.server.v1_8_R3.MinecraftServer; import net.minecraft.server.v1_8_R3.PropertyManager; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent.Result; -import java.lang.management.ManagementFactory; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.regex.Pattern; +public class Server { -import static me.StevenLawson.TotalFreedomMod.listener.PlayerListener.DEFAULT_PORT; + public static final String COMPILE_NMS_VERSION = "v1_8_R2"; + public static final Pattern USERNAME_REGEX = Pattern.compile("^[\\w\\d_]{3,20}$"); -public class Server -{ - public static final String COMPILE_NMS_VERSION = "v1_8_R2"; - public static final Pattern USERNAME_REGEX = Pattern.compile("^[\\w\\d_]{3,20}$"); + public static void setOnlineMode(boolean mode) { + final PropertyManager manager = MinecraftServer.getServer().getPropertyManager(); + manager.setProperty("online-mode", mode); + manager.savePropertiesFile(); + } - public static void setOnlineMode(boolean mode) - { - final PropertyManager manager = MinecraftServer.getServer().getPropertyManager(); - manager.setProperty("online-mode", mode); - manager.savePropertiesFile(); - } + public static int purgeWhitelist() { + String[] whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted(); + int size = whitelisted.length; + for (EntityPlayer player : MinecraftServer.getServer().getPlayerList().players) { + MinecraftServer.getServer().getPlayerList().getWhitelist().remove(player.getProfile()); + } - public static int purgeWhitelist() - { - String[] whitelisted = MinecraftServer.getServer().getPlayerList().getWhitelisted(); - int size = whitelisted.length; - for (EntityPlayer player : MinecraftServer.getServer().getPlayerList().players) - { - MinecraftServer.getServer().getPlayerList().getWhitelist().remove(player.getProfile()); - } + try { + MinecraftServer.getServer().getPlayerList().getWhitelist().save(); + } catch (Exception ex) { + Log.warning("Could not purge the whitelist!"); + Log.warning(ex); + } + return size; + } - try - { - MinecraftServer.getServer().getPlayerList().getWhitelist().save(); - } - catch (Exception ex) - { - Log.warning("Could not purge the whitelist!"); - Log.warning(ex); - } - return size; - } + public static boolean isWhitelisted() { + return MinecraftServer.getServer().getPlayerList().getHasWhitelist(); + } - public static boolean isWhitelisted() - { - return MinecraftServer.getServer().getPlayerList().getHasWhitelist(); - } + public static List getWhitelisted() { + return Arrays.asList(MinecraftServer.getServer().getPlayerList().getWhitelisted()); + } - public static List getWhitelisted() - { - return Arrays.asList(MinecraftServer.getServer().getPlayerList().getWhitelisted()); - } + public static String getVersion() { + return MinecraftServer.getServer().getVersion(); + } - public static String getVersion() - { - return MinecraftServer.getServer().getVersion(); - } + public static void handlePlayerPreLogin(AsyncPlayerPreLoginEvent event) { + final String ip = event.getAddress().getHostAddress().trim(); + final boolean isAdmin = AdminList.isSuperAdminSafe(null, ip); - public static void handlePlayerPreLogin(AsyncPlayerPreLoginEvent event) - { - final String ip = event.getAddress().getHostAddress().trim(); - final boolean isAdmin = AdminList.isSuperAdminSafe(null, ip); + // Check if the player is already online + for (Player onlinePlayer : TotalFreedomMod.server.getOnlinePlayers()) { + if (!onlinePlayer.getName().equalsIgnoreCase(event.getName())) { + continue; + } - // Check if the player is already online - for (Player onlinePlayer : TotalFreedomMod.server.getOnlinePlayers()) - { - if (!onlinePlayer.getName().equalsIgnoreCase(event.getName())) - { - continue; - } + if (!isAdmin) { + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, + "Your username is already logged into this server."); + } else { + event.allow(); + SynchronousUtil.playerKick(onlinePlayer, + "An admin just logged in with the username you are using."); + } + return; + } + } - if (!isAdmin) { - event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "Your username is already logged into this server."); - } else { - event.allow(); - SynchronousUtil.playerKick(onlinePlayer, "An admin just logged in with the username you are using."); - } - return; - } - } + public static void handlePlayerLogin(PlayerLoginEvent event) { + final org.bukkit.Server server = TotalFreedomMod.server; + final Player player = event.getPlayer(); + final String username = player.getName(); + final String ip = event.getAddress().getHostAddress().trim(); + final UUID uuid = UUIDManager.newPlayer(player, ip); - public static void handlePlayerLogin(PlayerLoginEvent event) - { - final org.bukkit.Server server = TotalFreedomMod.server; - final Player player = event.getPlayer(); - final String username = player.getName(); - final String ip = event.getAddress().getHostAddress().trim(); - final UUID uuid = UUIDManager.newPlayer(player, ip); + // Check username length + if (username.length() < 3 || username.length() > TotalFreedomMod.MAX_USERNAME_LENGTH) { + event.disallow(Result.KICK_OTHER, + "Your username is an invalid length (must be between 3 and 20 characters long)."); + return; + } - // Check username length - if (username.length() < 3 || username.length() > TotalFreedomMod.MAX_USERNAME_LENGTH) - { - event.disallow(Result.KICK_OTHER, "Your username is an invalid length (must be between 3 and 20 characters long)."); - return; - } + // Check username characters + if (!USERNAME_REGEX.matcher(username).find()) { + event.disallow(Result.KICK_OTHER, "Your username contains invalid characters."); + return; + } - // Check username characters - if (!USERNAME_REGEX.matcher(username).find()) - { - event.disallow(Result.KICK_OTHER, "Your username contains invalid characters."); - return; - } + // Check force-IP match + if (ConfigurationEntry.FORCE_IP_ENABLED.getBoolean()) { + final String hostname = event.getHostname().replace("FML", + ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 + final String connectAddress = ConfigurationEntry.SERVER_ADDRESS.getString(); + final int connectPort = TotalFreedomMod.server.getPort(); - // Check force-IP match - if (ConfigurationEntry.FORCE_IP_ENABLED.getBoolean()) - { - final String hostname = event.getHostname().replace("FML", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 - final String connectAddress = ConfigurationEntry.SERVER_ADDRESS.getString(); - final int connectPort = TotalFreedomMod.server.getPort(); + if (!hostname.equalsIgnoreCase(connectAddress + ":" + connectPort) + && !hostname.equalsIgnoreCase(connectAddress + ".:" + connectPort)) { + final int forceIpPort = ConfigurationEntry.FORCE_IP_PORT.getInteger(); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + ConfigurationEntry.FORCE_IP_KICKMSG.getString() + .replace("%address%", ConfigurationEntry.SERVER_ADDRESS.getString() + ( + forceIpPort == DEFAULT_PORT ? "" : ":" + forceIpPort))); + return; + } - if (!hostname.equalsIgnoreCase(connectAddress + ":" + connectPort) && !hostname.equalsIgnoreCase(connectAddress + ".:" + connectPort)) - { - final int forceIpPort = ConfigurationEntry.FORCE_IP_PORT.getInteger(); - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, - ConfigurationEntry.FORCE_IP_KICKMSG.getString() - .replace("%address%", ConfigurationEntry.SERVER_ADDRESS.getString() + (forceIpPort == DEFAULT_PORT ? "" : ":" + forceIpPort))); - return; - } + } - } + // Check if player is admin + // Not safe to use Utilities.isSuperAdmin(player) because player.getAddress() will return a null until after player login. + final boolean isAdmin = AdminList.isSuperAdminSafe(uuid, ip); - // Check if player is admin - // Not safe to use Utilities.isSuperAdmin(player) because player.getAddress() will return a null until after player login. - final boolean isAdmin = AdminList.isSuperAdminSafe(uuid, ip); + // Validation below this point + if (isAdmin) // Player is superadmin + { + // Force-allow log in + event.allow(); - // Validation below this point - if (isAdmin) // Player is superadmin - { - // Force-allow log in - event.allow(); + int count = server.getOnlinePlayers().size(); + if (count >= server.getMaxPlayers()) { + for (Player onlinePlayer : server.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(onlinePlayer)) { + onlinePlayer.kickPlayer( + "You have been kicked to free up room for an admin."); + count--; + } - int count = server.getOnlinePlayers().size(); - if (count >= server.getMaxPlayers()) - { - for (Player onlinePlayer : server.getOnlinePlayers()) - { - if (!AdminList.isSuperAdmin(onlinePlayer)) - { - onlinePlayer.kickPlayer("You have been kicked to free up room for an admin."); - count--; - } + if (count < server.getMaxPlayers()) { + break; + } + } + } - if (count < server.getMaxPlayers()) - { - break; - } - } - } + if (count >= server.getMaxPlayers()) { + event.disallow(Result.KICK_OTHER, + "The server is full and a player could not be kicked, sorry!"); + return; + } - if (count >= server.getMaxPlayers()) - { - event.disallow(Result.KICK_OTHER, "The server is full and a player could not be kicked, sorry!"); - return; - } + return; + } - return; - } + // Player is not an admin + // Server full check + if (server.getOnlinePlayers().size() >= server.getMaxPlayers()) { + event.disallow(Result.KICK_FULL, "Sorry, but this server is full."); + return; + } - // Player is not an admin - // Server full check - if (server.getOnlinePlayers().size() >= server.getMaxPlayers()) - { - event.disallow(Result.KICK_FULL, "Sorry, but this server is full."); - return; - } + // Admin-only mode + if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) { + event.disallow(Result.KICK_OTHER, "Server is temporarily open to admins only."); + return; + } - // Admin-only mode - if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) - { - event.disallow(Result.KICK_OTHER, "Server is temporarily open to admins only."); - return; - } + // Lockdown mode + if (TotalFreedomMod.lockdownEnabled) { + event.disallow(Result.KICK_OTHER, "Server is currently in lockdown mode."); + return; + } - // Lockdown mode - if (TotalFreedomMod.lockdownEnabled) - { - event.disallow(Result.KICK_OTHER, "Server is currently in lockdown mode."); - return; - } + // Whitelist + if (isWhitelisted()) { + if (!getWhitelisted().contains(username.toLowerCase())) { + event.disallow(Result.KICK_OTHER, "You are not whitelisted on this server."); + return; + } + } - // Whitelist - if (isWhitelisted()) - { - if (!getWhitelisted().contains(username.toLowerCase())) - { - event.disallow(Result.KICK_OTHER, "You are not whitelisted on this server."); - return; - } - } + // UUID ban + if (BanManager.isUuidBanned(uuid)) { + final Ban ban = BanManager.getByUuid(uuid); + event.disallow(Result.KICK_OTHER, ban.getKickMessage()); + return; + } - // UUID ban - if (BanManager.isUuidBanned(uuid)) - { - final Ban ban = BanManager.getByUuid(uuid); - event.disallow(Result.KICK_OTHER, ban.getKickMessage()); - return; - } + // IP ban + if (BanManager.isIpBanned(ip)) { + final Ban ban = BanManager.getByIp(ip); + event.disallow(Result.KICK_OTHER, ban.getKickMessage()); + return; + } - // IP ban - if (BanManager.isIpBanned(ip)) - { - final Ban ban = BanManager.getByIp(ip); - event.disallow(Result.KICK_OTHER, ban.getKickMessage()); - return; - } + // Permbanned IPs + for (String testIp : PermbanList.getPermbannedIps()) { + if (Utilities.fuzzyIpMatch(testIp, ip, 4)) { + event.disallow(Result.KICK_OTHER, + ChatColor.RED + "Your IP address is permanently banned from this server.\n" + + "Release procedures are available at\n" + + ChatColor.GOLD + ConfigurationEntry.SERVER_PERMBAN_URL.getString()); + return; + } + } - // Permbanned IPs - for (String testIp : PermbanList.getPermbannedIps()) - { - if (Utilities.fuzzyIpMatch(testIp, ip, 4)) - { - event.disallow(Result.KICK_OTHER, - ChatColor.RED + "Your IP address is permanently banned from this server.\n" - + "Release procedures are available at\n" - + ChatColor.GOLD + ConfigurationEntry.SERVER_PERMBAN_URL.getString()); - return; - } - } + // Permbanned usernames + for (String testPlayer : PermbanList.getPermbannedPlayers()) { + if (testPlayer.equalsIgnoreCase(username)) { + event.disallow(Result.KICK_OTHER, + ChatColor.RED + "Your username is permanently banned from this server.\n" + + "Release procedures are available at\n" + + ChatColor.GOLD + ConfigurationEntry.SERVER_PERMBAN_URL.getString()); + return; + } + } + } - // Permbanned usernames - for (String testPlayer : PermbanList.getPermbannedPlayers()) - { - if (testPlayer.equalsIgnoreCase(username)) - { - event.disallow(Result.KICK_OTHER, - ChatColor.RED + "Your username is permanently banned from this server.\n" - + "Release procedures are available at\n" - + ChatColor.GOLD + ConfigurationEntry.SERVER_PERMBAN_URL.getString()); - return; - } - } - } + public static double getTPS() { + return EssentialsBridge.getEssentialsPlugin().getTimer().getAverageTPS(); + } - public static double getTPS() { - return EssentialsBridge.getEssentialsPlugin().getTimer().getAverageTPS(); - } + public static double getMaxMem() { + return Runtime.getRuntime().maxMemory() / 1024f / 1024f; + } - public static double getMaxMem() { - return Runtime.getRuntime().maxMemory() / 1024f / 1024f; - } + public static double getTotalMem() { + return Runtime.getRuntime().totalMemory() / 1024f / 1024f; + } - public static double getTotalMem() { - return Runtime.getRuntime().totalMemory() / 1024f / 1024f; - } + public static double getFreeMem() { + return Runtime.getRuntime().freeMemory() / 1024f / 1024f; + } - public static double getFreeMem() { - return Runtime.getRuntime().freeMemory() / 1024f / 1024f; - } - - public static String getUptime() { - return DateUtil.formatDateDiff(ManagementFactory.getRuntimeMXBean().getStartTime()); - } + public static String getUptime() { + return DateUtil.formatDateDiff(ManagementFactory.getRuntimeMXBean().getStartTime()); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/main/java/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index 9d3b055..78883db 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -1,22 +1,34 @@ package me.StevenLawson.TotalFreedomMod; import com.google.common.base.Function; +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.logging.Logger; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.announcer.Announcer; import me.StevenLawson.TotalFreedomMod.ban.BanManager; import me.StevenLawson.TotalFreedomMod.ban.PermbanList; -import me.StevenLawson.TotalFreedomMod.commands.Commands; -import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; import me.StevenLawson.TotalFreedomMod.command.CommandBlocker; +import me.StevenLawson.TotalFreedomMod.commands.Commands; import me.StevenLawson.TotalFreedomMod.commands.FreedomCommand; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.deprecated.bridge.BukkitTelnetBridge; +import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; import me.StevenLawson.TotalFreedomMod.gamerule.GameRuleHandler; import me.StevenLawson.TotalFreedomMod.httpd.HTTPDManager; -import me.StevenLawson.TotalFreedomMod.listener.*; +import me.StevenLawson.TotalFreedomMod.listener.BlockListener; +import me.StevenLawson.TotalFreedomMod.listener.EntityListener; +import me.StevenLawson.TotalFreedomMod.listener.PlayerListener; +import me.StevenLawson.TotalFreedomMod.listener.ServerListener; +import me.StevenLawson.TotalFreedomMod.listener.WeatherListener; +import me.StevenLawson.TotalFreedomMod.listener.WorldEditListener; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.player.HeartBeat; import me.StevenLawson.TotalFreedomMod.player.PlayerList; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import me.StevenLawson.TotalFreedomMod.world.AdminWorld; import me.StevenLawson.TotalFreedomMod.world.FlatlandsWorld; @@ -31,160 +43,173 @@ import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; -import java.io.File; -import java.io.IOException; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Logger; - public class TotalFreedomMod extends JavaPlugin { - public static final long HEARTBEAT_RATE = 5L; // Seconds - public static final long SERVICE_CHECKER_RATE = 120L; - public static final int MAX_USERNAME_LENGTH = 20; - // - public static final String CONFIG_FILENAME = "config.yml"; - public static final String SUPERADMIN_FILENAME = "superadmin.yml"; - public static final String PERMBAN_FILENAME = "permban.yml"; - public static final String PLAYERTAGS_FILENAME = "playerTags.yml"; - public static final String UUID_FILENAME = "uuids.db"; - public static final String PROTECTED_AREA_FILENAME = "protectedareas.dat"; - public static final String SAVED_FLAGS_FILENAME = "savedflags.dat"; - // - @Deprecated - public static final String YOU_ARE_NOT_OP = FreedomCommand.YOU_ARE_NOT_OP; - // - public static String buildNumber = "1"; - public static String buildDate = Utilities.dateToString(new Date()); - public static String buildCreator = "Unknown"; - // - public static org.bukkit.Server server; - public static TotalFreedomMod plugin; - public static String pluginName; - public static String pluginVersion; - // - public static boolean lockdownEnabled = false; - public static Map fuckoffEnabledFor = new HashMap<>(); - public static Logger logger; - private FileConfiguration customConfig; // Custom configuration implementation by Eva + public static final long HEARTBEAT_RATE = 5L; // Seconds + public static final long SERVICE_CHECKER_RATE = 120L; + public static final int MAX_USERNAME_LENGTH = 20; + // + public static final String CONFIG_FILENAME = "config.yml"; + public static final String SUPERADMIN_FILENAME = "superadmin.yml"; + public static final String PERMBAN_FILENAME = "permban.yml"; + public static final String PLAYERTAGS_FILENAME = "playerTags.yml"; + public static final String UUID_FILENAME = "uuids.db"; + public static final String PROTECTED_AREA_FILENAME = "protectedareas.dat"; + public static final String SAVED_FLAGS_FILENAME = "savedflags.dat"; + // + @Deprecated + public static final String YOU_ARE_NOT_OP = FreedomCommand.YOU_ARE_NOT_OP; + // + public static String buildNumber = "1"; + public static String buildDate = Utilities.dateToString(new Date()); + public static String buildCreator = "Unknown"; + // + public static org.bukkit.Server server; + public static TotalFreedomMod plugin; + public static String pluginName; + public static String pluginVersion; + // + public static boolean lockdownEnabled = false; + public static Map fuckoffEnabledFor = new HashMap<>(); + public static Logger logger; - @Override - public void onLoad() { - TotalFreedomMod.plugin = this; - TotalFreedomMod.logger = this.getLogger(); - TotalFreedomMod.server = plugin.getServer(); - TotalFreedomMod.pluginName = plugin.getDescription().getName(); - TotalFreedomMod.pluginVersion = plugin.getDescription().getVersion(); + private FileConfiguration customConfig; // Custom configuration implementation by Eva - Log.setPluginLogger(plugin.getLogger()); - Log.setServerLogger(server.getLogger()); + private static void setAppProperties() { + try { + //final InputStream in = plugin.getResource("appinfo.properties"); + Properties props = new Properties(); - setAppProperties(); - } + // in = plugin.getClass().getResourceAsStream("/appinfo.properties"); + //props.load(in); + //in.close(); - @Override - public void onEnable() - { - getConfig().options().copyDefaults(true); + //TotalFreedomMod.buildNumber = props.getProperty("program.buildnumber"); + //TotalFreedomMod.buildDate = props.getProperty("program.builddate"); + //TotalFreedomMod.buildCreator = props.getProperty("program.buildcreator"); + TotalFreedomMod.buildNumber = "1337"; + TotalFreedomMod.buildCreator = "You!"; + } catch (Exception ex) { + Log.severe("Could not load App properties!"); + Log.severe(ex); + } + } - Log.info("Made by Madgeek1450 and Prozza"); - Log.info("Compiled " + buildDate + " by " + buildCreator); + @Override + public void onLoad() { + TotalFreedomMod.plugin = this; + TotalFreedomMod.logger = this.getLogger(); + TotalFreedomMod.server = plugin.getServer(); + TotalFreedomMod.pluginName = plugin.getDescription().getName(); + TotalFreedomMod.pluginVersion = plugin.getDescription().getVersion(); - final Utilities.MethodTimer timer = new Utilities.MethodTimer(); - timer.start(); + Log.setPluginLogger(plugin.getLogger()); + Log.setServerLogger(server.getLogger()); - if (!Server.COMPILE_NMS_VERSION.equals(Utilities.getNmsVersion())) - { - Log.warning(pluginName + " is compiled for " + Server.COMPILE_NMS_VERSION + " but the server is running " - + "version " + Utilities.getNmsVersion() + "!"); - Log.warning("This might result in unexpected behaviour!"); - } + setAppProperties(); + } - Utilities.deleteCoreDumps(); - Utilities.deleteFolder(new File("./_deleteme")); + @Override + public void onEnable() { + getConfig().options().copyDefaults(true); - // Create backups - Utilities.createBackups(CONFIG_FILENAME, true); - Utilities.createBackups(SUPERADMIN_FILENAME); - Utilities.createBackups(PERMBAN_FILENAME); - Utilities.createBackups(PLAYERTAGS_FILENAME); - this.createCustomConfig(); - // Load services - UUIDManager.load(); - AdminList.load(); - PermbanList.load(); - PlayerList.load(); - BanManager.load(); - Announcer.load(); - ProtectedArea.load(); - DiscordBridge.load(); + Log.info("Made by Madgeek1450 and Prozza"); + Log.info("Compiled " + buildDate + " by " + buildCreator); - // Start SuperAdmin service - server.getServicesManager().register(Function.class, AdminList.SUPERADMIN_SERVICE, plugin, ServicePriority.Normal); + final Utilities.MethodTimer timer = new Utilities.MethodTimer(); + timer.start(); - final PluginManager pm = server.getPluginManager(); - pm.registerEvents(new EntityListener(), plugin); - pm.registerEvents(new BlockListener(), plugin); - pm.registerEvents(new PlayerListener(), plugin); - pm.registerEvents(new WeatherListener(), plugin); - pm.registerEvents(new ServerListener(), plugin); + if (!Server.COMPILE_NMS_VERSION.equals(Utilities.getNmsVersion())) { + Log.warning(pluginName + " is compiled for " + Server.COMPILE_NMS_VERSION + + " but the server is running " + + "version " + Utilities.getNmsVersion() + "!"); + Log.warning("This might result in unexpected behaviour!"); + } - // Bridge - pm.registerEvents(new BukkitTelnetBridge(), plugin); - pm.registerEvents(new WorldEditListener(), plugin); + Utilities.deleteCoreDumps(); + Utilities.deleteFolder(new File("./_deleteme")); - try { - FlatlandsWorld.getInstance().getWorld(); - } catch (Exception ex) { - Log.warning("Could not load world: Flatlands"); - } + // Create backups + Utilities.createBackups(CONFIG_FILENAME, true); + Utilities.createBackups(SUPERADMIN_FILENAME); + Utilities.createBackups(PERMBAN_FILENAME); + Utilities.createBackups(PLAYERTAGS_FILENAME); + this.createCustomConfig(); + // Load services + UUIDManager.load(); + AdminList.load(); + PermbanList.load(); + PlayerList.load(); + BanManager.load(); + Announcer.load(); + ProtectedArea.load(); + DiscordBridge.load(); - try { - AdminWorld.getInstance().getWorld(); - } - catch (Exception ex) - { - Log.warning("Could not load world: AdminWorld"); - } + // Start SuperAdmin service + server.getServicesManager() + .register(Function.class, AdminList.SUPERADMIN_SERVICE, plugin, ServicePriority.Normal); - // Initialize game rules - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_DAYLIGHT_CYCLE, !ConfigurationEntry.DISABLE_NIGHT.getBoolean(), false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean(), false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_LOOT, false, false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean(), false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_TILE_DROPS, false, false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.MOB_GRIEFING, false, false); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false); - GameRuleHandler.commitGameRules(); + final PluginManager pm = server.getPluginManager(); + pm.registerEvents(new EntityListener(), plugin); + pm.registerEvents(new BlockListener(), plugin); + pm.registerEvents(new PlayerListener(), plugin); + pm.registerEvents(new WeatherListener(), plugin); + pm.registerEvents(new ServerListener(), plugin); - // Disable weather - if (ConfigurationEntry.DISABLE_WEATHER.getBoolean()) - { - for (World world : server.getWorlds()) - { - world.setThundering(false); - world.setStorm(false); - world.setThunderDuration(0); - world.setWeatherDuration(0); - } - } + // Bridge + pm.registerEvents(new BukkitTelnetBridge(), plugin); + pm.registerEvents(new WorldEditListener(), plugin); - // Heartbeat - new HeartBeat(plugin).runTaskTimer(plugin, HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L); + try { + FlatlandsWorld.getInstance().getWorld(); + } catch (Exception ex) { + Log.warning("Could not load world: Flatlands"); + } - Commands.registerCommands(this); + try { + AdminWorld.getInstance().getWorld(); + } catch (Exception ex) { + Log.warning("Could not load world: AdminWorld"); + } - // Start services - HTTPDManager.start(); + // Initialize game rules + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_DAYLIGHT_CYCLE, + !ConfigurationEntry.DISABLE_NIGHT.getBoolean(), false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, + ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean(), false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_LOOT, false, false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, + !ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean(), false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_TILE_DROPS, false, false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.MOB_GRIEFING, false, false); + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.NATURAL_REGENERATION, true, false); + GameRuleHandler.commitGameRules(); - timer.update(); + // Disable weather + if (ConfigurationEntry.DISABLE_WEATHER.getBoolean()) { + for (World world : server.getWorlds()) { + world.setThundering(false); + world.setStorm(false); + world.setThunderDuration(0); + world.setWeatherDuration(0); + } + } - Log.info("Version " + pluginVersion + " for " + Server.COMPILE_NMS_VERSION + " enabled in " + timer.getTotal() + "ms"); + // Heartbeat + new HeartBeat(plugin).runTaskTimer(plugin, HEARTBEAT_RATE * 20L, HEARTBEAT_RATE * 20L); - // Metrics @ http://mcstats.org/plugin/TotalFreedomMod - // No longer exist! + Commands.registerCommands(this); + + // Start services + HTTPDManager.start(); + + timer.update(); + + Log.info("Version " + pluginVersion + " for " + Server.COMPILE_NMS_VERSION + " enabled in " + + timer.getTotal() + "ms"); + + // Metrics @ http://mcstats.org/plugin/TotalFreedomMod + // No longer exist! /*try { final Metrics metrics = new Metrics(plugin); @@ -195,72 +220,46 @@ public class TotalFreedomMod extends JavaPlugin { Log.warning("Failed to submit metrics data: " + ex.getMessage()); }*/ - new BukkitRunnable() - { - @Override - public void run() - { - CommandBlocker.load(); + new BukkitRunnable() { + @Override + public void run() { + CommandBlocker.load(); - // Add spawnpoints later - https://github.com/TotalFreedom/TotalFreedomMod/issues/438 - ProtectedArea.autoAddSpawnpoints(); - } - }.runTaskLater(plugin, 20L); - } + // Add spawnpoints later - https://github.com/TotalFreedom/TotalFreedomMod/issues/438 + ProtectedArea.autoAddSpawnpoints(); + } + }.runTaskLater(plugin, 20L); + } - @Override - public void onDisable() - { - HTTPDManager.stop(); - BanManager.save(); - UUIDManager.close(); - DiscordBridge.stop(); + @Override + public void onDisable() { + HTTPDManager.stop(); + BanManager.save(); + UUIDManager.close(); + DiscordBridge.stop(); - server.getScheduler().cancelTasks(plugin); + server.getScheduler().cancelTasks(plugin); - Log.info("Plugin disabled"); - } + Log.info("Plugin disabled"); + } - public FileConfiguration getCustomConfig() { - return this.customConfig; - } - //CustomConfig implementation by Eva - private void createCustomConfig() { - File customConfigFile = new File(getDataFolder(), "playerTags.yml"); - if (!customConfigFile.exists()) { - customConfigFile.getParentFile().mkdirs(); - saveResource("playerTags.yml", false); - } + public FileConfiguration getCustomConfig() { + return this.customConfig; + } - customConfig= new YamlConfiguration(); - try { - customConfig.load(customConfigFile); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); - } - } + //CustomConfig implementation by Eva + private void createCustomConfig() { + File customConfigFile = new File(getDataFolder(), "playerTags.yml"); + if (!customConfigFile.exists()) { + customConfigFile.getParentFile().mkdirs(); + saveResource("playerTags.yml", false); + } - private static void setAppProperties() - { - try - { - //final InputStream in = plugin.getResource("appinfo.properties"); - Properties props = new Properties(); - - // in = plugin.getClass().getResourceAsStream("/appinfo.properties"); - //props.load(in); - //in.close(); - - //TotalFreedomMod.buildNumber = props.getProperty("program.buildnumber"); - //TotalFreedomMod.buildDate = props.getProperty("program.builddate"); - //TotalFreedomMod.buildCreator = props.getProperty("program.buildcreator"); - TotalFreedomMod.buildNumber = "1337"; - TotalFreedomMod.buildCreator = "You!"; - } - catch (Exception ex) - { - Log.severe("Could not load App properties!"); - Log.severe(ex); - } - } + customConfig = new YamlConfiguration(); + try { + customConfig.load(customConfigFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/admin/Admin.java b/src/main/java/me/StevenLawson/TotalFreedomMod/admin/Admin.java index df19de9..8e1d702 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/admin/Admin.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/admin/Admin.java @@ -1,168 +1,152 @@ package me.StevenLawson.TotalFreedomMod.admin; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.configuration.ConfigurationSection; -import java.util.*; +public class Admin { -public class Admin -{ - private final UUID uuid; - private String lastLoginName; - private String loginMessage; - private final boolean isSeniorAdmin; - private final boolean isTelnetAdmin; - private final List consoleAliases; - private final List ips; - private Date lastLogin; - private boolean isActivated; + private final UUID uuid; + private final boolean isSeniorAdmin; + private final boolean isTelnetAdmin; + private final List consoleAliases; + private final List ips; + private String lastLoginName; + private String loginMessage; + private Date lastLogin; + private boolean isActivated; - public Admin(UUID uuid, String lastLoginName, Date lastLogin, String loginMessage, boolean isTelnetAdmin, boolean isSeniorAdmin, boolean isActivated) - { - this.uuid = uuid; - this.lastLoginName = lastLoginName; - this.ips = new ArrayList(); - this.lastLogin = lastLogin; - this.loginMessage = loginMessage; - this.isTelnetAdmin = isTelnetAdmin; - this.isSeniorAdmin = isSeniorAdmin; - this.consoleAliases = new ArrayList(); - this.isActivated = isActivated; - } + public Admin(UUID uuid, String lastLoginName, Date lastLogin, String loginMessage, + boolean isTelnetAdmin, boolean isSeniorAdmin, boolean isActivated) { + this.uuid = uuid; + this.lastLoginName = lastLoginName; + this.ips = new ArrayList(); + this.lastLogin = lastLogin; + this.loginMessage = loginMessage; + this.isTelnetAdmin = isTelnetAdmin; + this.isSeniorAdmin = isSeniorAdmin; + this.consoleAliases = new ArrayList(); + this.isActivated = isActivated; + } - public Admin(UUID uuid, ConfigurationSection section) - { - this.uuid = uuid; - this.lastLoginName = section.getString("last_login_name"); - this.ips = section.getStringList("ips"); - this.lastLogin = Utilities.stringToDate(section.getString("last_login", Utilities.dateToString(new Date(0L)))); - this.loginMessage = section.getString("custom_login_message", ""); - this.isSeniorAdmin = section.getBoolean("is_senior_admin", false); - this.isTelnetAdmin = section.getBoolean("is_telnet_admin", false); - this.consoleAliases = section.getStringList("console_aliases"); - this.isActivated = section.getBoolean("is_activated", true); + public Admin(UUID uuid, ConfigurationSection section) { + this.uuid = uuid; + this.lastLoginName = section.getString("last_login_name"); + this.ips = section.getStringList("ips"); + this.lastLogin = Utilities.stringToDate( + section.getString("last_login", Utilities.dateToString(new Date(0L)))); + this.loginMessage = section.getString("custom_login_message", ""); + this.isSeniorAdmin = section.getBoolean("is_senior_admin", false); + this.isTelnetAdmin = section.getBoolean("is_telnet_admin", false); + this.consoleAliases = section.getStringList("console_aliases"); + this.isActivated = section.getBoolean("is_activated", true); - for (Iterator it = MainConfig.getList(ConfigurationEntry.NOADMIN_IPS).iterator(); it.hasNext();) - { - ips.remove((String) it.next()); - } - } + for (Iterator it = MainConfig.getList(ConfigurationEntry.NOADMIN_IPS).iterator(); + it.hasNext(); ) { + ips.remove((String) it.next()); + } + } - @Override - public String toString() - { - final StringBuilder output = new StringBuilder(); - final ArrayList fuzziedIps = new ArrayList<>(); + @Override + public String toString() { + final StringBuilder output = new StringBuilder(); + final ArrayList fuzziedIps = new ArrayList<>(); - for (String ip : ips) - { - fuzziedIps.add(Utilities.getFuzzyIp(ip)); - } + for (String ip : ips) { + fuzziedIps.add(Utilities.getFuzzyIp(ip)); + } - output.append("UUID: ").append(uuid.toString()).append("\n"); - output.append("- Last Login Name: ").append(lastLoginName).append("\n"); - output.append("- IPs: ").append(StringUtils.join(fuzziedIps, ", ")).append("\n"); - output.append("- Last Login: ").append(Utilities.dateToString(lastLogin)).append("\n"); - output.append("- Custom Login Message: ").append(loginMessage).append("\n"); - output.append("- Is Senior Admin: ").append(isSeniorAdmin).append("\n"); - output.append("- Is Telnet Admin: ").append(isTelnetAdmin).append("\n"); - output.append("- Console Aliases: ").append(StringUtils.join(consoleAliases, ", ")).append("\n"); - output.append("- Is Activated: ").append(isActivated); + output.append("UUID: ").append(uuid.toString()).append("\n"); + output.append("- Last Login Name: ").append(lastLoginName).append("\n"); + output.append("- IPs: ").append(StringUtils.join(fuzziedIps, ", ")).append("\n"); + output.append("- Last Login: ").append(Utilities.dateToString(lastLogin)).append("\n"); + output.append("- Custom Login Message: ").append(loginMessage).append("\n"); + output.append("- Is Senior Admin: ").append(isSeniorAdmin).append("\n"); + output.append("- Is Telnet Admin: ").append(isTelnetAdmin).append("\n"); + output.append("- Console Aliases: ").append(StringUtils.join(consoleAliases, ", ")) + .append("\n"); + output.append("- Is Activated: ").append(isActivated); - return output.toString(); - } + return output.toString(); + } - public UUID getUniqueId() - { - return uuid; - } + public UUID getUniqueId() { + return uuid; + } - public void setLastLoginName(String lastLoginName) - { - this.lastLoginName = lastLoginName; - } + public String getLastLoginName() { + return lastLoginName; + } - public String getLastLoginName() - { - return lastLoginName; - } + public void setLastLoginName(String lastLoginName) { + this.lastLoginName = lastLoginName; + } - public List getIps() - { - return Collections.unmodifiableList(ips); - } + public List getIps() { + return Collections.unmodifiableList(ips); + } - public void addIp(String ip) - { - if (!ips.contains(ip)) - { - ips.add(ip); - } - } + public void addIp(String ip) { + if (!ips.contains(ip)) { + ips.add(ip); + } + } - public void addIps(List ips) - { - for (String ip : ips) - { - addIp(ip); - } - } + public void addIps(List ips) { + for (String ip : ips) { + addIp(ip); + } + } - public void removeIp(String ip) - { - ips.remove(ip); - } + public void removeIp(String ip) { + ips.remove(ip); + } - public void clearIPs() - { - ips.clear(); - } + public void clearIPs() { + ips.clear(); + } - public void setCustomLoginMessage(String newLoginMessage) - { - this.loginMessage = newLoginMessage; - } + public Date getLastLogin() { + return lastLogin; + } - public Date getLastLogin() - { - return lastLogin; - } + public void setLastLogin(Date lastLogin) { + this.lastLogin = lastLogin; + } - public String getCustomLoginMessage() - { - return loginMessage; - } - - public boolean isSeniorAdmin() - { - return isSeniorAdmin; - } + public String getCustomLoginMessage() { + return loginMessage; + } - public boolean isTelnetAdmin() - { - return isTelnetAdmin; - } + public void setCustomLoginMessage(String newLoginMessage) { + this.loginMessage = newLoginMessage; + } - public List getConsoleAliases() - { - return Collections.unmodifiableList(consoleAliases); - } + public boolean isSeniorAdmin() { + return isSeniorAdmin; + } - public void setLastLogin(Date lastLogin) - { - this.lastLogin = lastLogin; - } + public boolean isTelnetAdmin() { + return isTelnetAdmin; + } - public boolean isActivated() - { - return isActivated; - } + public List getConsoleAliases() { + return Collections.unmodifiableList(consoleAliases); + } - public void setActivated(boolean isActivated) - { - this.isActivated = isActivated; - } + public boolean isActivated() { + return isActivated; + } + + public void setActivated(boolean isActivated) { + this.isActivated = isActivated; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/admin/AdminList.java b/src/main/java/me/StevenLawson/TotalFreedomMod/admin/AdminList.java index c9dc8fa..a73e3d1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/admin/AdminList.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/admin/AdminList.java @@ -2,6 +2,16 @@ package me.StevenLawson.TotalFreedomMod.admin; import com.google.common.base.Function; import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.TimeUnit; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.commands.Command_logs; @@ -10,8 +20,8 @@ import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.deprecated.twitter.TwitterHandler; import me.StevenLawson.TotalFreedomMod.discord.sender.DiscordCommandSender; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.player.PlayerRank; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import me.StevenLawson.TotalFreedomMod.world.AdminWorld; import org.bukkit.Bukkit; @@ -20,673 +30,589 @@ import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import java.util.*; -import java.util.Map.Entry; -import java.util.concurrent.TimeUnit; - -public class AdminList -{ - public static final Function SUPERADMIN_SERVICE; - private static final Map adminList; - private static final Set superUUIDs; - private static final Set telnetUUIDs; - private static final Set seniorUUIDs; - private static final Set seniorConsoleNames; - private static final Set superIps; - private static int cleanThreshold = 24 * 7; // 1 Week in hours - - static - { - adminList = new HashMap(); - superUUIDs = new HashSet(); - telnetUUIDs = new HashSet(); - seniorUUIDs = new HashSet(); - seniorConsoleNames = new HashSet(); - superIps = new HashSet(); - - SUPERADMIN_SERVICE = new Function() - { - - @Override - public Boolean apply(Player f) - { - return isSuperAdmin(f); - } - }; - } - - private AdminList() - { - throw new AssertionError(); - } - - public static Set getSuperUUIDs() - { - return Collections.unmodifiableSet(superUUIDs); - } - - public static Set getTelnetUUIDs() - { - return Collections.unmodifiableSet(telnetUUIDs); - } - - public static Set getSeniorUUIDs() - { - return Collections.unmodifiableSet(seniorUUIDs); - } - - public static Set getSeniorConsoleNames() - { - return Collections.unmodifiableSet(seniorConsoleNames); - } - - public static Set getSuperadminIps() - { - return Collections.unmodifiableSet(superIps); - } - - public static Set getAllAdmins() - { - return Sets.newHashSet(adminList.values()); - } - - public static Set getSuperNames() - { - final Set names = new HashSet(); - - for (Admin admin : adminList.values()) - { - if (!admin.isActivated()) - { - continue; - } - - names.add(admin.getLastLoginName()); - } - - return Collections.unmodifiableSet(names); - } - - public static Set getLowercaseSuperNames() - { - final Set names = new HashSet(); - - for (Admin admin : adminList.values()) - { - if (!admin.isActivated()) - { - continue; - } - - names.add(admin.getLastLoginName().toLowerCase()); - } - - return Collections.unmodifiableSet(names); - } - - public static void setUuid(Admin admin, UUID oldUuid, UUID newUuid) - { - if (!adminList.containsKey(oldUuid)) - { - Log.warning("Could not set new UUID for admin " + admin.getLastLoginName() + ", admin is not loaded!"); - return; - } - - if (oldUuid.equals(newUuid)) - { - Log.warning("could not set new UUID for admin " + admin.getLastLoginName() + ", UUIDs match."); - return; - } - - // Add new entry - final Admin newAdmin = new Admin( - newUuid, - admin.getLastLoginName(), - admin.getLastLogin(), - admin.getCustomLoginMessage(), - admin.isTelnetAdmin(), - admin.isSeniorAdmin(), - admin.isActivated()); - newAdmin.addIps(admin.getIps()); - adminList.put(newUuid, newAdmin); - save(newAdmin); - - // Remove old entry - adminList.remove(oldUuid); - final Configuration config = new Configuration(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILENAME, true); - config.load(); - config.set("admins." + oldUuid, null); - config.save(); - } - - public static void load() - { - adminList.clear(); - - final Configuration config = new Configuration(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILENAME, true); - config.load(); - - cleanThreshold = config.getInt("clean_threshold_hours", cleanThreshold); - - // Parse old superadmins - if (config.isConfigurationSection("superadmins")) - { - parseOldConfig(config); - } - - if (!config.isConfigurationSection("admins")) - { - Log.warning("Missing admins section in superadmin.yml."); - return; - } - - final ConfigurationSection section = config.getConfigurationSection("admins"); - - for (String uuidString : section.getKeys(false)) - { - if (!Utilities.isUniqueId(uuidString)) - { - Log.warning("Invalid Unique ID: " + uuidString + " in superadmin.yml, ignoring"); - continue; - } - - final UUID uuid = UUID.fromString(uuidString); - - final Admin superadmin = new Admin(uuid, section.getConfigurationSection(uuidString)); - adminList.put(uuid, superadmin); - } - - updateIndexLists(); - - Log.info("Loaded " + adminList.size() + " admins (" + superUUIDs.size() + " active) and " + superIps.size() + " IPs."); - } - - public static void updateIndexLists() - { - superUUIDs.clear(); - telnetUUIDs.clear(); - seniorUUIDs.clear(); - seniorConsoleNames.clear(); - superIps.clear(); - - for (Admin admin : adminList.values()) - { - if (!admin.isActivated()) - { - continue; - } - - final UUID uuid = admin.getUniqueId(); - - superUUIDs.add(uuid); - - for (String ip : admin.getIps()) - { - superIps.add(ip); - } - - if (admin.isTelnetAdmin()) - { - telnetUUIDs.add(uuid); - } - - if (admin.isSeniorAdmin()) - { - seniorUUIDs.add(uuid); - - seniorConsoleNames.add(admin.getLastLoginName()); - for (String alias : admin.getConsoleAliases()) - { - seniorConsoleNames.add(alias.toLowerCase()); - } - } - } - - AdminWorld.getInstance().wipeAccessCache(); - } - - private static void parseOldConfig(Configuration config) - { - Log.info("Old superadmin configuration found, parsing..."); - - final ConfigurationSection section = config.getConfigurationSection("superadmins"); - - int counter = 0; - int errors = 0; - - for (String admin : config.getConfigurationSection("superadmins").getKeys(false)) - { - final UUID uuid = UUIDManager.getUniqueId(admin); - - if (uuid == null) - { - errors++; - Log.warning("Could not convert admin " + admin + ", UUID could not be found!"); - continue; - } - - config.set("admins." + uuid + ".last_login_name", uuid); - config.set("admins." + uuid + ".is_activated", section.getBoolean(admin + ".is_activated")); - config.set("admins." + uuid + ".is_telnet_admin", section.getBoolean(admin + ".is_telnet_admin")); - config.set("admins." + uuid + ".is_senior_admin", section.getBoolean(admin + ".is_senior_admin")); - config.set("admins." + uuid + ".last_login", section.getString(admin + ".last_login")); - config.set("admins." + uuid + ".custom_login_message", section.getString(admin + ".custom_login_message")); - config.set("admins." + uuid + ".console_aliases", section.getStringList(admin + ".console_aliases")); - config.set("admins." + uuid + ".ips", section.getStringList(admin + ".ips")); - - counter++; - } - - config.set("superadmins", null); - config.save(); - - Log.info("Done! " + counter + " admins parsed, " + errors + " errors"); - } - - public static void saveAll() - { - final Configuration config = new Configuration(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILENAME, true); - config.load(); - - config.set("clean_threshold_hours", cleanThreshold); - - final Iterator> it = adminList.entrySet().iterator(); - while (it.hasNext()) - { - final Entry pair = it.next(); - - final UUID uuid = pair.getKey(); - final Admin superadmin = pair.getValue(); - - config.set("admins." + uuid + ".last_login_name", superadmin.getLastLoginName()); - config.set("admins." + uuid + ".is_activated", superadmin.isActivated()); - config.set("admins." + uuid + ".is_telnet_admin", superadmin.isTelnetAdmin()); - config.set("admins." + uuid + ".is_senior_admin", superadmin.isSeniorAdmin()); - config.set("admins." + uuid + ".last_login", Utilities.dateToString(superadmin.getLastLogin())); - config.set("admins." + uuid + ".custom_login_message", superadmin.getCustomLoginMessage()); - config.set("admins." + uuid + ".console_aliases", Utilities.removeDuplicates(superadmin.getConsoleAliases())); - config.set("admins." + uuid + ".ips", Utilities.removeDuplicates(superadmin.getIps())); - } - - config.save(); - } - - public static void save(Admin admin) - { - if (!adminList.containsValue(admin)) - { - Log.warning("Could not save admin " + admin.getLastLoginName() + ", admin is not loaded!"); - return; - } - - final Configuration config = new Configuration(TotalFreedomMod.plugin, TotalFreedomMod.SUPERADMIN_FILENAME, true); - config.load(); - - final UUID uuid = admin.getUniqueId(); - - config.set("admins." + uuid + ".last_login_name", admin.getLastLoginName()); - config.set("admins." + uuid + ".is_activated", admin.isActivated()); - config.set("admins." + uuid + ".is_telnet_admin", admin.isTelnetAdmin()); - config.set("admins." + uuid + ".is_senior_admin", admin.isSeniorAdmin()); - config.set("admins." + uuid + ".last_login", Utilities.dateToString(admin.getLastLogin())); - config.set("admins." + uuid + ".custom_login_message", admin.getCustomLoginMessage()); - config.set("admins." + uuid + ".console_aliases", Utilities.removeDuplicates(admin.getConsoleAliases())); - config.set("admins." + uuid + ".ips", Utilities.removeDuplicates(admin.getIps())); - - config.save(); - } - - public static Admin getEntry(Player player) - { - return getEntry(UUIDManager.getUniqueId(player)); - } - - public static Admin getEntry(UUID uuid) - { - return adminList.get(uuid); - } - - @Deprecated - public static Admin getEntry(String name) - { - for (UUID uuid : adminList.keySet()) - { - if (adminList.get(uuid).getLastLoginName().equalsIgnoreCase(name)) - { - return adminList.get(uuid); - } - } - return null; - } - - public static Admin getEntryByIp(String ip) - { - return getEntryByIp(ip, false); - } - - public static Admin getEntryByIp(String needleIp, boolean fuzzy) - { - Iterator> it = adminList.entrySet().iterator(); - while (it.hasNext()) - { - final Entry pair = it.next(); - final Admin superadmin = pair.getValue(); - - if (fuzzy) - { - for (String haystackIp : superadmin.getIps()) - { - if (Utilities.fuzzyIpMatch(needleIp, haystackIp, 3)) - { - return superadmin; - } - } - } - else - { - if (superadmin.getIps().contains(needleIp)) - { - return superadmin; - } - } - } - return null; - } - - public static void updateLastLogin(Player player) - { - final Admin admin = getEntry(player); - if (admin == null) - { - return; - } - admin.setLastLogin(new Date()); - admin.setLastLoginName(player.getName()); - saveAll(); - } - - public static boolean isSuperAdminSafe(UUID uuid, String ip) - { - if (TotalFreedomMod.server.getOnlineMode() && uuid != null) - { - return AdminList.getSuperUUIDs().contains(uuid); - } - - final Admin admin = AdminList.getEntryByIp(ip); - return admin != null && admin.isActivated(); - } - - public static synchronized boolean isSuperAdminSync(CommandSender sender) - { - return isSuperAdmin(sender); - } - - public static boolean isSuperAdmin(CommandSender sender) - { - if (!(sender instanceof Player)) - { - return true; - } - - final Player player = (Player) sender; - - if (superIps.contains(Utilities.getIp(player))) - { - return true; - } - - return Bukkit.getOnlineMode() && superUUIDs.contains(UUIDManager.getUniqueId(player)); - } - - public static boolean isTelnetAdmin(CommandSender sender, boolean verifySuperadmin) - { - if (verifySuperadmin) - { - if (!isSuperAdmin(sender)) - { - return false; - } - } - - if (!(sender instanceof Player)) - { - return true; - } - - final Admin entry = getEntry((Player) sender); - if (entry != null) - { - return entry.isTelnetAdmin(); - } - - return false; - } - - public static boolean isSeniorAdmin(CommandSender sender) - { - return isSeniorAdmin(sender, false); - } - - public static boolean isSeniorAdmin(CommandSender sender, boolean verifySuperadmin) - { - if (verifySuperadmin) - { - if (!isSuperAdmin(sender)) - { - return false; - } - } - - if (!(sender instanceof Player)) - { - return seniorConsoleNames.contains(sender.getName()) - || (MainConfig.getBoolean(ConfigurationEntry.CONSOLE_IS_SENIOR) && sender.getName().equals("CONSOLE")); - } - - if(sender instanceof DiscordCommandSender) { - PlayerRank rank = PlayerRank.fromSender(sender); - - if(rank.equals(PlayerRank.SENIOR)) { - return true; - } - } - - final Admin entry = getEntry((Player) sender); - if (entry != null) - { - return entry.isSeniorAdmin(); - } - - return false; - } - - public static boolean isIdentityMatched(Player player) - { - if (!isSuperAdmin(player)) - { - return false; - } - - if (Bukkit.getOnlineMode()) - { - return true; - } - - final Admin entry = getEntry(player); - if (entry == null) - { - return false; - } - - return entry.getUniqueId().equals(UUIDManager.getUniqueId(player)); - } - - @Deprecated - public static boolean checkPartialSuperadminIp(String ip, String name) - { - ip = ip.trim(); - - if (superIps.contains(ip)) - { - return true; - } - - try - { - String matchIp = null; - for (String testIp : superIps) - { - if (Utilities.fuzzyIpMatch(ip, testIp, 3)) - { - matchIp = testIp; - break; - } - } - - if (matchIp != null) - { - final Admin entry = getEntryByIp(matchIp); - - if (entry == null) - { - return true; - } - - if (entry.getLastLoginName().equalsIgnoreCase(name)) - { - if (!entry.getIps().contains(ip)) - { - entry.addIp(ip); - } - saveAll(); - } - return true; - - } - } - catch (Exception ex) - { - Log.severe(ex); - } - - return false; - } - - public static boolean isAdminImpostor(Player player) - { - if (superUUIDs.contains(UUIDManager.getUniqueId(player))) - { - return !isSuperAdmin(player); - } - - return false; - } - - public static void addSuperadmin(OfflinePlayer player) - { - final UUID uuid = UUIDManager.getUniqueId(player); - final String ip = Utilities.getIp(player); - final boolean canSuperIp = !MainConfig.getList(ConfigurationEntry.NOADMIN_IPS).contains(ip); - - if (adminList.containsKey(uuid)) - { - final Admin superadmin = adminList.get(uuid); - superadmin.setActivated(true); - - if (player.isOnline()) - { - superadmin.setLastLogin(new Date()); - - if (ip != null && canSuperIp) - { - superadmin.addIp(ip); - } - } - - saveAll(); - updateIndexLists(); - return; - } - - if (ip == null) - { - Log.severe("Could not add superadmin: " + Utilities.formatPlayer(player)); - Log.severe("Could not retrieve IP!"); - return; - } - - if (!canSuperIp) - { - Log.warning("Could not add superadmin: " + Utilities.formatPlayer(player)); - Log.warning("IP " + ip + " may not be supered."); - return; - } - - final Admin superadmin = new Admin( - uuid, - player.getName(), - new Date(), - "", - false, - false, - true); - superadmin.addIp(ip); - - adminList.put(uuid, superadmin); - - saveAll(); - updateIndexLists(); - } - - public static void removeSuperadmin(OfflinePlayer player) - { - final UUID uuid = UUIDManager.getUniqueId(player); - - if (!adminList.containsKey(uuid)) - { - Log.warning("Could not remove admin: " + Utilities.formatPlayer(player)); - Log.warning("Player is not an admin!"); - return; - } - - final Admin superadmin = adminList.get(uuid); - superadmin.setActivated(false); - Command_logs.deactivateSuperadmin(superadmin); - - saveAll(); - updateIndexLists(); - } - - public static void cleanSuperadminList(boolean verbose) - { - Iterator> it = adminList.entrySet().iterator(); - while (it.hasNext()) - { - final Entry pair = it.next(); - final Admin superadmin = pair.getValue(); - - if (!superadmin.isActivated() || superadmin.isSeniorAdmin()) - { - continue; - } - - final Date lastLogin = superadmin.getLastLogin(); - final long lastLoginHours = TimeUnit.HOURS.convert(new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS); - - if (lastLoginHours > cleanThreshold) - { - if (verbose) - { - Utilities.adminAction("TotalFreedomMod", "Deactivating superadmin " + superadmin.getLastLoginName() + ", inactive for " + lastLoginHours + " hours.", true); - } - - superadmin.setActivated(false); - Command_logs.deactivateSuperadmin(superadmin); - TwitterHandler.delTwitter(superadmin.getLastLoginName()); - } - } - - saveAll(); - updateIndexLists(); - } +public class AdminList { + + public static final Function SUPERADMIN_SERVICE; + private static final Map adminList; + private static final Set superUUIDs; + private static final Set telnetUUIDs; + private static final Set seniorUUIDs; + private static final Set seniorConsoleNames; + private static final Set superIps; + private static int cleanThreshold = 24 * 7; // 1 Week in hours + + static { + adminList = new HashMap(); + superUUIDs = new HashSet(); + telnetUUIDs = new HashSet(); + seniorUUIDs = new HashSet(); + seniorConsoleNames = new HashSet(); + superIps = new HashSet(); + + SUPERADMIN_SERVICE = new Function() { + + @Override + public Boolean apply(Player f) { + return isSuperAdmin(f); + } + }; + } + + private AdminList() { + throw new AssertionError(); + } + + public static Set getSuperUUIDs() { + return Collections.unmodifiableSet(superUUIDs); + } + + public static Set getTelnetUUIDs() { + return Collections.unmodifiableSet(telnetUUIDs); + } + + public static Set getSeniorUUIDs() { + return Collections.unmodifiableSet(seniorUUIDs); + } + + public static Set getSeniorConsoleNames() { + return Collections.unmodifiableSet(seniorConsoleNames); + } + + public static Set getSuperadminIps() { + return Collections.unmodifiableSet(superIps); + } + + public static Set getAllAdmins() { + return Sets.newHashSet(adminList.values()); + } + + public static Set getSuperNames() { + final Set names = new HashSet(); + + for (Admin admin : adminList.values()) { + if (!admin.isActivated()) { + continue; + } + + names.add(admin.getLastLoginName()); + } + + return Collections.unmodifiableSet(names); + } + + public static Set getLowercaseSuperNames() { + final Set names = new HashSet(); + + for (Admin admin : adminList.values()) { + if (!admin.isActivated()) { + continue; + } + + names.add(admin.getLastLoginName().toLowerCase()); + } + + return Collections.unmodifiableSet(names); + } + + public static void setUuid(Admin admin, UUID oldUuid, UUID newUuid) { + if (!adminList.containsKey(oldUuid)) { + Log.warning("Could not set new UUID for admin " + admin.getLastLoginName() + + ", admin is not loaded!"); + return; + } + + if (oldUuid.equals(newUuid)) { + Log.warning( + "could not set new UUID for admin " + admin.getLastLoginName() + ", UUIDs match."); + return; + } + + // Add new entry + final Admin newAdmin = new Admin( + newUuid, + admin.getLastLoginName(), + admin.getLastLogin(), + admin.getCustomLoginMessage(), + admin.isTelnetAdmin(), + admin.isSeniorAdmin(), + admin.isActivated()); + newAdmin.addIps(admin.getIps()); + adminList.put(newUuid, newAdmin); + save(newAdmin); + + // Remove old entry + adminList.remove(oldUuid); + final Configuration config = new Configuration(TotalFreedomMod.plugin, + TotalFreedomMod.SUPERADMIN_FILENAME, true); + config.load(); + config.set("admins." + oldUuid, null); + config.save(); + } + + public static void load() { + adminList.clear(); + + final Configuration config = new Configuration(TotalFreedomMod.plugin, + TotalFreedomMod.SUPERADMIN_FILENAME, true); + config.load(); + + cleanThreshold = config.getInt("clean_threshold_hours", cleanThreshold); + + // Parse old superadmins + if (config.isConfigurationSection("superadmins")) { + parseOldConfig(config); + } + + if (!config.isConfigurationSection("admins")) { + Log.warning("Missing admins section in superadmin.yml."); + return; + } + + final ConfigurationSection section = config.getConfigurationSection("admins"); + + for (String uuidString : section.getKeys(false)) { + if (!Utilities.isUniqueId(uuidString)) { + Log.warning("Invalid Unique ID: " + uuidString + " in superadmin.yml, ignoring"); + continue; + } + + final UUID uuid = UUID.fromString(uuidString); + + final Admin superadmin = new Admin(uuid, section.getConfigurationSection(uuidString)); + adminList.put(uuid, superadmin); + } + + updateIndexLists(); + + Log.info("Loaded " + adminList.size() + " admins (" + superUUIDs.size() + " active) and " + + superIps.size() + " IPs."); + } + + public static void updateIndexLists() { + superUUIDs.clear(); + telnetUUIDs.clear(); + seniorUUIDs.clear(); + seniorConsoleNames.clear(); + superIps.clear(); + + for (Admin admin : adminList.values()) { + if (!admin.isActivated()) { + continue; + } + + final UUID uuid = admin.getUniqueId(); + + superUUIDs.add(uuid); + + for (String ip : admin.getIps()) { + superIps.add(ip); + } + + if (admin.isTelnetAdmin()) { + telnetUUIDs.add(uuid); + } + + if (admin.isSeniorAdmin()) { + seniorUUIDs.add(uuid); + + seniorConsoleNames.add(admin.getLastLoginName()); + for (String alias : admin.getConsoleAliases()) { + seniorConsoleNames.add(alias.toLowerCase()); + } + } + } + + AdminWorld.getInstance().wipeAccessCache(); + } + + private static void parseOldConfig(Configuration config) { + Log.info("Old superadmin configuration found, parsing..."); + + final ConfigurationSection section = config.getConfigurationSection("superadmins"); + + int counter = 0; + int errors = 0; + + for (String admin : config.getConfigurationSection("superadmins").getKeys(false)) { + final UUID uuid = UUIDManager.getUniqueId(admin); + + if (uuid == null) { + errors++; + Log.warning("Could not convert admin " + admin + ", UUID could not be found!"); + continue; + } + + config.set("admins." + uuid + ".last_login_name", uuid); + config.set("admins." + uuid + ".is_activated", + section.getBoolean(admin + ".is_activated")); + config.set("admins." + uuid + ".is_telnet_admin", + section.getBoolean(admin + ".is_telnet_admin")); + config.set("admins." + uuid + ".is_senior_admin", + section.getBoolean(admin + ".is_senior_admin")); + config.set("admins." + uuid + ".last_login", section.getString(admin + ".last_login")); + config.set("admins." + uuid + ".custom_login_message", + section.getString(admin + ".custom_login_message")); + config.set("admins." + uuid + ".console_aliases", + section.getStringList(admin + ".console_aliases")); + config.set("admins." + uuid + ".ips", section.getStringList(admin + ".ips")); + + counter++; + } + + config.set("superadmins", null); + config.save(); + + Log.info("Done! " + counter + " admins parsed, " + errors + " errors"); + } + + public static void saveAll() { + final Configuration config = new Configuration(TotalFreedomMod.plugin, + TotalFreedomMod.SUPERADMIN_FILENAME, true); + config.load(); + + config.set("clean_threshold_hours", cleanThreshold); + + final Iterator> it = adminList.entrySet().iterator(); + while (it.hasNext()) { + final Entry pair = it.next(); + + final UUID uuid = pair.getKey(); + final Admin superadmin = pair.getValue(); + + config.set("admins." + uuid + ".last_login_name", superadmin.getLastLoginName()); + config.set("admins." + uuid + ".is_activated", superadmin.isActivated()); + config.set("admins." + uuid + ".is_telnet_admin", superadmin.isTelnetAdmin()); + config.set("admins." + uuid + ".is_senior_admin", superadmin.isSeniorAdmin()); + config.set("admins." + uuid + ".last_login", + Utilities.dateToString(superadmin.getLastLogin())); + config.set("admins." + uuid + ".custom_login_message", + superadmin.getCustomLoginMessage()); + config.set("admins." + uuid + ".console_aliases", + Utilities.removeDuplicates(superadmin.getConsoleAliases())); + config.set("admins." + uuid + ".ips", Utilities.removeDuplicates(superadmin.getIps())); + } + + config.save(); + } + + public static void save(Admin admin) { + if (!adminList.containsValue(admin)) { + Log.warning( + "Could not save admin " + admin.getLastLoginName() + ", admin is not loaded!"); + return; + } + + final Configuration config = new Configuration(TotalFreedomMod.plugin, + TotalFreedomMod.SUPERADMIN_FILENAME, true); + config.load(); + + final UUID uuid = admin.getUniqueId(); + + config.set("admins." + uuid + ".last_login_name", admin.getLastLoginName()); + config.set("admins." + uuid + ".is_activated", admin.isActivated()); + config.set("admins." + uuid + ".is_telnet_admin", admin.isTelnetAdmin()); + config.set("admins." + uuid + ".is_senior_admin", admin.isSeniorAdmin()); + config.set("admins." + uuid + ".last_login", Utilities.dateToString(admin.getLastLogin())); + config.set("admins." + uuid + ".custom_login_message", admin.getCustomLoginMessage()); + config.set("admins." + uuid + ".console_aliases", + Utilities.removeDuplicates(admin.getConsoleAliases())); + config.set("admins." + uuid + ".ips", Utilities.removeDuplicates(admin.getIps())); + + config.save(); + } + + public static Admin getEntry(Player player) { + return getEntry(UUIDManager.getUniqueId(player)); + } + + public static Admin getEntry(UUID uuid) { + return adminList.get(uuid); + } + + @Deprecated + public static Admin getEntry(String name) { + for (UUID uuid : adminList.keySet()) { + if (adminList.get(uuid).getLastLoginName().equalsIgnoreCase(name)) { + return adminList.get(uuid); + } + } + return null; + } + + public static Admin getEntryByIp(String ip) { + return getEntryByIp(ip, false); + } + + public static Admin getEntryByIp(String needleIp, boolean fuzzy) { + Iterator> it = adminList.entrySet().iterator(); + while (it.hasNext()) { + final Entry pair = it.next(); + final Admin superadmin = pair.getValue(); + + if (fuzzy) { + for (String haystackIp : superadmin.getIps()) { + if (Utilities.fuzzyIpMatch(needleIp, haystackIp, 3)) { + return superadmin; + } + } + } else { + if (superadmin.getIps().contains(needleIp)) { + return superadmin; + } + } + } + return null; + } + + public static void updateLastLogin(Player player) { + final Admin admin = getEntry(player); + if (admin == null) { + return; + } + admin.setLastLogin(new Date()); + admin.setLastLoginName(player.getName()); + saveAll(); + } + + public static boolean isSuperAdminSafe(UUID uuid, String ip) { + if (TotalFreedomMod.server.getOnlineMode() && uuid != null) { + return AdminList.getSuperUUIDs().contains(uuid); + } + + final Admin admin = AdminList.getEntryByIp(ip); + return admin != null && admin.isActivated(); + } + + public static synchronized boolean isSuperAdminSync(CommandSender sender) { + return isSuperAdmin(sender); + } + + public static boolean isSuperAdmin(CommandSender sender) { + if (!(sender instanceof Player)) { + return true; + } + + final Player player = (Player) sender; + + if (superIps.contains(Utilities.getIp(player))) { + return true; + } + + return Bukkit.getOnlineMode() && superUUIDs.contains(UUIDManager.getUniqueId(player)); + } + + public static boolean isTelnetAdmin(CommandSender sender, boolean verifySuperadmin) { + if (verifySuperadmin) { + if (!isSuperAdmin(sender)) { + return false; + } + } + + if (!(sender instanceof Player)) { + return true; + } + + final Admin entry = getEntry((Player) sender); + if (entry != null) { + return entry.isTelnetAdmin(); + } + + return false; + } + + public static boolean isSeniorAdmin(CommandSender sender) { + return isSeniorAdmin(sender, false); + } + + public static boolean isSeniorAdmin(CommandSender sender, boolean verifySuperadmin) { + if (verifySuperadmin) { + if (!isSuperAdmin(sender)) { + return false; + } + } + + if (!(sender instanceof Player)) { + return seniorConsoleNames.contains(sender.getName()) + || (MainConfig.getBoolean(ConfigurationEntry.CONSOLE_IS_SENIOR) && sender.getName() + .equals("CONSOLE")); + } + + if (sender instanceof DiscordCommandSender) { + PlayerRank rank = PlayerRank.fromSender(sender); + + if (rank.equals(PlayerRank.SENIOR)) { + return true; + } + } + + final Admin entry = getEntry((Player) sender); + if (entry != null) { + return entry.isSeniorAdmin(); + } + + return false; + } + + public static boolean isIdentityMatched(Player player) { + if (!isSuperAdmin(player)) { + return false; + } + + if (Bukkit.getOnlineMode()) { + return true; + } + + final Admin entry = getEntry(player); + if (entry == null) { + return false; + } + + return entry.getUniqueId().equals(UUIDManager.getUniqueId(player)); + } + + @Deprecated + public static boolean checkPartialSuperadminIp(String ip, String name) { + ip = ip.trim(); + + if (superIps.contains(ip)) { + return true; + } + + try { + String matchIp = null; + for (String testIp : superIps) { + if (Utilities.fuzzyIpMatch(ip, testIp, 3)) { + matchIp = testIp; + break; + } + } + + if (matchIp != null) { + final Admin entry = getEntryByIp(matchIp); + + if (entry == null) { + return true; + } + + if (entry.getLastLoginName().equalsIgnoreCase(name)) { + if (!entry.getIps().contains(ip)) { + entry.addIp(ip); + } + saveAll(); + } + return true; + + } + } catch (Exception ex) { + Log.severe(ex); + } + + return false; + } + + public static boolean isAdminImpostor(Player player) { + if (superUUIDs.contains(UUIDManager.getUniqueId(player))) { + return !isSuperAdmin(player); + } + + return false; + } + + public static void addSuperadmin(OfflinePlayer player) { + final UUID uuid = UUIDManager.getUniqueId(player); + final String ip = Utilities.getIp(player); + final boolean canSuperIp = !MainConfig.getList(ConfigurationEntry.NOADMIN_IPS).contains(ip); + + if (adminList.containsKey(uuid)) { + final Admin superadmin = adminList.get(uuid); + superadmin.setActivated(true); + + if (player.isOnline()) { + superadmin.setLastLogin(new Date()); + + if (ip != null && canSuperIp) { + superadmin.addIp(ip); + } + } + + saveAll(); + updateIndexLists(); + return; + } + + if (ip == null) { + Log.severe("Could not add superadmin: " + Utilities.formatPlayer(player)); + Log.severe("Could not retrieve IP!"); + return; + } + + if (!canSuperIp) { + Log.warning("Could not add superadmin: " + Utilities.formatPlayer(player)); + Log.warning("IP " + ip + " may not be supered."); + return; + } + + final Admin superadmin = new Admin( + uuid, + player.getName(), + new Date(), + "", + false, + false, + true); + superadmin.addIp(ip); + + adminList.put(uuid, superadmin); + + saveAll(); + updateIndexLists(); + } + + public static void removeSuperadmin(OfflinePlayer player) { + final UUID uuid = UUIDManager.getUniqueId(player); + + if (!adminList.containsKey(uuid)) { + Log.warning("Could not remove admin: " + Utilities.formatPlayer(player)); + Log.warning("Player is not an admin!"); + return; + } + + final Admin superadmin = adminList.get(uuid); + superadmin.setActivated(false); + Command_logs.deactivateSuperadmin(superadmin); + + saveAll(); + updateIndexLists(); + } + + public static void cleanSuperadminList(boolean verbose) { + Iterator> it = adminList.entrySet().iterator(); + while (it.hasNext()) { + final Entry pair = it.next(); + final Admin superadmin = pair.getValue(); + + if (!superadmin.isActivated() || superadmin.isSeniorAdmin()) { + continue; + } + + final Date lastLogin = superadmin.getLastLogin(); + final long lastLoginHours = TimeUnit.HOURS.convert( + new Date().getTime() - lastLogin.getTime(), TimeUnit.MILLISECONDS); + + if (lastLoginHours > cleanThreshold) { + if (verbose) { + Utilities.adminAction("TotalFreedomMod", + "Deactivating superadmin " + superadmin.getLastLoginName() + + ", inactive for " + lastLoginHours + " hours.", true); + } + + superadmin.setActivated(false); + Command_logs.deactivateSuperadmin(superadmin); + TwitterHandler.delTwitter(superadmin.getLastLoginName()); + } + } + + saveAll(); + updateIndexLists(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java b/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java index b948c19..a8b74ce 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/announcer/Announcer.java @@ -1,115 +1,95 @@ package me.StevenLawson.TotalFreedomMod.announcer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.scheduler.BukkitRunnable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +public class Announcer { -public class Announcer -{ - private static final List ANNOUNCEMENTS = new ArrayList(); - private static boolean enabled; - private static long interval; - private static String prefix; - private static BukkitRunnable announcer; + private static final List ANNOUNCEMENTS = new ArrayList(); + private static boolean enabled; + private static long interval; + private static String prefix; + private static BukkitRunnable announcer; - private Announcer() - { - throw new AssertionError(); - } + private Announcer() { + throw new AssertionError(); + } - public static boolean isEnabled() - { - return enabled; - } + public static boolean isEnabled() { + return enabled; + } - public static List getAnnouncements() - { - return Collections.unmodifiableList(ANNOUNCEMENTS); - } + public static List getAnnouncements() { + return Collections.unmodifiableList(ANNOUNCEMENTS); + } - public static long getTickInterval() - { - return interval; - } + public static long getTickInterval() { + return interval; + } - public static String getPrefix() - { - return prefix; - } + public static String getPrefix() { + return prefix; + } - public static void load() - { - stop(); + public static void load() { + stop(); - ANNOUNCEMENTS.clear(); + ANNOUNCEMENTS.clear(); - for (Object announcement : ConfigurationEntry.ANNOUNCER_ANNOUNCEMENTS.getList()) - { - ANNOUNCEMENTS.add(Utilities.colorize((String) announcement)); - } + for (Object announcement : ConfigurationEntry.ANNOUNCER_ANNOUNCEMENTS.getList()) { + ANNOUNCEMENTS.add(Utilities.colorize((String) announcement)); + } - enabled = ConfigurationEntry.ANNOUNCER_ENABLED.getBoolean(); - interval = ConfigurationEntry.ANNOUNCER_INTERVAL.getInteger() * 20L; - prefix = Utilities.colorize(ConfigurationEntry.ANNOUNCER_PREFIX.getString()); + enabled = ConfigurationEntry.ANNOUNCER_ENABLED.getBoolean(); + interval = ConfigurationEntry.ANNOUNCER_INTERVAL.getInteger() * 20L; + prefix = Utilities.colorize(ConfigurationEntry.ANNOUNCER_PREFIX.getString()); - if (enabled) - { - start(); - } - } + if (enabled) { + start(); + } + } - public static boolean isStarted() - { - return announcer != null; - } + public static boolean isStarted() { + return announcer != null; + } - public static void start() - { - if (isStarted()) - { - return; - } + public static void start() { + if (isStarted()) { + return; + } - announcer = new BukkitRunnable() - { - private int current = 0; + announcer = new BukkitRunnable() { + private int current = 0; - @Override - public void run() - { - current++; + @Override + public void run() { + current++; - if (current >= ANNOUNCEMENTS.size()) - { - current = 0; - } + if (current >= ANNOUNCEMENTS.size()) { + current = 0; + } - Utilities.bcastMsg(prefix + ANNOUNCEMENTS.get(current), false); - } - }; + Utilities.bcastMsg(prefix + ANNOUNCEMENTS.get(current), false); + } + }; - announcer.runTaskTimer(TotalFreedomMod.plugin, interval, interval); - } + announcer.runTaskTimer(TotalFreedomMod.plugin, interval, interval); + } - public static void stop() - { - if (announcer == null) - { - return; - } + public static void stop() { + if (announcer == null) { + return; + } - try - { - announcer.cancel(); - } - finally - { - announcer = null; - } - } + try { + announcer.cancel(); + } finally { + announcer = null; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/Ban.java b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/Ban.java index 2f5b071..8f4ddee 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/Ban.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/Ban.java @@ -1,206 +1,186 @@ package me.StevenLawson.TotalFreedomMod.ban; -import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import me.StevenLawson.TotalFreedomMod.util.Utilities; -import org.bukkit.ChatColor; - import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; +import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; +import me.StevenLawson.TotalFreedomMod.util.Utilities; +import org.bukkit.ChatColor; -public class Ban -{ - public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); - public static final Pattern IP_BAN_REGEX; - public static final Pattern UUID_BAN_REGEX; +public class Ban { - static - { - // 192.168.1.254:LocalHost:Prozza:0:none - // 127.0.*.*:TestUserName:BannedByNotch:123567:Test reason - IP_BAN_REGEX = Pattern.compile( - "^((?:(?:\\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\\.){3}(?:\\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))" - + ":([\\w\\s]+)" - + ":([\\w]+)" - + ":(\\d+)" - + ":([\\s\\S]+)$"); - // 245d2f30-61fb-4840-9cd3-298b3920f4a4:Cobrex:Prozza:0:Example reason - UUID_BAN_REGEX = Pattern.compile( - "^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})" - + ":([\\w\\s]+)" - + ":([\\w]+)" - + ":(\\d+)" - + ":([\\s\\S]+)$"); - } - private final BanType type; - private final boolean complete; - private String subject; // uuid or IP - private String lastLoginName; - private String by; - private long expireUnix; - private String reason; + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( + "yyyy-MM-dd 'at' HH:mm:ss z"); + public static final Pattern IP_BAN_REGEX; + public static final Pattern UUID_BAN_REGEX; - public Ban(String ip, String lastLoginName) - { - this(ip, lastLoginName, null, null, null); - } + static { + // 192.168.1.254:LocalHost:Prozza:0:none + // 127.0.*.*:TestUserName:BannedByNotch:123567:Test reason + IP_BAN_REGEX = Pattern.compile( + "^((?:(?:\\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\\.){3}(?:\\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))" + + ":([\\w\\s]+)" + + ":([\\w]+)" + + ":(\\d+)" + + ":([\\s\\S]+)$"); + // 245d2f30-61fb-4840-9cd3-298b3920f4a4:Cobrex:Prozza:0:Example reason + UUID_BAN_REGEX = Pattern.compile( + "^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})" + + ":([\\w\\s]+)" + + ":([\\w]+)" + + ":(\\d+)" + + ":([\\s\\S]+)$"); + } - public Ban(String ip, String lastLoginName, String sender, Date expire, String reason) - { - this(ip, lastLoginName, sender, expire, reason, BanType.IP); - } + private final BanType type; + private final boolean complete; + private String subject; // uuid or IP + private String lastLoginName; + private String by; + private long expireUnix; + private String reason; - public Ban(UUID uuid, String lastLoginName) - { - this(uuid, lastLoginName, null, null, null); - } + public Ban(String ip, String lastLoginName) { + this(ip, lastLoginName, null, null, null); + } - public Ban(UUID uuid, String lastLoginName, String sender, Date expire, String reason) - { - this(uuid.toString(), lastLoginName, sender, expire, reason, BanType.UUID); - } + public Ban(String ip, String lastLoginName, String sender, Date expire, String reason) { + this(ip, lastLoginName, sender, expire, reason, BanType.IP); + } - private Ban(String subject, String lastLoginName, String sender, Date expire, String reason, BanType type) - { - this.type = type; - this.subject = subject; - this.lastLoginName = (lastLoginName == null ? "none" : lastLoginName); - this.by = (sender == null ? "none" : sender); - this.expireUnix = (expire == null ? 0 : Utilities.getUnixTime(expire)); - this.reason = (reason == null ? "none" : reason); - complete = true; - } + public Ban(UUID uuid, String lastLoginName) { + this(uuid, lastLoginName, null, null, null); + } - public Ban(String banString, BanType type) - { - this.type = type; + public Ban(UUID uuid, String lastLoginName, String sender, Date expire, String reason) { + this(uuid.toString(), lastLoginName, sender, expire, reason, BanType.UUID); + } - final Matcher matcher = (type == BanType.IP ? IP_BAN_REGEX.matcher(banString) : UUID_BAN_REGEX.matcher(banString)); + private Ban(String subject, String lastLoginName, String sender, Date expire, String reason, + BanType type) { + this.type = type; + this.subject = subject; + this.lastLoginName = (lastLoginName == null ? "none" : lastLoginName); + this.by = (sender == null ? "none" : sender); + this.expireUnix = (expire == null ? 0 : Utilities.getUnixTime(expire)); + this.reason = (reason == null ? "none" : reason); + complete = true; + } - if (!matcher.find()) - { - complete = false; - return; - } + public Ban(String banString, BanType type) { + this.type = type; - subject = matcher.group(1); - lastLoginName = matcher.group(2); - by = matcher.group(3); - expireUnix = Long.valueOf(matcher.group(4)); - reason = Utilities.colorize(matcher.group(5)); - complete = true; - } + final Matcher matcher = (type == BanType.IP ? IP_BAN_REGEX.matcher(banString) + : UUID_BAN_REGEX.matcher(banString)); - public enum BanType - { - IP, - UUID - } + if (!matcher.find()) { + complete = false; + return; + } - public BanType getType() - { - return type; - } + subject = matcher.group(1); + lastLoginName = matcher.group(2); + by = matcher.group(3); + expireUnix = Long.valueOf(matcher.group(4)); + reason = Utilities.colorize(matcher.group(5)); + complete = true; + } - public String getSubject() - { - return subject; - } + public BanType getType() { + return type; + } - public String getLastLoginName() - { - return lastLoginName; - } + public String getSubject() { + return subject; + } - public String getBannedBy() - { - return by; - } + public String getLastLoginName() { + return lastLoginName; + } - public long getExpireUnix() - { - return expireUnix; - } + public String getBannedBy() { + return by; + } - public String getReason() - { - return reason; - } + public long getExpireUnix() { + return expireUnix; + } - public boolean isExpired() - { - return expireUnix != 0 && expireUnix < Utilities.getUnixTime(); - } + public String getReason() { + return reason; + } - public boolean isComplete() - { - return complete; - } + public boolean isExpired() { + return expireUnix != 0 && expireUnix < Utilities.getUnixTime(); + } - public String getKickMessage() - { - final StringBuilder message = new StringBuilder("You"); + public boolean isComplete() { + return complete; + } - message.append(type == BanType.IP ? "r IP address is" : " are").append(" temporarily banned from this server."); - message.append("\nAppeal at ").append(ChatColor.GOLD).append(ConfigurationEntry.SERVER_BAN_URL.getString()); + public String getKickMessage() { + final StringBuilder message = new StringBuilder("You"); - if (!reason.equals("none")) - { - message.append("\nReason: ").append(reason); - } + message.append(type == BanType.IP ? "r IP address is" : " are") + .append(" temporarily banned from this server."); + message.append("\nAppeal at ").append(ChatColor.GOLD) + .append(ConfigurationEntry.SERVER_BAN_URL.getString()); - if (getExpireUnix() != 0) - { - message.append("\nYour ban will be removed on ").append(DATE_FORMAT.format(Utilities.getUnixDate(expireUnix))); - } + if (!reason.equals("none")) { + message.append("\nReason: ").append(reason); + } - return message.toString(); - } + if (getExpireUnix() != 0) { + message.append("\nYour ban will be removed on ") + .append(DATE_FORMAT.format(Utilities.getUnixDate(expireUnix))); + } - // subject:lastLoginName:bannedBy:expireUnix:reason - @Override - public String toString() - { - return subject + ":" + lastLoginName + ":" + by + ":" + expireUnix + ":" + Utilities.decolorize(reason); - } + return message.toString(); + } - @Override - public boolean equals(Object object) - { - if (object == null) - { - return false; - } + // subject:lastLoginName:bannedBy:expireUnix:reason + @Override + public String toString() { + return subject + ":" + lastLoginName + ":" + by + ":" + expireUnix + ":" + + Utilities.decolorize(reason); + } - if (!(object instanceof Ban)) - { - return false; - } + @Override + public boolean equals(Object object) { + if (object == null) { + return false; + } - final Ban ban = (Ban) object; + if (!(object instanceof Ban)) { + return false; + } - if (toString().equals(ban.toString())) - { - return true; - } + final Ban ban = (Ban) object; - if (getType() != ban.getType()) - { - return false; - } + if (toString().equals(ban.toString())) { + return true; + } - return getSubject().equals(ban.getSubject()); - } + if (getType() != ban.getType()) { + return false; + } - @Override - public int hashCode() - { - final int prime = 37; - int result = 1; - result = prime * result + getType().hashCode(); - result = prime * result + getSubject().hashCode(); - return result; - } + return getSubject().equals(ban.getSubject()); + } + + @Override + public int hashCode() { + final int prime = 37; + int result = 1; + result = prime * result + getType().hashCode(); + result = prime * result + getSubject().hashCode(); + return result; + } + + public enum BanType { + IP, + UUID + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/BanManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/BanManager.java index ca468cf..735ebb9 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/BanManager.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/BanManager.java @@ -1,299 +1,249 @@ package me.StevenLawson.TotalFreedomMod.ban; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.ban.Ban.BanType; import me.StevenLawson.TotalFreedomMod.config.Configuration; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager.TFM_UuidResolver; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager.TFM_UuidResolver; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.entity.Player; -import java.util.*; +public class BanManager { -public class BanManager -{ - private static final List ipBans; - private static final List uuidBans; - private static final List unbannableUUIDs; + private static final List ipBans; + private static final List uuidBans; + private static final List unbannableUUIDs; - static - { - ipBans = new ArrayList(); - uuidBans = new ArrayList(); - unbannableUUIDs = new ArrayList(); - } + static { + ipBans = new ArrayList(); + uuidBans = new ArrayList(); + unbannableUUIDs = new ArrayList(); + } - private BanManager() - { - throw new AssertionError(); - } + private BanManager() { + throw new AssertionError(); + } - public static void load() - { - ipBans.clear(); - uuidBans.clear(); - unbannableUUIDs.clear(); + public static void load() { + ipBans.clear(); + uuidBans.clear(); + unbannableUUIDs.clear(); - final Configuration config = new Configuration(TotalFreedomMod.plugin, "bans.yml", true); - config.load(); + final Configuration config = new Configuration(TotalFreedomMod.plugin, "bans.yml", true); + config.load(); - for (String banString : config.getStringList("ips")) - { - try - { - addIpBan(new Ban(banString, BanType.IP)); - } - catch (RuntimeException ex) - { - Log.warning("Could not load IP ban: " + banString); - } - } + for (String banString : config.getStringList("ips")) { + try { + addIpBan(new Ban(banString, BanType.IP)); + } catch (RuntimeException ex) { + Log.warning("Could not load IP ban: " + banString); + } + } - for (String banString : config.getStringList("uuids")) - { - try - { - addUuidBan(new Ban(banString, BanType.UUID)); - } - catch (RuntimeException ex) - { - Log.warning("Could not load UUID ban: " + banString); - } - } + for (String banString : config.getStringList("uuids")) { + try { + addUuidBan(new Ban(banString, BanType.UUID)); + } catch (RuntimeException ex) { + Log.warning("Could not load UUID ban: " + banString); + } + } - // Save the config - save(); - Log.info("Loaded " + ipBans.size() + " IP bans and " + uuidBans.size() + " UUID bans"); + // Save the config + save(); + Log.info("Loaded " + ipBans.size() + " IP bans and " + uuidBans.size() + " UUID bans"); - @SuppressWarnings("unchecked") - final TFM_UuidResolver resolver = new TFM_UuidResolver((List) ConfigurationEntry.UNBANNABLE_USERNAMES.getList()); + @SuppressWarnings("unchecked") final TFM_UuidResolver resolver = new TFM_UuidResolver( + (List) ConfigurationEntry.UNBANNABLE_USERNAMES.getList()); - for (UUID uuid : resolver.call().values()) - { - unbannableUUIDs.add(uuid); - } + for (UUID uuid : resolver.call().values()) { + unbannableUUIDs.add(uuid); + } - Log.info("Loaded " + unbannableUUIDs.size() + " unbannable UUIDs"); - } + Log.info("Loaded " + unbannableUUIDs.size() + " unbannable UUIDs"); + } - public static void save() - { - final Configuration config = new Configuration(TotalFreedomMod.plugin, "bans.yml", true); - config.load(); + public static void save() { + final Configuration config = new Configuration(TotalFreedomMod.plugin, "bans.yml", true); + config.load(); - final List newIpBans = new ArrayList(); - final List newUuidBans = new ArrayList(); + final List newIpBans = new ArrayList(); + final List newUuidBans = new ArrayList(); - for (Ban savedBan : ipBans) - { - if (!savedBan.isExpired()) - { - newIpBans.add(savedBan.toString()); - } - } + for (Ban savedBan : ipBans) { + if (!savedBan.isExpired()) { + newIpBans.add(savedBan.toString()); + } + } - for (Ban savedBan : uuidBans) - { - if (!savedBan.isExpired() && !unbannableUUIDs.contains(UUID.fromString(savedBan.getSubject()))) - { - newUuidBans.add(savedBan.toString()); - } - } + for (Ban savedBan : uuidBans) { + if (!savedBan.isExpired() && !unbannableUUIDs.contains( + UUID.fromString(savedBan.getSubject()))) { + newUuidBans.add(savedBan.toString()); + } + } - config.set("ips", newIpBans); - config.set("uuids", newUuidBans); + config.set("ips", newIpBans); + config.set("uuids", newUuidBans); - // Save config - config.save(); - } + // Save config + config.save(); + } - public static List getIpBanList() - { - return Collections.unmodifiableList(ipBans); - } + public static List getIpBanList() { + return Collections.unmodifiableList(ipBans); + } - public static List getUuidBanList() - { - return Collections.unmodifiableList(uuidBans); - } + public static List getUuidBanList() { + return Collections.unmodifiableList(uuidBans); + } - public static Ban getByIp(String ip) - { - for (Ban ban : ipBans) - { - if (ban.isExpired()) - { - continue; - } + public static Ban getByIp(String ip) { + for (Ban ban : ipBans) { + if (ban.isExpired()) { + continue; + } - wildcardCheck: - if (ban.getSubject().contains("*")) - { - final String[] subjectParts = ban.getSubject().split("\\."); - final String[] ipParts = ip.split("\\."); + wildcardCheck: + if (ban.getSubject().contains("*")) { + final String[] subjectParts = ban.getSubject().split("\\."); + final String[] ipParts = ip.split("\\."); - for (int i = 0; i < 4; i++) - { - if (!(subjectParts[i].equals("*") || subjectParts[i].equals(ipParts[i]))) - { - break wildcardCheck; - } - } + for (int i = 0; i < 4; i++) { + if (!(subjectParts[i].equals("*") || subjectParts[i].equals(ipParts[i]))) { + break wildcardCheck; + } + } - return ban; - } + return ban; + } - if (ban.getSubject().equals(ip)) - { - return ban; - } - } - return null; - } + if (ban.getSubject().equals(ip)) { + return ban; + } + } + return null; + } - public static Ban getByUuid(UUID uuid) - { - for (Ban ban : uuidBans) - { - if (ban.getSubject().equalsIgnoreCase(uuid.toString())) - { - if (ban.isExpired()) - { - continue; - } + public static Ban getByUuid(UUID uuid) { + for (Ban ban : uuidBans) { + if (ban.getSubject().equalsIgnoreCase(uuid.toString())) { + if (ban.isExpired()) { + continue; + } - return ban; - } - } - return null; - } + return ban; + } + } + return null; + } - public static void unbanIp(String ip) - { - final Ban ban = getByIp(ip); + public static void unbanIp(String ip) { + final Ban ban = getByIp(ip); - if (ban == null) - { - return; - } + if (ban == null) { + return; + } - removeBan(ban); - save(); - } + removeBan(ban); + save(); + } - public static void unbanUuid(UUID uuid) - { - final Ban ban = getByUuid(uuid); + public static void unbanUuid(UUID uuid) { + final Ban ban = getByUuid(uuid); - if (ban == null) - { - return; - } + if (ban == null) { + return; + } - removeBan(ban); - } + removeBan(ban); + } - public static boolean isIpBanned(String ip) - { - return getByIp(ip) != null; - } + public static boolean isIpBanned(String ip) { + return getByIp(ip) != null; + } - public static boolean isUuidBanned(UUID uuid) - { - return getByUuid(uuid) != null; - } + public static boolean isUuidBanned(UUID uuid) { + return getByUuid(uuid) != null; + } - public static void addUuidBan(Player player) - { - addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName())); - } + public static void addUuidBan(Player player) { + addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName())); + } - public static void addUuidBan(Ban ban) - { - if (!ban.isComplete()) - { - throw new RuntimeException("Could not add UUID ban, Invalid format!"); - } + public static void addUuidBan(Ban ban) { + if (!ban.isComplete()) { + throw new RuntimeException("Could not add UUID ban, Invalid format!"); + } - if (ban.isExpired()) - { - return; - } + if (ban.isExpired()) { + return; + } - if (uuidBans.contains(ban)) - { - return; - } + if (uuidBans.contains(ban)) { + return; + } - if (unbannableUUIDs.contains(UUID.fromString(ban.getSubject()))) - { - return; - } + if (unbannableUUIDs.contains(UUID.fromString(ban.getSubject()))) { + return; + } - uuidBans.add(ban); - save(); - } + uuidBans.add(ban); + save(); + } - public static void addIpBan(Player player) - { - addIpBan(new Ban(Utilities.getIp(player), player.getName())); - } + public static void addIpBan(Player player) { + addIpBan(new Ban(Utilities.getIp(player), player.getName())); + } - public static void addIpBan(Ban ban) - { - if (!ban.isComplete()) - { - throw new RuntimeException("Could not add IP ban, Invalid format!"); - } + public static void addIpBan(Ban ban) { + if (!ban.isComplete()) { + throw new RuntimeException("Could not add IP ban, Invalid format!"); + } - if (ban.isExpired()) - { - return; - } + if (ban.isExpired()) { + return; + } - if (ipBans.contains(ban)) - { - return; - } + if (ipBans.contains(ban)) { + return; + } - ipBans.add(ban); - save(); - } + ipBans.add(ban); + save(); + } - public static void removeBan(Ban ban) - { - final Iterator ips = ipBans.iterator(); - while (ips.hasNext()) - { - if (ips.next().getSubject().equalsIgnoreCase(ban.getSubject())) - { - ips.remove(); - } - } + public static void removeBan(Ban ban) { + final Iterator ips = ipBans.iterator(); + while (ips.hasNext()) { + if (ips.next().getSubject().equalsIgnoreCase(ban.getSubject())) { + ips.remove(); + } + } - final Iterator uuids = uuidBans.iterator(); - while (uuids.hasNext()) - { - if (uuids.next().getSubject().equalsIgnoreCase(ban.getSubject())) - { - uuids.remove(); - } - } + final Iterator uuids = uuidBans.iterator(); + while (uuids.hasNext()) { + if (uuids.next().getSubject().equalsIgnoreCase(ban.getSubject())) { + uuids.remove(); + } + } - save(); - } + save(); + } - public static void purgeIpBans() - { - ipBans.clear(); - save(); - } + public static void purgeIpBans() { + ipBans.clear(); + save(); + } - public static void purgeUuidBans() - { - uuidBans.clear(); - save(); - } + public static void purgeUuidBans() { + uuidBans.clear(); + save(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/PermbanList.java b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/PermbanList.java index b794bef..f27e5a1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/ban/PermbanList.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/ban/PermbanList.java @@ -1,63 +1,55 @@ package me.StevenLawson.TotalFreedomMod.ban; -import me.StevenLawson.TotalFreedomMod.Log; -import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.config.Configuration; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import me.StevenLawson.TotalFreedomMod.Log; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import me.StevenLawson.TotalFreedomMod.config.Configuration; -public class PermbanList -{ +public class PermbanList { - private static final List PERMBANNED_PLAYERS; - private static final List PERMBANNED_IPS; + private static final List PERMBANNED_PLAYERS; + private static final List PERMBANNED_IPS; - static - { - PERMBANNED_PLAYERS = new ArrayList(); - PERMBANNED_IPS = new ArrayList(); - } + static { + PERMBANNED_PLAYERS = new ArrayList(); + PERMBANNED_IPS = new ArrayList(); + } - private PermbanList() - { - throw new AssertionError(); - } + private PermbanList() { + throw new AssertionError(); + } - public static List getPermbannedPlayers() - { - return Collections.unmodifiableList(PERMBANNED_PLAYERS); - } + public static List getPermbannedPlayers() { + return Collections.unmodifiableList(PERMBANNED_PLAYERS); + } - public static List getPermbannedIps() - { - return Collections.unmodifiableList(PERMBANNED_IPS); - } + public static List getPermbannedIps() { + return Collections.unmodifiableList(PERMBANNED_IPS); + } - public static void load() - { - PERMBANNED_PLAYERS.clear(); - PERMBANNED_IPS.clear(); + public static void load() { + PERMBANNED_PLAYERS.clear(); + PERMBANNED_IPS.clear(); - final Configuration config = new Configuration(TotalFreedomMod.plugin, TotalFreedomMod.PERMBAN_FILENAME, true); - config.load(); + final Configuration config = new Configuration(TotalFreedomMod.plugin, + TotalFreedomMod.PERMBAN_FILENAME, true); + config.load(); - for (String playername : config.getKeys(false)) - { - PERMBANNED_PLAYERS.add(playername.toLowerCase().trim()); + for (String playername : config.getKeys(false)) { + PERMBANNED_PLAYERS.add(playername.toLowerCase().trim()); - List playerIps = config.getStringList(playername); - for (String ip : playerIps) - { - ip = ip.trim(); - if (!PERMBANNED_IPS.contains(ip)) - { - PERMBANNED_IPS.add(ip); - } - } - } + List playerIps = config.getStringList(playername); + for (String ip : playerIps) { + ip = ip.trim(); + if (!PERMBANNED_IPS.contains(ip)) { + PERMBANNED_IPS.add(ip); + } + } + } - Log.info("Loaded " + PERMBANNED_PLAYERS.size() + " permanently banned players and " + PERMBANNED_IPS.size() + " permanently banned IPs."); - } + Log.info("Loaded " + PERMBANNED_PLAYERS.size() + " permanently banned players and " + + PERMBANNED_IPS.size() + " permanently banned IPs."); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/EssentialsBridge.java b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/EssentialsBridge.java index 5f2342a..6cfea73 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/EssentialsBridge.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/EssentialsBridge.java @@ -8,116 +8,87 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; public class EssentialsBridge { - private static Essentials essentialsPlugin = null; - private EssentialsBridge() { - throw new AssertionError(); - } + private static Essentials essentialsPlugin = null; - public static Essentials getEssentialsPlugin() { - if (essentialsPlugin == null) - { - try - { - final Plugin essentials = Bukkit.getServer().getPluginManager().getPlugin("Essentials"); - if (essentials != null) - { - if (essentials instanceof Essentials) - { - essentialsPlugin = (Essentials) essentials; - } - } - } - catch (Exception ex) - { - Log.severe(ex); - } - } - return essentialsPlugin; - } + private EssentialsBridge() { + throw new AssertionError(); + } - public static User getEssentialsUser(String username) - { - try - { - final Essentials essentials = getEssentialsPlugin(); - if (essentials != null) - { - return essentials.getUserMap().getUser(username); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return null; - } + public static Essentials getEssentialsPlugin() { + if (essentialsPlugin == null) { + try { + final Plugin essentials = Bukkit.getServer().getPluginManager() + .getPlugin("Essentials"); + if (essentials != null) { + if (essentials instanceof Essentials) { + essentialsPlugin = (Essentials) essentials; + } + } + } catch (Exception ex) { + Log.severe(ex); + } + } + return essentialsPlugin; + } - public static void setNickname(String username, String nickname) - { - try - { - final User user = getEssentialsUser(username); - if (user != null) - { - user.setNickname(nickname); - user.setDisplayNick(); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - } + public static User getEssentialsUser(String username) { + try { + final Essentials essentials = getEssentialsPlugin(); + if (essentials != null) { + return essentials.getUserMap().getUser(username); + } + } catch (Exception ex) { + Log.severe(ex); + } + return null; + } - public static String getNickname(String username) - { - try - { - final User user = getEssentialsUser(username); - if (user != null) - { - return user.getNickname(); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return null; - } + public static void setNickname(String username, String nickname) { + try { + final User user = getEssentialsUser(username); + if (user != null) { + user.setNickname(nickname); + user.setDisplayNick(); + } + } catch (Exception ex) { + Log.severe(ex); + } + } - public static long getLastActivity(String username) - { - try - { - final User user = getEssentialsUser(username); - if (user != null) - { - return Utilities.getField(user, "lastActivity"); // This is weird - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return 0L; - } + public static String getNickname(String username) { + try { + final User user = getEssentialsUser(username); + if (user != null) { + return user.getNickname(); + } + } catch (Exception ex) { + Log.severe(ex); + } + return null; + } - public static boolean isEssentialsEnabled() - { - try - { - final Essentials essentials = getEssentialsPlugin(); - if (essentials != null) - { - return essentials.isEnabled(); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return false; - } + public static long getLastActivity(String username) { + try { + final User user = getEssentialsUser(username); + if (user != null) { + return Utilities.getField(user, "lastActivity"); // This is weird + } + } catch (Exception ex) { + Log.severe(ex); + } + return 0L; + } + + public static boolean isEssentialsEnabled() { + try { + final Essentials essentials = getEssentialsPlugin(); + if (essentials != null) { + return essentials.isEnabled(); + } + } catch (Exception ex) { + Log.severe(ex); + } + return false; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/WorldEditBridge.java b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/WorldEditBridge.java index b55601a..503b0ef 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/WorldEditBridge.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/bridge/WorldEditBridge.java @@ -9,104 +9,77 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; public class WorldEditBridge { - private static WorldEditPlugin worldEditPlugin = null; - private WorldEditBridge() { - throw new AssertionError(); - } + private static WorldEditPlugin worldEditPlugin = null; - private static WorldEditPlugin getWorldEditPlugin() { - if (worldEditPlugin == null) - { - try - { - Plugin we = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"); - if (we != null) - { - if (we instanceof WorldEditPlugin) - { - worldEditPlugin = (WorldEditPlugin) we; - } - } - } - catch (Exception ex) - { - Log.severe(ex); - } - } - return worldEditPlugin; - } + private WorldEditBridge() { + throw new AssertionError(); + } - private static LocalSession getPlayerSession(Player player) - { - try - { - final WorldEditPlugin wep = getWorldEditPlugin(); - if (wep != null) - { - return wep.getSession(player); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return null; - } + private static WorldEditPlugin getWorldEditPlugin() { + if (worldEditPlugin == null) { + try { + Plugin we = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"); + if (we != null) { + if (we instanceof WorldEditPlugin) { + worldEditPlugin = (WorldEditPlugin) we; + } + } + } catch (Exception ex) { + Log.severe(ex); + } + } + return worldEditPlugin; + } - private static BukkitPlayer getBukkitPlayer(Player player) - { - try - { - final WorldEditPlugin wep = getWorldEditPlugin(); - if (wep != null) - { - return wep.wrapPlayer(player); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return null; - } + private static LocalSession getPlayerSession(Player player) { + try { + final WorldEditPlugin wep = getWorldEditPlugin(); + if (wep != null) { + return wep.getSession(player); + } + } catch (Exception ex) { + Log.severe(ex); + } + return null; + } - public static void undo(Player player, int count) - { - try - { - LocalSession session = getPlayerSession(player); - if (session != null) - { - final BukkitPlayer bukkitPlayer = getBukkitPlayer(player); - if (bukkitPlayer != null) - { - for (int i = 0; i < count; i++) - { - session.undo(session.getBlockBag(bukkitPlayer), bukkitPlayer); - } - } - } - } - catch (Exception ex) - { - Log.severe(ex); - } - } + private static BukkitPlayer getBukkitPlayer(Player player) { + try { + final WorldEditPlugin wep = getWorldEditPlugin(); + if (wep != null) { + return wep.wrapPlayer(player); + } + } catch (Exception ex) { + Log.severe(ex); + } + return null; + } - public static void setLimit(Player player, int limit) - { - try - { - final LocalSession session = getPlayerSession(player); - if (session != null) - { - session.setBlockChangeLimit(limit); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - } + public static void undo(Player player, int count) { + try { + LocalSession session = getPlayerSession(player); + if (session != null) { + final BukkitPlayer bukkitPlayer = getBukkitPlayer(player); + if (bukkitPlayer != null) { + for (int i = 0; i < count; i++) { + session.undo(session.getBlockBag(bukkitPlayer), bukkitPlayer); + } + } + } + } catch (Exception ex) { + Log.severe(ex); + } + } + + public static void setLimit(Player player, int limit) { + try { + final LocalSession session = getPlayerSession(player); + if (session != null) { + session.setBlockChangeLimit(limit); + } + } catch (Exception ex) { + Log.severe(ex); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/command/CommandBlocker.java b/src/main/java/me/StevenLawson/TotalFreedomMod/command/CommandBlocker.java index 5b9cb34..8280250 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/command/CommandBlocker.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/command/CommandBlocker.java @@ -1,5 +1,8 @@ package me.StevenLawson.TotalFreedomMod.command; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; @@ -12,311 +15,263 @@ import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +public class CommandBlocker { -public class CommandBlocker -{ - private static final Map BLOCKED_COMMANDS; + private static final Map BLOCKED_COMMANDS; - static - { - BLOCKED_COMMANDS = new HashMap(); - } + static { + BLOCKED_COMMANDS = new HashMap(); + } - private CommandBlocker() - { - throw new AssertionError(); - } + private CommandBlocker() { + throw new AssertionError(); + } - public static void load() - { - BLOCKED_COMMANDS.clear(); + public static void load() { + BLOCKED_COMMANDS.clear(); - final CommandMap commandMap = Utilities.getField(Bukkit.getServer().getPluginManager(), "commandMap"); - if (commandMap == null) - { - Log.severe("Error loading commandMap."); - return; - } + final CommandMap commandMap = Utilities.getField(Bukkit.getServer().getPluginManager(), + "commandMap"); + if (commandMap == null) { + Log.severe("Error loading commandMap."); + return; + } - @SuppressWarnings("unchecked") - List blockedCommands = (List) ConfigurationEntry.BLOCKED_COMMANDS.getList(); - for (String rawEntry : blockedCommands) - { - final String[] parts = rawEntry.split(":"); - if (parts.length < 3 || parts.length > 4) - { - Log.warning("Invalid command blocker entry: " + rawEntry); - continue; - } + @SuppressWarnings("unchecked") + List blockedCommands = (List) ConfigurationEntry.BLOCKED_COMMANDS.getList(); + for (String rawEntry : blockedCommands) { + final String[] parts = rawEntry.split(":"); + if (parts.length < 3 || parts.length > 4) { + Log.warning("Invalid command blocker entry: " + rawEntry); + continue; + } - final CommandBlockerRank rank = CommandBlockerRank.fromToken(parts[0]); - final CommandBlockerAction action = CommandBlockerAction.fromToken(parts[1]); - String commandName = parts[2].toLowerCase().substring(1); - final String message = (parts.length > 3 ? parts[3] : null); + final CommandBlockerRank rank = CommandBlockerRank.fromToken(parts[0]); + final CommandBlockerAction action = CommandBlockerAction.fromToken(parts[1]); + String commandName = parts[2].toLowerCase().substring(1); + final String message = (parts.length > 3 ? parts[3] : null); - if (rank == null || action == null || commandName == null || commandName.isEmpty()) - { - Log.warning("Invalid command blocker entry: " + rawEntry); - continue; - } + if (rank == null || action == null || commandName == null || commandName.isEmpty()) { + Log.warning("Invalid command blocker entry: " + rawEntry); + continue; + } - final String[] commandParts = commandName.split(" "); - String subCommand = null; - if (commandParts.length > 1) - { - commandName = commandParts[0]; - subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).trim().toLowerCase(); - } + final String[] commandParts = commandName.split(" "); + String subCommand = null; + if (commandParts.length > 1) { + commandName = commandParts[0]; + subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).trim() + .toLowerCase(); + } - final Command command = commandMap.getCommand(commandName); + final Command command = commandMap.getCommand(commandName); - // Obtain command from alias - if (command == null) - { - Log.info("Blocking unknown command: /" + commandName); - } - else - { - commandName = command.getName().toLowerCase(); - } + // Obtain command from alias + if (command == null) { + Log.info("Blocking unknown command: /" + commandName); + } else { + commandName = command.getName().toLowerCase(); + } - if (BLOCKED_COMMANDS.containsKey(commandName)) - { - Log.warning("Not blocking: /" + commandName + " - Duplicate entry exists!"); - continue; - } + if (BLOCKED_COMMANDS.containsKey(commandName)) { + Log.warning("Not blocking: /" + commandName + " - Duplicate entry exists!"); + continue; + } - final CommandBlockerEntry blockedCommandEntry = new CommandBlockerEntry(rank, action, commandName, subCommand, message); - BLOCKED_COMMANDS.put(blockedCommandEntry.getCommand(), blockedCommandEntry); + final CommandBlockerEntry blockedCommandEntry = new CommandBlockerEntry(rank, action, + commandName, subCommand, message); + BLOCKED_COMMANDS.put(blockedCommandEntry.getCommand(), blockedCommandEntry); - if (command != null) - { - for (String alias : command.getAliases()) - { - BLOCKED_COMMANDS.put(alias.toLowerCase(), blockedCommandEntry); - } - } - } + if (command != null) { + for (String alias : command.getAliases()) { + BLOCKED_COMMANDS.put(alias.toLowerCase(), blockedCommandEntry); + } + } + } - Log.info("Loaded " + BLOCKED_COMMANDS.size() + " blocked commands"); - } + Log.info("Loaded " + BLOCKED_COMMANDS.size() + " blocked commands"); + } - public static boolean isCommandBlocked(String command, CommandSender sender) - { - return isCommandBlocked(command, sender, false); - } + public static boolean isCommandBlocked(String command, CommandSender sender) { + return isCommandBlocked(command, sender, false); + } - public static boolean isCommandBlocked(String command, CommandSender sender, boolean doAction) - { - if (command == null || command.isEmpty()) - { - return false; - } + public static boolean isCommandBlocked(String command, CommandSender sender, boolean doAction) { + if (command == null || command.isEmpty()) { + return false; + } - command = command.toLowerCase().trim(); + command = command.toLowerCase().trim(); - if (command.split(" ")[0].contains(":")) - { - Utilities.playerMsg(sender, "Plugin-specific commands are disabled."); - return true; - } + if (command.split(" ")[0].contains(":")) { + Utilities.playerMsg(sender, "Plugin-specific commands are disabled."); + return true; + } - if (command.startsWith("/")) - { - command = command.substring(1); - } + if (command.startsWith("/")) { + command = command.substring(1); + } - final String[] commandParts = command.split(" "); - String subCommand = null; - if (commandParts.length > 1) - { - subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).toLowerCase(); - } + final String[] commandParts = command.split(" "); + String subCommand = null; + if (commandParts.length > 1) { + subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).toLowerCase(); + } - final CommandBlockerEntry entry = BLOCKED_COMMANDS.get(commandParts[0]); + final CommandBlockerEntry entry = BLOCKED_COMMANDS.get(commandParts[0]); - if (entry == null) - { - return false; - } + if (entry == null) { + return false; + } - if (entry.getSubCommand() != null) - { - if (subCommand == null || !subCommand.startsWith(entry.getSubCommand())) - { - return false; - } - } + if (entry.getSubCommand() != null) { + if (subCommand == null || !subCommand.startsWith(entry.getSubCommand())) { + return false; + } + } - if (entry.getRank().hasPermission(sender)) - { - return false; - } + if (entry.getRank().hasPermission(sender)) { + return false; + } - if (doAction) - { - entry.doActions(sender); - } + if (doAction) { + entry.doActions(sender); + } - return true; - } + return true; + } - public enum CommandBlockerRank - { - ANYONE("a", 0), - OP("o", 1), - SUPER("s", 2), - TELNET("t", 3), - SENIOR("c", 4), - NOBODY("n", 5); - // - private final String token; - private final int level; + public enum CommandBlockerRank { + ANYONE("a", 0), + OP("o", 1), + SUPER("s", 2), + TELNET("t", 3), + SENIOR("c", 4), + NOBODY("n", 5); + // + private final String token; + private final int level; - CommandBlockerRank(String token, int level) - { - this.token = token; - this.level = level; - } + CommandBlockerRank(String token, int level) { + this.token = token; + this.level = level; + } - public String getToken() - { - return this.token; - } + public static CommandBlockerRank fromSender(CommandSender sender) { + if (!(sender instanceof Player)) { + return TELNET; + } - public boolean hasPermission(CommandSender sender) - { - return fromSender(sender).level >= this.level; - } + if (AdminList.isSuperAdmin(sender)) { + if (AdminList.isSeniorAdmin(sender)) { + return SENIOR; + } + return SUPER; + } - public static CommandBlockerRank fromSender(CommandSender sender) - { - if (!(sender instanceof Player)) - { - return TELNET; - } + if (sender.isOp()) { + return OP; + } - if (AdminList.isSuperAdmin(sender)) - { - if (AdminList.isSeniorAdmin(sender)) - { - return SENIOR; - } - return SUPER; - } + return ANYONE; - if (sender.isOp()) - { - return OP; - } + } - return ANYONE; + public static CommandBlockerRank fromToken(String token) { + for (CommandBlockerRank rank : CommandBlockerRank.values()) { + if (rank.getToken().equalsIgnoreCase(token)) { + return rank; + } + } + return ANYONE; + } - } + public String getToken() { + return this.token; + } - public static CommandBlockerRank fromToken(String token) - { - for (CommandBlockerRank rank : CommandBlockerRank.values()) - { - if (rank.getToken().equalsIgnoreCase(token)) - { - return rank; - } - } - return ANYONE; - } - } + public boolean hasPermission(CommandSender sender) { + return fromSender(sender).level >= this.level; + } + } - public enum CommandBlockerAction - { - BLOCK("b"), - BLOCK_AND_EJECT("a"), - BLOCK_UNKNOWN("u"); - private final String token; + public enum CommandBlockerAction { + BLOCK("b"), + BLOCK_AND_EJECT("a"), + BLOCK_UNKNOWN("u"); + private final String token; - CommandBlockerAction(String token) - { - this.token = token; - } + CommandBlockerAction(String token) { + this.token = token; + } - public String getToken() - { - return this.token; - } + public static CommandBlockerAction fromToken(String token) { + for (CommandBlockerAction action : CommandBlockerAction.values()) { + if (action.getToken().equalsIgnoreCase(token)) { + return action; + } + } + return null; + } - public static CommandBlockerAction fromToken(String token) - { - for (CommandBlockerAction action : CommandBlockerAction.values()) - { - if (action.getToken().equalsIgnoreCase(token)) - { - return action; - } - } - return null; - } - } + public String getToken() { + return this.token; + } + } - public static class CommandBlockerEntry - { - private final CommandBlockerRank rank; - private final CommandBlockerAction action; - private final String command; - private final String subCommand; - private final String message; + public static class CommandBlockerEntry { - private CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, String command, String message) - { - this(rank, action, command, null, message); - } + private final CommandBlockerRank rank; + private final CommandBlockerAction action; + private final String command; + private final String subCommand; + private final String message; - private CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, String command, String subCommand, String message) - { - this.rank = rank; - this.action = action; - this.command = command; - this.subCommand = (subCommand == null ? null : subCommand.toLowerCase().trim()); - this.message = (message == null || message.equals("_") ? "That command is blocked." : message); - } + private CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, + String command, String message) { + this(rank, action, command, null, message); + } - public CommandBlockerAction getAction() - { - return this.action; - } + private CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, + String command, String subCommand, String message) { + this.rank = rank; + this.action = action; + this.command = command; + this.subCommand = (subCommand == null ? null : subCommand.toLowerCase().trim()); + this.message = (message == null || message.equals("_") ? "That command is blocked." + : message); + } - public String getCommand() - { - return this.command; - } + public CommandBlockerAction getAction() { + return this.action; + } - public String getSubCommand() - { - return this.subCommand; - } + public String getCommand() { + return this.command; + } - public String getMessage() - { - return this.message; - } + public String getSubCommand() { + return this.subCommand; + } - public CommandBlockerRank getRank() - { - return this.rank; - } + public String getMessage() { + return this.message; + } - private void doActions(CommandSender sender) - { - if (action == CommandBlockerAction.BLOCK_AND_EJECT && sender instanceof Player) - { - Utilities.autoEject((Player) sender, "You used a prohibited command: " + command); - Utilities.bcastMsg(sender.getName() + " was automatically kicked for using harmful commands.", ChatColor.RED); - return; - } + public CommandBlockerRank getRank() { + return this.rank; + } - Utilities.playerMsg(sender, Utilities.colorize(message)); - } - } + private void doActions(CommandSender sender) { + if (action == CommandBlockerAction.BLOCK_AND_EJECT && sender instanceof Player) { + Utilities.autoEject((Player) sender, "You used a prohibited command: " + command); + Utilities.bcastMsg( + sender.getName() + " was automatically kicked for using harmful commands.", + ChatColor.RED); + return; + } + + Utilities.playerMsg(sender, Utilities.colorize(message)); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/AdminLevel.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/AdminLevel.java index 9dd980e..3c97a93 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/AdminLevel.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/AdminLevel.java @@ -1,16 +1,16 @@ package me.StevenLawson.TotalFreedomMod.commands; public enum AdminLevel { - ALL("All Player Commands"), OP("OP Commands"), SUPER("SuperAdmin Commands"), SENIOR("Senior Admin Commands"); - // - private final String friendlyName; + ALL("All Player Commands"), OP("OP Commands"), SUPER("SuperAdmin Commands"), SENIOR( + "Senior Admin Commands"); + // + private final String friendlyName; - AdminLevel(String friendlyName) { - this.friendlyName = friendlyName; - } + AdminLevel(String friendlyName) { + this.friendlyName = friendlyName; + } - public String getFriendlyName() - { - return friendlyName; - } + public String getFriendlyName() { + return friendlyName; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandParameters.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandParameters.java index 3ce6cbf..6e2a7cf 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandParameters.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandParameters.java @@ -2,9 +2,9 @@ package me.StevenLawson.TotalFreedomMod.commands; // This is only here because of Command_tfm -public @interface CommandParameters -{ - String description(); +public @interface CommandParameters { - String usage(); + String description(); + + String usage(); } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandPermissions.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandPermissions.java index d62cd7b..3e8c54f 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandPermissions.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/CommandPermissions.java @@ -4,11 +4,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) -public @interface CommandPermissions -{ - AdminLevel level(); +public @interface CommandPermissions { - SourceType source(); + AdminLevel level(); - boolean blockHostConsole() default false; + SourceType source(); + + boolean blockHostConsole() default false; } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminmode.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminmode.java index 467322e..2c16737 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminmode.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminmode.java @@ -9,31 +9,29 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, blockHostConsole = true) public class Command_adminmode extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equalsIgnoreCase("off")) { - ConfigurationEntry.ADMIN_ONLY_MODE.setBoolean(false); - Utilities.adminAction(sender.getName(), "Deactivating adminmode.", true); - return true; - } - else if (args[0].equalsIgnoreCase("on")) - { - ConfigurationEntry.ADMIN_ONLY_MODE.setBoolean(true); - Utilities.adminAction(sender.getName(), "Activating adminmode.", true); - for (Player player : server.getOnlinePlayers()) - { - if (!AdminList.isSuperAdmin(player)) - { - player.kickPlayer("Server is now in adminmode."); - } - } - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - return false; - } + if (args[0].equalsIgnoreCase("off")) { + ConfigurationEntry.ADMIN_ONLY_MODE.setBoolean(false); + Utilities.adminAction(sender.getName(), "Deactivating adminmode.", true); + return true; + } else if (args[0].equalsIgnoreCase("on")) { + ConfigurationEntry.ADMIN_ONLY_MODE.setBoolean(true); + Utilities.adminAction(sender.getName(), "Activating adminmode.", true); + for (Player player : server.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(player)) { + player.kickPlayer("Server is now in adminmode."); + } + } + return true; + } + + return false; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminworld.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminworld.java index 8a24564..8fd2dd1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminworld.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_adminworld.java @@ -10,213 +10,165 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_adminworld extends FreedomCommand { - private enum CommandMode { - TELEPORT, GUEST, TIME, WEATHER - } - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - CommandMode commandMode = null; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + CommandMode commandMode = null; - if (args.length == 0) { - commandMode = CommandMode.TELEPORT; - } else if (args.length >= 2) { - if ("guest".equalsIgnoreCase(args[0])) - { - commandMode = CommandMode.GUEST; - } - else if ("time".equalsIgnoreCase(args[0])) - { - commandMode = CommandMode.TIME; - } - else if ("weather".equalsIgnoreCase(args[0])) - { - commandMode = CommandMode.WEATHER; - } - } + if (args.length == 0) { + commandMode = CommandMode.TELEPORT; + } else if (args.length >= 2) { + if ("guest".equalsIgnoreCase(args[0])) { + commandMode = CommandMode.GUEST; + } else if ("time".equalsIgnoreCase(args[0])) { + commandMode = CommandMode.TIME; + } else if ("weather".equalsIgnoreCase(args[0])) { + commandMode = CommandMode.WEATHER; + } + } - if (commandMode == null) - { - return false; - } + if (commandMode == null) { + return false; + } - try - { - switch (commandMode) - { - case TELEPORT: - { - if (!(sender instanceof Player) || sender_p == null) - { - return true; - } + try { + switch (commandMode) { + case TELEPORT: { + if (!(sender instanceof Player) || sender_p == null) { + return true; + } - World adminWorld = null; - try - { - adminWorld = AdminWorld.getInstance().getWorld(); - } - catch (Exception ex) - { - } + World adminWorld = null; + try { + adminWorld = AdminWorld.getInstance().getWorld(); + } catch (Exception ex) { + } - if (adminWorld == null || sender_p.getWorld() == adminWorld) - { - playerMsg(sender, "Going to the main world."); - sender_p.teleport(server.getWorlds().get(0).getSpawnLocation()); - } - else - { - if (AdminWorld.getInstance().canAccessWorld(sender_p)) - { - playerMsg(sender, "Going to the AdminWorld."); - AdminWorld.getInstance().sendToWorld(sender_p); - } - else - { - playerMsg(sender, "You don't have permission to access the AdminWorld."); - } - } + if (adminWorld == null || sender_p.getWorld() == adminWorld) { + playerMsg(sender, "Going to the main world."); + sender_p.teleport(server.getWorlds().get(0).getSpawnLocation()); + } else { + if (AdminWorld.getInstance().canAccessWorld(sender_p)) { + playerMsg(sender, "Going to the AdminWorld."); + AdminWorld.getInstance().sendToWorld(sender_p); + } else { + playerMsg(sender, + "You don't have permission to access the AdminWorld."); + } + } - break; - } - case GUEST: - { - if (args.length == 2) - { - if ("list".equalsIgnoreCase(args[1])) - { - playerMsg(sender, "AdminWorld guest list: " + AdminWorld.getInstance().guestListToString()); - } - else if ("purge".equalsIgnoreCase(args[1])) - { - assertCommandPerms(sender, sender_p); - AdminWorld.getInstance().purgeGuestList(); - Utilities.adminAction(sender.getName(), "AdminWorld guest list purged.", false); - } - else - { - return false; - } - } - else if (args.length == 3) - { - assertCommandPerms(sender, sender_p); + break; + } + case GUEST: { + if (args.length == 2) { + if ("list".equalsIgnoreCase(args[1])) { + playerMsg(sender, "AdminWorld guest list: " + AdminWorld.getInstance() + .guestListToString()); + } else if ("purge".equalsIgnoreCase(args[1])) { + assertCommandPerms(sender, sender_p); + AdminWorld.getInstance().purgeGuestList(); + Utilities.adminAction(sender.getName(), "AdminWorld guest list purged.", + false); + } else { + return false; + } + } else if (args.length == 3) { + assertCommandPerms(sender, sender_p); - if ("add".equalsIgnoreCase(args[1])) - { - final Player player = getPlayer(args[2]); + if ("add".equalsIgnoreCase(args[1])) { + final Player player = getPlayer(args[2]); - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - if (AdminWorld.getInstance().addGuest(player, sender_p)) - { - Utilities.adminAction(sender.getName(), "AdminWorld guest added: " + player.getName(), false); - } - else - { - playerMsg(sender, "Could not add player to guest list."); - } - } - else if ("remove".equals(args[1])) - { - final Player player = AdminWorld.getInstance().removeGuest(args[2]); - if (player != null) - { - Utilities.adminAction(sender.getName(), "AdminWorld guest removed: " + player.getName(), false); - } - else - { - playerMsg(sender, "Can't find guest entry for: " + args[2]); - } - } - else - { - return false; - } - } + if (AdminWorld.getInstance().addGuest(player, sender_p)) { + Utilities.adminAction(sender.getName(), + "AdminWorld guest added: " + player.getName(), false); + } else { + playerMsg(sender, "Could not add player to guest list."); + } + } else if ("remove".equals(args[1])) { + final Player player = AdminWorld.getInstance().removeGuest(args[2]); + if (player != null) { + Utilities.adminAction(sender.getName(), + "AdminWorld guest removed: " + player.getName(), false); + } else { + playerMsg(sender, "Can't find guest entry for: " + args[2]); + } + } else { + return false; + } + } - break; - } - case TIME: - { - assertCommandPerms(sender, sender_p); + break; + } + case TIME: { + assertCommandPerms(sender, sender_p); - if (args.length == 2) - { - AdminWorld.TimeOfDay timeOfDay = AdminWorld.TimeOfDay.getByAlias(args[1]); - if (timeOfDay != null) - { - AdminWorld.getInstance().setTimeOfDay(timeOfDay); - playerMsg(sender, "AdminWorld time set to: " + timeOfDay.name()); - } - else - { - playerMsg(sender, "Invalid time of day. Can be: sunrise, noon, sunset, midnight"); - } - } - else - { - return false; - } + if (args.length == 2) { + AdminWorld.TimeOfDay timeOfDay = AdminWorld.TimeOfDay.getByAlias(args[1]); + if (timeOfDay != null) { + AdminWorld.getInstance().setTimeOfDay(timeOfDay); + playerMsg(sender, "AdminWorld time set to: " + timeOfDay.name()); + } else { + playerMsg(sender, + "Invalid time of day. Can be: sunrise, noon, sunset, midnight"); + } + } else { + return false; + } - break; - } - case WEATHER: - { - assertCommandPerms(sender, sender_p); + break; + } + case WEATHER: { + assertCommandPerms(sender, sender_p); - if (args.length == 2) - { - AdminWorld.WeatherMode weatherMode = AdminWorld.WeatherMode.getByAlias(args[1]); - if (weatherMode != null) - { - AdminWorld.getInstance().setWeatherMode(weatherMode); - playerMsg(sender, "AdminWorld weather set to: " + weatherMode.name()); - } - else - { - playerMsg(sender, "Invalid weather mode. Can be: off, rain, storm"); - } - } - else - { - return false; - } + if (args.length == 2) { + AdminWorld.WeatherMode weatherMode = AdminWorld.WeatherMode.getByAlias( + args[1]); + if (weatherMode != null) { + AdminWorld.getInstance().setWeatherMode(weatherMode); + playerMsg(sender, "AdminWorld weather set to: " + weatherMode.name()); + } else { + playerMsg(sender, "Invalid weather mode. Can be: off, rain, storm"); + } + } else { + return false; + } - break; - } - default: - { - return false; - } - } - } - catch (PermissionDeniedException ex) - { - sender.sendMessage(ex.getMessage()); - } + break; + } + default: { + return false; + } + } + } catch (PermissionDeniedException ex) { + sender.sendMessage(ex.getMessage()); + } - return true; - } + return true; + } - private void assertCommandPerms(CommandSender sender, org.bukkit.entity.Player sender_p) throws PermissionDeniedException { - if (!(sender instanceof Player) || sender_p == null || !AdminList.isSuperAdmin(sender)) { - throw new PermissionDeniedException(FreedomCommand.MSG_NO_PERMS); - } - } + private void assertCommandPerms(CommandSender sender, org.bukkit.entity.Player sender_p) + throws PermissionDeniedException { + if (!(sender instanceof Player) || sender_p == null || !AdminList.isSuperAdmin(sender)) { + throw new PermissionDeniedException(FreedomCommand.MSG_NO_PERMS); + } + } - private class PermissionDeniedException extends Exception - { - private static final long serialVersionUID = 1L; + private enum CommandMode { + TELEPORT, GUEST, TIME, WEATHER + } - private PermissionDeniedException(String string) - { - super(string); - } - } + private class PermissionDeniedException extends Exception { + + private static final long serialVersionUID = 1L; + + private PermissionDeniedException(String string) { + super(string); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_blockcmd.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_blockcmd.java index 3e796cc..983449b 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_blockcmd.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_blockcmd.java @@ -9,49 +9,50 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_blockcmd extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equalsIgnoreCase("purge")) { - Utilities.adminAction(sender.getName(), "Unblocking commands for all players", true); - int counter = 0; - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerdata = PlayerData.getPlayerData(player); - if (playerdata.allCommandsBlocked()) - { - counter += 1; - playerdata.setCommandsBlocked(false); - } - } - playerMsg(sender, "Unblocked commands for " + counter + " players."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - final Player player = getPlayer(args[0]); + if (args[0].equalsIgnoreCase("purge")) { + Utilities.adminAction(sender.getName(), "Unblocking commands for all players", true); + int counter = 0; + for (Player player : server.getOnlinePlayers()) { + PlayerData playerdata = PlayerData.getPlayerData(player); + if (playerdata.allCommandsBlocked()) { + counter += 1; + playerdata.setCommandsBlocked(false); + } + } + playerMsg(sender, "Unblocked commands for " + counter + " players."); + return true; + } - if (player == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - if (AdminList.isSuperAdmin(player)) - { - playerMsg(sender, player.getName() + " is a Superadmin, and cannot have their commands blocked."); - return true; - } + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - PlayerData playerdata = PlayerData.getPlayerData(player); + if (AdminList.isSuperAdmin(player)) { + playerMsg(sender, + player.getName() + " is a Superadmin, and cannot have their commands blocked."); + return true; + } - playerdata.setCommandsBlocked(!playerdata.allCommandsBlocked()); + PlayerData playerdata = PlayerData.getPlayerData(player); - Utilities.adminAction(sender.getName(), (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locking all commands for " + player.getName(), true); - playerMsg(sender, (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locked all commands."); + playerdata.setCommandsBlocked(!playerdata.allCommandsBlocked()); - return true; - } + Utilities.adminAction(sender.getName(), + (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locking all commands for " + + player.getName(), true); + playerMsg(sender, (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locked all commands."); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cage.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cage.java index fac6ed2..f9283ef 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cage.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cage.java @@ -11,106 +11,91 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_cage extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - if ("off".equals(args[0]) && sender instanceof Player) { - Utilities.adminAction(sender.getName(), "Uncaging " + sender.getName(), true); - PlayerData playerdata = PlayerData.getPlayerData(sender_p); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - playerdata.setCaged(false); - playerdata.regenerateHistory(); - playerdata.clearHistory(); + if ("off".equals(args[0]) && sender instanceof Player) { + Utilities.adminAction(sender.getName(), "Uncaging " + sender.getName(), true); + PlayerData playerdata = PlayerData.getPlayerData(sender_p); - return true; - } - else if ("purge".equals(args[0])) - { - Utilities.adminAction(sender.getName(), "Uncaging all players", true); + playerdata.setCaged(false); + playerdata.regenerateHistory(); + playerdata.clearHistory(); - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.setCaged(false); - playerdata.regenerateHistory(); - playerdata.clearHistory(); - } + return true; + } else if ("purge".equals(args[0])) { + Utilities.adminAction(sender.getName(), "Uncaging all players", true); - return true; - } + for (Player player : server.getOnlinePlayers()) { + PlayerData playerdata = PlayerData.getPlayerData(player); + playerdata.setCaged(false); + playerdata.regenerateHistory(); + playerdata.clearHistory(); + } - final Player player = getPlayer(args[0]); + return true; + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - PlayerData playerdata = PlayerData.getPlayerData(player); + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - Material outerMaterial = Material.GLASS; - Material innerMaterial = Material.AIR; + PlayerData playerdata = PlayerData.getPlayerData(player); - if (args.length >= 2) - { - if ("off".equals(args[1])) - { - Utilities.adminAction(sender.getName(), "Uncaging " + player.getName(), true); + Material outerMaterial = Material.GLASS; + Material innerMaterial = Material.AIR; - playerdata.setCaged(false); - playerdata.regenerateHistory(); - playerdata.clearHistory(); + if (args.length >= 2) { + if ("off".equals(args[1])) { + Utilities.adminAction(sender.getName(), "Uncaging " + player.getName(), true); - return true; - } - else - { - if ("darth".equalsIgnoreCase(args[1])) - { - outerMaterial = Material.SKULL; - } - else if (Material.matchMaterial(args[1]) != null) - { - outerMaterial = Material.matchMaterial(args[1]); - } - } - } + playerdata.setCaged(false); + playerdata.regenerateHistory(); + playerdata.clearHistory(); - if (args.length >= 3) - { - if (args[2].equalsIgnoreCase("water")) - { - innerMaterial = Material.STATIONARY_WATER; - } - else if (args[2].equalsIgnoreCase("lava")) - { - innerMaterial = Material.STATIONARY_LAVA; - } - } + return true; + } else { + if ("darth".equalsIgnoreCase(args[1])) { + outerMaterial = Material.SKULL; + } else if (Material.matchMaterial(args[1]) != null) { + outerMaterial = Material.matchMaterial(args[1]); + } + } + } - Location targetPos = player.getLocation().clone().add(0, 1, 0); - playerdata.setCaged(true, targetPos, outerMaterial, innerMaterial); - playerdata.regenerateHistory(); - playerdata.clearHistory(); - Utilities.buildHistory(targetPos, 2, playerdata); - Utilities.generateHollowCube(targetPos, 2, outerMaterial); - Utilities.generateCube(targetPos, 1, innerMaterial); + if (args.length >= 3) { + if (args[2].equalsIgnoreCase("water")) { + innerMaterial = Material.STATIONARY_WATER; + } else if (args[2].equalsIgnoreCase("lava")) { + innerMaterial = Material.STATIONARY_LAVA; + } + } - player.setGameMode(GameMode.SURVIVAL); + Location targetPos = player.getLocation().clone().add(0, 1, 0); + playerdata.setCaged(true, targetPos, outerMaterial, innerMaterial); + playerdata.regenerateHistory(); + playerdata.clearHistory(); + Utilities.buildHistory(targetPos, 2, playerdata); + Utilities.generateHollowCube(targetPos, 2, outerMaterial); + Utilities.generateCube(targetPos, 1, innerMaterial); - if (outerMaterial != Material.SKULL) - { - Utilities.adminAction(sender.getName(), "Caging " + player.getName(), true); - } - else - { - Utilities.adminAction(sender.getName(), "Caging " + player.getName() + " in PURE_DARTH", true); - } + player.setGameMode(GameMode.SURVIVAL); - return true; - } + if (outerMaterial != Material.SKULL) { + Utilities.adminAction(sender.getName(), "Caging " + player.getName(), true); + } else { + Utilities.adminAction(sender.getName(), "Caging " + player.getName() + " in PURE_DARTH", + true); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cake.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cake.java index 0529093..db65073 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cake.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cake.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Random; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Achievement; import org.bukkit.ChatColor; @@ -10,40 +11,41 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.Random; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_cake extends FreedomCommand { - 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."; - private final Random random = new Random(); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - final StringBuilder output = new StringBuilder(); + 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."; + private final Random random = new Random(); - final String[] words = CAKE_LYRICS.split(" "); - for (final String word : words) { - output.append(ChatColor.COLOR_CHAR).append(Integer.toHexString(1 + random.nextInt(14))).append(word).append(" "); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + final StringBuilder output = new StringBuilder(); - final ItemStack heldItem = new ItemStack(Material.CAKE); - final ItemMeta heldItemMeta = heldItem.getItemMeta(); - heldItemMeta.setDisplayName((new StringBuilder()).append(ChatColor.WHITE).append("The ").append(ChatColor.DARK_GRAY).append("Lie").toString()); - heldItem.setItemMeta(heldItemMeta); + final String[] words = CAKE_LYRICS.split(" "); + for (final String word : words) { + output.append(ChatColor.COLOR_CHAR).append(Integer.toHexString(1 + random.nextInt(14))) + .append(word).append(" "); + } - for (final Player player : server.getOnlinePlayers()) - { - final int firstEmpty = player.getInventory().firstEmpty(); - if (firstEmpty >= 0) - { - player.getInventory().setItem(firstEmpty, heldItem); - } + final ItemStack heldItem = new ItemStack(Material.CAKE); + final ItemMeta heldItemMeta = heldItem.getItemMeta(); + heldItemMeta.setDisplayName( + (new StringBuilder()).append(ChatColor.WHITE).append("The ").append(ChatColor.DARK_GRAY) + .append("Lie").toString()); + heldItem.setItemMeta(heldItemMeta); - player.awardAchievement(Achievement.BAKE_CAKE); - } + for (final Player player : server.getOnlinePlayers()) { + final int firstEmpty = player.getInventory().firstEmpty(); + if (firstEmpty >= 0) { + player.getInventory().setItem(firstEmpty, heldItem); + } - Utilities.bcastMsg(output.toString()); + player.awardAchievement(Achievement.BAKE_CAKE); + } - return true; - } + Utilities.bcastMsg(output.toString()); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cartsit.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cartsit.java index e3cccd6..1a52348 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cartsit.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cartsit.java @@ -8,69 +8,58 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_cartsit extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Player targetPlayer = sender_p; - if (args.length == 1) { + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Player targetPlayer = sender_p; - targetPlayer = getPlayer(args[0]); + if (args.length == 1) { - if (targetPlayer == null) { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - } + targetPlayer = getPlayer(args[0]); - if (senderIsConsole) - { - if (targetPlayer == null) - { - sender.sendMessage("When used from the console, you must define a target player: /cartsit "); - return true; - } - } - else if (targetPlayer != sender_p && !AdminList.isSuperAdmin(sender)) - { - sender.sendMessage("Only superadmins can select another player as a /cartsit target."); - return true; - } + if (targetPlayer == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + } - if (targetPlayer.isInsideVehicle()) - { - targetPlayer.getVehicle().eject(); - } - else - { - Minecart nearest_cart = null; - for (Minecart cart : targetPlayer.getWorld().getEntitiesByClass(Minecart.class)) - { - if (cart.isEmpty()) - { - if (nearest_cart == null) - { - nearest_cart = cart; - } - else - { - if (cart.getLocation().distanceSquared(targetPlayer.getLocation()) < nearest_cart.getLocation().distanceSquared(targetPlayer.getLocation())) - { - nearest_cart = cart; - } - } - } - } + if (senderIsConsole) { + if (targetPlayer == null) { + sender.sendMessage( + "When used from the console, you must define a target player: /cartsit "); + return true; + } + } else if (targetPlayer != sender_p && !AdminList.isSuperAdmin(sender)) { + sender.sendMessage("Only superadmins can select another player as a /cartsit target."); + return true; + } - if (nearest_cart != null) - { - nearest_cart.setPassenger(targetPlayer); - } - else - { - sender.sendMessage("There are no empty minecarts in the target world."); - } - } + if (targetPlayer.isInsideVehicle()) { + targetPlayer.getVehicle().eject(); + } else { + Minecart nearest_cart = null; + for (Minecart cart : targetPlayer.getWorld().getEntitiesByClass(Minecart.class)) { + if (cart.isEmpty()) { + if (nearest_cart == null) { + nearest_cart = cart; + } else { + if (cart.getLocation().distanceSquared(targetPlayer.getLocation()) + < nearest_cart.getLocation() + .distanceSquared(targetPlayer.getLocation())) { + nearest_cart = cart; + } + } + } + } - return true; - } + if (nearest_cart != null) { + nearest_cart.setPassenger(targetPlayer); + } else { + sender.sendMessage("There are no empty minecarts in the target world."); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cbtool.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cbtool.java index 2f32d2a..8816446 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cbtool.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cbtool.java @@ -1,5 +1,8 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.command.CommandBlocker; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; @@ -13,197 +16,159 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_cbtool extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - if ("targetblock".equalsIgnoreCase(args[0]) && sender instanceof Player) { - Block targetBlock = DeprecationUtil.getTargetBlock(sender_p, null, 100); - playerMsg(sender, "Your target block: " + targetBlock.getLocation().toString()); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - try - { - final StringBuffer generatedCommand = new StringBuffer(); + if ("targetblock".equalsIgnoreCase(args[0]) && sender instanceof Player) { + Block targetBlock = DeprecationUtil.getTargetBlock(sender_p, null, 100); + playerMsg(sender, "Your target block: " + targetBlock.getLocation().toString()); + return true; + } - final Matcher matcher = Pattern.compile("\\[(.+?)\\]").matcher(StringUtils.join(args, " ").trim()); - while (matcher.find()) - { - matcher.appendReplacement(generatedCommand, processSubCommand(matcher.group(1))); - } - matcher.appendTail(generatedCommand); + try { + final StringBuffer generatedCommand = new StringBuffer(); - if (CommandBlocker.isCommandBlocked(generatedCommand.toString(), sender, false)) - { - return true; - } + final Matcher matcher = Pattern.compile("\\[(.+?)\\]") + .matcher(StringUtils.join(args, " ").trim()); + while (matcher.find()) { + matcher.appendReplacement(generatedCommand, processSubCommand(matcher.group(1))); + } + matcher.appendTail(generatedCommand); - server.dispatchCommand(sender, generatedCommand.toString()); - } - catch (SubCommandFailureException ex) - { - } - catch (Exception ex) - { - Log.severe(ex); - } + if (CommandBlocker.isCommandBlocked(generatedCommand.toString(), sender, false)) { + return true; + } - return true; - } + server.dispatchCommand(sender, generatedCommand.toString()); + } catch (SubCommandFailureException ex) { + } catch (Exception ex) { + Log.severe(ex); + } - private String processSubCommand(final String subcommand) throws SubCommandFailureException - { - final String[] args = StringUtils.split(subcommand, " "); + return true; + } - if (args.length == 1) - { - throw new SubCommandFailureException("Invalid subcommand name."); - } + private String processSubCommand(final String subcommand) throws SubCommandFailureException { + final String[] args = StringUtils.split(subcommand, " "); - return SubCommand.getByName(args[0]).getExecutable().execute(ArrayUtils.remove(args, 0)); - } + if (args.length == 1) { + throw new SubCommandFailureException("Invalid subcommand name."); + } - private enum SubCommand - { - PLAYER_DETECT("playerdetect", new SubCommandExecutable() - { - @Override - public String execute(String[] args) throws SubCommandFailureException - { - if (args.length != 5) - { - throw new SubCommandFailureException("Invalid # of arguments."); - } + return SubCommand.getByName(args[0]).getExecutable().execute(ArrayUtils.remove(args, 0)); + } - double x, y, z; - try - { - x = Double.parseDouble(args[0].trim()); - y = Double.parseDouble(args[1].trim()); - z = Double.parseDouble(args[2].trim()); - } - catch (NumberFormatException ex) - { - throw new SubCommandFailureException("Invalid coordinates."); - } + private enum SubCommand { + PLAYER_DETECT("playerdetect", new SubCommandExecutable() { + @Override + public String execute(String[] args) throws SubCommandFailureException { + if (args.length != 5) { + throw new SubCommandFailureException("Invalid # of arguments."); + } - World world = null; - final String needleWorldName = args[3].trim(); - final List worlds = Bukkit.getWorlds(); - for (final World testWorld : worlds) - { - if (testWorld.getName().trim().equalsIgnoreCase(needleWorldName)) - { - world = testWorld; - break; - } - } + double x, y, z; + try { + x = Double.parseDouble(args[0].trim()); + y = Double.parseDouble(args[1].trim()); + z = Double.parseDouble(args[2].trim()); + } catch (NumberFormatException ex) { + throw new SubCommandFailureException("Invalid coordinates."); + } - if (world == null) - { - throw new SubCommandFailureException("Invalid world name."); - } + World world = null; + final String needleWorldName = args[3].trim(); + final List worlds = Bukkit.getWorlds(); + for (final World testWorld : worlds) { + if (testWorld.getName().trim().equalsIgnoreCase(needleWorldName)) { + world = testWorld; + break; + } + } - final Location testLocation = new Location(world, x, y, z); + if (world == null) { + throw new SubCommandFailureException("Invalid world name."); + } - double radius; - try - { - radius = Double.parseDouble(args[4].trim()); - } - catch (NumberFormatException ex) - { - throw new SubCommandFailureException("Invalid radius."); - } + final Location testLocation = new Location(world, x, y, z); - final double radiusSq = radius * radius; + double radius; + try { + radius = Double.parseDouble(args[4].trim()); + } catch (NumberFormatException ex) { + throw new SubCommandFailureException("Invalid radius."); + } - final List worldPlayers = testLocation.getWorld().getPlayers(); - for (final Player testPlayer : worldPlayers) - { - if (testPlayer.getLocation().distanceSquared(testLocation) < radiusSq) - { - return testPlayer.getName(); - } - } + final double radiusSq = radius * radius; - throw new SubCommandFailureException("No player found in range."); - } - }), - PLAYER_DETECT_BOOLEAN("playerdetectboolean", new SubCommandExecutable() - { - @Override - public String execute(String[] args) throws SubCommandFailureException - { - try - { - PLAYER_DETECT.getExecutable().execute(args); - } - catch (SubCommandFailureException ex) - { - return "0"; - } + final List worldPlayers = testLocation.getWorld().getPlayers(); + for (final Player testPlayer : worldPlayers) { + if (testPlayer.getLocation().distanceSquared(testLocation) < radiusSq) { + return testPlayer.getName(); + } + } - return "1"; - } - }); - // - private final String name; - private final SubCommandExecutable executable; + throw new SubCommandFailureException("No player found in range."); + } + }), + PLAYER_DETECT_BOOLEAN("playerdetectboolean", new SubCommandExecutable() { + @Override + public String execute(String[] args) throws SubCommandFailureException { + try { + PLAYER_DETECT.getExecutable().execute(args); + } catch (SubCommandFailureException ex) { + return "0"; + } - SubCommand(String subCommandName, SubCommandExecutable subCommandImpl) - { - this.name = subCommandName; - this.executable = subCommandImpl; - } + return "1"; + } + }); + // + private final String name; + private final SubCommandExecutable executable; - public SubCommandExecutable getExecutable() - { - return executable; - } + SubCommand(String subCommandName, SubCommandExecutable subCommandImpl) { + this.name = subCommandName; + this.executable = subCommandImpl; + } - public String getName() - { - return name; - } + public static SubCommand getByName(String needle) throws SubCommandFailureException { + needle = needle.trim(); + for (SubCommand subCommand : values()) { + if (subCommand.getName().equalsIgnoreCase(needle)) { + return subCommand; + } + } + throw new SubCommandFailureException("Invalid subcommand name."); + } - public static SubCommand getByName(String needle) throws SubCommandFailureException - { - needle = needle.trim(); - for (SubCommand subCommand : values()) - { - if (subCommand.getName().equalsIgnoreCase(needle)) - { - return subCommand; - } - } - throw new SubCommandFailureException("Invalid subcommand name."); - } - } + public SubCommandExecutable getExecutable() { + return executable; + } - private interface SubCommandExecutable - { - String execute(String[] args) throws SubCommandFailureException; - } + public String getName() { + return name; + } + } - private static class SubCommandFailureException extends Exception - { - public SubCommandFailureException() - { - } + private interface SubCommandExecutable { - public SubCommandFailureException(String message) - { - super(message); - } - } + String execute(String[] args) throws SubCommandFailureException; + } + + private static class SubCommandFailureException extends Exception { + + public SubCommandFailureException() { + } + + public SubCommandFailureException(String message) { + super(message); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdlist.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdlist.java index 6d202d1..e0e5ce6 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdlist.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdlist.java @@ -1,46 +1,43 @@ package me.StevenLawson.TotalFreedomMod.commands; -import org.apache.commons.lang3.StringUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginDescriptionFile; - import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_cmdlist extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - List commands = new ArrayList(); - for (Plugin targetPlugin : server.getPluginManager().getPlugins()) { - try { - PluginDescriptionFile desc = targetPlugin.getDescription(); - Map> map = desc.getCommands(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + List commands = new ArrayList(); - if (map != null) - { - for (Entry> entry : map.entrySet()) - { - String command_name = entry.getKey(); - commands.add(command_name); - } - } - } - catch (Throwable ex) - { - } - } + for (Plugin targetPlugin : server.getPluginManager().getPlugins()) { + try { + PluginDescriptionFile desc = targetPlugin.getDescription(); + Map> map = desc.getCommands(); - Collections.sort(commands); + if (map != null) { + for (Entry> entry : map.entrySet()) { + String command_name = entry.getKey(); + commands.add(command_name); + } + } + } catch (Throwable ex) { + } + } - sender.sendMessage(StringUtils.join(commands, ",")); + Collections.sort(commands); - return true; - } + sender.sendMessage(StringUtils.join(commands, ",")); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdspy.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdspy.java index 6718854..bc3c8f6 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdspy.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_cmdspy.java @@ -6,13 +6,15 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_cmdspy extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - PlayerData playerdata = PlayerData.getPlayerData(sender_p); - playerdata.setCommandSpy(!playerdata.cmdspyEnabled()); - playerMsg(sender, "CommandSpy " + (playerdata.cmdspyEnabled() ? "enabled." : "disabled.")); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { - return true; - } + PlayerData playerdata = PlayerData.getPlayerData(sender_p); + playerdata.setCommandSpy(!playerdata.cmdspyEnabled()); + playerMsg(sender, "CommandSpy " + (playerdata.cmdspyEnabled() ? "enabled." : "disabled.")); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_colorme.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_colorme.java index 0022b9b..c8d1ae7 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_colorme.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_colorme.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Iterator; +import java.util.Map; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -7,47 +9,47 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.Iterator; -import java.util.Map; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_colorme extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if ("list".equalsIgnoreCase(args[0])) { - playerMsg(sender, "Colors: " + StringUtils.join(Utilities.CHAT_COLOR_NAMES.keySet(), ", ")); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - final String needle = args[0].trim().toLowerCase(); - ChatColor color = null; - final Iterator> it = Utilities.CHAT_COLOR_NAMES.entrySet().iterator(); - while (it.hasNext()) - { - final Map.Entry entry = it.next(); - if (entry.getKey().contains(needle)) - { - color = entry.getValue(); - break; - } - } + if ("list".equalsIgnoreCase(args[0])) { + playerMsg(sender, + "Colors: " + StringUtils.join(Utilities.CHAT_COLOR_NAMES.keySet(), ", ")); + return true; + } - if (color == null) - { - playerMsg(sender, "Invalid color: " + needle + " - Use \"/colorme list\" to list colors."); - return true; - } + final String needle = args[0].trim().toLowerCase(); + ChatColor color = null; + final Iterator> it = Utilities.CHAT_COLOR_NAMES.entrySet() + .iterator(); + while (it.hasNext()) { + final Map.Entry entry = it.next(); + if (entry.getKey().contains(needle)) { + color = entry.getValue(); + break; + } + } - final String newNick = color + ChatColor.stripColor(sender_p.getDisplayName()).trim() + ChatColor.WHITE; + if (color == null) { + playerMsg(sender, + "Invalid color: " + needle + " - Use \"/colorme list\" to list colors."); + return true; + } - EssentialsBridge.setNickname(sender.getName(), newNick); + final String newNick = + color + ChatColor.stripColor(sender_p.getDisplayName()).trim() + ChatColor.WHITE; - playerMsg(sender, "Your nickname is now: " + newNick); + EssentialsBridge.setNickname(sender.getName(), newNick); - return true; - } + playerMsg(sender, "Your nickname is now: " + newNick); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_creative.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_creative.java index 9770c9c..86cb140 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_creative.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_creative.java @@ -9,59 +9,55 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_creative extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (senderIsConsole) { - if (args.length == 0) { - sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); - return true; - } - } - Player player; - if (args.length == 0) - { - player = sender_p; - } - else - { - if (args[0].equalsIgnoreCase("-a")) - { - if (!AdminList.isSuperAdmin(sender)) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (senderIsConsole) { + if (args.length == 0) { + sender.sendMessage( + "When used from the console, you must define a target user to change gamemode on."); + return true; + } + } - for (Player targetPlayer : server.getOnlinePlayers()) - { - targetPlayer.setGameMode(GameMode.CREATIVE); - } + Player player; + if (args.length == 0) { + player = sender_p; + } else { + if (args[0].equalsIgnoreCase("-a")) { + if (!AdminList.isSuperAdmin(sender)) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } - Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to creative", false); - return true; - } + for (Player targetPlayer : server.getOnlinePlayers()) { + targetPlayer.setGameMode(GameMode.CREATIVE); + } - if (!(senderIsConsole || AdminList.isSuperAdmin(sender))) - { - playerMsg(sender, "Only superadmins can change other user's gamemode."); - return true; - } + Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to creative", + false); + return true; + } - player = getPlayer(args[0]); + if (!(senderIsConsole || AdminList.isSuperAdmin(sender))) { + playerMsg(sender, "Only superadmins can change other user's gamemode."); + return true; + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + player = getPlayer(args[0]); - } + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - playerMsg(sender, "Setting " + player.getName() + " to game mode 'Creative'."); - playerMsg(player, sender.getName() + " set your game mode to 'Creative'."); - player.setGameMode(GameMode.CREATIVE); + } - return true; - } + playerMsg(sender, "Setting " + player.getName() + " to game mode 'Creative'."); + playerMsg(player, sender.getName() + " set your game mode to 'Creative'."); + player.setGameMode(GameMode.CREATIVE); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_csay.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_csay.java index 078487d..9a9b3ea 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_csay.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_csay.java @@ -7,11 +7,14 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_CONSOLE) public class Command_csay extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 0) { - Utilities.bcastMsg(String.format("§7[CONSOLE] §f<§c%s§f> %s", sender.getName(), StringUtils.join(args, " "))); - } - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 0) { + Utilities.bcastMsg(String.format("§7[CONSOLE] §f<§c%s§f> %s", sender.getName(), + StringUtils.join(args, " "))); + } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deafen.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deafen.java index 641769a..279d377 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deafen.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deafen.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Random; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.command.Command; @@ -7,39 +8,39 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import java.util.Random; - @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.BOTH, blockHostConsole = true) public class Command_deafen extends FreedomCommand { - private static final Random random = new Random(); - public static final double STEPS = 10.0; - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - for (final Player player : server.getOnlinePlayers()) { - for (double percent = 0.0; percent <= 1.0; percent += (1.0 / STEPS)) { - final float pitch = (float) (percent * 2.0); + public static final double STEPS = 10.0; + private static final Random random = new Random(); - new BukkitRunnable() { - @Override - public void run() - { - player.playSound(randomOffset(player.getLocation(), 5.0), Sound.values()[random.nextInt(Sound.values().length)], 100.0f, pitch); - } - }.runTaskLater(plugin, Math.round(20.0 * percent * 2.0)); - } - } + private static Location randomOffset(Location a, double magnitude) { + return a.clone() + .add(randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude, + randomDoubleRange(-1.0, 1.0) * magnitude); + } - return true; - } + private static Double randomDoubleRange(double min, double max) { + return min + (random.nextDouble() * ((max - min) + 1.0)); + } - private static Location randomOffset(Location a, double magnitude) - { - return a.clone().add(randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + for (final Player player : server.getOnlinePlayers()) { + for (double percent = 0.0; percent <= 1.0; percent += (1.0 / STEPS)) { + final float pitch = (float) (percent * 2.0); - private static Double randomDoubleRange(double min, double max) - { - return min + (random.nextDouble() * ((max - min) + 1.0)); - } + new BukkitRunnable() { + @Override + public void run() { + player.playSound(randomOffset(player.getLocation(), 5.0), + Sound.values()[random.nextInt(Sound.values().length)], 100.0f, pitch); + } + }.runTaskLater(plugin, Math.round(20.0 * percent * 2.0)); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_debug.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_debug.java index 511fc8e..2d60de6 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_debug.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_debug.java @@ -1,106 +1,82 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.lang.reflect.Field; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.lang.reflect.Field; - @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE) public class Command_debug extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 3) { - return false; - } - try { - String className = args[0]; - String fieldName = args[1]; - String newValue = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " "); + public static void setStaticValue(final String className, final String fieldName, + final String newValueString) throws Exception { + Class forName = Class.forName(className); + if (forName != null) { + final Field field = forName.getDeclaredField(fieldName); + if (field != null) { + Object newValue; - if (className.equalsIgnoreCase("_")) - { - className = "me.StevenLawson.TotalFreedomMod.TotalFreedomMod"; - } + Class type = field.getType(); + if (type.isPrimitive()) { + if (type.getName().equals("int")) { + newValue = Integer.parseInt(newValueString); + } else if (type.getName().equals("double")) { + newValue = Double.parseDouble(newValueString); + } else if (type.getName().equals("boolean")) { + newValue = Boolean.parseBoolean(newValueString); + } else { + throw new Exception("Unknown primitive field type."); + } + } else { + if (type.isAssignableFrom(Integer.class)) { + newValue = new Integer(newValueString); + } else if (type.isAssignableFrom(Double.class)) { + newValue = new Double(newValueString); + } else if (type.isAssignableFrom(Boolean.class)) { + newValue = Boolean.valueOf(newValueString); + } else if (type.isAssignableFrom(String.class)) { + newValue = newValueString; + } else { + throw new Exception("Unknown complex field type."); + } + } - setStaticValue(className, fieldName, newValue); + field.setAccessible(true); - sender.sendMessage("Debug: OK"); - } - catch (Exception ex) - { - sender.sendMessage(ex.getMessage()); - } + final Object oldValue = field.get(Class.forName(className)); + if (oldValue != null) { + field.set(oldValue, newValue); + } - return true; - } + field.setAccessible(false); + } + } + } - public static void setStaticValue(final String className, final String fieldName, final String newValueString) throws Exception - { - Class forName = Class.forName(className); - if (forName != null) - { - final Field field = forName.getDeclaredField(fieldName); - if (field != null) - { - Object newValue; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 3) { + return false; + } - Class type = field.getType(); - if (type.isPrimitive()) - { - if (type.getName().equals("int")) - { - newValue = Integer.parseInt(newValueString); - } - else if (type.getName().equals("double")) - { - newValue = Double.parseDouble(newValueString); - } - else if (type.getName().equals("boolean")) - { - newValue = Boolean.parseBoolean(newValueString); - } - else - { - throw new Exception("Unknown primitive field type."); - } - } - else - { - if (type.isAssignableFrom(Integer.class)) - { - newValue = new Integer(newValueString); - } - else if (type.isAssignableFrom(Double.class)) - { - newValue = new Double(newValueString); - } - else if (type.isAssignableFrom(Boolean.class)) - { - newValue = Boolean.valueOf(newValueString); - } - else if (type.isAssignableFrom(String.class)) - { - newValue = newValueString; - } - else - { - throw new Exception("Unknown complex field type."); - } - } + try { + String className = args[0]; + String fieldName = args[1]; + String newValue = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " "); - field.setAccessible(true); + if (className.equalsIgnoreCase("_")) { + className = "me.StevenLawson.TotalFreedomMod.TotalFreedomMod"; + } - final Object oldValue = field.get(Class.forName(className)); - if (oldValue != null) - { - field.set(oldValue, newValue); - } + setStaticValue(className, fieldName, newValue); - field.setAccessible(false); - } - } - } + sender.sendMessage("Debug: OK"); + } catch (Exception ex) { + sender.sendMessage(ex.getMessage()); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_denick.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_denick.java index 646475d..5e9f488 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_denick.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_denick.java @@ -8,14 +8,16 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_denick extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Removing all nicknames", false); - for (Player player : server.getOnlinePlayers()) { - EssentialsBridge.setNickname(player.getName(), null); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Removing all nicknames", false); - return true; - } + for (Player player : server.getOnlinePlayers()) { + EssentialsBridge.setNickname(player.getName(), null); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deop.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deop.java index 0728933..f397e18 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deop.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deop.java @@ -9,31 +9,31 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_deop extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - OfflinePlayer player = null; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - for (Player onlinePlayer : server.getOnlinePlayers()) { - if (args[0].equalsIgnoreCase(onlinePlayer.getName())) - { - player = onlinePlayer; - } - } + OfflinePlayer player = null; - // if the player is not online - if (player == null) - { - player = DeprecationUtil.getOfflinePlayer(server, args[0]); - } + for (Player onlinePlayer : server.getOnlinePlayers()) { + if (args[0].equalsIgnoreCase(onlinePlayer.getName())) { + player = onlinePlayer; + } + } - Utilities.adminAction(sender.getName(), "De-opping " + player.getName(), false); + // if the player is not online + if (player == null) { + player = DeprecationUtil.getOfflinePlayer(server, args[0]); + } - player.setOp(false); + Utilities.adminAction(sender.getName(), "De-opping " + player.getName(), false); - return true; - } + player.setOp(false); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deopall.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deopall.java index 150f7a8..b9e8144 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deopall.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_deopall.java @@ -7,15 +7,17 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_deopall extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "De-opping all players on the server", true); - for (Player player : server.getOnlinePlayers()) { - player.setOp(false); - player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "De-opping all players on the server", true); - return true; - } + for (Player player : server.getOnlinePlayers()) { + player.setOp(false); + player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_dispfill.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_dispfill.java index 8a47668..b9d375a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_dispfill.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_dispfill.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -12,93 +14,78 @@ import org.bukkit.command.CommandSender; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_dispfill extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 2) { - int radius; - try { - radius = Math.max(5, Math.min(25, Integer.parseInt(args[0]))); - } catch (NumberFormatException ex) - { - sender.sendMessage("Invalid radius."); - return true; - } + private static void setDispenserContents(final Block targetBlock, final ItemStack[] items) { + if (targetBlock.getType() == Material.DISPENSER) { + final Inventory dispenserInv = ((Dispenser) targetBlock.getState()).getInventory(); + dispenserInv.clear(); + dispenserInv.addItem(items); + } + } - final List items = new ArrayList(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 2) { + int radius; - final String[] itemsRaw = StringUtils.split(args[1], ","); - for (final String searchItem : itemsRaw) - { - Material material = Material.matchMaterial(searchItem); - if (material == null) - { - try - { - material = DeprecationUtil.getMaterial(Integer.parseInt(searchItem)); - } - catch (NumberFormatException ex) - { - } - } + try { + radius = Math.max(5, Math.min(25, Integer.parseInt(args[0]))); + } catch (NumberFormatException ex) { + sender.sendMessage("Invalid radius."); + return true; + } - if (material != null) - { - items.add(new ItemStack(material, 64)); - } - else - { - sender.sendMessage("Skipping invalid item: " + searchItem); - } - } + final List items = new ArrayList(); - final ItemStack[] itemsArray = items.toArray(new ItemStack[items.size()]); + final String[] itemsRaw = StringUtils.split(args[1], ","); + for (final String searchItem : itemsRaw) { + Material material = Material.matchMaterial(searchItem); + if (material == null) { + try { + material = DeprecationUtil.getMaterial(Integer.parseInt(searchItem)); + } catch (NumberFormatException ex) { + } + } - int affected = 0; - final Location centerLocation = sender_p.getLocation(); - final Block centerBlock = centerLocation.getBlock(); - for (int xOffset = -radius; xOffset <= radius; xOffset++) - { - for (int yOffset = -radius; yOffset <= radius; yOffset++) - { - for (int zOffset = -radius; zOffset <= radius; zOffset++) - { - final Block targetBlock = centerBlock.getRelative(xOffset, yOffset, zOffset); - if (targetBlock.getLocation().distanceSquared(centerLocation) < (radius * radius)) - { - if (targetBlock.getType().equals(Material.DISPENSER)) - { - sender.sendMessage("Filling dispenser @ " + Utilities.formatLocation(targetBlock.getLocation())); - setDispenserContents(targetBlock, itemsArray); - affected++; - } - } - } - } - } + if (material != null) { + items.add(new ItemStack(material, 64)); + } else { + sender.sendMessage("Skipping invalid item: " + searchItem); + } + } - sender.sendMessage("Done. " + affected + " dispenser(s) filled."); - } - else - { - return false; - } + final ItemStack[] itemsArray = items.toArray(new ItemStack[items.size()]); - return true; - } + int affected = 0; + final Location centerLocation = sender_p.getLocation(); + final Block centerBlock = centerLocation.getBlock(); + for (int xOffset = -radius; xOffset <= radius; xOffset++) { + for (int yOffset = -radius; yOffset <= radius; yOffset++) { + for (int zOffset = -radius; zOffset <= radius; zOffset++) { + final Block targetBlock = centerBlock.getRelative(xOffset, yOffset, + zOffset); + if (targetBlock.getLocation().distanceSquared(centerLocation) < (radius + * radius)) { + if (targetBlock.getType().equals(Material.DISPENSER)) { + sender.sendMessage( + "Filling dispenser @ " + Utilities.formatLocation( + targetBlock.getLocation())); + setDispenserContents(targetBlock, itemsArray); + affected++; + } + } + } + } + } - private static void setDispenserContents(final Block targetBlock, final ItemStack[] items) - { - if (targetBlock.getType() == Material.DISPENSER) - { - final Inventory dispenserInv = ((Dispenser) targetBlock.getState()).getInventory(); - dispenserInv.clear(); - dispenserInv.addItem(items); - } - } + sender.sendMessage("Done. " + affected + " dispenser(s) filled."); + } else { + return false; + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_doom.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_doom.java index 46eac65..783c5f0 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_doom.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_doom.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; @@ -15,89 +16,102 @@ import org.bukkit.util.Vector; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE) public class Command_doom extends FreedomCommand { - @Override - public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - final Player player = getPlayer(args[0]); + public static void doom(final CommandSender sender, final Player player) { + final TotalFreedomMod plugin = TotalFreedomMod.plugin; - if (player == null) { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + new BukkitRunnable() { + @Override + public void run() { + Utilities.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), + true); + Utilities.bcastMsg(player.getName() + " will be completely obliterated!", + ChatColor.RED); - Utilities.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true); - Utilities.bcastMsg(player.getName() + " will be completely obliterated!", ChatColor.RED); + final String ip = player.getAddress().getAddress().getHostAddress().trim(); - final String ip = player.getAddress().getAddress().getHostAddress().trim(); + // remove from superadmin + if (AdminList.isSuperAdmin(player)) { + Utilities.adminAction(sender.getName(), + "Removing " + player.getName() + " from the superadmin list.", true); + AdminList.removeSuperadmin(player); + } - // remove from superadmin - if (AdminList.isSuperAdmin(player)) - { - Utilities.adminAction(sender.getName(), "Removing " + player.getName() + " from the superadmin list.", true); - AdminList.removeSuperadmin(player); - } + // remove from whitelist + player.setWhitelisted(false); - // remove from whitelist - player.setWhitelisted(false); + // deop + player.setOp(false); - // deop - player.setOp(false); + // ban IPs + for (String playerIp : PlayerList.getEntry(player).getIps()) { + BanManager.addIpBan(new Ban(playerIp, player.getName())); + } - // ban IPs - for (String playerIp : PlayerList.getEntry(player).getIps()) - { - BanManager.addIpBan(new Ban(playerIp, player.getName())); - } + // ban uuid + BanManager.addUuidBan(player); - // ban uuid - BanManager.addUuidBan(player); + // set gamemode to survival + player.setGameMode(GameMode.SURVIVAL); - // set gamemode to survival - player.setGameMode(GameMode.SURVIVAL); + // clear inventory + player.closeInventory(); + player.getInventory().clear(); - // clear inventory - player.closeInventory(); - player.getInventory().clear(); + // ignite player + player.setFireTicks(10000); - // ignite player - player.setFireTicks(10000); + //removed explosion (it bypasses TFM's explosive toggle and makes a BIG hole that no one likes fixing) - //removed explosion (it bypasses TFM's explosive toggle and makes a BIG hole that no one likes fixing) + // Shoot the player in the sky + player.setVelocity(player.getVelocity().clone().add(new Vector(0, 20, 0))); - // Shoot the player in the sky - player.setVelocity(player.getVelocity().clone().add(new Vector(0, 20, 0))); + new BukkitRunnable() { + @Override + public void run() { + // strike lightning + player.getWorld().strikeLightning(player.getLocation()); - new BukkitRunnable() - { - @Override - public void run() - { - // strike lightning - player.getWorld().strikeLightning(player.getLocation()); + // kill (if not done already) + player.setHealth(0.0); + } + }.runTaskLater(plugin, 2L * 20L); - // kill (if not done already) - player.setHealth(0.0); - } - }.runTaskLater(plugin, 2L * 20L); + new BukkitRunnable() { + @Override + public void run() { + // message + Utilities.adminAction(sender.getName(), + "Banning " + player.getName() + ", IP: " + Utilities.getFuzzyIp(ip), + true); - new BukkitRunnable() - { - @Override - public void run() - { - // message - Utilities.adminAction(sender.getName(), "Banning " + player.getName() + ", IP: " + Utilities.getFuzzyIp(ip), true); + //removed explosion (it bypasses TFM's explosive toggle and makes a BIG hole that no one likes fixing) - //removed explosion (it bypasses TFM's explosive toggle and makes a BIG hole that no one likes fixing) + // kick player + player.kickPlayer(ChatColor.RED + "FUCKOFF, and get your shit together!"); + } + }.runTaskLater(plugin, 3L * 20L); + } + }.runTask(plugin); + } - // kick player - player.kickPlayer(ChatColor.RED + "FUCKOFF, and get your shit together!"); - } - }.runTaskLater(plugin, 3L * 20L); - return true; - } + @Override + public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } + + final Player player = getPlayer(args[0]); + + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + doom(sender, player); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_enchant.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_enchant.java index 92ffac6..d8d2246 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_enchant.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_enchant.java @@ -8,114 +8,90 @@ import org.bukkit.inventory.ItemStack; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_enchant extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - ItemStack itemInHand = sender_p.getItemInHand(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - if (itemInHand == null) { - playerMsg(sender, "You are holding an invalid item."); - return true; - } + ItemStack itemInHand = sender_p.getItemInHand(); - if (args[0].equalsIgnoreCase("list")) - { - boolean has_enchantments = false; + if (itemInHand == null) { + playerMsg(sender, "You are holding an invalid item."); + return true; + } - StringBuilder possible_ench = new StringBuilder("Possible enchantments for held item: "); - for (Enchantment ench : Enchantment.values()) - { - if (ench.canEnchantItem(itemInHand)) - { - has_enchantments = true; - possible_ench.append(ench.getName()).append(", "); - } - } + if (args[0].equalsIgnoreCase("list")) { + boolean has_enchantments = false; - if (has_enchantments) - { - playerMsg(sender, possible_ench.toString()); - } - else - { - playerMsg(sender, "The held item has no enchantments."); - } - } - else if (args[0].equalsIgnoreCase("addall")) - { - for (Enchantment ench : Enchantment.values()) - { - try - { - if (ench.canEnchantItem(itemInHand)) - { - itemInHand.addEnchantment(ench, ench.getMaxLevel()); - } - } - catch (Exception ex) - { - Log.info("Error using " + ench.getName() + " on " + itemInHand.getType().name() + " held by " + sender_p.getName() + "."); - } - } + StringBuilder possible_ench = new StringBuilder( + "Possible enchantments for held item: "); + for (Enchantment ench : Enchantment.values()) { + if (ench.canEnchantItem(itemInHand)) { + has_enchantments = true; + possible_ench.append(ench.getName()).append(", "); + } + } - playerMsg(sender, "Added all possible enchantments for this item."); - } - else if (args[0].equalsIgnoreCase("reset")) - { - for (Enchantment ench : itemInHand.getEnchantments().keySet()) - { - itemInHand.removeEnchantment(ench); - } + if (has_enchantments) { + playerMsg(sender, possible_ench.toString()); + } else { + playerMsg(sender, "The held item has no enchantments."); + } + } else if (args[0].equalsIgnoreCase("addall")) { + for (Enchantment ench : Enchantment.values()) { + try { + if (ench.canEnchantItem(itemInHand)) { + itemInHand.addEnchantment(ench, ench.getMaxLevel()); + } + } catch (Exception ex) { + Log.info("Error using " + ench.getName() + " on " + itemInHand.getType().name() + + " held by " + sender_p.getName() + "."); + } + } - playerMsg(sender, "Removed all enchantments."); - } - else - { - if (args.length < 2) - { - return false; - } + playerMsg(sender, "Added all possible enchantments for this item."); + } else if (args[0].equalsIgnoreCase("reset")) { + for (Enchantment ench : itemInHand.getEnchantments().keySet()) { + itemInHand.removeEnchantment(ench); + } - Enchantment ench = null; + playerMsg(sender, "Removed all enchantments."); + } else { + if (args.length < 2) { + return false; + } - try - { - ench = Enchantment.getByName(args[1]); - } - catch (Exception ex) - { - } + Enchantment ench = null; - if (ench == null) - { - playerMsg(sender, args[1] + " is an invalid enchantment for the held item. Type \"/enchant list\" for valid enchantments for this item."); - return true; - } + try { + ench = Enchantment.getByName(args[1]); + } catch (Exception ex) { + } - if (args[0].equalsIgnoreCase("add")) - { - if (ench.canEnchantItem(itemInHand)) - { - itemInHand.addEnchantment(ench, ench.getMaxLevel()); + if (ench == null) { + playerMsg(sender, args[1] + + " is an invalid enchantment for the held item. Type \"/enchant list\" for valid enchantments for this item."); + return true; + } - playerMsg(sender, "Added enchantment: " + ench.getName()); - } - else - { - playerMsg(sender, "Can't use this enchantment on held item."); - } - } - else if (args[0].equals("remove")) - { - itemInHand.removeEnchantment(ench); + if (args[0].equalsIgnoreCase("add")) { + if (ench.canEnchantItem(itemInHand)) { + itemInHand.addEnchantment(ench, ench.getMaxLevel()); - playerMsg(sender, "Removed enchantment: " + ench.getName()); - } - } + playerMsg(sender, "Added enchantment: " + ench.getName()); + } else { + playerMsg(sender, "Can't use this enchantment on held item."); + } + } else if (args[0].equals("remove")) { + itemInHand.removeEnchantment(ench); - return true; - } + playerMsg(sender, "Removed enchantment: " + ench.getName()); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ender.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ender.java index 27978dd..06cdf8c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ender.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ender.java @@ -6,9 +6,11 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_ender extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.gotoWorld(sender_p, server.getWorlds().get(0).getName() + "_the_end"); - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.gotoWorld(sender_p, server.getWorlds().get(0).getName() + "_the_end"); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_expel.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_expel.java index bf2e01a..78e8fdd 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_expel.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_expel.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.Location; @@ -8,77 +10,63 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_expel extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - double radius = 20.0; - double strength = 5.0; - if (args.length >= 1) { - try { - radius = Math.max(1.0, Math.min(100.0, Double.parseDouble(args[0]))); - } - catch (NumberFormatException ex) - { - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + double radius = 20.0; + double strength = 5.0; - if (args.length >= 2) - { - try - { - strength = Math.max(0.0, Math.min(50.0, Double.parseDouble(args[1]))); - } - catch (NumberFormatException ex) - { - } - } + if (args.length >= 1) { + try { + radius = Math.max(1.0, Math.min(100.0, Double.parseDouble(args[0]))); + } catch (NumberFormatException ex) { + } + } - List pushedPlayers = new ArrayList(); + if (args.length >= 2) { + try { + strength = Math.max(0.0, Math.min(50.0, Double.parseDouble(args[1]))); + } catch (NumberFormatException ex) { + } + } - final Vector senderPos = sender_p.getLocation().toVector(); - final List players = sender_p.getWorld().getPlayers(); - for (final Player player : players) - { - if (player.equals(sender_p)) - { - continue; - } + List pushedPlayers = new ArrayList(); - final Location targetPos = player.getLocation(); - final Vector targetPosVec = targetPos.toVector(); + final Vector senderPos = sender_p.getLocation().toVector(); + final List players = sender_p.getWorld().getPlayers(); + for (final Player player : players) { + if (player.equals(sender_p)) { + continue; + } - boolean inRange = false; - try - { - inRange = targetPosVec.distanceSquared(senderPos) < (radius * radius); - } - catch (IllegalArgumentException ex) - { - } + final Location targetPos = player.getLocation(); + final Vector targetPosVec = targetPos.toVector(); - if (inRange) - { - player.getWorld().createExplosion(targetPos, 0.0f, false); - Utilities.setFlying(player, false); - player.setVelocity(targetPosVec.subtract(senderPos).normalize().multiply(strength)); - pushedPlayers.add(player.getName()); - } - } + boolean inRange = false; + try { + inRange = targetPosVec.distanceSquared(senderPos) < (radius * radius); + } catch (IllegalArgumentException ex) { + } - if (pushedPlayers.isEmpty()) - { - playerMsg(sender, "No players pushed."); - } - else - { - playerMsg(sender, "Pushed " + pushedPlayers.size() + " players: " + StringUtils.join(pushedPlayers, ", ")); - } + if (inRange) { + player.getWorld().createExplosion(targetPos, 0.0f, false); + Utilities.setFlying(player, false); + player.setVelocity(targetPosVec.subtract(senderPos).normalize().multiply(strength)); + pushedPlayers.add(player.getName()); + } + } - return true; - } + if (pushedPlayers.isEmpty()) { + playerMsg(sender, "No players pushed."); + } else { + playerMsg(sender, + "Pushed " + pushedPlayers.size() + " players: " + StringUtils.join(pushedPlayers, + ", ")); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_findip.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_findip.java index ef3b14e..bbbc109 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_findip.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_findip.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.List; import me.StevenLawson.TotalFreedomMod.player.PlayerList; import me.StevenLawson.TotalFreedomMod.player.PlayerRank; import org.apache.commons.lang3.StringUtils; @@ -7,37 +8,36 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_findip extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - final Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - if (player == null) { + final Player player = getPlayer(args[0]); - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + if (player == null) { - PlayerRank rank = PlayerRank.fromSender(sender); - PlayerRank targetRank = PlayerRank.fromSender(player); + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - List ipsToShow = PlayerList.getEntry(player).getIps(); + PlayerRank rank = PlayerRank.fromSender(sender); + PlayerRank targetRank = PlayerRank.fromSender(player); - if(rank.getOrdinal() < PlayerRank.SENIOR.getOrdinal() || targetRank.getOrdinal() >= rank.getOrdinal()) { - ipsToShow = PlayerList.getEntry(player).getFuzziedIps(); - } + List ipsToShow = PlayerList.getEntry(player).getIps(); + if (rank.getOrdinal() < PlayerRank.SENIOR.getOrdinal() + || targetRank.getOrdinal() >= rank.getOrdinal()) { + ipsToShow = PlayerList.getEntry(player).getFuzziedIps(); + } - playerMsg(sender, "Player IPs: " + StringUtils.join(ipsToShow, ", ")); + playerMsg(sender, "Player IPs: " + StringUtils.join(ipsToShow, ", ")); - return true; - } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_flatlands.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_flatlands.java index 60cf440..6a0f35a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_flatlands.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_flatlands.java @@ -7,13 +7,15 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_flatlands extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (ConfigurationEntry.FLATLANDS_GENERATE.getBoolean()) { - FlatlandsWorld.getInstance().sendToWorld(sender_p); - } else { - playerMsg(sender, "Flatlands is currently disabled."); - } - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (ConfigurationEntry.FLATLANDS_GENERATE.getBoolean()) { + FlatlandsWorld.getInstance().sendToWorld(sender_p); + } else { + playerMsg(sender, "Flatlands is currently disabled."); + } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fr.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fr.java index 2abbf10..31bac61 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fr.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fr.java @@ -11,68 +11,64 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_fr extends FreedomCommand { - private static boolean allFrozen = false; - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - allFrozen = !allFrozen; + private static boolean allFrozen = false; - if (allFrozen) { - Utilities.adminAction(sender.getName(), "Freezing all players", false); + public static void setAllFrozen(boolean freeze) { + allFrozen = freeze; + for (PlayerData data : PlayerData.PLAYER_DATA.values()) { + data.setFrozen(freeze); + } + } - setAllFrozen(true); - playerMsg(sender, "Players are now frozen."); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + allFrozen = !allFrozen; - for (Player player : Bukkit.getOnlinePlayers()) - { - if (!AdminList.isSuperAdmin(player)) - { - playerMsg(player, "You have been frozen due to rulebreakers, you will be unfrozen soon.", ChatColor.RED); - } - } - } - else - { - Utilities.adminAction(sender.getName(), "Unfreezing all players", false); - setAllFrozen(false); - playerMsg(sender, "Players are now free to move."); - } - } - else - { - if (args[0].equalsIgnoreCase("purge")) - { - setAllFrozen(false); - Utilities.adminAction(sender.getName(), "Unfreezing all players", false); - } - else - { - final Player player = getPlayer(args[0]); + if (allFrozen) { + Utilities.adminAction(sender.getName(), "Freezing all players", false); - if (player == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } + setAllFrozen(true); + playerMsg(sender, "Players are now frozen."); - final PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.setFrozen(!playerdata.isFrozen()); + for (Player player : Bukkit.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(player)) { + playerMsg(player, + "You have been frozen due to rulebreakers, you will be unfrozen soon.", + ChatColor.RED); + } + } + } else { + Utilities.adminAction(sender.getName(), "Unfreezing all players", false); + setAllFrozen(false); + playerMsg(sender, "Players are now free to move."); + } + } else { + if (args[0].equalsIgnoreCase("purge")) { + setAllFrozen(false); + Utilities.adminAction(sender.getName(), "Unfreezing all players", false); + } else { + final Player player = getPlayer(args[0]); - playerMsg(sender, player.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); - playerMsg(player, "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".", ChatColor.AQUA); - } - } + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } - return true; - } + final PlayerData playerdata = PlayerData.getPlayerData(player); + playerdata.setFrozen(!playerdata.isFrozen()); - public static void setAllFrozen(boolean freeze) - { - allFrozen = freeze; - for (PlayerData data : PlayerData.PLAYER_DATA.values()) - { - data.setFrozen(freeze); - } - } + playerMsg(sender, + player.getName() + " has been " + (playerdata.isFrozen() ? "frozen" + : "unfrozen") + "."); + playerMsg(player, + "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".", + ChatColor.AQUA); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fuckoff.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fuckoff.java index 49a1c51..3ca5914 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fuckoff.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_fuckoff.java @@ -6,40 +6,37 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_IN_GAME) public class Command_fuckoff extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - boolean fuckoff_enabled = false; - double fuckoff_range = 25.0; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - if (args[0].equalsIgnoreCase("on")) - { - fuckoff_enabled = true; + boolean fuckoff_enabled = false; + double fuckoff_range = 25.0; - if (args.length >= 2) - { - try - { - fuckoff_range = Math.max(5.0, Math.min(100.0, Double.parseDouble(args[1]))); - } - catch (NumberFormatException ex) - { - } - } - } + if (args[0].equalsIgnoreCase("on")) { + fuckoff_enabled = true; - TotalFreedomMod.fuckoffEnabledFor.remove(sender_p); + if (args.length >= 2) { + try { + fuckoff_range = Math.max(5.0, Math.min(100.0, Double.parseDouble(args[1]))); + } catch (NumberFormatException ex) { + } + } + } - if (fuckoff_enabled) - { - TotalFreedomMod.fuckoffEnabledFor.put(sender_p, new Double(fuckoff_range)); - } + TotalFreedomMod.fuckoffEnabledFor.remove(sender_p); - playerMsg(sender, "Fuckoff " + (fuckoff_enabled ? ("enabled. Range: " + fuckoff_range + ".") : "disabled.")); + if (fuckoff_enabled) { + TotalFreedomMod.fuckoffEnabledFor.put(sender_p, new Double(fuckoff_range)); + } - return true; - } + playerMsg(sender, "Fuckoff " + (fuckoff_enabled ? ("enabled. Range: " + fuckoff_range + ".") + : "disabled.")); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gadmin.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gadmin.java index 5e8fdd7..6f407a7 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gadmin.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gadmin.java @@ -1,196 +1,183 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Iterator; import me.StevenLawson.TotalFreedomMod.ban.BanManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.player.PlayerData; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Iterator; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_gadmin extends FreedomCommand { - private enum GadminMode { - LIST("list"), - KICK("kick"), - NAMEBAN("nameban"), - IPBAN("ipban"), - BAN("ban"), - OP("op"), - DEOP("deop"), - CI("ci"), - FR("fr"), - SMITE("smite"); - private final String modeName; - GadminMode(String command) - { - this.modeName = command; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - public String getModeName() - { - return modeName; - } + final GadminMode mode = GadminMode.findMode(args[0].toLowerCase()); + if (mode == null) { + playerMsg(sender, "Invalid mode: " + args[0], ChatColor.RED); + return true; + } - public static GadminMode findMode(String needle) - { - for (final GadminMode mode : GadminMode.values()) - { - if (needle.equalsIgnoreCase(mode.getModeName())) - { - return mode; - } - } - return null; - } - } + final Iterator it = server.getOnlinePlayers().iterator(); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } + if (mode == GadminMode.LIST) { + playerMsg(sender, "[ Real Name ] : [ Display Name ] - Hash:"); + while (it.hasNext()) { + final Player player = it.next(); + final String hash = UUIDManager.getUniqueId(player).toString().substring(0, 4); + sender.sendMessage(ChatColor.GRAY + String.format("[ %s ] : [ %s ] - %s", + player.getName(), + ChatColor.stripColor(player.getDisplayName()), + hash)); + } + return true; + } - final GadminMode mode = GadminMode.findMode(args[0].toLowerCase()); - if (mode == null) { - playerMsg(sender, "Invalid mode: " + args[0], ChatColor.RED); - return true; - } + if (args.length < 2) { + return false; + } - final Iterator it = server.getOnlinePlayers().iterator(); + Player target = null; + while (it.hasNext() && target == null) { + final Player player = it.next(); + final String hash = UUIDManager.getUniqueId(player).toString().substring(0, 4); - if (mode == GadminMode.LIST) - { - playerMsg(sender, "[ Real Name ] : [ Display Name ] - Hash:"); - while (it.hasNext()) - { - final Player player = it.next(); - final String hash = UUIDManager.getUniqueId(player).toString().substring(0, 4); - sender.sendMessage(ChatColor.GRAY + String.format("[ %s ] : [ %s ] - %s", - player.getName(), - ChatColor.stripColor(player.getDisplayName()), - hash)); - } - return true; - } + if (hash.equalsIgnoreCase(args[1])) { + target = player; + } + } - if (args.length < 2) - { - return false; - } + if (target == null) { + playerMsg(sender, "Invalid player hash: " + args[1], ChatColor.RED); + return true; + } - Player target = null; - while (it.hasNext() && target == null) - { - final Player player = it.next(); - final String hash = UUIDManager.getUniqueId(player).toString().substring(0, 4); + switch (mode) { + case KICK: { + Utilities.adminAction(sender.getName(), + String.format("Kicking: %s.", target.getName()), false); + target.kickPlayer("Kicked by Administrator"); - if (hash.equalsIgnoreCase(args[1])) - { - target = player; - } - } + break; + } + case NAMEBAN: { + BanManager.addUuidBan(target); - if (target == null) - { - playerMsg(sender, "Invalid player hash: " + args[1], ChatColor.RED); - return true; - } + Utilities.adminAction(sender.getName(), + String.format("Banning Name: %s.", target.getName()), true); + target.kickPlayer("Username banned by Administrator."); - switch (mode) - { - case KICK: - { - Utilities.adminAction(sender.getName(), String.format("Kicking: %s.", target.getName()), false); - target.kickPlayer("Kicked by Administrator"); + break; + } + case IPBAN: { + String ip = target.getAddress().getAddress().getHostAddress(); + String[] ip_parts = ip.split("\\."); + if (ip_parts.length == 4) { + ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); + } + Utilities.adminAction(sender.getName(), String.format("Banning IP: %s.", ip), true); + BanManager.addIpBan(target); - break; - } - case NAMEBAN: - { - BanManager.addUuidBan(target); + target.kickPlayer("IP address banned by Administrator."); - Utilities.adminAction(sender.getName(), String.format("Banning Name: %s.", target.getName()), true); - target.kickPlayer("Username banned by Administrator."); + break; + } + case BAN: { + String ip = target.getAddress().getAddress().getHostAddress(); + String[] ip_parts = ip.split("\\."); + if (ip_parts.length == 4) { + ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); + } + Utilities.adminAction(sender.getName(), + String.format("Banning Name: %s, IP: %s.", target.getName(), ip), true); - break; - } - case IPBAN: - { - String ip = target.getAddress().getAddress().getHostAddress(); - String[] ip_parts = ip.split("\\."); - if (ip_parts.length == 4) - { - ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); - } - Utilities.adminAction(sender.getName(), String.format("Banning IP: %s.", ip), true); - BanManager.addIpBan(target); + BanManager.addUuidBan(target); + BanManager.addIpBan(target); - target.kickPlayer("IP address banned by Administrator."); + target.kickPlayer("IP and username banned by Administrator."); - break; - } - case BAN: - { - String ip = target.getAddress().getAddress().getHostAddress(); - String[] ip_parts = ip.split("\\."); - if (ip_parts.length == 4) - { - ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); - } - Utilities.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", target.getName(), ip), true); + break; + } + case OP: { + Utilities.adminAction(sender.getName(), + String.format("Opping %s.", target.getName()), false); + target.setOp(false); + target.sendMessage(FreedomCommand.YOU_ARE_OP); - BanManager.addUuidBan(target); - BanManager.addIpBan(target); + break; + } + case DEOP: { + Utilities.adminAction(sender.getName(), + String.format("Deopping %s.", target.getName()), false); + target.setOp(false); + target.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); - target.kickPlayer("IP and username banned by Administrator."); + break; + } + case CI: { + target.getInventory().clear(); - break; - } - case OP: - { - Utilities.adminAction(sender.getName(), String.format("Opping %s.", target.getName()), false); - target.setOp(false); - target.sendMessage(FreedomCommand.YOU_ARE_OP); + break; + } + case FR: { + PlayerData playerdata = PlayerData.getPlayerData(target); + playerdata.setFrozen(!playerdata.isFrozen()); - break; - } - case DEOP: - { - Utilities.adminAction(sender.getName(), String.format("Deopping %s.", target.getName()), false); - target.setOp(false); - target.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); + playerMsg(sender, + target.getName() + " has been " + (playerdata.isFrozen() ? "frozen" + : "unfrozen") + "."); + target.sendMessage( + ChatColor.AQUA + "You have been " + (playerdata.isFrozen() ? "frozen" + : "unfrozen") + "."); - break; - } - case CI: - { - target.getInventory().clear(); + break; + } + case SMITE: { + Command_smite.smite(target); - break; - } - case FR: - { - PlayerData playerdata = PlayerData.getPlayerData(target); - playerdata.setFrozen(!playerdata.isFrozen()); + break; + } + } - playerMsg(sender, target.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); - target.sendMessage(ChatColor.AQUA + "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); + return true; + } - break; - } - case SMITE: - { - Command_smite.smite(target); + private enum GadminMode { + LIST("list"), + KICK("kick"), + NAMEBAN("nameban"), + IPBAN("ipban"), + BAN("ban"), + OP("op"), + DEOP("deop"), + CI("ci"), + FR("fr"), + SMITE("smite"); + private final String modeName; - break; - } - } + GadminMode(String command) { + this.modeName = command; + } - return true; - } + public static GadminMode findMode(String needle) { + for (final GadminMode mode : GadminMode.values()) { + if (needle.equalsIgnoreCase(mode.getModeName())) { + return mode; + } + } + return null; + } + + public String getModeName() { + return modeName; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gcmd.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gcmd.java index 7c20326..795f8e7 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gcmd.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gcmd.java @@ -9,50 +9,49 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_gcmd extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 2) { - return false; - } - String arguments = String.join(" ", args); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 2) { + return false; + } - if (arguments.toLowerCase().contains("wildcard") || arguments.toLowerCase().contains("gcmd")) { - playerMsg("What the hell are you trying to do, you stupid idiot...", ChatColor.RED); - return true; - } + String arguments = String.join(" ", args); - final Player player = getPlayer(args[0]); + if (arguments.toLowerCase().contains("wildcard") || arguments.toLowerCase().contains("gcmd") + || arguments.toLowerCase().contains("moles")) { + playerMsg("What the hell are you trying to do, you stupid idiot...", ChatColor.RED); + if (sender_p != null) { + Command_smite.smite(sender_p); + } + return true; + } - if (player == null) { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - final String outCommand = StringUtils.join(args, " ", 1, args.length); + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - if (CommandBlocker.isCommandBlocked(outCommand, sender)) - { - return true; - } + final String outCommand = StringUtils.join(args, " ", 1, args.length); - try - { - playerMsg(sender, "Sending command as " + player.getName() + ": " + outCommand); - if (server.dispatchCommand(player, outCommand)) - { - playerMsg(sender, "Command sent."); - } - else - { - playerMsg(sender, "Unknown error sending command."); - } - } - catch (Throwable ex) - { - playerMsg(sender, "Error sending command: " + ex.getMessage()); - } + if (CommandBlocker.isCommandBlocked(outCommand, sender)) { + return true; + } - return true; - } + try { + playerMsg(sender, "Sending command as " + player.getName() + ": " + outCommand); + if (server.dispatchCommand(player, outCommand)) { + playerMsg(sender, "Command sent."); + } else { + playerMsg(sender, "Unknown error sending command."); + } + } catch (Throwable ex) { + playerMsg(sender, "Error sending command: " + ex.getMessage()); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_glist.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_glist.java index 02bab1b..1909e18 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_glist.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_glist.java @@ -1,121 +1,107 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.player.Player; import me.StevenLawson.TotalFreedomMod.player.PlayerList; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_glist extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - if (args.length == 1) { - if (args[0].equalsIgnoreCase("purge")) { - if (AdminList.isSeniorAdmin(sender)) - { - PlayerList.purgeAll(); - playerMsg(sender, "Purged playerbase"); - } - else - { - playerMsg(sender, "Only Senior Admins may purge the userlist."); - } - return true; - } - else - { - return false; - } - } - else if (args.length == 2) - { - String username; - final List ips = new ArrayList(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - final org.bukkit.entity.Player player = getPlayer(args[1]); + if (args.length == 1) { + if (args[0].equalsIgnoreCase("purge")) { + if (AdminList.isSeniorAdmin(sender)) { + PlayerList.purgeAll(); + playerMsg(sender, "Purged playerbase"); + } else { + playerMsg(sender, "Only Senior Admins may purge the userlist."); + } + return true; + } else { + return false; + } + } else if (args.length == 2) { + String username; + final List ips = new ArrayList(); - if (player == null) - { - final me.StevenLawson.TotalFreedomMod.player.Player entry = PlayerList.getEntry(UUIDManager.getUniqueId(args[1])); + final org.bukkit.entity.Player player = getPlayer(args[1]); - if (entry == null) { - playerMsg(sender, "Can't find that user. If target is not logged in, make sure that you spelled the name exactly."); - return true; - } + if (player == null) { + final me.StevenLawson.TotalFreedomMod.player.Player entry = PlayerList.getEntry( + UUIDManager.getUniqueId(args[1])); - username = entry.getLastLoginName(); - for (String ip : entry.getIps()) { - ips.add(Utilities.getFuzzyIp(ip)); - } - } - else - { - username = player.getName(); - final Player entry = PlayerList.getEntry(UUIDManager.getUniqueId(player)); + if (entry == null) { + playerMsg(sender, + "Can't find that user. If target is not logged in, make sure that you spelled the name exactly."); + return true; + } - for (String ip : entry.getIps()) { - ips.add(Utilities.getFuzzyIp(ip)); - } + username = entry.getLastLoginName(); + for (String ip : entry.getIps()) { + ips.add(Utilities.getFuzzyIp(ip)); + } + } else { + username = player.getName(); + final Player entry = PlayerList.getEntry(UUIDManager.getUniqueId(player)); - } + for (String ip : entry.getIps()) { + ips.add(Utilities.getFuzzyIp(ip)); + } - String mode = args[0].toLowerCase(); - if (mode.equalsIgnoreCase("ban")) - { - Utilities.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ips, ", "), true); + } - final org.bukkit.entity.Player target = getPlayer(username, true); - if (target != null) - { - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(target), target.getName())); - target.kickPlayer("You have been banned by " + sender.getName() + "\n If you think you have been banned wrongly, appeal here: " + ConfigurationEntry.SERVER_BAN_URL.getString()); - } - else - { - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(username), username)); - } + String mode = args[0].toLowerCase(); + if (mode.equalsIgnoreCase("ban")) { + Utilities.adminAction(sender.getName(), + "Banning " + username + " and IPs: " + StringUtils.join(ips, ", "), true); - for (String ip : ips) - { - BanManager.addIpBan(new Ban(ip, username)); - BanManager.addIpBan(new Ban(Utilities.getFuzzyIp(ip), username)); - } - } - else if (mode.equalsIgnoreCase("unban")) - { - Utilities.adminAction(sender.getName(), "Unbanning " + username + " and IPs: " + StringUtils.join(ips, ", "), true); - BanManager.unbanUuid(UUIDManager.getUniqueId(username)); - for (String ip : ips) - { + final org.bukkit.entity.Player target = getPlayer(username, true); + if (target != null) { + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(target), target.getName())); + target.kickPlayer("You have been banned by " + sender.getName() + + "\n If you think you have been banned wrongly, appeal here: " + + ConfigurationEntry.SERVER_BAN_URL.getString()); + } else { + BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(username), username)); + } - BanManager.unbanIp(ip); - BanManager.unbanIp(Utilities.getFuzzyIp(ip)); - } - } - else - { - return false; - } + for (String ip : ips) { + BanManager.addIpBan(new Ban(ip, username)); + BanManager.addIpBan(new Ban(Utilities.getFuzzyIp(ip), username)); + } + } else if (mode.equalsIgnoreCase("unban")) { + Utilities.adminAction(sender.getName(), + "Unbanning " + username + " and IPs: " + StringUtils.join(ips, ", "), true); + BanManager.unbanUuid(UUIDManager.getUniqueId(username)); + for (String ip : ips) { - return true; - } - else - { - return false; - } - } + BanManager.unbanIp(ip); + BanManager.unbanIp(Utilities.getFuzzyIp(ip)); + } + } else { + return false; + } + + return true; + } else { + return false; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gtfo.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gtfo.java index 70b9d6c..ed87000 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gtfo.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_gtfo.java @@ -3,9 +3,8 @@ package me.StevenLawson.TotalFreedomMod.commands; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; import me.StevenLawson.TotalFreedomMod.bridge.WorldEditBridge; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; -import me.StevenLawson.TotalFreedomMod.world.RollbackManager; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.bukkit.ChatColor; @@ -17,84 +16,86 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_gtfo extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - final Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } + final Player player = getPlayer(args[0]); - String reason = null; - if (args.length >= 2) - { - reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); - } + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } - Utilities.bcastMsg(player.getName() + " has been a VERY naughty, naughty boy.", ChatColor.RED); + String reason = null; + if (args.length >= 2) { + reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); + } - // Undo WorldEdits: - try - { - WorldEditBridge.undo(player, 15); - } - catch (NoClassDefFoundError ex) - { - } + Utilities.bcastMsg(player.getName() + " has been a VERY naughty, naughty boy.", + ChatColor.RED); - // rollback - RollbackManager.rollback(player.getName()); + // Undo WorldEdits: + try { + WorldEditBridge.undo(player, 15); + } catch (NoClassDefFoundError ex) { + } - // deop - player.setOp(false); + // rollback + // RollbackManager.rollback(player.getName()); + // TODO: Use coreprotect API calls - // set gamemode to survival: - player.setGameMode(GameMode.SURVIVAL); + // deop + player.setOp(false); - // clear inventory: - player.getInventory().clear(); + // set gamemode to survival: + player.setGameMode(GameMode.SURVIVAL); - // strike with lightning effect: - final Location targetPos = player.getLocation(); - for (int x = -1; x <= 1; x++) - { - for (int z = -1; z <= 1; z++) - { - final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); - targetPos.getWorld().strikeLightning(strike_pos); - } - } + // clear inventory: + player.getInventory().clear(); - // ban IP address: - String ip = Utilities.getFuzzyIp(player.getAddress().getAddress().getHostAddress()); + // strike with lightning effect: + final Location targetPos = player.getLocation(); + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + final Location strike_pos = new Location(targetPos.getWorld(), + targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); + targetPos.getWorld().strikeLightning(strike_pos); + } + } - final StringBuilder bcast = new StringBuilder() - .append(ChatColor.RED) - .append("Banning: ") - .append(player.getName()) - .append(", IP: ") - .append(ip); + // ban IP address: + String ip = Utilities.getFuzzyIp(player.getAddress().getAddress().getHostAddress()); - if (reason != null) - { - bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason); - } + final StringBuilder bcast = new StringBuilder() + .append(ChatColor.RED) + .append("Banning: ") + .append(player.getName()) + .append(", IP: ") + .append(ip); - Utilities.bcastMsg(bcast.toString()); + if (reason != null) { + bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason); + } - BanManager.addIpBan(new Ban(ip, player.getName(), sender.getName(), null, reason)); + Utilities.bcastMsg(bcast.toString()); - // ban username: - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), null, reason)); + BanManager.addIpBan(new Ban(ip, player.getName(), sender.getName(), null, reason)); - // kick Player: - player.kickPlayer(ChatColor.RED + "GTFO" + (reason != null ? ("\nReason: " + ChatColor.YELLOW + reason) : "")); + // ban username: + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), null, + reason)); - return true; - } + // kick Player: + player.kickPlayer( + ChatColor.RED + "GTFO" + (reason != null ? ("\nReason: " + ChatColor.YELLOW + reason) + : "")); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_halt.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_halt.java index 9cd396f..eb778c4 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_halt.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_halt.java @@ -9,88 +9,76 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_halt extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equalsIgnoreCase("all")) { - Utilities.adminAction(sender.getName(), "Halting all non-superadmins.", true); - int counter = 0; - for (Player player : server.getOnlinePlayers()) - { - if (!AdminList.isSuperAdmin(player)) - { - PlayerData.getPlayerData(player).setHalted(true); - counter++; - } - } - playerMsg(sender, "Halted " + counter + " players."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - if (args[0].equalsIgnoreCase("purge")) - { - Utilities.adminAction(sender.getName(), "Unhalting all players.", true); - int counter = 0; - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerdata = PlayerData.getPlayerData(player); - if (PlayerData.getPlayerData(player).isHalted()) - { - playerdata.setHalted(false); - counter++; - } - } - playerMsg(sender, "Unhalted " + counter + " players."); - return true; - } + if (args[0].equalsIgnoreCase("all")) { + Utilities.adminAction(sender.getName(), "Halting all non-superadmins.", true); + int counter = 0; + for (Player player : server.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(player)) { + PlayerData.getPlayerData(player).setHalted(true); + counter++; + } + } + playerMsg(sender, "Halted " + counter + " players."); + return true; + } - if (args[0].equalsIgnoreCase("list")) - { - PlayerData info; - int count = 0; - for (Player hp : server.getOnlinePlayers()) - { - info = PlayerData.getPlayerData(hp); - if (info.isHalted()) - { - if (count == 0) - { - playerMsg(sender, "Halted players:"); - } - playerMsg(sender, "- " + hp.getName()); - count++; - } - } - if (count == 0) - { - playerMsg(sender, "There are currently no halted players."); - } - return true; - } + if (args[0].equalsIgnoreCase("purge")) { + Utilities.adminAction(sender.getName(), "Unhalting all players.", true); + int counter = 0; + for (Player player : server.getOnlinePlayers()) { + PlayerData playerdata = PlayerData.getPlayerData(player); + if (PlayerData.getPlayerData(player).isHalted()) { + playerdata.setHalted(false); + counter++; + } + } + playerMsg(sender, "Unhalted " + counter + " players."); + return true; + } - final Player player = getPlayer(args[0]); + if (args[0].equalsIgnoreCase("list")) { + PlayerData info; + int count = 0; + for (Player hp : server.getOnlinePlayers()) { + info = PlayerData.getPlayerData(hp); + if (info.isHalted()) { + if (count == 0) { + playerMsg(sender, "Halted players:"); + } + playerMsg(sender, "- " + hp.getName()); + count++; + } + } + if (count == 0) { + playerMsg(sender, "There are currently no halted players."); + } + return true; + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - PlayerData playerdata = PlayerData.getPlayerData(player); - if (!playerdata.isHalted()) - { - Utilities.adminAction(sender.getName(), "Halting " + player.getName(), true); - playerdata.setHalted(true); - return true; - } - else - { - Utilities.adminAction(sender.getName(), "Unhalting " + player.getName(), true); - playerdata.setHalted(false); - return true; - } - } + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + PlayerData playerdata = PlayerData.getPlayerData(player); + if (!playerdata.isHalted()) { + Utilities.adminAction(sender.getName(), "Halting " + player.getName(), true); + playerdata.setHalted(true); + return true; + } else { + Utilities.adminAction(sender.getName(), "Unhalting " + player.getName(), true); + playerdata.setHalted(false); + return true; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_health.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_health.java index dad0ec2..40a9e30 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_health.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_health.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.text.DecimalFormat; +import java.util.concurrent.atomic.AtomicInteger; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.apache.commons.lang.math.DoubleRange; @@ -9,89 +11,82 @@ import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; -import java.text.DecimalFormat; -import java.util.concurrent.atomic.AtomicInteger; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_health extends FreedomCommand { - private static final int BYTES_PER_MB = 1024 * 1024; - private static final DoubleRange TPS_RANGE = new DoubleRange(20.0 - 0.1, 20.0 + 0.1); - @Override - public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Runtime runtime = Runtime.getRuntime(); - long usedMem = runtime.totalMemory() - runtime.freeMemory(); + private static final int BYTES_PER_MB = 1024 * 1024; + private static final DoubleRange TPS_RANGE = new DoubleRange(20.0 - 0.1, 20.0 + 0.1); - playerMsg(sender, "Reserved Memory: " + (double) runtime.totalMemory() / (double) BYTES_PER_MB + "mb"); - playerMsg(sender, "Used Memory: " + new DecimalFormat("#").format((double) usedMem / (double) BYTES_PER_MB) + "mb (" + new DecimalFormat("#").format(((double) usedMem / (double) runtime.totalMemory()) * 100.0) + "%)"); - playerMsg(sender, "Max Memory: " + (double) runtime.maxMemory() / (double) BYTES_PER_MB + "mb"); - playerMsg(sender, "Calculating ticks per second, please wait..."); + @Override + public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Runtime runtime = Runtime.getRuntime(); + long usedMem = runtime.totalMemory() - runtime.freeMemory(); - new BukkitRunnable() - { - @Override - public void run() - { - try - { - TFM_TickMeter tickMeter = new TFM_TickMeter(plugin); - tickMeter.startTicking(); - Thread.sleep(2500); - final double ticksPerSecond = tickMeter.stopTicking(); + playerMsg(sender, + "Reserved Memory: " + (double) runtime.totalMemory() / (double) BYTES_PER_MB + "mb"); + playerMsg(sender, "Used Memory: " + new DecimalFormat("#").format( + (double) usedMem / (double) BYTES_PER_MB) + "mb (" + new DecimalFormat("#").format( + ((double) usedMem / (double) runtime.totalMemory()) * 100.0) + "%)"); + playerMsg(sender, + "Max Memory: " + (double) runtime.maxMemory() / (double) BYTES_PER_MB + "mb"); + playerMsg(sender, "Calculating ticks per second, please wait..."); - new BukkitRunnable() - { - @Override - public void run() - { - playerMsg(sender, "Ticks per second: " + (TPS_RANGE.containsDouble(ticksPerSecond) ? ChatColor.GREEN : ChatColor.RED) + ticksPerSecond); - } - }.runTask(plugin); - } - catch (Exception ex) - { - Log.severe(ex); - } - } - }.runTaskAsynchronously(plugin); + new BukkitRunnable() { + @Override + public void run() { + try { + TFM_TickMeter tickMeter = new TFM_TickMeter(plugin); + tickMeter.startTicking(); + Thread.sleep(2500); + final double ticksPerSecond = tickMeter.stopTicking(); - return true; - } + new BukkitRunnable() { + @Override + public void run() { + playerMsg(sender, + "Ticks per second: " + (TPS_RANGE.containsDouble(ticksPerSecond) + ? ChatColor.GREEN : ChatColor.RED) + ticksPerSecond); + } + }.runTask(plugin); + } catch (Exception ex) { + Log.severe(ex); + } + } + }.runTaskAsynchronously(plugin); - private class TFM_TickMeter - { - private final AtomicInteger ticks = new AtomicInteger(); - private final TotalFreedomMod plugin; - private long startTime; - private BukkitTask task; + return true; + } - public TFM_TickMeter(TotalFreedomMod plugin) - { - this.plugin = plugin; - } + private class TFM_TickMeter { - public void startTicking() - { - startTime = System.currentTimeMillis(); - ticks.set(0); + private final AtomicInteger ticks = new AtomicInteger(); + private final TotalFreedomMod plugin; + private long startTime; + private BukkitTask task; - task = new BukkitRunnable() - { - @Override - public void run() - { - ticks.incrementAndGet(); - } - }.runTaskTimer(plugin, 0L, 1L); - } + public TFM_TickMeter(TotalFreedomMod plugin) { + this.plugin = plugin; + } - public double stopTicking() - { - task.cancel(); - long elapsed = System.currentTimeMillis() - startTime; - int tickCount = ticks.get(); + public void startTicking() { + startTime = System.currentTimeMillis(); + ticks.set(0); - return (double) tickCount / ((double) elapsed / 1000.0); - } - } + task = new BukkitRunnable() { + @Override + public void run() { + ticks.incrementAndGet(); + } + }.runTaskTimer(plugin, 0L, 1L); + } + + public double stopTicking() { + task.cancel(); + long elapsed = System.currentTimeMillis() - startTime; + int tickCount = ticks.get(); + + return (double) tickCount / ((double) elapsed / 1000.0); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_invis.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_invis.java index ad5af52..2c84718 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_invis.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_invis.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -8,55 +10,47 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffectType; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_invis extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - boolean smite = false; - if (args.length >= 1) { - if (args[0].equalsIgnoreCase("smite")) { - Utilities.adminAction(sender.getName(), "Smiting all invisible players", true); - smite = true; - } else - { - return false; - } - } - List players = new ArrayList(); - int smites = 0; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + boolean smite = false; + if (args.length >= 1) { + if (args[0].equalsIgnoreCase("smite")) { + Utilities.adminAction(sender.getName(), "Smiting all invisible players", true); + smite = true; + } else { + return false; + } + } - for (Player player : server.getOnlinePlayers()) - { - if (player.hasPotionEffect(PotionEffectType.INVISIBILITY)) - { - players.add(player.getName()); - if (smite && !AdminList.isSuperAdmin(player)) - { - player.setHealth(0.0); - smites++; - } - } - } + List players = new ArrayList(); + int smites = 0; - if (players.isEmpty()) - { - playerMsg(sender, "There are no invisible players"); - return true; - } + for (Player player : server.getOnlinePlayers()) { + if (player.hasPotionEffect(PotionEffectType.INVISIBILITY)) { + players.add(player.getName()); + if (smite && !AdminList.isSuperAdmin(player)) { + player.setHealth(0.0); + smites++; + } + } + } - if (smite) - { - playerMsg(sender, "Smitten " + smites + " players"); - } - else - { - playerMsg(sender, "Invisble players (" + players.size() + "): " + StringUtils.join(players, ", ")); - } + if (players.isEmpty()) { + playerMsg(sender, "There are no invisible players"); + return true; + } - return true; - } + if (smite) { + playerMsg(sender, "Smitten " + smites + " players"); + } else { + playerMsg(sender, + "Invisble players (" + players.size() + "): " + StringUtils.join(players, ", ")); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_jumppads.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_jumppads.java index 7d0b350..362f31d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_jumppads.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_jumppads.java @@ -8,80 +8,72 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_jumppads extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0 || args.length > 2) { - return false; - } - if (args.length == 1) { - if (args[0].equalsIgnoreCase("info")) { - playerMsg(sender, "Jumppads: " + (JumpPads.getMode().isOn() ? "Enabled" : "Disabled"), ChatColor.BLUE); - playerMsg(sender, "Sideways: " + (JumpPads.getMode() == JumpPads.JumpPadMode.NORMAL_AND_SIDEWAYS ? "Enabled" : "Disabled"), ChatColor.BLUE); - playerMsg(sender, "Strength: " + (JumpPads.getStrength() * 10 - 1), ChatColor.BLUE); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0 || args.length > 2) { + return false; + } - if ("off".equals(args[0])) - { - Utilities.adminAction(sender.getName(), "Disabling Jumppads", false); - JumpPads.setMode(JumpPads.JumpPadMode.OFF); - } - else - { - Utilities.adminAction(sender.getName(), "Enabling Jumppads", false); - JumpPads.setMode(JumpPads.JumpPadMode.MADGEEK); - } - } - else - { - if (JumpPads.getMode() == JumpPads.JumpPadMode.OFF) - { - playerMsg(sender, "Jumppads are currently disabled, please enable them before changing jumppads settings."); - return true; - } + if (args.length == 1) { + if (args[0].equalsIgnoreCase("info")) { + playerMsg(sender, + "Jumppads: " + (JumpPads.getMode().isOn() ? "Enabled" : "Disabled"), + ChatColor.BLUE); + playerMsg(sender, + "Sideways: " + (JumpPads.getMode() == JumpPads.JumpPadMode.NORMAL_AND_SIDEWAYS + ? "Enabled" : "Disabled"), ChatColor.BLUE); + playerMsg(sender, "Strength: " + (JumpPads.getStrength() * 10 - 1), ChatColor.BLUE); + return true; + } - if (args[0].equalsIgnoreCase("sideways")) - { - if ("off".equals(args[1])) - { - Utilities.adminAction(sender.getName(), "Setting Jumppads mode to: Madgeek", false); - JumpPads.setMode(JumpPads.JumpPadMode.MADGEEK); - } - else - { - Utilities.adminAction(sender.getName(), "Setting Jumppads mode to: Normal and Sideways", false); - JumpPads.setMode(JumpPads.JumpPadMode.NORMAL_AND_SIDEWAYS); - } - } - else if (args[0].equalsIgnoreCase("strength")) - { - final float strength; - try - { - strength = Float.parseFloat(args[1]); - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid Strength"); - return true; - } + if ("off".equals(args[0])) { + Utilities.adminAction(sender.getName(), "Disabling Jumppads", false); + JumpPads.setMode(JumpPads.JumpPadMode.OFF); + } else { + Utilities.adminAction(sender.getName(), "Enabling Jumppads", false); + JumpPads.setMode(JumpPads.JumpPadMode.MADGEEK); + } + } else { + if (JumpPads.getMode() == JumpPads.JumpPadMode.OFF) { + playerMsg(sender, + "Jumppads are currently disabled, please enable them before changing jumppads settings."); + return true; + } - if (strength > 10 || strength < 1) - { - playerMsg(sender, "Invalid Strength: The strength may be 1 through 10."); - return true; - } + if (args[0].equalsIgnoreCase("sideways")) { + if ("off".equals(args[1])) { + Utilities.adminAction(sender.getName(), "Setting Jumppads mode to: Madgeek", + false); + JumpPads.setMode(JumpPads.JumpPadMode.MADGEEK); + } else { + Utilities.adminAction(sender.getName(), + "Setting Jumppads mode to: Normal and Sideways", false); + JumpPads.setMode(JumpPads.JumpPadMode.NORMAL_AND_SIDEWAYS); + } + } else if (args[0].equalsIgnoreCase("strength")) { + final float strength; + try { + strength = Float.parseFloat(args[1]); + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid Strength"); + return true; + } - Utilities.adminAction(sender.getName(), "Setting Jumppads strength to: " + strength, false); - JumpPads.setStrength((strength / 10) + 0.1F); - } - else - { - return false; - } - } + if (strength > 10 || strength < 1) { + playerMsg(sender, "Invalid Strength: The strength may be 1 through 10."); + return true; + } - return true; - } + Utilities.adminAction(sender.getName(), "Setting Jumppads strength to: " + strength, + false); + JumpPads.setStrength((strength / 10) + 0.1F); + } else { + return false; + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_kicknoob.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_kicknoob.java index d26a566..92232ad 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_kicknoob.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_kicknoob.java @@ -9,16 +9,18 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.BOTH, blockHostConsole = true) public class Command_kicknoob extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Disconnecting all non-superadmins.", true); - for (Player player : server.getOnlinePlayers()) { - if (!AdminList.isSuperAdmin(player)) { - player.kickPlayer(ChatColor.RED + "Disconnected by admin."); - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Disconnecting all non-superadmins.", true); - return true; - } + for (Player player : server.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(player)) { + player.kickPlayer(ChatColor.RED + "Disconnected by admin."); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_landmine.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_landmine.java index 17e27a6..ec4f5e3 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_landmine.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_landmine.java @@ -1,5 +1,8 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -10,74 +13,65 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_landmine extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!ConfigurationEntry.LANDMINES_ENABLED.getBoolean()) { - playerMsg(sender, "The landmine is currently disabled.", ChatColor.GREEN); - return true; - } - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { - playerMsg(sender, "Explosions are currently disabled.", ChatColor.GREEN); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!ConfigurationEntry.LANDMINES_ENABLED.getBoolean()) { + playerMsg(sender, "The landmine is currently disabled.", ChatColor.GREEN); + return true; + } - double radius = 2.0; + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + playerMsg(sender, "Explosions are currently disabled.", ChatColor.GREEN); + return true; + } - if (args.length >= 1) - { - if ("list".equalsIgnoreCase(args[0])) - { - final Iterator landmines = TFM_LandmineData.landmines.iterator(); - while (landmines.hasNext()) - { - playerMsg(sender, landmines.next().toString()); - } - return true; - } + double radius = 2.0; - try - { - radius = Math.max(2.0, Math.min(6.0, Double.parseDouble(args[0]))); - } - catch (NumberFormatException ex) - { - } - } + if (args.length >= 1) { + if ("list".equalsIgnoreCase(args[0])) { + final Iterator landmines = TFM_LandmineData.landmines.iterator(); + while (landmines.hasNext()) { + playerMsg(sender, landmines.next().toString()); + } + return true; + } - final Block landmine = sender_p.getLocation().getBlock().getRelative(BlockFace.DOWN); - landmine.setType(Material.TNT); - TFM_LandmineData.landmines.add(new TFM_LandmineData(landmine.getLocation(), sender_p, radius)); + try { + radius = Math.max(2.0, Math.min(6.0, Double.parseDouble(args[0]))); + } catch (NumberFormatException ex) { + } + } - playerMsg(sender, "Landmine planted - Radius = " + radius + " blocks.", ChatColor.GREEN); + final Block landmine = sender_p.getLocation().getBlock().getRelative(BlockFace.DOWN); + landmine.setType(Material.TNT); + TFM_LandmineData.landmines.add( + new TFM_LandmineData(landmine.getLocation(), sender_p, radius)); - return true; - } + playerMsg(sender, "Landmine planted - Radius = " + radius + " blocks.", ChatColor.GREEN); - public static class TFM_LandmineData - { - public static final List landmines = new ArrayList(); - public final Location location; - public final Player player; - public final double radius; + return true; + } - public TFM_LandmineData(Location location, Player player, double radius) - { - this.location = location; - this.player = player; - this.radius = radius; - } + public static class TFM_LandmineData { - @Override - public String toString() - { - return this.location.toString() + ", " + this.radius + ", " + this.player.getName(); - } - } + public static final List landmines = new ArrayList(); + public final Location location; + public final Player player; + public final double radius; + + public TFM_LandmineData(Location location, Player player, double radius) { + this.location = location; + this.player = player; + this.radius = radius; + } + + @Override + public String toString() { + return this.location.toString() + ", " + this.radius + ", " + this.player.getName(); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lastcmd.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lastcmd.java index 3920bb3..7f220c9 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lastcmd.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lastcmd.java @@ -8,31 +8,31 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_lastcmd extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - final Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - final PlayerData playerdata = PlayerData.getPlayerData(player); + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - if (playerdata != null) - { - String lastCommand = playerdata.getLastCommand(); - if (lastCommand.isEmpty()) - { - lastCommand = "(none)"; - } - playerMsg(sender, player.getName() + " - Last Command: " + lastCommand, ChatColor.GRAY); - } + final PlayerData playerdata = PlayerData.getPlayerData(player); - return true; - } + if (playerdata != null) { + String lastCommand = playerdata.getLastCommand(); + if (lastCommand.isEmpty()) { + lastCommand = "(none)"; + } + playerMsg(sender, player.getName() + " - Last Command: " + lastCommand, ChatColor.GRAY); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_list.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_list.java index aff3d31..0340a9c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_list.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_list.java @@ -1,6 +1,9 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; +import me.StevenLawson.TotalFreedomMod.manager.VanishManager; import me.StevenLawson.TotalFreedomMod.player.PlayerRank; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -9,92 +12,87 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_list extends FreedomCommand { - private enum ListFilter { - ALL, - ADMINS, - IMPOSTORS - } - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 1) { - return false; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 1) { + return false; + } - if (Utilities.isFromHostConsole(sender.getName())) { - final List names = new ArrayList(); - for (Player player : server.getOnlinePlayers()) - { - names.add(player.getName()); - } - playerMsg(sender, "There are " + names.size() + "/" + server.getMaxPlayers() + " players online:\n" + StringUtils.join(names, ", "), ChatColor.WHITE); - return true; - } + if (Utilities.isFromHostConsole(sender.getName())) { + final List names = new ArrayList(); + for (Player player : server.getOnlinePlayers()) { + if (VanishManager.isVanished(player)) { + continue; + } + names.add(player.getName()); + } + playerMsg(sender, + "There are " + names.size() + "/" + VanishManager.getFakeOnlinePlayers() + + " players online:\n" + StringUtils.join(names, ", "), ChatColor.WHITE); + return true; + } - final ListFilter listFilter; - if (args.length == 1) - { - if ("-a".equals(args[0])) - { - listFilter = ListFilter.ADMINS; - } - else if ("-i".equals(args[0])) - { - listFilter = ListFilter.IMPOSTORS; - } - else - { - return false; - } - } - else - { - listFilter = ListFilter.ALL; - } + final ListFilter listFilter; + if (args.length == 1) { + if ("-a".equals(args[0])) { + listFilter = ListFilter.ADMINS; + } else if ("-i".equals(args[0])) { + listFilter = ListFilter.IMPOSTORS; + } else { + return false; + } + } else { + listFilter = ListFilter.ALL; + } - final StringBuilder onlineStats = new StringBuilder(); - final StringBuilder onlineUsers = new StringBuilder(); + final StringBuilder onlineStats = new StringBuilder(); + final StringBuilder onlineUsers = new StringBuilder(); - onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size()); - onlineStats.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers()); - onlineStats.append(ChatColor.BLUE).append(" players online."); + onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED) + .append(VanishManager.getFakeOnlinePlayers()); + onlineStats.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED) + .append(server.getMaxPlayers()); + onlineStats.append(ChatColor.BLUE).append(" players online."); - final List names = new ArrayList(); - for (Player player : server.getOnlinePlayers()) - { - if (listFilter == ListFilter.ADMINS && !AdminList.isSuperAdmin(player)) - { - continue; - } + final List names = new ArrayList(); + for (Player player : server.getOnlinePlayers()) { + if (VanishManager.isVanished(player)) { + continue; + } - if (listFilter == ListFilter.IMPOSTORS && !AdminList.isAdminImpostor(player)) - { - continue; - } + if (listFilter == ListFilter.ADMINS && !AdminList.isSuperAdmin(player)) { + continue; + } - names.add(PlayerRank.fromSender(player).getPrefix() + player.getName()); - } + if (listFilter == ListFilter.IMPOSTORS && !AdminList.isAdminImpostor(player)) { + continue; + } - onlineUsers.append("Connected "); - onlineUsers.append(listFilter == ListFilter.ADMINS ? "admins: " : "players: "); - onlineUsers.append(StringUtils.join(names, ChatColor.WHITE + ", ")); + names.add(PlayerRank.fromSender(player).getPrefix() + player.getName()); + } - if (senderIsConsole) - { - sender.sendMessage(ChatColor.stripColor(onlineStats.toString())); - sender.sendMessage(ChatColor.stripColor(onlineUsers.toString())); - } - else - { - sender.sendMessage(onlineStats.toString()); - sender.sendMessage(onlineUsers.toString()); - } + onlineUsers.append("Connected "); + onlineUsers.append(listFilter == ListFilter.ADMINS ? "admins: " : "players: "); + onlineUsers.append(StringUtils.join(names, ChatColor.WHITE + ", ")); - return true; - } + if (senderIsConsole) { + sender.sendMessage(ChatColor.stripColor(onlineStats.toString())); + sender.sendMessage(ChatColor.stripColor(onlineUsers.toString())); + } else { + sender.sendMessage(onlineStats.toString()); + sender.sendMessage(onlineUsers.toString()); + } + + return true; + } + + private enum ListFilter { + ALL, + ADMINS, + IMPOSTORS + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_localspawn.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_localspawn.java index 75771ef..d9162de 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_localspawn.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_localspawn.java @@ -5,10 +5,13 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_localspawn extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - sender_p.teleport(sender_p.getWorld().getSpawnLocation()); - playerMsg(sender, "Teleported to spawnpoint for world \"" + sender_p.getWorld().getName() + "\"."); - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + sender_p.teleport(sender_p.getWorld().getSpawnLocation()); + playerMsg(sender, + "Teleported to spawnpoint for world \"" + sender_p.getWorld().getName() + "\"."); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lockup.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lockup.java index 6a3897e..f8d9b58 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lockup.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_lockup.java @@ -10,110 +10,87 @@ import org.bukkit.scheduler.BukkitTask; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE, blockHostConsole = true) public class Command_lockup extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 1) { - if (args[0].equalsIgnoreCase("all")) { - Utilities.adminAction(sender.getName(), "Locking up all players", true); - for (Player player : server.getOnlinePlayers()) { - startLockup(player); - } - playerMsg(sender, "Locked up all players."); - } - else if (args[0].equalsIgnoreCase("purge")) - { - Utilities.adminAction(sender.getName(), "Unlocking all players", true); - for (Player player : server.getOnlinePlayers()) - { - cancelLockup(player); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 1) { + if (args[0].equalsIgnoreCase("all")) { + Utilities.adminAction(sender.getName(), "Locking up all players", true); - playerMsg(sender, "Unlocked all players."); - } - else - { - return false; - } - } - else if (args.length == 2) - { - if (args[1].equalsIgnoreCase("on")) - { - final Player player = getPlayer(args[0]); + for (Player player : server.getOnlinePlayers()) { + startLockup(player); + } + playerMsg(sender, "Locked up all players."); + } else if (args[0].equalsIgnoreCase("purge")) { + Utilities.adminAction(sender.getName(), "Unlocking all players", true); + for (Player player : server.getOnlinePlayers()) { + cancelLockup(player); + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + playerMsg(sender, "Unlocked all players."); + } else { + return false; + } + } else if (args.length == 2) { + if (args[1].equalsIgnoreCase("on")) { + final Player player = getPlayer(args[0]); - Utilities.adminAction(sender.getName(), "Locking up " + player.getName(), true); - startLockup(player); - playerMsg(sender, "Locked up " + player.getName() + "."); - } - else if ("off".equals(args[1])) - { - final Player player = getPlayer(args[0]); + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + Utilities.adminAction(sender.getName(), "Locking up " + player.getName(), true); + startLockup(player); + playerMsg(sender, "Locked up " + player.getName() + "."); + } else if ("off".equals(args[1])) { + final Player player = getPlayer(args[0]); - Utilities.adminAction(sender.getName(), "Unlocking " + player.getName(), true); - cancelLockup(player); - playerMsg(sender, "Unlocked " + player.getName() + "."); - } - else - { - return false; - } - } - else - { - return false; - } + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - return true; - } + Utilities.adminAction(sender.getName(), "Unlocking " + player.getName(), true); + cancelLockup(player); + playerMsg(sender, "Unlocked " + player.getName() + "."); + } else { + return false; + } + } else { + return false; + } - private void cancelLockup(PlayerData playerdata) - { - BukkitTask lockupScheduleID = playerdata.getLockupScheduleID(); - if (lockupScheduleID != null) - { - lockupScheduleID.cancel(); - playerdata.setLockupScheduleID(null); - } - } + return true; + } - private void cancelLockup(final Player player) - { - cancelLockup(PlayerData.getPlayerData(player)); - } + private void cancelLockup(PlayerData playerdata) { + BukkitTask lockupScheduleID = playerdata.getLockupScheduleID(); + if (lockupScheduleID != null) { + lockupScheduleID.cancel(); + playerdata.setLockupScheduleID(null); + } + } - private void startLockup(final Player player) - { - final PlayerData playerdata = PlayerData.getPlayerData(player); + private void cancelLockup(final Player player) { + cancelLockup(PlayerData.getPlayerData(player)); + } - cancelLockup(playerdata); + private void startLockup(final Player player) { + final PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.setLockupScheduleID(new BukkitRunnable() - { - @Override - public void run() - { - if (player.isOnline()) - { - player.openInventory(player.getInventory()); - } - else - { - cancelLockup(playerdata); - } - } - }.runTaskTimer(plugin, 0L, 5L)); - } + cancelLockup(playerdata); + + playerdata.setLockupScheduleID(new BukkitRunnable() { + @Override + public void run() { + if (player.isOnline()) { + player.openInventory(player.getInventory()); + } else { + cancelLockup(playerdata); + } + } + }.runTaskTimer(plugin, 0L, 5L)); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_logs.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_logs.java index 58b5c62..e387c45 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_logs.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_logs.java @@ -1,5 +1,14 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.Admin; @@ -11,144 +20,128 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; -import java.util.Map.Entry; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_logs extends FreedomCommand { - public static void deactivateSuperadmin(Admin superadmin) { - for (String ip : superadmin.getIps()) { - updateLogsRegistration(null, superadmin.getLastLoginName(), ip, LogsRegistrationMode.DELETE); - } - } - public static void updateLogsRegistration(final CommandSender sender, final Player target, final LogsRegistrationMode mode) - { - updateLogsRegistration(sender, target.getName(), target.getAddress().getAddress().getHostAddress().trim(), mode); - } + public static void deactivateSuperadmin(Admin superadmin) { + for (String ip : superadmin.getIps()) { + updateLogsRegistration(null, superadmin.getLastLoginName(), ip, + LogsRegistrationMode.DELETE); + } + } - public static void updateLogsRegistration(final CommandSender sender, final String targetName, final String targetIP, final LogsRegistrationMode mode) - { - final String logsRegisterURL = ConfigurationEntry.LOGS_URL.getString(); - final String logsRegisterPassword = ConfigurationEntry.LOGS_SECRET.getString(); + public static void updateLogsRegistration(final CommandSender sender, final Player target, + final LogsRegistrationMode mode) { + updateLogsRegistration(sender, target.getName(), + target.getAddress().getAddress().getHostAddress().trim(), mode); + } - if (logsRegisterURL == null || logsRegisterPassword == null || logsRegisterURL.isEmpty() || logsRegisterPassword.isEmpty()) - { - return; - } + public static void updateLogsRegistration(final CommandSender sender, final String targetName, + final String targetIP, final LogsRegistrationMode mode) { + final String logsRegisterURL = ConfigurationEntry.LOGS_URL.getString(); + final String logsRegisterPassword = ConfigurationEntry.LOGS_SECRET.getString(); - new BukkitRunnable() - { - @Override - public void run() - { - try - { - if (sender != null) - { - sender.sendMessage(ChatColor.YELLOW + "Connecting..."); - } + if (logsRegisterURL == null || logsRegisterPassword == null || logsRegisterURL.isEmpty() + || logsRegisterPassword.isEmpty()) { + return; + } - URL url = new URLBuilder(logsRegisterURL) - .addQueryParameter("mode", mode.toString()) - .addQueryParameter("password", logsRegisterPassword) - .addQueryParameter("name", targetName) - .addQueryParameter("ip", targetIP) - .getURL(); + new BukkitRunnable() { + @Override + public void run() { + try { + if (sender != null) { + sender.sendMessage(ChatColor.YELLOW + "Connecting..."); + } - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(1000 * 5); - connection.setReadTimeout(1000 * 5); - connection.setUseCaches(false); - connection.setRequestMethod("HEAD"); + URL url = new URLBuilder(logsRegisterURL) + .addQueryParameter("mode", mode.toString()) + .addQueryParameter("password", logsRegisterPassword) + .addQueryParameter("name", targetName) + .addQueryParameter("ip", targetIP) + .getURL(); - final int responseCode = connection.getResponseCode(); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setConnectTimeout(1000 * 5); + connection.setReadTimeout(1000 * 5); + connection.setUseCaches(false); + connection.setRequestMethod("HEAD"); - if (sender != null) - { - new BukkitRunnable() - { - @Override - public void run() - { - if (responseCode == 200) - { - sender.sendMessage(ChatColor.GREEN + "Registration " + mode + "d."); - } - else - { - sender.sendMessage(ChatColor.RED + "Error contacting logs registration server."); - } - } - }.runTask(TotalFreedomMod.plugin); - } - } catch (Exception ex) { - Log.severe(ex); - } - } - }.runTaskAsynchronously(TotalFreedomMod.plugin); - } + final int responseCode = connection.getResponseCode(); - @Override - public boolean run(final CommandSender sender, final org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - LogsRegistrationMode mode = LogsRegistrationMode.UPDATE; + if (sender != null) { + new BukkitRunnable() { + @Override + public void run() { + if (responseCode == 200) { + sender.sendMessage( + ChatColor.GREEN + "Registration " + mode + "d."); + } else { + sender.sendMessage(ChatColor.RED + + "Error contacting logs registration server."); + } + } + }.runTask(TotalFreedomMod.plugin); + } + } catch (Exception ex) { + Log.severe(ex); + } + } + }.runTaskAsynchronously(TotalFreedomMod.plugin); + } - if (args.length == 1) { - mode = ("off".equals(args[0]) ? LogsRegistrationMode.DELETE : LogsRegistrationMode.UPDATE); - } + @Override + public boolean run(final CommandSender sender, final org.bukkit.entity.Player sender_p, + Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { + LogsRegistrationMode mode = LogsRegistrationMode.UPDATE; - updateLogsRegistration(sender, sender_p, mode); + if (args.length == 1) { + mode = ("off".equals(args[0]) ? LogsRegistrationMode.DELETE + : LogsRegistrationMode.UPDATE); + } - return true; - } + updateLogsRegistration(sender, sender_p, mode); - public enum LogsRegistrationMode - { - UPDATE("update"), DELETE("delete"); - private final String mode; + return true; + } - LogsRegistrationMode(String mode) - { - this.mode = mode; - } + public enum LogsRegistrationMode { + UPDATE("update"), DELETE("delete"); + private final String mode; - @Override - public String toString() - { - return mode; - } - } + LogsRegistrationMode(String mode) { + this.mode = mode; + } - private static class URLBuilder - { - private final String requestPath; - private final Map queryStringMap = new HashMap(); + @Override + public String toString() { + return mode; + } + } - public URLBuilder(String requestPath) - { - this.requestPath = requestPath; - } + private static class URLBuilder { - public URLBuilder addQueryParameter(String key, String value) - { - queryStringMap.put(key, value); - return this; - } + private final String requestPath; + private final Map queryStringMap = new HashMap(); - public URL getURL() throws MalformedURLException - { - List pairs = new ArrayList(); - Iterator> it = queryStringMap.entrySet().iterator(); - while (it.hasNext()) - { - Entry pair = it.next(); - pairs.add(pair.getKey() + "=" + pair.getValue()); - } + public URLBuilder(String requestPath) { + this.requestPath = requestPath; + } - return new URL(requestPath + "?" + StringUtils.join(pairs, "&")); - } - } + public URLBuilder addQueryParameter(String key, String value) { + queryStringMap.put(key, value); + return this; + } + + public URL getURL() throws MalformedURLException { + List pairs = new ArrayList(); + Iterator> it = queryStringMap.entrySet().iterator(); + while (it.hasNext()) { + Entry pair = it.next(); + pairs.add(pair.getKey() + "=" + pair.getValue()); + } + + return new URL(requestPath + "?" + StringUtils.join(pairs, "&")); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_moblimiter.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_moblimiter.java index c90cbfd..da95549 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_moblimiter.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_moblimiter.java @@ -7,70 +7,67 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_CONSOLE) public class Command_moblimiter extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - if (args[0].equalsIgnoreCase("on")) { - ConfigurationEntry.MOB_LIMITER_ENABLED.setBoolean(true); - } - else if (args[0].equalsIgnoreCase("off")) - { - ConfigurationEntry.MOB_LIMITER_ENABLED.setBoolean(false); - } - else if (args[0].equalsIgnoreCase("dragon")) - { - ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean()); - } - else if (args[0].equalsIgnoreCase("giant")) - { - ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean()); - } - else if (args[0].equalsIgnoreCase("slime")) - { - ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean()); - } - else if (args[0].equalsIgnoreCase("ghast")) - { - ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean()); - } - else - { - if (args.length < 2) - { - return false; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - if (args[0].equalsIgnoreCase("setmax")) - { - try - { - ConfigurationEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1])))); - } - catch (NumberFormatException nfex) - { - } - } - } + if (args[0].equalsIgnoreCase("on")) { + ConfigurationEntry.MOB_LIMITER_ENABLED.setBoolean(true); + } else if (args[0].equalsIgnoreCase("off")) { + ConfigurationEntry.MOB_LIMITER_ENABLED.setBoolean(false); + } else if (args[0].equalsIgnoreCase("dragon")) { + ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean( + !ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean()); + } else if (args[0].equalsIgnoreCase("giant")) { + ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean( + !ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean()); + } else if (args[0].equalsIgnoreCase("slime")) { + ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean( + !ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean()); + } else if (args[0].equalsIgnoreCase("ghast")) { + ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean( + !ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean()); + } else { + if (args.length < 2) { + return false; + } - if (ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()) - { - sender.sendMessage("Moblimiter enabled. Maximum mobcount set to: " + ConfigurationEntry.MOB_LIMITER_MAX.getInteger() + "."); + if (args[0].equalsIgnoreCase("setmax")) { + try { + ConfigurationEntry.MOB_LIMITER_MAX.setInteger( + Math.max(0, Math.min(2000, Integer.parseInt(args[1])))); + } catch (NumberFormatException nfex) { + } + } + } - playerMsg(sender, "Dragon: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean() ? "disabled" : "enabled") + "."); - playerMsg(sender, "Giant: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean() ? "disabled" : "enabled") + "."); - playerMsg(sender, "Slime: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean() ? "disabled" : "enabled") + "."); - playerMsg(sender, "Ghast: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean() ? "disabled" : "enabled") + "."); - } - else - { - playerMsg(sender, "Moblimiter is disabled. No mob restrictions are in effect."); - } + if (ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()) { + sender.sendMessage("Moblimiter enabled. Maximum mobcount set to: " + + ConfigurationEntry.MOB_LIMITER_MAX.getInteger() + "."); - GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()); + playerMsg(sender, + "Dragon: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean() + ? "disabled" : "enabled") + "."); + playerMsg(sender, + "Giant: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean() ? "disabled" + : "enabled") + "."); + playerMsg(sender, + "Slime: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean() ? "disabled" + : "enabled") + "."); + playerMsg(sender, + "Ghast: " + (ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean() ? "disabled" + : "enabled") + "."); + } else { + playerMsg(sender, "Moblimiter is disabled. No mob restrictions are in effect."); + } - return true; - } + GameRuleHandler.setGameRule(GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, + !ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp.java index 1a38e5b..e48646d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp.java @@ -4,32 +4,36 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.entity.*; +import org.bukkit.entity.Ambient; +import org.bukkit.entity.Creature; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Slime; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_mp extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - playerMsg(sender, "Purging all mobs..."); - playerMsg(sender, purgeMobs() + " mobs removed."); - return true; - } - public static int purgeMobs() - { - int removed = 0; - for (World world : Bukkit.getWorlds()) - { - for (Entity ent : world.getLivingEntities()) - { - if (ent instanceof Creature || ent instanceof Ghast || ent instanceof Slime || ent instanceof EnderDragon || ent instanceof Ambient) - { - ent.remove(); - removed++; - } - } - } + public static int purgeMobs() { + int removed = 0; + for (World world : Bukkit.getWorlds()) { + for (Entity ent : world.getLivingEntities()) { + if (ent instanceof Creature || ent instanceof Ghast || ent instanceof Slime + || ent instanceof EnderDragon || ent instanceof Ambient) { + ent.remove(); + removed++; + } + } + } - return removed; - } + return removed; + } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + playerMsg(sender, "Purging all mobs..."); + playerMsg(sender, purgeMobs() + " mobs removed."); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp44.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp44.java index c50f0e2..b533621 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp44.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_mp44.java @@ -10,35 +10,36 @@ import org.bukkit.inventory.ItemStack; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_mp44 extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!ConfigurationEntry.MP44_ENABLED.getBoolean()) { - playerMsg(sender, "The mp44 is currently disabled.", ChatColor.GREEN); - return true; - } - if (args.length == 0) { - return false; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!ConfigurationEntry.MP44_ENABLED.getBoolean()) { + playerMsg(sender, "The mp44 is currently disabled.", ChatColor.GREEN); + return true; + } - PlayerData playerdata = PlayerData.getPlayerData(sender_p); + if (args.length == 0) { + return false; + } - if (args[0].equalsIgnoreCase("draw")) - { - playerdata.armMP44(); + PlayerData playerdata = PlayerData.getPlayerData(sender_p); - playerMsg(sender, "mp44 is ARMED! Left click with gunpowder to start firing, left click again to quit.", ChatColor.GREEN); - playerMsg(sender, "Type /mp44 sling to disable. -by Madgeek1450", ChatColor.GREEN); + if (args[0].equalsIgnoreCase("draw")) { + playerdata.armMP44(); - sender_p.setItemInHand(new ItemStack(Material.SULPHUR, 1)); - } - else - { - playerdata.disarmMP44(); + playerMsg(sender, + "mp44 is ARMED! Left click with gunpowder to start firing, left click again to quit.", + ChatColor.GREEN); + playerMsg(sender, "Type /mp44 sling to disable. -by Madgeek1450", ChatColor.GREEN); - sender.sendMessage(ChatColor.GREEN + "mp44 Disarmed."); - } + sender_p.setItemInHand(new ItemStack(Material.SULPHUR, 1)); + } else { + playerdata.disarmMP44(); - return true; - } + sender.sendMessage(ChatColor.GREEN + "mp44 Disarmed."); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_myadmin.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_myadmin.java index d7166f7..ba61373 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_myadmin.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_myadmin.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import org.apache.commons.lang3.StringUtils; import org.bukkit.ChatColor; @@ -7,40 +8,57 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.UUID; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_myadmin extends FreedomCommand { - @Override - public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - final UUID uuid = sender_p.getUniqueId(); // Get the sender's uuid as a variable. - if(args.length == 1) { - if ("clearloginmsg".equalsIgnoreCase(args[0])) { - playerMsg(sender, ChatColor.GRAY + "Cleared your custom login message."); // Notify player that the login message has been set. - AdminList.getEntry(uuid).setCustomLoginMessage(""); // Set the custom login message to the value. - AdminList.save(AdminList.getEntry(uuid)); // Save the modified value to the super admin configuration. + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, + String[] args, boolean senderIsConsole) { - AdminList.updateIndexLists(); // Update and refresh configuration. - return true; - } else { - return false; - } - } else if (args.length >= 2) { - if ("setlogin".equalsIgnoreCase(args[0])) { - final String inputMessage = StringUtils.join(args, " ", 1, args.length); // Parse the input provided. - playerMsg(sender, ChatColor.GRAY + "Set your custom login message."); // Notify player that the login message has been set. - playerMsg(sender, ChatColor.GRAY + "Your login message will show up as: \n" + ChatColor.AQUA + sender_p.getPlayer().getName() + " is " + ChatColor.translateAlternateColorCodes('&', inputMessage)); - AdminList.getEntry(uuid).setCustomLoginMessage(inputMessage); // Set the custom login message to the value. - AdminList.save(AdminList.getEntry(uuid)); // Save the modified value to the super admin configuration. + final UUID uuid = sender_p.getUniqueId(); // Get the sender's uuid as a variable. - AdminList.updateIndexLists(); // Update and refresh configuration. - return true; - } else { - return false; - } - } else { - return false; - } - } + if (args.length == 1) { + if ("clearloginmsg".equalsIgnoreCase(args[0])) { + playerMsg(sender, ChatColor.GRAY + + "Cleared your custom login message."); // Notify player that the login message has been set. + + AdminList.getEntry(uuid) + .setCustomLoginMessage(""); // Set the custom login message to the value. + AdminList.save(AdminList.getEntry( + uuid)); // Save the modified value to the super admin configuration. + + AdminList.updateIndexLists(); // Update and refresh configuration. + return true; + } else { + return false; + } + } else if (args.length >= 2) { + if ("setlogin".equalsIgnoreCase(args[0])) { + if (AdminList.getEntry(uuid) + == null) { // This means they're not actually in the super config. It will throw an exception if we don't return here. + return true; + } + + final String inputMessage = StringUtils.join(args, " ", 1, + args.length); // Parse the input provided. + playerMsg(sender, ChatColor.GRAY + + "Set your custom login message."); // Notify player that the login message has been set. + playerMsg(sender, + ChatColor.GRAY + "Your login message will show up as: \n" + ChatColor.AQUA + + sender_p.getPlayer().getName() + " is " + + ChatColor.translateAlternateColorCodes('&', inputMessage)); + AdminList.getEntry(uuid).setCustomLoginMessage( + inputMessage); // Set the custom login message to the value. + AdminList.save(AdminList.getEntry( + uuid)); // Save the modified value to the super admin configuration. + + AdminList.updateIndexLists(); // Update and refresh configuration. + return true; + } else { + return false; + } + } else { + return false; + } + } } \ No newline at end of file diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nether.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nether.java index 09c141f..9acbbde 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nether.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nether.java @@ -6,9 +6,11 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_nether extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.gotoWorld(sender_p, server.getWorlds().get(0).getName() + "_nether"); - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.gotoWorld(sender_p, server.getWorlds().get(0).getName() + "_nether"); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nf.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nf.java index a4586ec..8720c8d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nf.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nf.java @@ -1,5 +1,9 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.command.CommandBlocker; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; @@ -8,109 +12,92 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_nf extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - boolean nickMatched = false; - final List outputCommand = new ArrayList(); + private static Player getPlayerByDisplayName(String needle) { + needle = needle.toLowerCase().trim(); - if (args.length >= 1) { - final String[] argsList = args; - for (String arg : argsList) { - Player player = null; + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.getDisplayName().toLowerCase().trim().contains(needle)) { + return player; + } + } - Matcher matcher = Pattern.compile("^!(.+)$").matcher(arg); - if (matcher.find()) - { - String displayName = matcher.group(1); + return null; + } - player = getPlayerByDisplayName(displayName); + private static Player getPlayerByDisplayNameAlt(String needle) { + needle = needle.toLowerCase().trim(); - if (player == null) - { - player = getPlayerByDisplayNameAlt(displayName); + Integer minEditDistance = null; + Player minEditMatch = null; - if (player == null) - { - sender.sendMessage(ChatColor.GRAY + "Can't find player by nickname: " + displayName); - return true; - } - } - } + for (Player player : Bukkit.getOnlinePlayers()) { + String haystack = player.getDisplayName().toLowerCase().trim(); + int editDistance = StringUtils.getLevenshteinDistance(needle, haystack.toLowerCase()); + if (minEditDistance == null || minEditDistance.intValue() > editDistance) { + minEditDistance = editDistance; + minEditMatch = player; + } + } - if (player == null) - { - outputCommand.add(arg); - } - else - { - nickMatched = true; - outputCommand.add(player.getName()); - } - } - } + return minEditMatch; + } - if (!nickMatched) - { - sender.sendMessage("No nicknames replaced in command."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + boolean nickMatched = false; - String newCommand = StringUtils.join(outputCommand, " "); + final List outputCommand = new ArrayList(); - if (CommandBlocker.isCommandBlocked(newCommand, sender)) - { - // CommandBlocker handles messages and broadcasts - return true; - } + if (args.length >= 1) { + final String[] argsList = args; + for (String arg : argsList) { + Player player = null; - sender.sendMessage("Sending command: \"" + newCommand + "\"."); - server.dispatchCommand(sender, newCommand); + Matcher matcher = Pattern.compile("^!(.+)$").matcher(arg); + if (matcher.find()) { + String displayName = matcher.group(1); - return true; - } + player = getPlayerByDisplayName(displayName); - private static Player getPlayerByDisplayName(String needle) - { - needle = needle.toLowerCase().trim(); + if (player == null) { + player = getPlayerByDisplayNameAlt(displayName); - for (Player player : Bukkit.getOnlinePlayers()) - { - if (player.getDisplayName().toLowerCase().trim().contains(needle)) - { - return player; - } - } + if (player == null) { + sender.sendMessage( + ChatColor.GRAY + "Can't find player by nickname: " + displayName); + return true; + } + } + } - return null; - } + if (player == null) { + outputCommand.add(arg); + } else { + nickMatched = true; + outputCommand.add(player.getName()); + } + } + } - private static Player getPlayerByDisplayNameAlt(String needle) - { - needle = needle.toLowerCase().trim(); + if (!nickMatched) { + sender.sendMessage("No nicknames replaced in command."); + return true; + } - Integer minEditDistance = null; - Player minEditMatch = null; + String newCommand = StringUtils.join(outputCommand, " "); - for (Player player : Bukkit.getOnlinePlayers()) - { - String haystack = player.getDisplayName().toLowerCase().trim(); - int editDistance = StringUtils.getLevenshteinDistance(needle, haystack.toLowerCase()); - if (minEditDistance == null || minEditDistance.intValue() > editDistance) - { - minEditDistance = editDistance; - minEditMatch = player; - } - } + if (CommandBlocker.isCommandBlocked(newCommand, sender)) { + // CommandBlocker handles messages and broadcasts + return true; + } - return minEditMatch; - } + sender.sendMessage("Sending command: \"" + newCommand + "\"."); + server.dispatchCommand(sender, newCommand); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nickclean.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nickclean.java index 30411d3..b9b4765 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nickclean.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nickclean.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -8,36 +10,37 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_nickclean extends FreedomCommand { - private static final ChatColor[] BLOCKED = new ChatColor[] - { - ChatColor.MAGIC, - ChatColor.STRIKETHROUGH, - }; - private static final Pattern REGEX = Pattern.compile("\\u00A7[" + StringUtils.join(BLOCKED, "") + "]"); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Cleaning all nicknames.", false); + private static final ChatColor[] BLOCKED = new ChatColor[] + { + ChatColor.MAGIC, + ChatColor.STRIKETHROUGH, + }; + private static final Pattern REGEX = Pattern.compile( + "\\u00A7[" + StringUtils.join(BLOCKED, "") + "]"); - for (final Player player : server.getOnlinePlayers()) { - final String playerName = player.getName(); - final String nickName = EssentialsBridge.getNickname(playerName); - if (nickName != null && !nickName.isEmpty() && !nickName.equalsIgnoreCase(playerName)) { - final Matcher matcher = REGEX.matcher(nickName); - if (matcher.find()) - { - final String newNickName = matcher.replaceAll(""); - playerMsg(sender, ChatColor.RESET + playerName + ": \"" + nickName + ChatColor.RESET + "\" -> \"" + newNickName + ChatColor.RESET + "\"."); - EssentialsBridge.setNickname(playerName, newNickName); - } - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Cleaning all nicknames.", false); - return true; - } + for (final Player player : server.getOnlinePlayers()) { + final String playerName = player.getName(); + final String nickName = EssentialsBridge.getNickname(playerName); + if (nickName != null && !nickName.isEmpty() && !nickName.equalsIgnoreCase(playerName)) { + final Matcher matcher = REGEX.matcher(nickName); + if (matcher.find()) { + final String newNickName = matcher.replaceAll(""); + playerMsg(sender, + ChatColor.RESET + playerName + ": \"" + nickName + ChatColor.RESET + + "\" -> \"" + newNickName + ChatColor.RESET + "\"."); + EssentialsBridge.setNickname(playerName, newNickName); + } + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nicknyan.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nicknyan.java index 4c160a1..1f6d364 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nicknyan.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_nicknyan.java @@ -10,58 +10,54 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_nicknyan extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if ("off".equals(args[0])) { - EssentialsBridge.setNickname(sender.getName(), null); - playerMsg(sender, "Nickname cleared."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - final String nickPlain = ChatColor.stripColor(Utilities.colorize(args[0].trim())); + if ("off".equals(args[0])) { + EssentialsBridge.setNickname(sender.getName(), null); + playerMsg(sender, "Nickname cleared."); + return true; + } - if (!nickPlain.matches("^[a-zA-Z_0-9\u00a7]+$")) - { - playerMsg(sender, "That nickname contains invalid characters."); - return true; - } - else if (nickPlain.length() < 4 || nickPlain.length() > 30) - { - playerMsg(sender, "Your nickname must be between 4 and 30 characters long."); - return true; - } + final String nickPlain = ChatColor.stripColor(Utilities.colorize(args[0].trim())); - for (Player player : Bukkit.getOnlinePlayers()) - { - if (player == sender_p) - { - continue; - } - if (player.getName().equalsIgnoreCase(nickPlain) || ChatColor.stripColor(player.getDisplayName()).trim().equalsIgnoreCase(nickPlain)) - { - playerMsg(sender, "That nickname is already in use."); - return true; - } - } + if (!nickPlain.matches("^[a-zA-Z_0-9\u00a7]+$")) { + playerMsg(sender, "That nickname contains invalid characters."); + return true; + } else if (nickPlain.length() < 4 || nickPlain.length() > 30) { + playerMsg(sender, "Your nickname must be between 4 and 30 characters long."); + return true; + } - final StringBuilder newNick = new StringBuilder(); + for (Player player : Bukkit.getOnlinePlayers()) { + if (player == sender_p) { + continue; + } + if (player.getName().equalsIgnoreCase(nickPlain) || ChatColor.stripColor( + player.getDisplayName()).trim().equalsIgnoreCase(nickPlain)) { + playerMsg(sender, "That nickname is already in use."); + return true; + } + } - final char[] chars = nickPlain.toCharArray(); - for (char c : chars) - { - newNick.append(Utilities.randomChatColor()).append(c); - } + final StringBuilder newNick = new StringBuilder(); - newNick.append(ChatColor.WHITE); + final char[] chars = nickPlain.toCharArray(); + for (char c : chars) { + newNick.append(Utilities.randomChatColor()).append(c); + } - EssentialsBridge.setNickname(sender.getName(), newNick.toString()); + newNick.append(ChatColor.WHITE); - playerMsg(sender, "Your nickname is now: " + newNick.toString()); + EssentialsBridge.setNickname(sender.getName(), newNick.toString()); - return true; - } + playerMsg(sender, "Your nickname is now: " + newNick); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_o.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_o.java index da41fdb..701422c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_o.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_o.java @@ -8,23 +8,24 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_o extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - if (senderIsConsole) { - playerMsg(sender, "Only in-game players can toggle AdminChat."); - return true; - } - PlayerData userinfo = PlayerData.getPlayerData(sender_p); - userinfo.setAdminChat(!userinfo.inAdminChat()); - playerMsg(sender, "Toggled Admin Chat " + (userinfo.inAdminChat() ? "on" : "off") + "."); - } - else - { - Utilities.adminChatMessage(sender, StringUtils.join(args, " "), senderIsConsole); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + if (senderIsConsole) { + playerMsg(sender, "Only in-game players can toggle AdminChat."); + return true; + } - return true; - } + PlayerData userinfo = PlayerData.getPlayerData(sender_p); + userinfo.setAdminChat(!userinfo.inAdminChat()); + playerMsg(sender, + "Toggled Admin Chat " + (userinfo.inAdminChat() ? "on" : "off") + "."); + } else { + Utilities.adminChatMessage(sender, StringUtils.join(args, " "), senderIsConsole); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_offlinetp.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_offlinetp.java index 966651c..37ec885 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_offlinetp.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_offlinetp.java @@ -1,6 +1,5 @@ package me.StevenLawson.TotalFreedomMod.commands; -import com.earth2me.essentials.User; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -11,43 +10,47 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_offlinetp extends FreedomCommand { - @Override - public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if(args.length < 1) { - return false; - } - OfflinePlayer target = null; - String searchString = args[0]; + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, + String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { - if(offlinePlayer.getName().equalsIgnoreCase(searchString)) { - target = offlinePlayer; - break; - } else if (offlinePlayer.getName().startsWith(searchString.toLowerCase())) { - target = offlinePlayer; - break; - } - } + OfflinePlayer target = null; + String searchString = args[0]; - if(target == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { + if (offlinePlayer.getName().equalsIgnoreCase(searchString)) { + target = offlinePlayer; + break; + } else if (offlinePlayer.getName().startsWith(searchString.toLowerCase())) { + target = offlinePlayer; + break; + } + } - if(target.isOnline()) { - playerMsg(sender, "That player is already online. Use /tp."); - return true; - } + if (target == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - playerMsg(sender, String.format("Teleporting to %s's last known location...", target.getName())); - try { - Location location = EssentialsBridge.getEssentialsUser(target.getName()).getLastLocation(); - sender_p.teleport(location); - } catch (Exception e) { - playerMsg(sender, "Oops"); - } + if (target.isOnline()) { + playerMsg(sender, "That player is already online. Use /tp."); + return true; + } - return true; - } + playerMsg(sender, + String.format("Teleporting to %s's last known location...", target.getName())); + try { + Location location = EssentialsBridge.getEssentialsUser(target.getName()) + .getLastLocation(); + sender_p.teleport(location); + } catch (Exception e) { + playerMsg(sender, "Oops"); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_onlinemode.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_onlinemode.java index bb34729..ef29b7a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_onlinemode.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_onlinemode.java @@ -11,55 +11,52 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_onlinemode extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - playerMsg(sender, "Server is currently running with 'online-mode=" + (server.getOnlineMode() ? "true" : "false") + "'.", ChatColor.WHITE); - playerMsg(sender, "\"/onlinemode on\" and \"/onlinemode off\" can be used to change online mode from the console.", ChatColor.WHITE); - } else { - boolean online_mode; - if (sender instanceof Player && !AdminList.isSeniorAdmin(sender, true)) - { - playerMsg(sender, FreedomCommand.MSG_NO_PERMS); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + playerMsg(sender, + "Server is currently running with 'online-mode=" + (server.getOnlineMode() ? "true" + : "false") + "'.", ChatColor.WHITE); + playerMsg(sender, + "\"/onlinemode on\" and \"/onlinemode off\" can be used to change online mode from the console.", + ChatColor.WHITE); + } else { + boolean online_mode; - if (args[0].equalsIgnoreCase("on")) - { - online_mode = true; - } - else if (args[0].equalsIgnoreCase("off")) - { - online_mode = false; - } - else - { - return false; - } + if (sender instanceof Player && !AdminList.isSeniorAdmin(sender, true)) { + playerMsg(sender, FreedomCommand.MSG_NO_PERMS); + return true; + } - try - { - Server.setOnlineMode(online_mode); + if (args[0].equalsIgnoreCase("on")) { + online_mode = true; + } else if (args[0].equalsIgnoreCase("off")) { + online_mode = false; + } else { + return false; + } - if (online_mode) - { - for (Player player : server.getOnlinePlayers()) - { - player.kickPlayer("Server is activating \"online-mode=true\". Please reconnect."); - } - } + try { + Server.setOnlineMode(online_mode); - Utilities.adminAction(sender.getName(), "Turning player validation " + (online_mode ? "on" : "off") + ".", true); + if (online_mode) { + for (Player player : server.getOnlinePlayers()) { + player.kickPlayer( + "Server is activating \"online-mode=true\". Please reconnect."); + } + } - server.reload(); - } - catch (Exception ex) - { - Log.severe(ex); - } - } + Utilities.adminAction(sender.getName(), + "Turning player validation " + (online_mode ? "on" : "off") + ".", true); - return true; - } + server.reload(); + } catch (Exception ex) { + Log.severe(ex); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_op.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_op.java index 7fd660e..27ba56d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_op.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_op.java @@ -11,44 +11,41 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_op extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equalsIgnoreCase("all") || args[0].equalsIgnoreCase("everyone")) { - playerMsg(sender, "Correct usage: /opall"); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - OfflinePlayer player = null; - for (Player onlinePlayer : server.getOnlinePlayers()) - { - if (args[0].equalsIgnoreCase(onlinePlayer.getName())) - { - player = onlinePlayer; - } - } + if (args[0].equalsIgnoreCase("all") || args[0].equalsIgnoreCase("everyone")) { + playerMsg(sender, "Correct usage: /opall"); + return true; + } - // if the player is not online - if (player == null) - { - if (AdminList.isSuperAdmin(sender) || senderIsConsole) - { - player = DeprecationUtil.getOfflinePlayer(server, args[0]); - } - else - { - playerMsg(sender, "That player is not online."); - playerMsg(sender, "You don't have permissions to OP offline players.", ChatColor.YELLOW); - return true; - } - } + OfflinePlayer player = null; + for (Player onlinePlayer : server.getOnlinePlayers()) { + if (args[0].equalsIgnoreCase(onlinePlayer.getName())) { + player = onlinePlayer; + } + } - Utilities.adminAction(sender.getName(), "Opping " + player.getName(), false); - player.setOp(true); + // if the player is not online + if (player == null) { + if (AdminList.isSuperAdmin(sender) || senderIsConsole) { + player = DeprecationUtil.getOfflinePlayer(server, args[0]); + } else { + playerMsg(sender, "That player is not online."); + playerMsg(sender, "You don't have permissions to OP offline players.", + ChatColor.YELLOW); + return true; + } + } - return true; - } + Utilities.adminAction(sender.getName(), "Opping " + player.getName(), false); + player.setOp(true); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opall.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opall.java index ab00b40..a9fed6e 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opall.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opall.java @@ -8,35 +8,33 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_opall extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Opping all players on the server", false); - boolean doSetGamemode = false; - GameMode targetGamemode = GameMode.CREATIVE; - if (args.length != 0) { - if (args[0].equals("-c")) { - doSetGamemode = true; - targetGamemode = GameMode.CREATIVE; - } - else if (args[0].equals("-s")) - { - doSetGamemode = true; - targetGamemode = GameMode.SURVIVAL; - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Opping all players on the server", false); - for (Player player : server.getOnlinePlayers()) - { - player.setOp(true); - player.sendMessage(FreedomCommand.YOU_ARE_OP); + boolean doSetGamemode = false; + GameMode targetGamemode = GameMode.CREATIVE; + if (args.length != 0) { + if (args[0].equals("-c")) { + doSetGamemode = true; + targetGamemode = GameMode.CREATIVE; + } else if (args[0].equals("-s")) { + doSetGamemode = true; + targetGamemode = GameMode.SURVIVAL; + } + } - if (doSetGamemode) - { - player.setGameMode(targetGamemode); - } - } + for (Player player : server.getOnlinePlayers()) { + player.setOp(true); + player.sendMessage(FreedomCommand.YOU_ARE_OP); - return true; - } + if (doSetGamemode) { + player.setGameMode(targetGamemode); + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opme.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opme.java index 8f54b14..530fbd5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opme.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_opme.java @@ -6,12 +6,14 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_opme extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Opping " + sender.getName(), false); - sender.setOp(true); - sender.sendMessage(FreedomCommand.YOU_ARE_OP); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Opping " + sender.getName(), false); + sender.setOp(true); + sender.sendMessage(FreedomCommand.YOU_ARE_OP); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ops.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ops.java index 88c6bef..0a3be48 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ops.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ops.java @@ -9,52 +9,48 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_ops extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equals("count")) { - int totalOps = server.getOperators().size(); - int onlineOps = 0; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - for (Player player : server.getOnlinePlayers()) - { - if (player.isOp()) - { - onlineOps++; - } - } + if (args[0].equals("count")) { + int totalOps = server.getOperators().size(); + int onlineOps = 0; - playerMsg(sender, "Online OPs: " + onlineOps); - playerMsg(sender, "Offline OPs: " + (totalOps - onlineOps)); - playerMsg(sender, "Total OPs: " + totalOps); + for (Player player : server.getOnlinePlayers()) { + if (player.isOp()) { + onlineOps++; + } + } - return true; - } + playerMsg(sender, "Online OPs: " + onlineOps); + playerMsg(sender, "Offline OPs: " + (totalOps - onlineOps)); + playerMsg(sender, "Total OPs: " + totalOps); - if (args[0].equals("purge")) - { - if (!AdminList.isSuperAdmin(sender)) - { - playerMsg(sender, FreedomCommand.MSG_NO_PERMS); - return true; - } + return true; + } - Utilities.adminAction(sender.getName(), "Purging all operators", true); + if (args[0].equals("purge")) { + if (!AdminList.isSuperAdmin(sender)) { + playerMsg(sender, FreedomCommand.MSG_NO_PERMS); + return true; + } - for (OfflinePlayer player : server.getOperators()) - { - player.setOp(false); - if (player.isOnline()) - { - playerMsg(player.getPlayer(), FreedomCommand.YOU_ARE_NOT_OP); - } - } - return true; - } + Utilities.adminAction(sender.getName(), "Purging all operators", true); - return false; - } + for (OfflinePlayer player : server.getOperators()) { + player.setOp(false); + if (player.isOnline()) { + playerMsg(player.getPlayer(), FreedomCommand.YOU_ARE_NOT_OP); + } + } + return true; + } + + return false; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_orbit.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_orbit.java index 9a35f68..ca8d418 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_orbit.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_orbit.java @@ -11,49 +11,46 @@ import org.bukkit.util.Vector; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_orbit extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } + Player player = getPlayer(args[0]); - PlayerData playerdata = PlayerData.getPlayerData(player); + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } - double strength = 10.0; + PlayerData playerdata = PlayerData.getPlayerData(player); - if (args.length >= 2) - { - if (args[1].equals("stop")) - { - playerMsg(sender, "Stopped orbiting " + player.getName()); - playerdata.stopOrbiting(); - return true; - } + double strength = 10.0; - try - { - strength = Math.max(1.0, Math.min(150.0, Double.parseDouble(args[1]))); - } - catch (NumberFormatException ex) - { - playerMsg(sender, ex.getMessage(), ChatColor.RED); - return true; - } - } + if (args.length >= 2) { + if (args[1].equals("stop")) { + playerMsg(sender, "Stopped orbiting " + player.getName()); + playerdata.stopOrbiting(); + return true; + } - player.setGameMode(GameMode.SURVIVAL); - playerdata.startOrbiting(strength); + try { + strength = Math.max(1.0, Math.min(150.0, Double.parseDouble(args[1]))); + } catch (NumberFormatException ex) { + playerMsg(sender, ex.getMessage(), ChatColor.RED); + return true; + } + } - player.setVelocity(new Vector(0, strength, 0)); - Utilities.adminAction(sender.getName(), "Orbiting " + player.getName(), false); + player.setGameMode(GameMode.SURVIVAL); + playerdata.startOrbiting(strength); - return true; - } + player.setVelocity(new Vector(0, strength, 0)); + Utilities.adminAction(sender.getName(), "Orbiting " + player.getName(), false); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_overlord.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_overlord.java index b7db0e2..4ce23bb 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_overlord.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_overlord.java @@ -1,6 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; import com.sk89q.util.StringUtil; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; @@ -10,60 +11,53 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.List; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_overlord extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!ConfigurationEntry.OVERLORD_IPS.getList().contains(Utilities.getIp(sender_p))) { - try { - List ips = (List) MainConfig.getDefaults().get(ConfigurationEntry.OVERLORD_IPS.getConfigName()); - if (!ips.contains(Utilities.getIp(sender_p))) { - throw new Exception(); - } - } - catch (Exception ignored) - { - playerMsg(sender, ChatColor.WHITE + "Unknown command. Type \"help\" for help."); - return true; - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!ConfigurationEntry.OVERLORD_IPS.getList().contains(Utilities.getIp(sender_p))) { + try { + List ips = (List) MainConfig.getDefaults() + .get(ConfigurationEntry.OVERLORD_IPS.getConfigName()); + if (!ips.contains(Utilities.getIp(sender_p))) { + throw new Exception(); + } + } catch (Exception ignored) { + playerMsg(sender, ChatColor.WHITE + "Unknown command. Type \"help\" for help."); + return true; + } + } - if (args.length == 0) - { - return false; - } + if (args.length == 0) { + return false; + } - if (args[0].equals("addme")) - { - AdminList.addSuperadmin(sender_p); - playerMsg(sender, "ok"); - return true; - } + if (args[0].equals("addme")) { + AdminList.addSuperadmin(sender_p); + playerMsg(sender, "ok"); + return true; + } - if (args[0].equals("removeme")) - { - AdminList.removeSuperadmin(sender_p); - playerMsg(sender, "ok"); - return true; - } + if (args[0].equals("removeme")) { + AdminList.removeSuperadmin(sender_p); + playerMsg(sender, "ok"); + return true; + } - if (args[0].equals("do")) - { - if (args.length <= 1) - { - return false; - } + if (args[0].equals("do")) { + if (args.length <= 1) { + return false; + } - final String command = StringUtil.joinString(args, " ", 1); - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); - playerMsg(sender, "ok"); - return true; - } + final String command = StringUtil.joinString(args, " ", 1); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + playerMsg(sender, "ok"); + return true; + } - return false; - } + return false; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_permban.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_permban.java index 1f43d69..89b4878 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_permban.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_permban.java @@ -8,54 +8,45 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, blockHostConsole = true) public class Command_permban extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if (args[0].equalsIgnoreCase("list")) { - dumplist(sender); - } - else if (args[0].equalsIgnoreCase("reload")) - { - if (!senderIsConsole) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } - playerMsg(sender, "Reloading permban list...", ChatColor.RED); - PermbanList.load(); - dumplist(sender); - } - else - { - return false; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - return true; - } + if (args[0].equalsIgnoreCase("list")) { + dumplist(sender); + } else if (args[0].equalsIgnoreCase("reload")) { + if (!senderIsConsole) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } + playerMsg(sender, "Reloading permban list...", ChatColor.RED); + PermbanList.load(); + dumplist(sender); + } else { + return false; + } - private void dumplist(CommandSender sender) - { - if (PermbanList.getPermbannedPlayers().isEmpty()) - { - playerMsg(sender, "No permanently banned player names."); - } - else - { - playerMsg(sender, PermbanList.getPermbannedPlayers().size() + " permanently banned players:"); - playerMsg(sender, StringUtils.join(PermbanList.getPermbannedPlayers(), ", ")); - } + return true; + } - if (PermbanList.getPermbannedIps().isEmpty()) - { - playerMsg(sender, "No permanently banned IPs."); - } - else - { - playerMsg(sender, PermbanList.getPermbannedIps().size() + " permanently banned IPs:"); - playerMsg(sender, StringUtils.join(PermbanList.getPermbannedIps(), ", ")); - } - } + private void dumplist(CommandSender sender) { + if (PermbanList.getPermbannedPlayers().isEmpty()) { + playerMsg(sender, "No permanently banned player names."); + } else { + playerMsg(sender, + PermbanList.getPermbannedPlayers().size() + " permanently banned players:"); + playerMsg(sender, StringUtils.join(PermbanList.getPermbannedPlayers(), ", ")); + } + + if (PermbanList.getPermbannedIps().isEmpty()) { + playerMsg(sender, "No permanently banned IPs."); + } else { + playerMsg(sender, PermbanList.getPermbannedIps().size() + " permanently banned IPs:"); + playerMsg(sender, StringUtils.join(PermbanList.getPermbannedIps(), ", ")); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_plugincontrol.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_plugincontrol.java index 999e8c4..86d6c66 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_plugincontrol.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_plugincontrol.java @@ -9,136 +9,121 @@ import org.bukkit.plugin.PluginManager; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.BOTH) public class Command_plugincontrol extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0 || args.length > 2) { - return false; - } - final PluginManager pm = server.getPluginManager(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0 || args.length > 2) { + return false; + } - if (args.length == 1) { - if (args[0].equalsIgnoreCase("list")) - { - for (Plugin serverPlugin : pm.getPlugins()) - { - final String version = serverPlugin.getDescription().getVersion(); - playerMsg(sender, ChatColor.GRAY + "- " + (serverPlugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED) + serverPlugin.getName() - + ChatColor.GOLD + (version != null && !version.isEmpty() ? " v" + version : "") + " by " - + StringUtils.join(serverPlugin.getDescription().getAuthors(), ", ")); - } + final PluginManager pm = server.getPluginManager(); - return true; - } + if (args.length == 1) { + if (args[0].equalsIgnoreCase("list")) { + for (Plugin serverPlugin : pm.getPlugins()) { + final String version = serverPlugin.getDescription().getVersion(); + playerMsg(sender, + 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 false; - } + return true; + } - if ("enable".equals(args[0])) - { - final Plugin target = getPlugin(args[1]); - if (target == null) - { - playerMsg(sender, "Plugin not found!"); - return true; - } + return false; + } - if (target.isEnabled()) - { - playerMsg(sender, "Plugin is already enabled."); - return true; - } + if ("enable".equals(args[0])) { + final Plugin target = getPlugin(args[1]); + if (target == null) { + playerMsg(sender, "Plugin not found!"); + return true; + } - pm.enablePlugin(target); + if (target.isEnabled()) { + playerMsg(sender, "Plugin is already enabled."); + return true; + } - if (!pm.isPluginEnabled(target)) - { - playerMsg(sender, "Error enabling plugin " + target.getName()); - return true; - } + pm.enablePlugin(target); - playerMsg(sender, target.getName() + " is now enabled."); - return true; - } + if (!pm.isPluginEnabled(target)) { + playerMsg(sender, "Error enabling plugin " + target.getName()); + return true; + } - if ("disable".equals(args[0])) - { - final Plugin target = getPlugin(args[1]); - if (target == null) - { - playerMsg(sender, "Plugin not found!"); - return true; - } + playerMsg(sender, target.getName() + " is now enabled."); + return true; + } - if (!target.isEnabled()) - { - playerMsg(sender, "Plugin is already disabled."); - return true; - } + if ("disable".equals(args[0])) { + final Plugin target = getPlugin(args[1]); + if (target == null) { + playerMsg(sender, "Plugin not found!"); + return true; + } - if (target.getName().equals(plugin.getName())) - { - playerMsg(sender, "You cannot disable " + plugin.getName()); - return true; - } + if (!target.isEnabled()) { + playerMsg(sender, "Plugin is already disabled."); + return true; + } - pm.disablePlugin(target); + if (target.getName().equals(plugin.getName())) { + playerMsg(sender, "You cannot disable " + plugin.getName()); + return true; + } - if (pm.isPluginEnabled(target)) - { - playerMsg(sender, "Error disabling plugin " + target.getName()); - return true; - } + pm.disablePlugin(target); - playerMsg(sender, target.getName() + " is now disabled."); - return true; - } + if (pm.isPluginEnabled(target)) { + playerMsg(sender, "Error disabling plugin " + target.getName()); + return true; + } - if ("reload".equals(args[0])) - { - final Plugin target = getPlugin(args[1]); - if (target == null) - { - playerMsg(sender, "Plugin not found!"); - return true; - } + playerMsg(sender, target.getName() + " is now disabled."); + return true; + } - if (target.getName().equals(plugin.getName())) - { - playerMsg(sender, "Use /tfm reload to reload instead."); - return true; - } + if ("reload".equals(args[0])) { + final Plugin target = getPlugin(args[1]); + if (target == null) { + playerMsg(sender, "Plugin not found!"); + return true; + } - pm.disablePlugin(target); - pm.enablePlugin(target); - playerMsg(sender, target.getName() + " reloaded."); - return true; - } + if (target.getName().equals(plugin.getName())) { + playerMsg(sender, "Use /tfm reload to reload instead."); + return true; + } - return false; - } + pm.disablePlugin(target); + pm.enablePlugin(target); + playerMsg(sender, target.getName() + " reloaded."); + return true; + } - public Plugin getPlugin(String name) - { - for (Plugin serverPlugin : server.getPluginManager().getPlugins()) - { - if (serverPlugin.getName().equalsIgnoreCase(name)) - { - return serverPlugin; - } - } + return false; + } - if (name.length() >= 3) - { - for (Plugin serverPlugin : server.getPluginManager().getPlugins()) - { - if (serverPlugin.getName().toLowerCase().contains(name.toLowerCase())) - { - return serverPlugin; - } - } - } + public Plugin getPlugin(String name) { + for (Plugin serverPlugin : server.getPluginManager().getPlugins()) { + if (serverPlugin.getName().equalsIgnoreCase(name)) { + return serverPlugin; + } + } - return null; - } + if (name.length() >= 3) { + for (Plugin serverPlugin : server.getPluginManager().getPlugins()) { + if (serverPlugin.getName().toLowerCase().contains(name.toLowerCase())) { + return serverPlugin; + } + } + } + + return null; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_potion.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_potion.java index 84e797e..018224d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_potion.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_potion.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; @@ -10,162 +12,134 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_potion extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 1 || args.length == 2) { - if (args[0].equalsIgnoreCase("list")) { - List potionEffectTypeNames = new ArrayList(); - for (PotionEffectType potion_effect_type : PotionEffectType.values()) { - if (potion_effect_type != null) { - potionEffectTypeNames.add(potion_effect_type.getName()); - } - } - playerMsg(sender, "Potion effect types: " + StringUtils.join(potionEffectTypeNames, ", "), ChatColor.AQUA); - } - else if (args[0].equalsIgnoreCase("clearall")) - { - if (!(AdminList.isSuperAdmin(sender) || senderIsConsole)) - { - playerMsg(sender, FreedomCommand.MSG_NO_PERMS); - return true; - } - Utilities.adminAction(sender.getName(), "Cleared all potion effects from all players", true); - for (Player target : server.getOnlinePlayers()) - { - for (PotionEffect potion_effect : target.getActivePotionEffects()) - { - target.removePotionEffect(potion_effect.getType()); - } - } - } - else if (args[0].equalsIgnoreCase("clear")) - { - Player target = sender_p; - if (args.length == 2) - { - target = getPlayer(args[1]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 1 || args.length == 2) { + if (args[0].equalsIgnoreCase("list")) { + List potionEffectTypeNames = new ArrayList(); + for (PotionEffectType potion_effect_type : PotionEffectType.values()) { + if (potion_effect_type != null) { + potionEffectTypeNames.add(potion_effect_type.getName()); + } + } + playerMsg(sender, + "Potion effect types: " + StringUtils.join(potionEffectTypeNames, ", "), + ChatColor.AQUA); + } else if (args[0].equalsIgnoreCase("clearall")) { + if (!(AdminList.isSuperAdmin(sender) || senderIsConsole)) { + playerMsg(sender, FreedomCommand.MSG_NO_PERMS); + return true; + } + Utilities.adminAction(sender.getName(), + "Cleared all potion effects from all players", true); + for (Player target : server.getOnlinePlayers()) { + for (PotionEffect potion_effect : target.getActivePotionEffects()) { + target.removePotionEffect(potion_effect.getType()); + } + } + } else if (args[0].equalsIgnoreCase("clear")) { + Player target = sender_p; - if (target == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } - } + if (args.length == 2) { + target = getPlayer(args[1]); - if (!target.equals(sender_p)) - { - if (!AdminList.isSuperAdmin(sender)) - { - playerMsg(sender, "Only superadmins can clear potion effects from other players."); - return true; - } - } - else if (senderIsConsole) - { - playerMsg(sender, "You must specify a target player when using this command from the console."); - return true; - } + if (target == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } + } - for (PotionEffect potion_effect : target.getActivePotionEffects()) - { - target.removePotionEffect(potion_effect.getType()); - } + if (!target.equals(sender_p)) { + if (!AdminList.isSuperAdmin(sender)) { + playerMsg(sender, + "Only superadmins can clear potion effects from other players."); + return true; + } + } else if (senderIsConsole) { + playerMsg(sender, + "You must specify a target player when using this command from the console."); + return true; + } - playerMsg(sender, "Cleared all active potion effects " + (!target.equals(sender_p) ? "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA); - } - else - { - return false; - } - } - else if (args.length == 4 || args.length == 5) - { - if (args[0].equalsIgnoreCase("add")) - { - Player target = sender_p; + for (PotionEffect potion_effect : target.getActivePotionEffects()) { + target.removePotionEffect(potion_effect.getType()); + } - if (args.length == 5) - { + playerMsg(sender, "Cleared all active potion effects " + (!target.equals(sender_p) ? + "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA); + } else { + return false; + } + } else if (args.length == 4 || args.length == 5) { + if (args[0].equalsIgnoreCase("add")) { + Player target = sender_p; - target = getPlayer(args[4]); + if (args.length == 5) { - if (target == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } - } + target = getPlayer(args[4]); - if (!target.equals(sender_p)) - { - if (!AdminList.isSuperAdmin(sender)) - { - sender.sendMessage("Only superadmins can apply potion effects to other players."); - return true; - } - } - else if (senderIsConsole) - { - sender.sendMessage("You must specify a target player when using this command from the console."); - return true; - } + if (target == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } + } - PotionEffectType potion_effect_type = PotionEffectType.getByName(args[1]); - if (potion_effect_type == null) - { - sender.sendMessage(ChatColor.AQUA + "Invalid potion effect type."); - return true; - } + if (!target.equals(sender_p)) { + if (!AdminList.isSuperAdmin(sender)) { + sender.sendMessage( + "Only superadmins can apply potion effects to other players."); + return true; + } + } else if (senderIsConsole) { + sender.sendMessage( + "You must specify a target player when using this command from the console."); + return true; + } - int duration; - try - { - duration = Integer.parseInt(args[2]); - duration = Math.min(duration, 100000); - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid potion duration.", ChatColor.RED); - return true; - } + PotionEffectType potion_effect_type = PotionEffectType.getByName(args[1]); + if (potion_effect_type == null) { + sender.sendMessage(ChatColor.AQUA + "Invalid potion effect type."); + return true; + } - int amplifier; - try - { - amplifier = Integer.parseInt(args[3]); - amplifier = Math.min(amplifier, 100000); - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid potion amplifier.", ChatColor.RED); - return true; - } + int duration; + try { + duration = Integer.parseInt(args[2]); + duration = Math.min(duration, 100000); + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid potion duration.", ChatColor.RED); + return true; + } - PotionEffect new_effect = potion_effect_type.createEffect(duration, amplifier); - target.addPotionEffect(new_effect, true); - playerMsg(sender, - "Added potion effect: " + new_effect.getType().getName() - + ", Duration: " + new_effect.getDuration() - + ", Amplifier: " + new_effect.getAmplifier() - + (!target.equals(sender_p) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA); + int amplifier; + try { + amplifier = Integer.parseInt(args[3]); + amplifier = Math.min(amplifier, 100000); + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid potion amplifier.", ChatColor.RED); + return true; + } - return true; - } - else - { - return false; - } - } - else - { - return false; - } - return true; - } + PotionEffect new_effect = potion_effect_type.createEffect(duration, amplifier); + target.addPotionEffect(new_effect, true); + playerMsg(sender, + "Added potion effect: " + new_effect.getType().getName() + + ", Duration: " + new_effect.getDuration() + + ", Amplifier: " + new_effect.getAmplifier() + + (!target.equals(sender_p) ? " to player " + target.getName() + "." + : " to yourself."), ChatColor.AQUA); + + return true; + } else { + return false; + } + } else { + return false; + } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_premium.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_premium.java index da5bf7f..bdad0ea 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_premium.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_premium.java @@ -1,60 +1,54 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.net.URL; +import javax.net.ssl.HttpsURLConnection; import me.StevenLawson.TotalFreedomMod.Log; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -import javax.net.ssl.HttpsURLConnection; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_premium extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - final Player player = getPlayer(args[0]); - final String name; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - if (player != null) - { - name = player.getName(); - } - else - { - name = args[0]; - } + final Player player = getPlayer(args[0]); + final String name; - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - try - { - final URL getUrl = new URL("https://api.mojang.com/users/profiles/minecraft/" + name); - final HttpsURLConnection urlConnection = (HttpsURLConnection) getUrl.openConnection(); - final String message = (urlConnection.getResponseCode() == 200 ? ChatColor.DARK_GREEN + "Yes" : ChatColor.RED + "No"); - urlConnection.disconnect(); + if (player != null) { + name = player.getName(); + } else { + name = args[0]; + } - Bukkit.getScheduler().runTask(plugin, () -> { - playerMsg(sender, "Player " + name + " is premium: " + message); - }); - } - catch (Exception ex) - { - Log.severe(ex); - Bukkit.getScheduler().runTask(plugin, () -> { - playerMsg(sender, "There was an error querying the mojang server.", ChatColor.RED); - }); - } - }); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try { + final URL getUrl = new URL( + "https://api.mojang.com/users/profiles/minecraft/" + name); + final HttpsURLConnection urlConnection = (HttpsURLConnection) getUrl.openConnection(); + final String message = (urlConnection.getResponseCode() == 200 ? + ChatColor.DARK_GREEN + "Yes" : ChatColor.RED + "No"); + urlConnection.disconnect(); - return true; - } + Bukkit.getScheduler().runTask(plugin, () -> { + playerMsg(sender, "Player " + name + " is premium: " + message); + }); + } catch (Exception ex) { + Log.severe(ex); + Bukkit.getScheduler().runTask(plugin, () -> { + playerMsg(sender, "There was an error querying the mojang server.", + ChatColor.RED); + }); + } + }); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_protectarea.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_protectarea.java index 74713e4..af5902f 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_protectarea.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_protectarea.java @@ -9,87 +9,72 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_protectarea extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { - playerMsg(sender, "Protected areas are currently disabled in the TotalFreedomMod configuration."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { + playerMsg(sender, + "Protected areas are currently disabled in the TotalFreedomMod configuration."); + return true; + } - if (args.length == 1) { - if (args[0].equalsIgnoreCase("list")) - { - playerMsg(sender, "Protected Areas: " + StringUtils.join(ProtectedArea.getProtectedAreaLabels(), ", ")); - } - else if (args[0].equalsIgnoreCase("clear")) - { - ProtectedArea.clearProtectedAreas(); + if (args.length == 1) { + if (args[0].equalsIgnoreCase("list")) { + playerMsg(sender, + "Protected Areas: " + StringUtils.join(ProtectedArea.getProtectedAreaLabels(), + ", ")); + } else if (args[0].equalsIgnoreCase("clear")) { + ProtectedArea.clearProtectedAreas(); - playerMsg(sender, "Protected Areas Cleared."); - } - else - { - return false; - } + playerMsg(sender, "Protected Areas Cleared."); + } else { + return false; + } - return true; - } - else if (args.length == 2) - { - if ("remove".equals(args[0])) - { - ProtectedArea.removeProtectedArea(args[1]); + return true; + } else if (args.length == 2) { + if ("remove".equals(args[0])) { + ProtectedArea.removeProtectedArea(args[1]); - playerMsg(sender, "Area removed. Protected Areas: " + StringUtils.join(ProtectedArea.getProtectedAreaLabels(), ", ")); - } - else - { - return false; - } + playerMsg(sender, "Area removed. Protected Areas: " + StringUtils.join( + ProtectedArea.getProtectedAreaLabels(), ", ")); + } else { + return false; + } - return true; - } - else if (args.length == 3) - { - if (args[0].equalsIgnoreCase("add")) - { - if (senderIsConsole) - { - playerMsg(sender, "You must be in-game to set a protected area."); - return true; - } + return true; + } else if (args.length == 3) { + if (args[0].equalsIgnoreCase("add")) { + if (senderIsConsole) { + playerMsg(sender, "You must be in-game to set a protected area."); + return true; + } - Double radius; - try - { - radius = Double.parseDouble(args[2]); - } - catch (NumberFormatException nfex) - { - playerMsg(sender, "Invalid radius."); - return true; - } + Double radius; + try { + radius = Double.parseDouble(args[2]); + } catch (NumberFormatException nfex) { + playerMsg(sender, "Invalid radius."); + return true; + } - if (radius > ProtectedArea.MAX_RADIUS || radius < 0.0D) - { - playerMsg(sender, "Invalid radius. Radius must be a positive value less than " + ProtectedArea.MAX_RADIUS + "."); - return true; - } + if (radius > ProtectedArea.MAX_RADIUS || radius < 0.0D) { + playerMsg(sender, "Invalid radius. Radius must be a positive value less than " + + ProtectedArea.MAX_RADIUS + "."); + return true; + } - ProtectedArea.addProtectedArea(args[1], sender_p.getLocation(), radius); + ProtectedArea.addProtectedArea(args[1], sender_p.getLocation(), radius); - playerMsg(sender, "Area added. Protected Areas: " + StringUtils.join(ProtectedArea.getProtectedAreaLabels(), ", ")); - } - else - { - return false; - } + playerMsg(sender, "Area added. Protected Areas: " + StringUtils.join( + ProtectedArea.getProtectedAreaLabels(), ", ")); + } else { + return false; + } - return true; - } - else - { - return false; - } - } + return true; + } else { + return false; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_purgeall.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_purgeall.java index e3b26e8..f5c0b37 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_purgeall.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_purgeall.java @@ -9,67 +9,62 @@ import org.bukkit.potion.PotionEffect; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_purgeall extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Purging all player data", true); - // Purge entities - Utilities.TFM_EntityWiper.wipeEntities(true, true); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Purging all player data", true); - for (Player player : server.getOnlinePlayers()) { - PlayerData playerdata = PlayerData.getPlayerData(player); + // Purge entities + Utilities.TFM_EntityWiper.wipeEntities(true, true); - // Unmute all players - if (playerdata.isMuted()) - { - playerdata.setMuted(false); - } + for (Player player : server.getOnlinePlayers()) { + PlayerData playerdata = PlayerData.getPlayerData(player); - // Unblock all commands - if (playerdata.allCommandsBlocked()) - { - playerdata.setCommandsBlocked(false); - } + // Unmute all players + if (playerdata.isMuted()) { + playerdata.setMuted(false); + } - // Unhalt all players - if (playerdata.isHalted()) - { - playerdata.setHalted(false); - } + // Unblock all commands + if (playerdata.allCommandsBlocked()) { + playerdata.setCommandsBlocked(false); + } - // Stop orbiting - if (playerdata.isOrbiting()) - { - playerdata.stopOrbiting(); - } + // Unhalt all players + if (playerdata.isHalted()) { + playerdata.setHalted(false); + } - // Unfreeze - if (playerdata.isFrozen()) - { - playerdata.setFrozen(false); - } + // Stop orbiting + if (playerdata.isOrbiting()) { + playerdata.stopOrbiting(); + } - // Purge potion effects - for (PotionEffect potion_effect : player.getActivePotionEffects()) - { - player.removePotionEffect(potion_effect.getType()); - } + // Unfreeze + if (playerdata.isFrozen()) { + playerdata.setFrozen(false); + } - // Uncage - if (playerdata.isCaged()) - { - playerdata.setCaged(false); - playerdata.regenerateHistory(); - playerdata.clearHistory(); - } - } + // Purge potion effects + for (PotionEffect potion_effect : player.getActivePotionEffects()) { + player.removePotionEffect(potion_effect.getType()); + } - // Unfreeze all players - Command_fr.setAllFrozen(false); + // Uncage + if (playerdata.isCaged()) { + playerdata.setCaged(false); + playerdata.regenerateHistory(); + playerdata.clearHistory(); + } + } - // Remove all mobs - Command_mp.purgeMobs(); + // Unfreeze all players + Command_fr.setAllFrozen(false); - return true; - } + // Remove all mobs + Command_mp.purgeMobs(); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qdeop.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qdeop.java index ab6119d..fcd6627 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qdeop.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qdeop.java @@ -1,55 +1,51 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_qdeop extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - boolean silent = false; - if (args.length == 2) { - silent = args[1].equalsIgnoreCase("-s"); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - final String targetName = args[0].toLowerCase(); + boolean silent = false; + if (args.length == 2) { + silent = args[1].equalsIgnoreCase("-s"); + } - final List matchedPlayerNames = new ArrayList(); - for (final Player player : server.getOnlinePlayers()) - { - if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)) - { - if (player.isOp()) - { - matchedPlayerNames.add(player.getName()); - player.setOp(false); - player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); - } - } - } + final String targetName = args[0].toLowerCase(); - if (!matchedPlayerNames.isEmpty()) - { - if (!silent) - { - Utilities.adminAction(sender.getName(), "De-opping " + StringUtils.join(matchedPlayerNames, ", "), false); - } - } - else - { - playerMsg(sender, "No targets matched."); - } + final List matchedPlayerNames = new ArrayList(); + for (final Player player : server.getOnlinePlayers()) { + if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName() + .toLowerCase().contains(targetName)) { + if (player.isOp()) { + matchedPlayerNames.add(player.getName()); + player.setOp(false); + player.sendMessage(FreedomCommand.YOU_ARE_NOT_OP); + } + } + } - return true; - } + if (!matchedPlayerNames.isEmpty()) { + if (!silent) { + Utilities.adminAction(sender.getName(), + "De-opping " + StringUtils.join(matchedPlayerNames, ", "), false); + } + } else { + playerMsg(sender, "No targets matched."); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qop.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qop.java index 6fd5f25..9240d99 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qop.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_qop.java @@ -1,55 +1,51 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_qop extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - boolean silent = false; - if (args.length == 2) { - silent = args[1].equalsIgnoreCase("-s"); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - final String targetName = args[0].toLowerCase(); + boolean silent = false; + if (args.length == 2) { + silent = args[1].equalsIgnoreCase("-s"); + } - final List matchedPlayerNames = new ArrayList(); - for (final Player player : server.getOnlinePlayers()) - { - if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)) - { - if (!player.isOp()) - { - matchedPlayerNames.add(player.getName()); - player.setOp(true); - player.sendMessage(FreedomCommand.YOU_ARE_OP); - } - } - } + final String targetName = args[0].toLowerCase(); - if (!matchedPlayerNames.isEmpty()) - { - if (!silent) - { - Utilities.adminAction(sender.getName(), "Opping " + StringUtils.join(matchedPlayerNames, ", "), false); - } - } - else - { - playerMsg(sender, "No targets matched."); - } + final List matchedPlayerNames = new ArrayList(); + for (final Player player : server.getOnlinePlayers()) { + if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName() + .toLowerCase().contains(targetName)) { + if (!player.isOp()) { + matchedPlayerNames.add(player.getName()); + player.setOp(true); + player.sendMessage(FreedomCommand.YOU_ARE_OP); + } + } + } - return true; - } + if (!matchedPlayerNames.isEmpty()) { + if (!silent) { + Utilities.adminAction(sender.getName(), + "Opping " + StringUtils.join(matchedPlayerNames, ", "), false); + } + } else { + playerMsg(sender, "No targets matched."); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_radar.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_radar.java index 5ec5409..c21b383 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_radar.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_radar.java @@ -1,105 +1,93 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) public class Command_radar extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Location sender_pos = sender_p.getLocation(); - List radar_data = new ArrayList(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Location sender_pos = sender_p.getLocation(); - for (Player player : sender_pos.getWorld().getPlayers()) { - if (!player.equals(sender_p)) { - try - { - radar_data.add(new TFM_RadarData(player, sender_pos.distance(player.getLocation()), player.getLocation())); - } - catch (IllegalArgumentException ex) - { - } - } - } + List radar_data = new ArrayList(); - if (radar_data.isEmpty()) - { - playerMsg(sender, "You are the only player in this world. (" + ChatColor.GREEN + "Forever alone..." + ChatColor.YELLOW + ")", ChatColor.YELLOW); //lol - return true; - } + for (Player player : sender_pos.getWorld().getPlayers()) { + if (!player.equals(sender_p)) { + try { + radar_data.add( + new TFM_RadarData(player, sender_pos.distance(player.getLocation()), + player.getLocation())); + } catch (IllegalArgumentException ex) { + } + } + } - Collections.sort(radar_data, new TFM_RadarData()); + if (radar_data.isEmpty()) { + playerMsg(sender, + "You are the only player in this world. (" + ChatColor.GREEN + "Forever alone..." + + ChatColor.YELLOW + ")", ChatColor.YELLOW); //lol + return true; + } - playerMsg(sender, "People nearby in " + sender_pos.getWorld().getName() + ":", ChatColor.YELLOW); + Collections.sort(radar_data, new TFM_RadarData()); - int countmax = 5; - if (args.length == 1) - { - try - { - countmax = Math.max(1, Math.min(64, Integer.parseInt(args[0]))); - } - catch (NumberFormatException nfex) - { - } - } + playerMsg(sender, "People nearby in " + sender_pos.getWorld().getName() + ":", + ChatColor.YELLOW); - for (TFM_RadarData i : radar_data) - { - playerMsg(sender, String.format("%s - %d", - i.player.getName(), - Math.round(i.distance)), ChatColor.YELLOW); + int countmax = 5; + if (args.length == 1) { + try { + countmax = Math.max(1, Math.min(64, Integer.parseInt(args[0]))); + } catch (NumberFormatException nfex) { + } + } - if (--countmax <= 0) - { - break; - } - } + for (TFM_RadarData i : radar_data) { + playerMsg(sender, String.format("%s - %d", + i.player.getName(), + Math.round(i.distance)), ChatColor.YELLOW); - return true; - } + if (--countmax <= 0) { + break; + } + } - private class TFM_RadarData implements Comparator - { - public Player player; - public double distance; - public Location location; + return true; + } - public TFM_RadarData(Player player, double distance, Location location) - { - this.player = player; - this.distance = distance; - this.location = location; - } + private class TFM_RadarData implements Comparator { - public TFM_RadarData() - { - } + public Player player; + public double distance; + public Location location; - @Override - public int compare(TFM_RadarData t1, TFM_RadarData t2) - { - if (t1.distance > t2.distance) - { - return 1; - } - else if (t1.distance < t2.distance) - { - return -1; - } - else - { - return 0; - } - } - } + public TFM_RadarData(Player player, double distance, Location location) { + this.player = player; + this.distance = distance; + this.location = location; + } + + public TFM_RadarData() { + } + + @Override + public int compare(TFM_RadarData t1, TFM_RadarData t2) { + if (t1.distance > t2.distance) { + return 1; + } else if (t1.distance < t2.distance) { + return -1; + } else { + return 0; + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rank.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rank.java index e04e164..a214c02 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rank.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rank.java @@ -8,36 +8,40 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_rank extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (senderIsConsole && args.length < 1) { - for (Player player : server.getOnlinePlayers()) { - playerMsg(sender, player.getName() + " is " + PlayerRank.fromSender(player).getLoginMessage()); - } - return true; - } - if (args.length > 1) - { - return false; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (senderIsConsole && args.length < 1) { + for (Player player : server.getOnlinePlayers()) { + playerMsg(sender, + player.getName() + " is " + PlayerRank.fromSender(player).getLoginMessage()); + } + return true; + } - if (args.length == 0) - { - playerMsg(sender, sender.getName() + " is " + PlayerRank.fromSender(sender).getLoginMessage(), ChatColor.AQUA); - return true; - } + if (args.length > 1) { + return false; + } - final Player player = getPlayer(args[0]); + if (args.length == 0) { + playerMsg(sender, + sender.getName() + " is " + PlayerRank.fromSender(sender).getLoginMessage(), + ChatColor.AQUA); + return true; + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - playerMsg(sender, player.getName() + " is " + PlayerRank.fromSender(player).getLoginMessage(), ChatColor.AQUA); + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - return true; - } + playerMsg(sender, + player.getName() + " is " + PlayerRank.fromSender(player).getLoginMessage(), + ChatColor.AQUA); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rawsay.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rawsay.java index 585616e..00489ee 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rawsay.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rawsay.java @@ -7,12 +7,14 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE, blockHostConsole = true) public class Command_rawsay extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 0) { - Utilities.bcastMsg(Utilities.colorize(StringUtils.join(args, " "))); - } - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 0) { + Utilities.bcastMsg(Utilities.colorize(StringUtils.join(args, " "))); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rd.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rd.java index d4e72be..4736d8f 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rd.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rd.java @@ -6,11 +6,14 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_rd extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Removing all server entities.", true); - playerMsg(sender, (Utilities.TFM_EntityWiper.wipeEntities(true, true)) + " entities removed."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), "Removing all server entities.", true); + playerMsg(sender, + (Utilities.TFM_EntityWiper.wipeEntities(true, true)) + " entities removed."); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_report.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_report.java index d052a3d..363a2b4 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_report.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_report.java @@ -11,39 +11,38 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME, blockHostConsole = true) public class Command_report extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 2) { - return false; - } - Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 2) { + return false; + } - if (player == null) { - playerMsg(sender, PLAYER_NOT_FOUND); - return true; - } + Player player = getPlayer(args[0]); - if (sender instanceof Player) - { - if (player.equals(sender_p)) - { - playerMsg(sender, ChatColor.RED + "Please, don't try to report yourself."); - return true; - } - } + if (player == null) { + playerMsg(sender, PLAYER_NOT_FOUND); + return true; + } - if (AdminList.isSuperAdmin(player)) - { - playerMsg(sender, ChatColor.RED + "You can not report an admin."); - return true; - } + if (sender instanceof Player) { + if (player.equals(sender_p)) { + playerMsg(sender, ChatColor.RED + "Please, don't try to report yourself."); + return true; + } + } - String report = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); - Utilities.reportAction(sender_p, player, report); + if (AdminList.isSuperAdmin(player)) { + playerMsg(sender, ChatColor.RED + "You can not report an admin."); + return true; + } - playerMsg(sender, ChatColor.GREEN + "Thank you, your report has been successfully logged."); + String report = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); + Utilities.reportAction(sender_p, player, report); - return true; - } + playerMsg(sender, ChatColor.GREEN + "Thank you, your report has been successfully logged."); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_resetplayer.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_resetplayer.java index ed70db7..fb754ad 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_resetplayer.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_resetplayer.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.nio.file.Files; +import java.nio.file.Paths; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -8,51 +10,53 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.nio.file.Files; -import java.nio.file.Paths; - @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.BOTH) public class Command_resetplayer extends FreedomCommand { - @Override - public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if(args.length < 1) { - return false; - } - OfflinePlayer target = null; - String searchString = args[0]; + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, + String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { - if(offlinePlayer.getName().equalsIgnoreCase(searchString)) { - target = offlinePlayer; - break; - } else if (offlinePlayer.getName().startsWith(searchString.toLowerCase())) { - target = offlinePlayer; - break; - } - } + OfflinePlayer target = null; + String searchString = args[0]; - if(target == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers()) { + if (offlinePlayer.getName().equalsIgnoreCase(searchString)) { + target = offlinePlayer; + break; + } else if (offlinePlayer.getName().startsWith(searchString.toLowerCase())) { + target = offlinePlayer; + break; + } + } - if(target.isOnline()) { - target.getPlayer().kickPlayer(ChatColor.RED + "YOU ARE BEING RESET."); - } + if (target == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - Utilities.adminAction(sender.getName(), String.format("Resetting %s's player data", target.getName()), true); - playerMsg(sender, String.format("Resetting %s's player data (excluding TFM)...", target.getName())); - try { - String uuid = target.getUniqueId().toString(); - Files.deleteIfExists(Paths.get(".", "world", "playerdata", uuid + ".dat")); - Files.deleteIfExists(Paths.get(".", "plugins", "Essentials", "userdata", uuid + ".yml")); - playerMsg(sender, "Done."); - } catch (Exception e) { - e.printStackTrace(); - playerMsg(sender, "Oops"); - } + if (target.isOnline()) { + target.getPlayer().kickPlayer(ChatColor.RED + "YOU ARE BEING RESET."); + } - return true; - } + Utilities.adminAction(sender.getName(), + String.format("Resetting %s's player data", target.getName()), true); + playerMsg(sender, + String.format("Resetting %s's player data (excluding TFM)...", target.getName())); + try { + String uuid = target.getUniqueId().toString(); + Files.deleteIfExists(Paths.get(".", "world", "playerdata", uuid + ".dat")); + Files.deleteIfExists( + Paths.get(".", "plugins", "Essentials", "userdata", uuid + ".yml")); + playerMsg(sender, "Done."); + } catch (Exception e) { + e.printStackTrace(); + playerMsg(sender, "Oops"); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ro.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ro.java index 2f1222e..eed1d55 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ro.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_ro.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import me.StevenLawson.TotalFreedomMod.util.Utilities; import me.StevenLawson.TotalFreedomMod.world.AdminWorld; @@ -11,113 +13,94 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, blockHostConsole = false) public class Command_ro extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1 || args.length > 3) { - return false; - } - final List materials = new ArrayList(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1 || args.length > 3) { + return false; + } - for (String materialName : StringUtils.split(args[0], ",")) { - Material fromMaterial = Material.matchMaterial(materialName); - if (fromMaterial == null) - { - try - { - fromMaterial = DeprecationUtil.getMaterial(Integer.parseInt(materialName)); - } - catch (NumberFormatException ex) - { - } - } + final List materials = new ArrayList(); - if (fromMaterial == null) - { - playerMsg(sender, "Invalid block: " + materialName, ChatColor.RED); - return true; - } + for (String materialName : StringUtils.split(args[0], ",")) { + Material fromMaterial = Material.matchMaterial(materialName); + if (fromMaterial == null) { + try { + fromMaterial = DeprecationUtil.getMaterial(Integer.parseInt(materialName)); + } catch (NumberFormatException ex) { + } + } - materials.add(fromMaterial); - } + if (fromMaterial == null) { + playerMsg(sender, "Invalid block: " + materialName, ChatColor.RED); + return true; + } - int radius = 20; - if (args.length >= 2) - { - try - { - radius = Math.max(1, Math.min(50, Integer.parseInt(args[1]))); - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid radius: " + args[1], ChatColor.RED); - return true; - } - } + materials.add(fromMaterial); + } - final Player targetPlayer; - if (args.length == 3) - { - targetPlayer = getPlayer(args[2]); - if (targetPlayer == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - } - else - { - targetPlayer = null; - } + int radius = 20; + if (args.length >= 2) { + try { + radius = Math.max(1, Math.min(50, Integer.parseInt(args[1]))); + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid radius: " + args[1], ChatColor.RED); + return true; + } + } - final String names = StringUtils.join(materials, ", "); + final Player targetPlayer; + if (args.length == 3) { + targetPlayer = getPlayer(args[2]); + if (targetPlayer == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + } else { + targetPlayer = null; + } - World adminWorld = null; - try - { - adminWorld = AdminWorld.getInstance().getWorld(); - } - catch (Exception ex) - { - } + final String names = StringUtils.join(materials, ", "); - int affected = 0; - if (targetPlayer == null) - { - Utilities.adminAction(sender.getName(), "Removing all " + names + " within " + radius + " blocks of all players... Brace for lag!", false); + World adminWorld = null; + try { + adminWorld = AdminWorld.getInstance().getWorld(); + } catch (Exception ex) { + } - for (final Player player : server.getOnlinePlayers()) - { - if (player.getWorld() == adminWorld) - { - continue; - } + int affected = 0; + if (targetPlayer == null) { + Utilities.adminAction(sender.getName(), "Removing all " + names + " within " + radius + + " blocks of all players... Brace for lag!", false); - for (final Material material : materials) - { - affected += Utilities.replaceBlocks(player.getLocation(), material, Material.AIR, radius); - } - } - } - else - { - if (targetPlayer.getWorld() != adminWorld) - { - for (Material material : materials) - { - Utilities.adminAction(sender.getName(), "Removing all " + names + " within " + radius + " blocks of " + targetPlayer.getName(), false); - affected += Utilities.replaceBlocks(targetPlayer.getLocation(), material, Material.AIR, radius); - } - } - } + for (final Player player : server.getOnlinePlayers()) { + if (player.getWorld() == adminWorld) { + continue; + } - Utilities.adminAction(sender.getName(), "Remove complete! " + affected + " blocks removed.", false); + for (final Material material : materials) { + affected += Utilities.replaceBlocks(player.getLocation(), material, + Material.AIR, radius); + } + } + } else { + if (targetPlayer.getWorld() != adminWorld) { + for (Material material : materials) { + Utilities.adminAction(sender.getName(), + "Removing all " + names + " within " + radius + " blocks of " + + targetPlayer.getName(), false); + affected += Utilities.replaceBlocks(targetPlayer.getLocation(), material, + Material.AIR, radius); + } + } + } - return true; - } + Utilities.adminAction(sender.getName(), "Remove complete! " + affected + " blocks removed.", + false); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rollback.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rollback.java deleted file mode 100644 index 0611a91..0000000 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_rollback.java +++ /dev/null @@ -1,77 +0,0 @@ -package me.StevenLawson.TotalFreedomMod.commands; - -import me.StevenLawson.TotalFreedomMod.util.Utilities; -import me.StevenLawson.TotalFreedomMod.world.RollbackManager; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; - -@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, blockHostConsole = true) -public class Command_rollback extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0 || args.length > 2) { - return false; - } - - if (args.length == 1) { - if ("purgeall".equals(args[0])) { - Utilities.adminAction(sender.getName(), "Purging all rollback history", false); - playerMsg(sender, "Purged all rollback history for " + RollbackManager.purgeEntries() + " players."); - } - else - { - final String playerName = RollbackManager.findPlayer(args[0]); - - if (playerName == null) - { - playerMsg(sender, "That player has no entries stored."); - return true; - } - - if (RollbackManager.canUndoRollback(playerName)) - { - playerMsg(sender, "That player has just been rolled back."); - } - - Utilities.adminAction(sender.getName(), "Rolling back player: " + playerName, false); - playerMsg(sender, "Rolled back " + RollbackManager.rollback(playerName) + " edits for " + playerName + "."); - playerMsg(sender, "If this rollback was a mistake, use /rollback undo " + playerName + " within 40 seconds to reverse the rollback."); - } - return true; - } - - if (args.length == 2) - { - if ("purge".equalsIgnoreCase(args[0])) - { - final String playerName = RollbackManager.findPlayer(args[1]); - - if (playerName == null) - { - playerMsg(sender, "That player has no entries stored."); - return true; - } - - playerMsg(sender, "Purged " + RollbackManager.purgeEntries(playerName) + " rollback history entries for " + playerName + "."); - return true; - } - - if ("undo".equalsIgnoreCase(args[0])) - { - final String playerName = RollbackManager.findPlayer(args[1]); - - if (playerName == null) - { - playerMsg(sender, "That player hasn't been rolled back recently."); - return true; - } - - Utilities.adminAction(sender.getName(), "Reverting rollback for player: " + playerName, false); - playerMsg(sender, "Reverted " + RollbackManager.undoRollback(playerName) + " edits for " + playerName + "."); - return true; - } - } - - return false; - } -} diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_saconfig.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_saconfig.java index 4f551a9..86bbe8a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_saconfig.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_saconfig.java @@ -16,265 +16,236 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_saconfig extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - final SAConfigMode mode; - try { - mode = SAConfigMode.findMode(args, sender, senderIsConsole); - } catch (final PermissionsException ex) { - playerMsg(sender, ex.getMessage()); - return true; - } - catch (final FormatException ex) - { - playerMsg(sender, ex.getMessage()); - return false; - } - switch (mode) - { - case LIST: - { - playerMsg(sender, "Superadmins: " + StringUtils.join(AdminList.getSuperNames(), ", "), ChatColor.GOLD); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + final SAConfigMode mode; + try { + mode = SAConfigMode.findMode(args, sender, senderIsConsole); + } catch (final PermissionsException ex) { + playerMsg(sender, ex.getMessage()); + return true; + } catch (final FormatException ex) { + playerMsg(sender, ex.getMessage()); + return false; + } - break; - } - case CLEAN: - { - Utilities.adminAction(sender.getName(), "Cleaning superadmin list", true); - AdminList.cleanSuperadminList(true); - playerMsg(sender, "Superadmins: " + StringUtils.join(AdminList.getSuperNames(), ", "), ChatColor.YELLOW); + switch (mode) { + case LIST: { + playerMsg(sender, + "Superadmins: " + StringUtils.join(AdminList.getSuperNames(), ", "), + ChatColor.GOLD); - break; - } - case CLEARME: - { - final Admin admin = AdminList.getEntry(sender_p); + break; + } + case CLEAN: { + Utilities.adminAction(sender.getName(), "Cleaning superadmin list", true); + AdminList.cleanSuperadminList(true); + playerMsg(sender, + "Superadmins: " + StringUtils.join(AdminList.getSuperNames(), ", "), + ChatColor.YELLOW); - if (admin == null) - { - playerMsg(sender, "Could not find your admin entry! Please notify a developer.", ChatColor.RED); - return true; - } + break; + } + case CLEARME: { + final Admin admin = AdminList.getEntry(sender_p); - final String ip = Utilities.getIp(sender_p); + if (admin == null) { + playerMsg(sender, "Could not find your admin entry! Please notify a developer.", + ChatColor.RED); + return true; + } - if (args.length == 1) - { - Utilities.adminAction(sender.getName(), "Cleaning my supered IPs", true); + final String ip = Utilities.getIp(sender_p); - int counter = admin.getIps().size() - 1; - admin.clearIPs(); - admin.addIp(ip); + if (args.length == 1) { + Utilities.adminAction(sender.getName(), "Cleaning my supered IPs", true); - AdminList.saveAll(); + int counter = admin.getIps().size() - 1; + admin.clearIPs(); + admin.addIp(ip); - playerMsg(sender, counter + " IPs removed."); - playerMsg(sender, admin.getIps().get(0) + " is now your only IP address"); - } - else - { - if (!admin.getIps().contains(args[1])) - { - playerMsg(sender, "That IP is not registered to you."); - } - else if (ip.equals(args[1])) - { - playerMsg(sender, "You cannot remove your current IP."); - } - else - { - Utilities.adminAction(sender.getName(), "Removing a supered IP", true); + AdminList.saveAll(); - admin.removeIp(args[1]); + playerMsg(sender, counter + " IPs removed."); + playerMsg(sender, admin.getIps().get(0) + " is now your only IP address"); + } else { + if (!admin.getIps().contains(args[1])) { + playerMsg(sender, "That IP is not registered to you."); + } else if (ip.equals(args[1])) { + playerMsg(sender, "You cannot remove your current IP."); + } else { + Utilities.adminAction(sender.getName(), "Removing a supered IP", true); - AdminList.saveAll(); + admin.removeIp(args[1]); - playerMsg(sender, "Removed IP " + args[1]); - playerMsg(sender, "Current IPs: " + StringUtils.join(admin.getIps(), ", ")); - } - } + AdminList.saveAll(); - break; - } - case INFO: - { - Admin superadmin = AdminList.getEntry(args[1].toLowerCase()); + playerMsg(sender, "Removed IP " + args[1]); + playerMsg(sender, "Current IPs: " + StringUtils.join(admin.getIps(), ", ")); + } + } - if (superadmin == null) - { - final Player player = getPlayer(args[1]); - if (player != null) - { - superadmin = AdminList.getEntry(player.getName().toLowerCase()); - } - } + break; + } + case INFO: { + Admin superadmin = AdminList.getEntry(args[1].toLowerCase()); - if (superadmin == null) - { - playerMsg(sender, "Superadmin not found: " + args[1]); - } - else - { - playerMsg(sender, superadmin.toString()); - } + if (superadmin == null) { + final Player player = getPlayer(args[1]); + if (player != null) { + superadmin = AdminList.getEntry(player.getName().toLowerCase()); + } + } - break; - } - case ADD: - { - OfflinePlayer player = getPlayer(args[1], true); // Exact case-insensitive match. + if (superadmin == null) { + playerMsg(sender, "Superadmin not found: " + args[1]); + } else { + playerMsg(sender, superadmin.toString()); + } - if (player == null) - { - final Admin superadmin = AdminList.getEntry(args[1]); + break; + } + case ADD: { + OfflinePlayer player = getPlayer(args[1], true); // Exact case-insensitive match. - if (superadmin == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + if (player == null) { + final Admin superadmin = AdminList.getEntry(args[1]); - player = DeprecationUtil.getOfflinePlayer(server, superadmin.getLastLoginName()); - } + if (superadmin == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - Utilities.adminAction(sender.getName(), "Adding " + player.getName() + " to the superadmin list", true); - AdminList.addSuperadmin(player); + player = DeprecationUtil.getOfflinePlayer(server, + superadmin.getLastLoginName()); + } - if (player.isOnline()) - { - final PlayerData playerdata = PlayerData.getPlayerData(player.getPlayer()); + Utilities.adminAction(sender.getName(), + "Adding " + player.getName() + " to the superadmin list", true); + AdminList.addSuperadmin(player); - if (playerdata.isFrozen()) - { - playerdata.setFrozen(false); - playerMsg(player.getPlayer(), "You have been unfrozen."); - } - } + if (player.isOnline()) { + final PlayerData playerdata = PlayerData.getPlayerData(player.getPlayer()); - break; - } - case REMOVE: - { - String targetName = args[1]; + if (playerdata.isFrozen()) { + playerdata.setFrozen(false); + playerMsg(player.getPlayer(), "You have been unfrozen."); + } + } - final Player player = getPlayer(targetName, true); // Exact case-insensitive match. + break; + } + case REMOVE: { + String targetName = args[1]; - if (player != null) - { - targetName = player.getName(); - } + final Player player = getPlayer(targetName, true); // Exact case-insensitive match. - if (!AdminList.getLowercaseSuperNames().contains(targetName.toLowerCase())) - { - playerMsg(sender, "Superadmin not found: " + targetName); - return true; - } + if (player != null) { + targetName = player.getName(); + } - Utilities.adminAction(sender.getName(), "Removing " + targetName + " from the superadmin list", true); - AdminList.removeSuperadmin(DeprecationUtil.getOfflinePlayer(server, targetName)); + if (!AdminList.getLowercaseSuperNames().contains(targetName.toLowerCase())) { + playerMsg(sender, "Superadmin not found: " + targetName); + return true; + } - // Twitterbot - if (ConfigurationEntry.TWITTERBOT_ENABLED.getBoolean()) - { - TwitterHandler.delTwitterVerbose(targetName, sender); - } + Utilities.adminAction(sender.getName(), + "Removing " + targetName + " from the superadmin list", true); + AdminList.removeSuperadmin(DeprecationUtil.getOfflinePlayer(server, targetName)); - break; - } - } + // Twitterbot + if (ConfigurationEntry.TWITTERBOT_ENABLED.getBoolean()) { + TwitterHandler.delTwitterVerbose(targetName, sender); + } - return true; - } + break; + } + } - private enum SAConfigMode { - LIST("list", AdminLevel.OP, SourceType.BOTH, 1, 1), - CLEAN("clean", AdminLevel.SENIOR, SourceType.BOTH, 1, 1), - CLEARME("clearme", AdminLevel.SUPER, SourceType.ONLY_IN_GAME, 1, 2), - INFO("info", AdminLevel.SUPER, SourceType.BOTH, 2, 2), - ADD("add", AdminLevel.SUPER, SourceType.BOTH, 2, 2), - REMOVE("remove", AdminLevel.SENIOR, SourceType.BOTH, 2, 2); - private final String modeName; - private final AdminLevel adminLevel; - private final SourceType sourceType; - private final int minArgs; - private final int maxArgs; + return true; + } - SAConfigMode(String modeName, AdminLevel adminLevel, SourceType sourceType, int minArgs, int maxArgs) { - this.modeName = modeName; - this.adminLevel = adminLevel; - this.sourceType = sourceType; - this.minArgs = minArgs; - this.maxArgs = maxArgs; - } + private enum SAConfigMode { + LIST("list", AdminLevel.OP, SourceType.BOTH, 1, 1), + CLEAN("clean", AdminLevel.SENIOR, SourceType.BOTH, 1, 1), + CLEARME("clearme", AdminLevel.SUPER, SourceType.ONLY_IN_GAME, 1, 2), + INFO("info", AdminLevel.SUPER, SourceType.BOTH, 2, 2), + ADD("add", AdminLevel.SUPER, SourceType.BOTH, 2, 2), + REMOVE("remove", AdminLevel.SENIOR, SourceType.BOTH, 2, 2); + private final String modeName; + private final AdminLevel adminLevel; + private final SourceType sourceType; + private final int minArgs; + private final int maxArgs; - private static SAConfigMode findMode(final String[] args, final CommandSender sender, final boolean senderIsConsole) throws PermissionsException, FormatException - { - if (args.length == 0) - { - throw new FormatException("Invalid number of arguments."); - } + SAConfigMode(String modeName, AdminLevel adminLevel, SourceType sourceType, int minArgs, + int maxArgs) { + this.modeName = modeName; + this.adminLevel = adminLevel; + this.sourceType = sourceType; + this.minArgs = minArgs; + this.maxArgs = maxArgs; + } - boolean isSuperAdmin = AdminList.isSuperAdmin(sender); - boolean isSeniorAdmin = isSuperAdmin && AdminList.isSeniorAdmin(sender, false); + private static SAConfigMode findMode(final String[] args, final CommandSender sender, + final boolean senderIsConsole) throws PermissionsException, FormatException { + if (args.length == 0) { + throw new FormatException("Invalid number of arguments."); + } - for (final SAConfigMode mode : values()) - { - if (mode.modeName.equalsIgnoreCase(args[0])) - { - if (mode.adminLevel == AdminLevel.SUPER) { - if (!isSuperAdmin) { - throw new PermissionsException(FreedomCommand.MSG_NO_PERMS); - } - } else if (mode.adminLevel == AdminLevel.SENIOR) { - if (!isSeniorAdmin) { - throw new PermissionsException(FreedomCommand.MSG_NO_PERMS); - } - } + boolean isSuperAdmin = AdminList.isSuperAdmin(sender); + boolean isSeniorAdmin = isSuperAdmin && AdminList.isSeniorAdmin(sender, false); - if (mode.sourceType == SourceType.ONLY_IN_GAME) - { - if (senderIsConsole) - { - throw new PermissionsException("This command may only be used in-game."); - } - } - else if (mode.sourceType == SourceType.ONLY_CONSOLE) - { - if (!senderIsConsole) - { - throw new PermissionsException("This command may only be used from the console."); - } - } + for (final SAConfigMode mode : values()) { + if (mode.modeName.equalsIgnoreCase(args[0])) { + if (mode.adminLevel == AdminLevel.SUPER) { + if (!isSuperAdmin) { + throw new PermissionsException(FreedomCommand.MSG_NO_PERMS); + } + } else if (mode.adminLevel == AdminLevel.SENIOR) { + if (!isSeniorAdmin) { + throw new PermissionsException(FreedomCommand.MSG_NO_PERMS); + } + } - if (args.length >= mode.minArgs && args.length <= mode.maxArgs) - { - return mode; - } - else - { - throw new FormatException("Invalid number of arguments for mode: " + mode.modeName); - } - } - } + if (mode.sourceType == SourceType.ONLY_IN_GAME) { + if (senderIsConsole) { + throw new PermissionsException( + "This command may only be used in-game."); + } + } else if (mode.sourceType == SourceType.ONLY_CONSOLE) { + if (!senderIsConsole) { + throw new PermissionsException( + "This command may only be used from the console."); + } + } - throw new FormatException("Invalid mode."); - } - } + if (args.length >= mode.minArgs && args.length <= mode.maxArgs) { + return mode; + } else { + throw new FormatException( + "Invalid number of arguments for mode: " + mode.modeName); + } + } + } - private static class PermissionsException extends Exception - { - public PermissionsException(final String message) - { - super(message); - } - } + throw new FormatException("Invalid mode."); + } + } - private static class FormatException extends Exception - { - public FormatException(final String message) - { - super(message); - } - } + private static class PermissionsException extends Exception { + + public PermissionsException(final String message) { + super(message); + } + } + + private static class FormatException extends Exception { + + public FormatException(final String message) { + super(message); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_say.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_say.java index 17a49a7..fc9e6b1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_say.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_say.java @@ -9,32 +9,33 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_say extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - String message = StringUtils.join(args, " "); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - if (senderIsConsole && Utilities.isFromHostConsole(sender.getName())) { - if (message.equalsIgnoreCase("WARNING: Server is restarting, you will be kicked")) - { - Utilities.bcastMsg("Server is going offline.", ChatColor.GRAY); + String message = StringUtils.join(args, " "); - for (Player player : server.getOnlinePlayers()) - { - player.kickPlayer("Server is going offline, come back in about 20 seconds."); - } + if (senderIsConsole && Utilities.isFromHostConsole(sender.getName())) { + if (message.equalsIgnoreCase("WARNING: Server is restarting, you will be kicked")) { + Utilities.bcastMsg("Server is going offline.", ChatColor.GRAY); - server.shutdown(); + for (Player player : server.getOnlinePlayers()) { + player.kickPlayer("Server is going offline, come back in about 20 seconds."); + } - return true; - } - } + server.shutdown(); - Utilities.bcastMsg(String.format("[Server:%s] %s", sender.getName(), message), ChatColor.LIGHT_PURPLE); + return true; + } + } - return true; - } + Utilities.bcastMsg(String.format("[Server:%s] %s", sender.getName(), message), + ChatColor.LIGHT_PURPLE); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setl.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setl.java index af34f0c..424db83 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setl.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setl.java @@ -8,12 +8,15 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_setl extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.adminAction(sender.getName(), "Setting everyone's Worldedit block modification limit to 2500.", true); - for (final Player player : server.getOnlinePlayers()) { - WorldEditBridge.setLimit(player, 2500); - } - return true; - } + + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.adminAction(sender.getName(), + "Setting everyone's Worldedit block modification limit to 2500.", true); + for (final Player player : server.getOnlinePlayers()) { + WorldEditBridge.setLimit(player, 2500); + } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlevel.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlevel.java index 01726b3..048d11a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlevel.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlevel.java @@ -6,36 +6,34 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_setlevel extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - int new_level; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - try { - new_level = Integer.parseInt(args[0]); + int new_level; - if (new_level < 0) - { - new_level = 0; - } - else if (new_level > 50) - { - new_level = 50; - } - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid level.", ChatColor.RED); - return true; - } + try { + new_level = Integer.parseInt(args[0]); - sender_p.setLevel(new_level); + if (new_level < 0) { + new_level = 0; + } else if (new_level > 50) { + new_level = 50; + } + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid level.", ChatColor.RED); + return true; + } - playerMsg(sender, "You have been set to level " + Integer.toString(new_level), ChatColor.AQUA); + sender_p.setLevel(new_level); - return true; - } + playerMsg(sender, "You have been set to level " + new_level, + ChatColor.AQUA); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlever.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlever.java index 0041b36..eb10ed5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlever.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setlever.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.List; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import org.bukkit.Location; import org.bukkit.Material; @@ -8,65 +9,59 @@ import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.List; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_setlever extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 5) { - return false; - } - double x, y, z; - try { - x = Double.parseDouble(args[0]); - y = Double.parseDouble(args[1]); - z = Double.parseDouble(args[2]); - } - catch (NumberFormatException ex) - { - playerMsg(sender, "Invalid coordinates."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 5) { + return false; + } - World world = null; - final String needleWorldName = args[3].trim(); - final List worlds = server.getWorlds(); - for (final World testWorld : worlds) - { - if (testWorld.getName().trim().equalsIgnoreCase(needleWorldName)) - { - world = testWorld; - break; - } - } + double x, y, z; + try { + x = Double.parseDouble(args[0]); + y = Double.parseDouble(args[1]); + z = Double.parseDouble(args[2]); + } catch (NumberFormatException ex) { + playerMsg(sender, "Invalid coordinates."); + return true; + } - if (world == null) - { - playerMsg(sender, "Invalid world name."); - return true; - } + World world = null; + final String needleWorldName = args[3].trim(); + final List worlds = server.getWorlds(); + for (final World testWorld : worlds) { + if (testWorld.getName().trim().equalsIgnoreCase(needleWorldName)) { + world = testWorld; + break; + } + } - final Location leverLocation = new Location(world, x, y, z); + if (world == null) { + playerMsg(sender, "Invalid world name."); + return true; + } - final boolean leverOn = (args[4].trim().equalsIgnoreCase("on") || args[4].trim().equalsIgnoreCase("1")); + final Location leverLocation = new Location(world, x, y, z); - final Block targetBlock = leverLocation.getBlock(); + final boolean leverOn = (args[4].trim().equalsIgnoreCase("on") || args[4].trim() + .equalsIgnoreCase("1")); - if (targetBlock.getType() == Material.LEVER) - { - org.bukkit.material.Lever lever = DeprecationUtil.makeLeverWithData(DeprecationUtil.getData_Block(targetBlock)); - lever.setPowered(leverOn); - DeprecationUtil.setData_Block(targetBlock, DeprecationUtil.getData_MaterialData(lever)); - targetBlock.getState().update(); - } - else - { - playerMsg(sender, "Target block " + targetBlock + " is not a lever."); - return true; - } + final Block targetBlock = leverLocation.getBlock(); - return true; - } + if (targetBlock.getType() == Material.LEVER) { + org.bukkit.material.Lever lever = DeprecationUtil.makeLeverWithData( + DeprecationUtil.getData_Block(targetBlock)); + lever.setPowered(leverOn); + DeprecationUtil.setData_Block(targetBlock, DeprecationUtil.getData_MaterialData(lever)); + targetBlock.getState().update(); + } else { + playerMsg(sender, "Target block " + targetBlock + " is not a lever."); + return true; + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setspawnworld.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setspawnworld.java index 1e19298..c491dc7 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setspawnworld.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_setspawnworld.java @@ -9,17 +9,22 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_setspawnworld extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Location pos = sender_p.getLocation(); - sender_p.getWorld().setSpawnLocation(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - playerMsg(sender, "Spawn location for this world set to: " + Utilities.formatLocation(sender_p.getWorld().getSpawnLocation())); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Location pos = sender_p.getLocation(); + sender_p.getWorld().setSpawnLocation(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()); - if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean() && ConfigurationEntry.PROTECTAREA_SPAWNPOINTS.getBoolean()) { - ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, ConfigurationEntry.PROTECTAREA_RADIUS.getDouble()); - } + playerMsg(sender, "Spawn location for this world set to: " + Utilities.formatLocation( + sender_p.getWorld().getSpawnLocation())); - return true; - } + if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean() + && ConfigurationEntry.PROTECTAREA_SPAWNPOINTS.getBoolean()) { + ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, + ConfigurationEntry.PROTECTAREA_RADIUS.getDouble()); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_smite.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_smite.java index c1049b3..9dc4144 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_smite.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_smite.java @@ -11,50 +11,50 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_smite extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - final Player player = getPlayer(args[0]); + public static void smite(final Player player) { + Utilities.bcastMsg(player.getName() + " has been a naughty, naughty boy.", ChatColor.RED); - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + //Deop + player.setOp(false); - smite(player); + //Set gamemode to survival: + player.setGameMode(GameMode.SURVIVAL); - return true; - } + //Clear inventory: + player.getInventory().clear(); - public static void smite(final Player player) - { - Utilities.bcastMsg(player.getName() + " has been a naughty, naughty boy.", ChatColor.RED); + //Strike with lightning effect: + final Location targetPos = player.getLocation(); + final World world = player.getWorld(); + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + final Location strike_pos = new Location(world, targetPos.getBlockX() + x, + targetPos.getBlockY(), targetPos.getBlockZ() + z); + world.strikeLightning(strike_pos); + } + } - //Deop - player.setOp(false); + //Kill: + player.setHealth(0.0); + } - //Set gamemode to survival: - player.setGameMode(GameMode.SURVIVAL); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - //Clear inventory: - player.getInventory().clear(); + final Player player = getPlayer(args[0]); - //Strike with lightning effect: - final Location targetPos = player.getLocation(); - final World world = player.getWorld(); - for (int x = -1; x <= 1; x++) - { - for (int z = -1; z <= 1; z++) - { - final Location strike_pos = new Location(world, targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); - world.strikeLightning(strike_pos); - } - } + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - //Kill: - player.setHealth(0.0); - } + smite(player); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_spectator.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_spectator.java index c9d2de1..67c5284 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_spectator.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_spectator.java @@ -8,49 +8,46 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_spectator extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (senderIsConsole) { - if (args.length == 0) { - sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); - return true; - } - } - Player player; - if (args.length == 0) - { - player = sender_p; - } - else - { - if (args[0].equalsIgnoreCase("-a")) - { + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (senderIsConsole) { + if (args.length == 0) { + sender.sendMessage( + "When used from the console, you must define a target user to change gamemode on."); + return true; + } + } - for (Player targetPlayer : server.getOnlinePlayers()) - { - targetPlayer.setGameMode(GameMode.SPECTATOR); - } + Player player; + if (args.length == 0) { + player = sender_p; + } else { + if (args[0].equalsIgnoreCase("-a")) { - Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to spectator", false); - return true; - } + for (Player targetPlayer : server.getOnlinePlayers()) { + targetPlayer.setGameMode(GameMode.SPECTATOR); + } + Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to spectator", + false); + return true; + } - player = getPlayer(args[0]); + player = getPlayer(args[0]); - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - } + } - playerMsg(sender, "Setting " + player.getName() + " to game mode 'Spectator'."); - playerMsg(player, sender.getName() + " set your game mode to 'Spectator'."); - player.setGameMode(GameMode.SPECTATOR); + playerMsg(sender, "Setting " + player.getName() + " to game mode 'Spectator'."); + playerMsg(player, sender.getName() + " set your game mode to 'Spectator'."); + player.setGameMode(GameMode.SPECTATOR); - return true; - } + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_status.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_status.java index 8032308..b7e246e 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_status.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_status.java @@ -1,37 +1,42 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.HashMap; +import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.HashMap; -import java.util.Map; - @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_status extends FreedomCommand { - public static final Map SERVICE_MAP = new HashMap(); - static { - SERVICE_MAP.put("minecraft.net", "Minecraft.net"); - SERVICE_MAP.put("login.minecraft.net", "Minecraft Logins"); - SERVICE_MAP.put("session.minecraft.net", "Minecraft Multiplayer Sessions"); - SERVICE_MAP.put("account.mojang.com", "Mojang Accounts Website"); - SERVICE_MAP.put("auth.mojang.com", "Mojang Accounts Login"); - SERVICE_MAP.put("skins.minecraft.net", "Minecraft Skins"); - } + public static final Map SERVICE_MAP = new HashMap(); - @Override - public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - playerMsg(sender, "For information about TotalFreedomMod, try /tfm", ChatColor.GREEN); // Temporary + static { + SERVICE_MAP.put("minecraft.net", "Minecraft.net"); + SERVICE_MAP.put("login.minecraft.net", "Minecraft Logins"); + SERVICE_MAP.put("session.minecraft.net", "Minecraft Multiplayer Sessions"); + SERVICE_MAP.put("account.mojang.com", "Mojang Accounts Website"); + SERVICE_MAP.put("auth.mojang.com", "Mojang Accounts Login"); + SERVICE_MAP.put("skins.minecraft.net", "Minecraft Skins"); + } - playerMsg(sender, "Server is currently running with 'online-mode=" + (server.getOnlineMode() ? "true" : "false") + "'.", ChatColor.YELLOW); - playerMsg(sender, "Loaded worlds:", ChatColor.BLUE); - int i = 0; - for (World world : server.getWorlds()) { - playerMsg(sender, String.format("World %d: %s - %d players.", i++, world.getName(), world.getPlayers().size()), ChatColor.BLUE); - } + @Override + public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + playerMsg(sender, "For information about TotalFreedomMod, try /tfm", + ChatColor.GREEN); // Temporary - return true; - } + playerMsg(sender, + "Server is currently running with 'online-mode=" + (server.getOnlineMode() ? "true" + : "false") + "'.", ChatColor.YELLOW); + playerMsg(sender, "Loaded worlds:", ChatColor.BLUE); + int i = 0; + for (World world : server.getWorlds()) { + playerMsg(sender, String.format("World %d: %s - %d players.", i++, world.getName(), + world.getPlayers().size()), ChatColor.BLUE); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stfu.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stfu.java index 04a472d..27dff59 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stfu.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stfu.java @@ -9,102 +9,83 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_stfu extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0 || args.length > 2) { - return false; - } - if (args[0].equalsIgnoreCase("list")) { - playerMsg(sender, "Muted players:"); - PlayerData info; - int count = 0; - for (Player mp : server.getOnlinePlayers()) - { - info = PlayerData.getPlayerData(mp); - if (info.isMuted()) - { - playerMsg(sender, "- " + mp.getName()); - count++; - } - } - if (count == 0) - { - playerMsg(sender, "- none"); - } - } - else if (args[0].equalsIgnoreCase("purge")) - { - Utilities.adminAction(sender.getName(), "Unmuting all players.", true); - PlayerData info; - int count = 0; - for (Player mp : server.getOnlinePlayers()) - { - info = PlayerData.getPlayerData(mp); - if (info.isMuted()) - { - info.setMuted(false); - count++; - } - } - playerMsg(sender, "Unmuted " + count + " players."); - } - else if (args[0].equalsIgnoreCase("all")) - { - Utilities.adminAction(sender.getName(), "Muting all non-Superadmins", true); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0 || args.length > 2) { + return false; + } - PlayerData playerdata; - int counter = 0; - for (Player player : server.getOnlinePlayers()) - { - if (!AdminList.isSuperAdmin(player)) - { - playerdata = PlayerData.getPlayerData(player); - playerdata.setMuted(true); - counter++; - } - } + if (args[0].equalsIgnoreCase("list")) { + playerMsg(sender, "Muted players:"); + PlayerData info; + int count = 0; + for (Player mp : server.getOnlinePlayers()) { + info = PlayerData.getPlayerData(mp); + if (info.isMuted()) { + playerMsg(sender, "- " + mp.getName()); + count++; + } + } + if (count == 0) { + playerMsg(sender, "- none"); + } + } else if (args[0].equalsIgnoreCase("purge")) { + Utilities.adminAction(sender.getName(), "Unmuting all players.", true); + PlayerData info; + int count = 0; + for (Player mp : server.getOnlinePlayers()) { + info = PlayerData.getPlayerData(mp); + if (info.isMuted()) { + info.setMuted(false); + count++; + } + } + playerMsg(sender, "Unmuted " + count + " players."); + } else if (args[0].equalsIgnoreCase("all")) { + Utilities.adminAction(sender.getName(), "Muting all non-Superadmins", true); - playerMsg(sender, "Muted " + counter + " players."); - } - else - { - final Player player = getPlayer(args[0]); + PlayerData playerdata; + int counter = 0; + for (Player player : server.getOnlinePlayers()) { + if (!AdminList.isSuperAdmin(player)) { + playerdata = PlayerData.getPlayerData(player); + playerdata.setMuted(true); + counter++; + } + } - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + playerMsg(sender, "Muted " + counter + " players."); + } else { + final Player player = getPlayer(args[0]); - PlayerData playerdata = PlayerData.getPlayerData(player); - if (playerdata.isMuted()) - { - Utilities.adminAction(sender.getName(), "Unmuting " + player.getName(), true); - playerdata.setMuted(false); - playerMsg(sender, "Unmuted " + player.getName()); - } - else - { - if (!AdminList.isSuperAdmin(player)) - { - Utilities.adminAction(sender.getName(), "Muting " + player.getName(), true); - playerdata.setMuted(true); + if (player == null) { + sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - if (args.length == 2 && args[1].equalsIgnoreCase("-s")) - { - Command_smite.smite(player); - } + PlayerData playerdata = PlayerData.getPlayerData(player); + if (playerdata.isMuted()) { + Utilities.adminAction(sender.getName(), "Unmuting " + player.getName(), true); + playerdata.setMuted(false); + playerMsg(sender, "Unmuted " + player.getName()); + } else { + if (!AdminList.isSuperAdmin(player)) { + Utilities.adminAction(sender.getName(), "Muting " + player.getName(), true); + playerdata.setMuted(true); - playerMsg(sender, "Muted " + player.getName()); - } - else - { - playerMsg(sender, player.getName() + " is a superadmin, and can't be muted."); - } - } - } + if (args.length == 2 && args[1].equalsIgnoreCase("-s")) { + Command_smite.smite(player); + } - return true; - } + playerMsg(sender, "Muted " + player.getName()); + } else { + playerMsg(sender, player.getName() + " is a superadmin, and can't be muted."); + } + } + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stop.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stop.java index c57446a..0c0715e 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stop.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_stop.java @@ -8,16 +8,18 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_stop extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.bcastMsg("Server is going offline!", ChatColor.LIGHT_PURPLE); - for (Player player : server.getOnlinePlayers()) { - player.kickPlayer("Server is going offline, come back in about 20 seconds."); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.bcastMsg("Server is going offline!", ChatColor.LIGHT_PURPLE); - server.shutdown(); + for (Player player : server.getOnlinePlayers()) { + player.kickPlayer("Server is going offline, come back in about 20 seconds."); + } - return true; - } + server.shutdown(); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_survival.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_survival.java index 94b042e..f221798 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_survival.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_survival.java @@ -9,61 +9,55 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_survival extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (senderIsConsole) { - if (args.length == 0) { - playerMsg(sender, "When used from the console, you must define a target user to change gamemode on."); - return true; - } - } - Player player; + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (senderIsConsole) { + if (args.length == 0) { + playerMsg(sender, + "When used from the console, you must define a target user to change gamemode on."); + return true; + } + } - if (args.length == 0) - { - player = sender_p; - } - else - { - if (args[0].equalsIgnoreCase("-a")) - { - if (!AdminList.isSuperAdmin(sender) || senderIsConsole) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } + Player player; - for (Player targetPlayer : server.getOnlinePlayers()) - { - targetPlayer.setGameMode(GameMode.SURVIVAL); - } + if (args.length == 0) { + player = sender_p; + } else { + if (args[0].equalsIgnoreCase("-a")) { + if (!AdminList.isSuperAdmin(sender) || senderIsConsole) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } - Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to survival", false); - return true; - } + for (Player targetPlayer : server.getOnlinePlayers()) { + targetPlayer.setGameMode(GameMode.SURVIVAL); + } - if (senderIsConsole || AdminList.isSuperAdmin(sender)) - { - player = getPlayer(args[0]); + Utilities.adminAction(sender.getName(), "Changing everyone's gamemode to survival", + false); + return true; + } - if (player == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - } - else - { - playerMsg(sender, "Only superadmins can change other user's gamemode."); - return true; - } - } + if (senderIsConsole || AdminList.isSuperAdmin(sender)) { + player = getPlayer(args[0]); - playerMsg(sender, "Setting " + player.getName() + " to game mode 'Survival'."); - player.sendMessage(sender.getName() + " set your game mode to 'Survival'."); - player.setGameMode(GameMode.SURVIVAL); + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + } else { + playerMsg(sender, "Only superadmins can change other user's gamemode."); + return true; + } + } - return true; - } + playerMsg(sender, "Setting " + player.getName() + " to game mode 'Survival'."); + player.sendMessage(sender.getName() + " set your game mode to 'Survival'."); + player.setGameMode(GameMode.SURVIVAL); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tag.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tag.java index 797fb4d..dad81d2 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tag.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tag.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Arrays; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.TagConfiguration; import me.StevenLawson.TotalFreedomMod.player.PlayerData; @@ -10,206 +12,185 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Arrays; -import java.util.List; - @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_tag extends FreedomCommand { - public static final List FORBIDDEN_WORDS = Arrays.asList("admin", "owner", "moderator", "developer", "console"); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 1) { - if ("list".equalsIgnoreCase(args[0])) { - playerMsg(sender, "Tags for all online players:"); + public static final List FORBIDDEN_WORDS = Arrays.asList("admin", "owner", "moderator", + "developer", "console"); - for (final Player player : server.getOnlinePlayers()) { - final PlayerData playerdata = PlayerData.getPlayerData(player); - if (playerdata.getTag() != null) - { - playerMsg(sender, player.getName() + ": " + playerdata.getTag()); - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 1) { + if ("list".equalsIgnoreCase(args[0])) { + playerMsg(sender, "Tags for all online players:"); - return true; - } - else if ("clearall".equalsIgnoreCase(args[0])) - { - if (!AdminList.isSuperAdmin(sender)) - { - playerMsg(sender, FreedomCommand.MSG_NO_PERMS); - return true; - } + for (final Player player : server.getOnlinePlayers()) { + final PlayerData playerdata = PlayerData.getPlayerData(player); + if (playerdata.getTag() != null) { + playerMsg(sender, player.getName() + ": " + playerdata.getTag()); + } + } - Utilities.adminAction(sender.getName(), "Removing all tags", false); + return true; + } else if ("clearall".equalsIgnoreCase(args[0])) { + if (!AdminList.isSuperAdmin(sender)) { + playerMsg(sender, FreedomCommand.MSG_NO_PERMS); + return true; + } - int count = 0; - for (final Player player : server.getOnlinePlayers()) - { - final PlayerData playerdata = PlayerData.getPlayerData(player); - if (playerdata.getTag() != null) - { - count++; - if(TagConfiguration.getTag(playerdata.getUniqueId().toString()) != null){ - String playerTag = TagConfiguration.getTag(playerdata.getUniqueId().toString()); - if(!"".equalsIgnoreCase(playerTag)){ - TagConfiguration.saveTag(sender_p.getUniqueId().toString(), ""); - } - } - playerdata.setTag(null); - } - } + Utilities.adminAction(sender.getName(), "Removing all tags", false); - playerMsg(sender, count + " tag(s) removed."); + int count = 0; + for (final Player player : server.getOnlinePlayers()) { + final PlayerData playerdata = PlayerData.getPlayerData(player); + if (playerdata.getTag() != null) { + count++; + if (TagConfiguration.getTag(playerdata.getUniqueId().toString()) != null) { + String playerTag = TagConfiguration.getTag( + playerdata.getUniqueId().toString()); + if (!"".equalsIgnoreCase(playerTag)) { + TagConfiguration.saveTag(sender_p.getUniqueId().toString(), ""); + } + } + playerdata.setTag(null); + } + } - return true; - } - else if ("off".equalsIgnoreCase(args[0])) - { - if (senderIsConsole) - { - playerMsg(sender, "\"/tag off\" can't be used from the console. Use \"/tag clear \" or \"/tag clearall\" instead."); - } - else - { - PlayerData.getPlayerData(sender_p).setTag(null); - if(TagConfiguration.getTag(sender_p.getUniqueId().toString()) != null){ - String playerTag = TagConfiguration.getTag(sender_p.getUniqueId().toString()); - if(!"".equalsIgnoreCase(playerTag)){ - TagConfiguration.saveTag(sender_p.getUniqueId().toString(), ""); - } - } - playerMsg(sender, "Your tag has been removed."); - } + playerMsg(sender, count + " tag(s) removed."); - return true; - } - else - { - return false; - } - } - else if (args.length >= 2) - { - if ("clear".equalsIgnoreCase(args[0])) - { - if (!AdminList.isSuperAdmin(sender)) - { - playerMsg(sender, FreedomCommand.MSG_NO_PERMS); - return true; - } + return true; + } else if ("off".equalsIgnoreCase(args[0])) { + if (senderIsConsole) { + playerMsg(sender, + "\"/tag off\" can't be used from the console. Use \"/tag clear \" or \"/tag clearall\" instead."); + } else { + PlayerData.getPlayerData(sender_p).setTag(null); + if (TagConfiguration.getTag(sender_p.getUniqueId().toString()) != null) { + String playerTag = TagConfiguration.getTag( + sender_p.getUniqueId().toString()); + if (!"".equalsIgnoreCase(playerTag)) { + TagConfiguration.saveTag(sender_p.getUniqueId().toString(), ""); + } + } + playerMsg(sender, "Your tag has been removed."); + } - final Player player = getPlayer(args[1]); - if (player == null) - { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - PlayerData.getPlayerData(player).setTag(null); - if(TagConfiguration.getTag(player.getUniqueId().toString()) != null){ - String playerTag = TagConfiguration.getTag(player.getUniqueId().toString()); - if(!"".equalsIgnoreCase(playerTag)){ - TagConfiguration.saveTag(player.getUniqueId().toString(), ""); - } - } - playerMsg(sender, "Removed " + player.getName() + "'s tag."); + return true; + } else { + return false; + } + } else if (args.length >= 2) { + if ("clear".equalsIgnoreCase(args[0])) { + if (!AdminList.isSuperAdmin(sender)) { + playerMsg(sender, FreedomCommand.MSG_NO_PERMS); + return true; + } - return true; - } - else if ("set".equalsIgnoreCase(args[0])) - { - final String inputTag = StringUtils.join(args, " ", 1, args.length); - final String outputTag = Utilities.colorize(StringUtils.replaceEachRepeatedly(StringUtils.strip(inputTag), - new String[] - { - "" + ChatColor.COLOR_CHAR, "&k" - }, - new String[] - { - "", "" - })) + ChatColor.RESET; + final Player player = getPlayer(args[1]); + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + PlayerData.getPlayerData(player).setTag(null); + if (TagConfiguration.getTag(player.getUniqueId().toString()) != null) { + String playerTag = TagConfiguration.getTag(player.getUniqueId().toString()); + if (!"".equalsIgnoreCase(playerTag)) { + TagConfiguration.saveTag(player.getUniqueId().toString(), ""); + } + } + playerMsg(sender, "Removed " + player.getName() + "'s tag."); - if (!AdminList.isSuperAdmin(sender)) - { - final String rawTag = ChatColor.stripColor(outputTag).toLowerCase(); + return true; + } else if ("set".equalsIgnoreCase(args[0])) { + final String inputTag = StringUtils.join(args, " ", 1, args.length); + final String outputTag = Utilities.colorize( + StringUtils.replaceEachRepeatedly(StringUtils.strip(inputTag), + new String[] + { + "" + ChatColor.COLOR_CHAR, "&k" + }, + new String[] + { + "", "" + })) + ChatColor.RESET; - if (rawTag.length() > 20) - { - playerMsg(sender, "That tag is too long (Max is 20 characters)."); - return true; - } + if (!AdminList.isSuperAdmin(sender)) { + final String rawTag = ChatColor.stripColor(outputTag).toLowerCase(); - for (String word : FORBIDDEN_WORDS) - { - if (rawTag.contains(word)) - { - { - if(word.equals("developer") && Utilities.DEVELOPERS.contains(sender_p.getName())) { - PlayerData.getPlayerData(sender_p).setTag(outputTag); - playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'."); - } else - playerMsg(sender, "That tag contains a forbidden word."); - return true; - } - } - } - } + if (rawTag.length() > 20) { + playerMsg(sender, "That tag is too long (Max is 20 characters)."); + return true; + } - PlayerData.getPlayerData(sender_p).setTag(outputTag); - playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'."); + for (String word : FORBIDDEN_WORDS) { + if (rawTag.contains(word)) { + { + if (word.equals("developer") && Utilities.DEVELOPERS.contains( + sender_p.getName())) { + PlayerData.getPlayerData(sender_p).setTag(outputTag); + playerMsg(sender, + "Tag set to '" + outputTag + ChatColor.GRAY + "'."); + } else { + playerMsg(sender, "That tag contains a forbidden word."); + } + return true; + } + } + } + } - return true; - } - else if ("-s".equalsIgnoreCase(args[0]) && "set".equalsIgnoreCase(args[1])) - { - final String inputTag = StringUtils.join(args, " ", 2, args.length); - final String outputTag = Utilities.colorize(StringUtils.replaceEachRepeatedly(StringUtils.strip(inputTag), - new String[] - { - "" + ChatColor.COLOR_CHAR, "&k" - }, - new String[] - { - "", "" - })) + ChatColor.RESET; + PlayerData.getPlayerData(sender_p).setTag(outputTag); + playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'."); - if (!AdminList.isSuperAdmin(sender)) - { - final String rawTag = ChatColor.stripColor(outputTag).toLowerCase(); + return true; + } else if ("-s".equalsIgnoreCase(args[0]) && "set".equalsIgnoreCase(args[1])) { + final String inputTag = StringUtils.join(args, " ", 2, args.length); + final String outputTag = Utilities.colorize( + StringUtils.replaceEachRepeatedly(StringUtils.strip(inputTag), + new String[] + { + "" + ChatColor.COLOR_CHAR, "&k" + }, + new String[] + { + "", "" + })) + ChatColor.RESET; - if (rawTag.length() > 20) - { - playerMsg(sender, "That tag is too long (Max is 20 characters)."); - return true; - } + if (!AdminList.isSuperAdmin(sender)) { + final String rawTag = ChatColor.stripColor(outputTag).toLowerCase(); - for (String word : FORBIDDEN_WORDS) - { - if (rawTag.contains(word)) - { - if(word.equals("developer") && Utilities.DEVELOPERS.contains(sender_p.getName())) { - PlayerData.getPlayerData(sender_p).setTag(outputTag); - TagConfiguration.saveTag(sender_p.getUniqueId().toString(), outputTag); - playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'. (saved)"); - } else - playerMsg(sender, "That tag contains a forbidden word."); - return true; - } - } - } + if (rawTag.length() > 20) { + playerMsg(sender, "That tag is too long (Max is 20 characters)."); + return true; + } - PlayerData.getPlayerData(sender_p).setTag(outputTag); - TagConfiguration.saveTag(sender_p.getUniqueId().toString(), outputTag); - playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'. (saved)"); - return true; - } else - { - return false; - } - } - else - { - return false; - } - } + for (String word : FORBIDDEN_WORDS) { + if (rawTag.contains(word)) { + if (word.equals("developer") && Utilities.DEVELOPERS.contains( + sender_p.getName())) { + PlayerData.getPlayerData(sender_p).setTag(outputTag); + TagConfiguration.saveTag(sender_p.getUniqueId().toString(), + outputTag); + playerMsg(sender, + "Tag set to '" + outputTag + ChatColor.GRAY + "'. (saved)"); + } else { + playerMsg(sender, "That tag contains a forbidden word."); + } + return true; + } + } + } + + PlayerData.getPlayerData(sender_p).setTag(outputTag); + TagConfiguration.saveTag(sender_p.getUniqueId().toString(), outputTag); + playerMsg(sender, "Tag set to '" + outputTag + ChatColor.GRAY + "'. (saved)"); + return true; + } else { + return false; + } + } else { + return false; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tagnyan.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tagnyan.java index 40c34ea..1fd1425 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tagnyan.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tagnyan.java @@ -9,23 +9,26 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_tagnyan extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - final StringBuilder tag = new StringBuilder(); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - for (char c : ChatColor.stripColor(Utilities.colorize(StringUtils.join(args, " "))).toCharArray()) { - tag.append(Utilities.randomChatColor()).append(c); - } + final StringBuilder tag = new StringBuilder(); - final PlayerData data = PlayerData.getPlayerData(sender_p); - data.setTag(tag.toString()); + for (char c : ChatColor.stripColor(Utilities.colorize(StringUtils.join(args, " "))) + .toCharArray()) { + tag.append(Utilities.randomChatColor()).append(c); + } - playerMsg(sender, "Set tag to " + tag); + final PlayerData data = PlayerData.getPlayerData(sender_p); + data.setTag(tag.toString()); - return true; - } + playerMsg(sender, "Set tag to " + tag); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tban.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tban.java index d2f9a70..9fdea62 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tban.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tban.java @@ -2,7 +2,7 @@ package me.StevenLawson.TotalFreedomMod.commands; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -12,38 +12,45 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_tban extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - final Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); - return true; - } + final Player player = getPlayer(args[0]); - // strike with lightning effect: - final Location targetPos = player.getLocation(); - for (int x = -1; x <= 1; x++) - { - for (int z = -1; z <= 1; z++) - { - final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); - targetPos.getWorld().strikeLightning(strike_pos); - } - } + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } - Utilities.adminAction(sender.getName(), "Tempbanning: " + player.getName() + " for 5 minutes.", true); - BanManager.addUuidBan( - new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), Utilities.parseDateOffset("5m"), ChatColor.RED + "You have been temporarily banned for 5 minutes.")); - BanManager.addIpBan( - new Ban(Utilities.getIp(player), player.getName(), sender.getName(), Utilities.parseDateOffset("5m"), ChatColor.RED + "You have been temporarily banned for 5 minutes.")); + // strike with lightning effect: + final Location targetPos = player.getLocation(); + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + final Location strike_pos = new Location(targetPos.getWorld(), + targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); + targetPos.getWorld().strikeLightning(strike_pos); + } + } - player.kickPlayer(ChatColor.RED + "You have been temporarily banned for five minutes. Please read totalfreedom.me for more info."); + Utilities.adminAction(sender.getName(), + "Tempbanning: " + player.getName() + " for 5 minutes.", true); + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), + Utilities.parseDateOffset("5m"), + ChatColor.RED + "You have been temporarily banned for 5 minutes.")); + BanManager.addIpBan( + new Ban(Utilities.getIp(player), player.getName(), sender.getName(), + Utilities.parseDateOffset("5m"), + ChatColor.RED + "You have been temporarily banned for 5 minutes.")); - return true; - } + player.kickPlayer(ChatColor.RED + + "You have been temporarily banned for five minutes. Please read totalfreedom.me for more info."); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tempban.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tempban.java index ef3abc9..d4e1f53 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tempban.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tempban.java @@ -1,8 +1,10 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.text.SimpleDateFormat; +import java.util.Date; import me.StevenLawson.TotalFreedomMod.ban.Ban; import me.StevenLawson.TotalFreedomMod.ban.BanManager; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -11,64 +13,64 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.text.SimpleDateFormat; -import java.util.Date; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_tempban extends FreedomCommand { - private static final SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } + private static final SimpleDateFormat date_format = new SimpleDateFormat( + "yyyy-MM-dd 'at' HH:mm:ss z"); - final Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - if (player == null) { - playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); - return true; - } + final Player player = getPlayer(args[0]); - final StringBuilder message = new StringBuilder("Temporarily banned " + player.getName()); + if (player == null) { + playerMsg(sender, FreedomCommand.PLAYER_NOT_FOUND); + return true; + } - Date expires = Utilities.parseDateOffset("30m"); - if (args.length >= 2) - { - Date parsed_offset = Utilities.parseDateOffset(args[1]); - if (parsed_offset != null) - { - expires = parsed_offset; - } - } - message.append(" until ").append(date_format.format(expires)); + final StringBuilder message = new StringBuilder("Temporarily banned " + player.getName()); - String reason = "Banned by " + sender.getName(); - if (args.length >= 3) - { - reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")"; - message.append(", Reason: \"").append(reason).append("\""); - } + Date expires = Utilities.parseDateOffset("30m"); + if (args.length >= 2) { + Date parsed_offset = Utilities.parseDateOffset(args[1]); + if (parsed_offset != null) { + expires = parsed_offset; + } + } + message.append(" until ").append(date_format.format(expires)); - // strike with lightning effect: - final Location targetPos = player.getLocation(); - for (int x = -1; x <= 1; x++) - { - for (int z = -1; z <= 1; z++) - { - final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); - targetPos.getWorld().strikeLightning(strike_pos); - } - } + String reason = "Banned by " + sender.getName(); + if (args.length >= 3) { + reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + + sender.getName() + ")"; + message.append(", Reason: \"").append(reason).append("\""); + } - Utilities.adminAction(sender.getName(), message.toString(), true); + // strike with lightning effect: + final Location targetPos = player.getLocation(); + for (int x = -1; x <= 1; x++) { + for (int z = -1; z <= 1; z++) { + final Location strike_pos = new Location(targetPos.getWorld(), + targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); + targetPos.getWorld().strikeLightning(strike_pos); + } + } - BanManager.addIpBan(new Ban(Utilities.getIp(player), player.getName(), sender.getName(), expires, reason)); - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), expires, reason)); + Utilities.adminAction(sender.getName(), message.toString(), true); - player.kickPlayer(sender.getName() + " - " + message); + BanManager.addIpBan( + new Ban(Utilities.getIp(player), player.getName(), sender.getName(), expires, reason)); + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), sender.getName(), expires, + reason)); - return true; - } + player.kickPlayer(sender.getName() + " - " + message); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfbanlist.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfbanlist.java index ae000be..4e6ad65 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfbanlist.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfbanlist.java @@ -10,32 +10,31 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_tfbanlist extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 0) { - if (args[0].equalsIgnoreCase("purge")) { - if (senderIsConsole || AdminList.isSuperAdmin(sender)) { - try { - Utilities.adminAction(sender.getName(), "Purging the ban list", true); - BanManager.purgeUuidBans(); - sender.sendMessage(ChatColor.GRAY + "Ban list has been purged."); - } - catch (Exception ex) - { - Log.severe(ex); - } - return true; - } - else - { - playerMsg(sender, "You do not have permission to purge the ban list, you may only view it."); - } - } - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 0) { + if (args[0].equalsIgnoreCase("purge")) { + if (senderIsConsole || AdminList.isSuperAdmin(sender)) { + try { + Utilities.adminAction(sender.getName(), "Purging the ban list", true); + BanManager.purgeUuidBans(); + sender.sendMessage(ChatColor.GRAY + "Ban list has been purged."); + } catch (Exception ex) { + Log.severe(ex); + } - playerMsg(sender, BanManager.getUuidBanList().size() + " UUID bans total"); + return true; + } else { + playerMsg(sender, + "You do not have permission to purge the ban list, you may only view it."); + } + } + } - return true; - } + playerMsg(sender, BanManager.getUuidBanList().size() + " UUID bans total"); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfipbanlist.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfipbanlist.java index 92ce4bf..a51a3ae 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfipbanlist.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfipbanlist.java @@ -10,33 +10,32 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_tfipbanlist extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 0) { - if (args[0].equalsIgnoreCase("purge")) { - if (senderIsConsole || AdminList.isSuperAdmin(sender)) { - try { - BanManager.purgeIpBans(); - Utilities.adminAction(sender.getName(), "Purging the IP ban list", true); - sender.sendMessage(ChatColor.GRAY + "IP ban list has been purged."); - } - catch (Exception ex) - { - Log.severe(ex); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 0) { + if (args[0].equalsIgnoreCase("purge")) { + if (senderIsConsole || AdminList.isSuperAdmin(sender)) { + try { + BanManager.purgeIpBans(); + Utilities.adminAction(sender.getName(), "Purging the IP ban list", true); - return true; - } - else - { - playerMsg(sender, "You do not have permission to purge the IP ban list, you may only view it."); - } - } - } + sender.sendMessage(ChatColor.GRAY + "IP ban list has been purged."); + } catch (Exception ex) { + Log.severe(ex); + } - playerMsg(sender, BanManager.getIpBanList().size() + " IPbans total"); + return true; + } else { + playerMsg(sender, + "You do not have permission to purge the IP ban list, you may only view it."); + } + } + } - return true; - } + playerMsg(sender, BanManager.getIpBanList().size() + " IPbans total"); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfm.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfm.java index 6e88537..1b12d67 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfm.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tfm.java @@ -19,48 +19,52 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) @CommandParameters(description = "Shows information about TotalFreedomMod or reloads it", usage = "/ [reload]") public class Command_tfm extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 1) { - if (!args[0].equals("reload")) { - return false; - } - if (!AdminList.isSuperAdmin(sender)) { - playerMsg(FreedomCommand.MSG_NO_PERMS); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 1) { + if (!args[0].equals("reload")) { + return false; + } - MainConfig.load(); - AdminList.load(); - PermbanList.load(); - PlayerList.load(); - BanManager.load(); - CommandBlocker.load(); + if (!AdminList.isSuperAdmin(sender)) { + playerMsg(FreedomCommand.MSG_NO_PERMS); + return true; + } - final String message = String.format("%s v%s.%s reloaded.", - TotalFreedomMod.pluginName, - TotalFreedomMod.pluginVersion, - TotalFreedomMod.buildNumber); + MainConfig.load(); + AdminList.load(); + PermbanList.load(); + PlayerList.load(); + BanManager.load(); + CommandBlocker.load(); - playerMsg(message); - Log.info(message); - return true; - } + final String message = String.format("%s v%s.%s reloaded.", + TotalFreedomMod.pluginName, + TotalFreedomMod.pluginVersion, + TotalFreedomMod.buildNumber); - playerMsg("TotalFreedomMod for 'Total Freedom', the original all-op server.", ChatColor.GOLD); - playerMsg(String.format("Version " - + ChatColor.BLUE + "%s.%s" + ChatColor.GOLD + ", built " - + ChatColor.BLUE + "%s" + ChatColor.GOLD + " by " - + ChatColor.BLUE + "%s" + ChatColor.GOLD + ".", - TotalFreedomMod.pluginVersion, - TotalFreedomMod.buildNumber, - TotalFreedomMod.buildDate, - TotalFreedomMod.buildCreator), ChatColor.GOLD); - playerMsg("Running on " + ConfigurationEntry.SERVER_NAME.getString() + ".", ChatColor.GOLD); - playerMsg("Created by Madgeek1450 and Prozza.", ChatColor.GOLD); - playerMsg("Visit " + ChatColor.AQUA + "http://totalfreedom.me/" + ChatColor.GREEN + " for more information.", ChatColor.GREEN); + playerMsg(message); + Log.info(message); + return true; + } - return true; - } + playerMsg("TotalFreedomMod for 'Total Freedom', the original all-op server.", + ChatColor.GOLD); + playerMsg(String.format("Version " + + ChatColor.BLUE + "%s.%s" + ChatColor.GOLD + ", built " + + ChatColor.BLUE + "%s" + ChatColor.GOLD + " by " + + ChatColor.BLUE + "%s" + ChatColor.GOLD + ".", + TotalFreedomMod.pluginVersion, + TotalFreedomMod.buildNumber, + TotalFreedomMod.buildDate, + TotalFreedomMod.buildCreator), ChatColor.GOLD); + playerMsg("Running on " + ConfigurationEntry.SERVER_NAME.getString() + ".", ChatColor.GOLD); + playerMsg("Created by Madgeek1450 and Prozza.", ChatColor.GOLD); + playerMsg("Visit " + ChatColor.AQUA + "http://totalfreedom.me/" + ChatColor.GREEN + + " for more information.", ChatColor.GREEN); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_toggle.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_toggle.java index f5e3603..9d8ba5b 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_toggle.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_toggle.java @@ -10,150 +10,136 @@ import org.bukkit.command.CommandSender; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_toggle extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - playerMsg(sender, "Available toggles: "); - playerMsg(sender, "- waterplace"); - playerMsg(sender, "- fireplace"); - playerMsg(sender, "- lavaplace"); - playerMsg(sender, "- fluidspread"); - playerMsg(sender, "- lavadmg"); - playerMsg(sender, "- firespread"); - playerMsg(sender, "- prelog"); - playerMsg(sender, "- lockdown"); - playerMsg(sender, "- petprotect"); - playerMsg(sender, "- droptoggle"); - playerMsg(sender, "- nonuke"); - playerMsg(sender, "- explosives"); - return false; - } - if (args[0].equals("waterplace")) - { - toggle(sender, "Water placement is", ConfigurationEntry.ALLOW_WATER_PLACE); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + playerMsg(sender, "Available toggles: "); + playerMsg(sender, "- waterplace"); + playerMsg(sender, "- fireplace"); + playerMsg(sender, "- lavaplace"); + playerMsg(sender, "- fluidspread"); + playerMsg(sender, "- lavadmg"); + playerMsg(sender, "- firespread"); + playerMsg(sender, "- prelog"); + playerMsg(sender, "- lockdown"); + playerMsg(sender, "- petprotect"); + playerMsg(sender, "- droptoggle"); + playerMsg(sender, "- nonuke"); + playerMsg(sender, "- explosives"); + return false; + } - if (args[0].equals("fireplace")) - { - toggle(sender, "Fire placement is", ConfigurationEntry.ALLOW_FIRE_PLACE); - return true; - } + if (args[0].equals("waterplace")) { + toggle(sender, "Water placement is", ConfigurationEntry.ALLOW_WATER_PLACE); + return true; + } - if (args[0].equals("lavaplace")) - { - toggle(sender, "Lava placement is", ConfigurationEntry.ALLOW_LAVA_PLACE); - return true; - } + if (args[0].equals("fireplace")) { + toggle(sender, "Fire placement is", ConfigurationEntry.ALLOW_FIRE_PLACE); + return true; + } - if (args[0].equals("fluidspread")) - { - toggle(sender, "Fluid spread is", ConfigurationEntry.ALLOW_FLUID_SPREAD); - return true; - } + if (args[0].equals("lavaplace")) { + toggle(sender, "Lava placement is", ConfigurationEntry.ALLOW_LAVA_PLACE); + return true; + } - if (args[0].equals("lavadmg")) - { - toggle(sender, "Lava damage is", ConfigurationEntry.ALLOW_LAVA_DAMAGE); - return true; - } + if (args[0].equals("fluidspread")) { + toggle(sender, "Fluid spread is", ConfigurationEntry.ALLOW_FLUID_SPREAD); + return true; + } - if (args[0].equals("firespread")) - { - toggle(sender, "Fire spread is", ConfigurationEntry.ALLOW_FIRE_SPREAD); - GameRuleHandler.setGameRule(TFM_GameRule.DO_FIRE_TICK, ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean()); - return true; - } + if (args[0].equals("lavadmg")) { + toggle(sender, "Lava damage is", ConfigurationEntry.ALLOW_LAVA_DAMAGE); + return true; + } - if (args[0].equals("prelog")) - { - toggle(sender, "Command prelogging is", ConfigurationEntry.ENABLE_PREPROCESS_LOG); - return true; - } + if (args[0].equals("firespread")) { + toggle(sender, "Fire spread is", ConfigurationEntry.ALLOW_FIRE_SPREAD); + GameRuleHandler.setGameRule(TFM_GameRule.DO_FIRE_TICK, + ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean()); + return true; + } - if (args[0].equals("lockdown")) - { - Utilities.adminAction(sender.getName(), (TotalFreedomMod.lockdownEnabled ? "De-a" : "A") + "ctivating server lockdown", true); - TotalFreedomMod.lockdownEnabled = !TotalFreedomMod.lockdownEnabled; - return true; - } + if (args[0].equals("prelog")) { + toggle(sender, "Command prelogging is", ConfigurationEntry.ENABLE_PREPROCESS_LOG); + return true; + } - if (args[0].equals("petprotect")) - { - toggle(sender, "Tamed pet protection is", ConfigurationEntry.ENABLE_PET_PROTECT); - return true; - } + if (args[0].equals("lockdown")) { + Utilities.adminAction(sender.getName(), + (TotalFreedomMod.lockdownEnabled ? "De-a" : "A") + "ctivating server lockdown", + true); + TotalFreedomMod.lockdownEnabled = !TotalFreedomMod.lockdownEnabled; + return true; + } - if (args[0].equals("droptoggle")) - { - toggle(sender, "Automatic entity wiping is", ConfigurationEntry.AUTO_ENTITY_WIPE); - return true; - } + if (args[0].equals("petprotect")) { + toggle(sender, "Tamed pet protection is", ConfigurationEntry.ENABLE_PET_PROTECT); + return true; + } - if (args[0].equals("nonuke")) - { - if (args.length >= 2) - { - try - { - ConfigurationEntry.NUKE_MONITOR_RANGE.setDouble(Math.max(1.0, Math.min(500.0, Double.parseDouble(args[1])))); - } - catch (NumberFormatException nfex) - { - } - } + if (args[0].equals("droptoggle")) { + toggle(sender, "Automatic entity wiping is", ConfigurationEntry.AUTO_ENTITY_WIPE); + return true; + } - if (args.length >= 3) - { - try - { - ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.setInteger(Math.max(1, Math.min(500, Integer.parseInt(args[2])))); - } - catch (NumberFormatException nfex) - { - } - } + if (args[0].equals("nonuke")) { + if (args.length >= 2) { + try { + ConfigurationEntry.NUKE_MONITOR_RANGE.setDouble( + Math.max(1.0, Math.min(500.0, Double.parseDouble(args[1])))); + } catch (NumberFormatException nfex) { + } + } - toggle(sender, "Nuke monitor is", ConfigurationEntry.NUKE_MONITOR_ENABLED); + if (args.length >= 3) { + try { + ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.setInteger( + Math.max(1, Math.min(500, Integer.parseInt(args[2])))); + } catch (NumberFormatException nfex) { + } + } - if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) - { - playerMsg(sender, "Anti-freecam range is set to " + ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble() + " blocks."); - playerMsg(sender, "Block throttle rate is set to " + ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.getInteger() + " blocks destroyed per 5 seconds."); - } + toggle(sender, "Nuke monitor is", ConfigurationEntry.NUKE_MONITOR_ENABLED); - return true; - } - if (args[0].equals("explosives")) - { - if (args.length == 2) - { - try - { - ConfigurationEntry.EXPLOSIVE_RADIUS.setDouble(Math.max(1.0, Math.min(30.0, Double.parseDouble(args[1])))); - } - catch (NumberFormatException ex) - { - playerMsg(sender, ex.getMessage()); - return true; - } - } + if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) { + playerMsg(sender, "Anti-freecam range is set to " + + ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble() + " blocks."); + playerMsg(sender, "Block throttle rate is set to " + + ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.getInteger() + + " blocks destroyed per 5 seconds."); + } - toggle(sender, "Explosions are", ConfigurationEntry.ALLOW_EXPLOSIONS); + return true; + } + if (args[0].equals("explosives")) { + if (args.length == 2) { + try { + ConfigurationEntry.EXPLOSIVE_RADIUS.setDouble( + Math.max(1.0, Math.min(30.0, Double.parseDouble(args[1])))); + } catch (NumberFormatException ex) { + playerMsg(sender, ex.getMessage()); + return true; + } + } - if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - playerMsg(sender, "Radius set to " + ConfigurationEntry.EXPLOSIVE_RADIUS.getDouble()); - } - return true; - } + toggle(sender, "Explosions are", ConfigurationEntry.ALLOW_EXPLOSIONS); - return false; - } + if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + playerMsg(sender, + "Radius set to " + ConfigurationEntry.EXPLOSIVE_RADIUS.getDouble()); + } + return true; + } - private void toggle(CommandSender sender, String name, ConfigurationEntry entry) - { - playerMsg(sender, name + " now " + (entry.setBoolean(!entry.getBoolean()) ? "enabled." : "disabled.")); - } + return false; + } + + private void toggle(CommandSender sender, String name, ConfigurationEntry entry) { + playerMsg(sender, + name + " now " + (entry.setBoolean(!entry.getBoolean()) ? "enabled." : "disabled.")); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tossmob.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tossmob.java index e3cf765..86ba2db 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tossmob.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_tossmob.java @@ -13,71 +13,69 @@ import org.bukkit.inventory.ItemStack; @CommandPermissions(level = AdminLevel.OP, source = SourceType.ONLY_IN_GAME) public class Command_tossmob extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!ConfigurationEntry.TOSSMOB_ENABLED.getBoolean()) { - playerMsg(sender, "Tossmob is currently disabled."); - return true; - } - PlayerData playerData = PlayerData.getPlayerData(sender_p); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!ConfigurationEntry.TOSSMOB_ENABLED.getBoolean()) { + playerMsg(sender, "Tossmob is currently disabled."); + return true; + } - EntityType creature = EntityType.PIG; - if (args.length >= 1) - { - if ("off".equals(args[0])) - { - playerData.disableMobThrower(); - playerMsg(sender, "MobThrower is disabled.", ChatColor.GREEN); - return true; - } + PlayerData playerData = PlayerData.getPlayerData(sender_p); - if (args[0].equalsIgnoreCase("list")) - { - playerMsg(sender, "Supported mobs: " + StringUtils.join(Utilities.mobtypes.keySet(), ", "), ChatColor.GREEN); - return true; - } + EntityType creature = EntityType.PIG; + if (args.length >= 1) { + if ("off".equals(args[0])) { + playerData.disableMobThrower(); + playerMsg(sender, "MobThrower is disabled.", ChatColor.GREEN); + return true; + } - try - { - creature = Utilities.getEntityType(args[0]); - } - catch (Exception ex) - { - playerMsg(sender, args[0] + " is not a supported mob type. Using a pig instead.", ChatColor.RED); - playerMsg(sender, "By the way, you can type /tossmob list to see all possible mobs.", ChatColor.RED); - creature = EntityType.PIG; - } - } + if (args[0].equalsIgnoreCase("list")) { + playerMsg(sender, + "Supported mobs: " + StringUtils.join(Utilities.mobtypes.keySet(), ", "), + ChatColor.GREEN); + return true; + } - double speed = 1.0; - if (args.length >= 2) - { - try - { - speed = Double.parseDouble(args[1]); - } - catch (NumberFormatException nfex) - { - } - } + try { + creature = Utilities.getEntityType(args[0]); + } catch (Exception ex) { + playerMsg(sender, args[0] + " is not a supported mob type. Using a pig instead.", + ChatColor.RED); + playerMsg(sender, + "By the way, you can type /tossmob list to see all possible mobs.", + ChatColor.RED); + creature = EntityType.PIG; + } + } - if (speed < 1.0) - { - speed = 1.0; - } - else if (speed > 5.0) - { - speed = 5.0; - } + double speed = 1.0; + if (args.length >= 2) { + try { + speed = Double.parseDouble(args[1]); + } catch (NumberFormatException nfex) { + } + } - playerData.enableMobThrower(creature, speed); - playerMsg(sender, "MobThrower is enabled. Creature: " + creature + " - Speed: " + speed + ".", ChatColor.GREEN); - playerMsg(sender, "Left click while holding a " + Material.BONE.toString() + " to throw mobs!", ChatColor.GREEN); - playerMsg(sender, "Type '/tossmob off' to disable. -By Madgeek1450", ChatColor.GREEN); + if (speed < 1.0) { + speed = 1.0; + } else if (speed > 5.0) { + speed = 5.0; + } - sender_p.setItemInHand(new ItemStack(Material.BONE, 1)); + playerData.enableMobThrower(creature, speed); + playerMsg(sender, + "MobThrower is enabled. Creature: " + creature + " - Speed: " + speed + ".", + ChatColor.GREEN); + playerMsg(sender, + "Left click while holding a " + Material.BONE + " to throw mobs!", + ChatColor.GREEN); + playerMsg(sender, "Type '/tossmob off' to disable. -By Madgeek1450", ChatColor.GREEN); - return true; - } + sender_p.setItemInHand(new ItemStack(Material.BONE, 1)); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_trail.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_trail.java index 10c4092..5d82cd5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_trail.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_trail.java @@ -1,5 +1,8 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import org.bukkit.Bukkit; @@ -14,113 +17,91 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.RegisteredListener; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) public class Command_trail extends FreedomCommand { - private static Listener movementListener = null; - private static final List trailPlayers = new ArrayList(); - private static final Random RANDOM = new Random(); - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length > 0 && "off".equals(args[0])) { - trailPlayers.remove(sender_p); + private static final List trailPlayers = new ArrayList(); + private static final Random RANDOM = new Random(); + private static Listener movementListener = null; - playerMsg(sender, "Trail disabled."); - } else { - if (!trailPlayers.contains(sender_p)) - { - trailPlayers.add(sender_p); - } + private static void registerMovementHandler() { + if (getRegisteredListener(movementListener) == null) { + Bukkit.getPluginManager().registerEvents(movementListener = new Listener() { + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + if (trailPlayers.contains(player)) { + Block fromBlock = event.getFrom().getBlock(); + if (fromBlock.isEmpty()) { + Block toBlock = event.getTo().getBlock(); + if (!fromBlock.equals(toBlock)) { + fromBlock.setType(Material.WOOL); + DeprecationUtil.setData_Block(fromBlock, (byte) RANDOM.nextInt(16)); + } + } + } + } + }, TotalFreedomMod.plugin); + } + } - playerMsg(sender, "Trail enabled. Use \"/trail off\" to disable."); - } + private static void unregisterMovementHandler() { + Listener registeredListener = getRegisteredListener(movementListener); + if (registeredListener != null) { + PlayerMoveEvent.getHandlerList().unregister(registeredListener); + } + } - if (!trailPlayers.isEmpty()) - { - registerMovementHandler(); - } - else - { - unregisterMovementHandler(); - } + private static Listener getRegisteredListener(Listener listener) { + RegisteredListener[] registeredListeners = PlayerMoveEvent.getHandlerList() + .getRegisteredListeners(); + for (RegisteredListener registeredListener : registeredListeners) { + if (registeredListener.getListener() == listener) { + return listener; + } + } + return null; + } - return true; - } + public static void startTrail(Player player) { + if (!trailPlayers.contains(player)) { + trailPlayers.add(player); + } - private static void registerMovementHandler() - { - if (getRegisteredListener(movementListener) == null) - { - Bukkit.getPluginManager().registerEvents(movementListener = new Listener() - { - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerMove(PlayerMoveEvent event) - { - Player player = event.getPlayer(); - if (trailPlayers.contains(player)) - { - Block fromBlock = event.getFrom().getBlock(); - if (fromBlock.isEmpty()) - { - Block toBlock = event.getTo().getBlock(); - if (!fromBlock.equals(toBlock)) - { - fromBlock.setType(Material.WOOL); - DeprecationUtil.setData_Block(fromBlock, (byte) RANDOM.nextInt(16)); - } - } - } - } - }, TotalFreedomMod.plugin); - } - } + if (!trailPlayers.isEmpty()) { + registerMovementHandler(); + } + } - private static void unregisterMovementHandler() - { - Listener registeredListener = getRegisteredListener(movementListener); - if (registeredListener != null) - { - PlayerMoveEvent.getHandlerList().unregister(registeredListener); - } - } + public static void stopTrail(Player player) { + trailPlayers.remove(player); - private static Listener getRegisteredListener(Listener listener) - { - RegisteredListener[] registeredListeners = PlayerMoveEvent.getHandlerList().getRegisteredListeners(); - for (RegisteredListener registeredListener : registeredListeners) - { - if (registeredListener.getListener() == listener) - { - return listener; - } - } - return null; - } + if (trailPlayers.isEmpty()) { + unregisterMovementHandler(); + } + } - public static void startTrail(Player player) - { - if (!trailPlayers.contains(player)) - { - trailPlayers.add(player); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length > 0 && "off".equals(args[0])) { + trailPlayers.remove(sender_p); - if (!trailPlayers.isEmpty()) - { - registerMovementHandler(); - } - } + playerMsg(sender, "Trail disabled."); + } else { + if (!trailPlayers.contains(sender_p)) { + trailPlayers.add(sender_p); + } - public static void stopTrail(Player player) - { - trailPlayers.remove(player); + playerMsg(sender, "Trail enabled. Use \"/trail off\" to disable."); + } - if (trailPlayers.isEmpty()) - { - unregisterMovementHandler(); - } - } + if (!trailPlayers.isEmpty()) { + registerMovementHandler(); + } else { + unregisterMovementHandler(); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_updatetfm.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_updatetfm.java index ef64ba4..afc1c28 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_updatetfm.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_updatetfm.java @@ -1,9 +1,9 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.io.File; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; -import me.StevenLawson.TotalFreedomMod.util.SynchronousUtil; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -11,38 +11,38 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.io.File; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_updatetfm extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - playerMsg(sender, "Compiling TFM, please wait...", ChatColor.RED); - Utilities.adminAction(sender.getName(), "Compiling TFM", true); - String path = MainConfig.getString(ConfigurationEntry.TFM_BUILD_SHELLSCRIPT); - File file = new File(path); - String directory = file.getParent(); - try { - String command = String.format("cd %s && ./%s", directory, file.getName()); - ProcessBuilder proc = new ProcessBuilder("/bin/bash", "-c", command); - Process process = proc.start(); - process.waitFor(); - DiscordBridge.transmitMessage("**TFM is being reloaded...**", true); - playerMsg(sender, "Compiled TFM! Reloading..."); - Utilities.adminAction(sender.getName(), "Compilation successful, reloading TFM...", false); - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - onlinePlayer.kickPlayer(ChatColor.RED + "Reloading TFM, please rejoin."); - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + playerMsg(sender, "Compiling TFM, please wait...", ChatColor.RED); + Utilities.adminAction(sender.getName(), "Compiling TFM", true); + String path = MainConfig.getString(ConfigurationEntry.TFM_BUILD_SHELLSCRIPT); + File file = new File(path); + String directory = file.getParent(); - Bukkit.dispatchCommand(sender, "plugman reload TotalFreedomMod"); - } catch (Exception e) { - playerMsg(sender, "Failed to update TFM! Check the logs for more details."); - Utilities.adminAction(sender.getName(), "Could not update TFM", true); - e.printStackTrace(); - } + try { + String command = String.format("cd %s && ./%s", directory, file.getName()); + ProcessBuilder proc = new ProcessBuilder("/bin/bash", "-c", command); + Process process = proc.start(); + process.waitFor(); + DiscordBridge.transmitMessage("**TFM is being reloaded...**", true); + playerMsg(sender, "Compiled TFM! Reloading..."); + Utilities.adminAction(sender.getName(), "Compilation successful, reloading TFM...", + false); + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + onlinePlayer.kickPlayer(ChatColor.RED + "Reloading TFM, please rejoin."); + } + Bukkit.dispatchCommand(sender, "plugman reload TotalFreedomMod"); + } catch (Exception e) { + playerMsg(sender, "Failed to update TFM! Check the logs for more details."); + Utilities.adminAction(sender.getName(), "Could not update TFM", true); + e.printStackTrace(); + } - return true; - } + return true; + } } \ No newline at end of file diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_uuid.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_uuid.java index e34a65a..b9d11d0 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_uuid.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_uuid.java @@ -1,105 +1,28 @@ package me.StevenLawson.TotalFreedomMod.commands; -import me.StevenLawson.TotalFreedomMod.admin.Admin; -import me.StevenLawson.TotalFreedomMod.admin.AdminList; -import me.StevenLawson.TotalFreedomMod.player.Player; -import me.StevenLawson.TotalFreedomMod.player.PlayerList; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager; -import me.StevenLawson.TotalFreedomMod.player.UUIDManager.TFM_UuidResolver; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.util.*; - -@CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE) +@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_uuid extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length != 1) { - return false; - } - if ("purge".equals(args[0])) { - playerMsg(sender, "Purged " + UUIDManager.purge() + " cached UUIDs."); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length != 1) { + return false; + } - if ("recalculate".equals(args[0])) - { - playerMsg(sender, "Recalculating UUIDs..."); + org.bukkit.entity.Player player = Bukkit.getPlayer(args[0]); - // Playerlist uuids - final Set players = PlayerList.getAllPlayers(); - final List names = new ArrayList(); - - for (Player player : players) - { - names.add(player.getLastLoginName()); - } - - final Map playerUuids = new TFM_UuidResolver(names).call(); - - int updated = 0; - for (String name : playerUuids.keySet()) - { - for (Player player : players) - { - if (!player.getLastLoginName().equalsIgnoreCase(name)) - { - continue; - } - - if (player.getUniqueId().equals(playerUuids.get(name))) - { - continue; - } - - PlayerList.setUniqueId(player, playerUuids.get(name)); - UUIDManager.rawSetUUID(name, playerUuids.get(name)); - updated++; - break; - } - } - - playerMsg(sender, "Recalculated " + updated + " player UUIDs"); - names.clear(); - - // Adminlist UUIDs - final Set admins = AdminList.getAllAdmins(); - for (Admin admin : admins) - { - names.add(admin.getLastLoginName()); - } - - final Map adminUuids = new TFM_UuidResolver(names).call(); - - updated = 0; - for (String name : adminUuids.keySet()) - { - for (Admin admin : admins) - { - if (!admin.getLastLoginName().equalsIgnoreCase(name)) - { - continue; - } - - if (admin.getUniqueId().equals(adminUuids.get(name))) - { - continue; - } - - AdminList.setUuid(admin, admin.getUniqueId(), adminUuids.get(name)); - UUIDManager.rawSetUUID(name, adminUuids.get(name)); - updated++; - break; - } - } - - playerMsg(sender, "Recalculated " + updated + " admin UUIDs"); - - return true; - } - - return false; - } + if (player != null) { + playerMsg(sender, String.format("%s's UUID is %s.", player.getName(), + player.getUniqueId().toString())); + return true; + } else { + playerMsg(sender, "Player not found, bozo."); + return true; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_vanish.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_vanish.java new file mode 100644 index 0000000..661d10e --- /dev/null +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_vanish.java @@ -0,0 +1,58 @@ +package me.StevenLawson.TotalFreedomMod.commands; + +import me.StevenLawson.TotalFreedomMod.manager.VanishManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME) +public class Command_vanish extends FreedomCommand { + + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + boolean shouldIVanish = true; + boolean silent = false; + + if (args.length > 0) { + if (args[0].equalsIgnoreCase("off")) { + shouldIVanish = false; + } else { + shouldIVanish = !VanishManager.isVanished(sender_p); + } + + if (args.length > 1) { + if (args[1].toLowerCase().startsWith("-s")) { + silent = true; + } + } + } else { + if (VanishManager.isVanished(sender_p)) { + shouldIVanish = false; + } + + if (commandLabel.equalsIgnoreCase("uv") || commandLabel.equalsIgnoreCase("unvanish")) { + shouldIVanish = false; + } + } + + if (shouldIVanish) { + VanishManager.vanishPlayer(sender_p); + + if (!silent) { + VanishManager.fakeLeave(sender_p); + } + } else { + VanishManager.unvanishPlayer(sender_p); + + if (!silent) { + VanishManager.fakeJoin(sender_p); + } + } + + playerMsg(sender, + String.format("Your vanish has been %s.", (shouldIVanish) ? "enabled" : "disabled")); + + return true; + } +} diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_warn.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_warn.java index 25d5680..4a9c875 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_warn.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_warn.java @@ -11,41 +11,40 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, blockHostConsole = true) public class Command_warn extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 2) { - return false; - } - Player player = getPlayer(args[0]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 2) { + return false; + } - if (player == null) { - playerMsg(sender, PLAYER_NOT_FOUND); - return true; - } + Player player = getPlayer(args[0]); - if (sender instanceof Player) - { - if (player.equals(sender_p)) - { - playerMsg(sender, ChatColor.RED + "Please, don't try to warn yourself."); - return true; - } - } + if (player == null) { + playerMsg(sender, PLAYER_NOT_FOUND); + return true; + } - if (AdminList.isSuperAdmin(player)) - { - playerMsg(sender, ChatColor.RED + "You can not warn admins"); - return true; - } + if (sender instanceof Player) { + if (player.equals(sender_p)) { + playerMsg(sender, ChatColor.RED + "Please, don't try to warn yourself."); + return true; + } + } - String warnReason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); + if (AdminList.isSuperAdmin(player)) { + playerMsg(sender, ChatColor.RED + "You can not warn admins"); + return true; + } - playerMsg(sender, ChatColor.RED + "[WARNING] " + warnReason); - playerMsg(sender, ChatColor.GREEN + "You have successfully warned " + player.getName()); + String warnReason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); - PlayerData.getPlayerData(player).incrementWarnings(); + playerMsg(sender, ChatColor.RED + "[WARNING] " + warnReason); + playerMsg(sender, ChatColor.GREEN + "You have successfully warned " + player.getName()); - return true; - } + PlayerData.getPlayerData(player).incrementWarnings(); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whitelist.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whitelist.java index 1e23448..4056c6d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whitelist.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whitelist.java @@ -11,156 +11,142 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) public class Command_whitelist extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - // list - if (args[0].equalsIgnoreCase("list")) { - playerMsg(sender, "Whitelisted players: " + Utilities.playerListToNames(server.getWhitelistedPlayers())); - return true; - } + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - // count - if (args[0].equalsIgnoreCase("count")) - { - int onlineWPs = 0; - int offlineWPs = 0; - int totalWPs = 0; + // list + if (args[0].equalsIgnoreCase("list")) { + playerMsg(sender, "Whitelisted players: " + Utilities.playerListToNames( + server.getWhitelistedPlayers())); + return true; + } - for (OfflinePlayer player : server.getWhitelistedPlayers()) - { - if (player.isOnline()) - { - onlineWPs++; - } - else - { - offlineWPs++; - } - totalWPs++; - } + // count + if (args[0].equalsIgnoreCase("count")) { + int onlineWPs = 0; + int offlineWPs = 0; + int totalWPs = 0; - playerMsg(sender, "Online whitelisted players: " + onlineWPs); - playerMsg(sender, "Offline whitelisted players: " + offlineWPs); - playerMsg(sender, "Total whitelisted players: " + totalWPs); + for (OfflinePlayer player : server.getWhitelistedPlayers()) { + if (player.isOnline()) { + onlineWPs++; + } else { + offlineWPs++; + } + totalWPs++; + } - return true; - } + playerMsg(sender, "Online whitelisted players: " + onlineWPs); + playerMsg(sender, "Offline whitelisted players: " + offlineWPs); + playerMsg(sender, "Total whitelisted players: " + totalWPs); - // all commands past this line are superadmin-only - if (!(senderIsConsole || AdminList.isSuperAdmin(sender))) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } + return true; + } - // on - if (args[0].equalsIgnoreCase("on")) - { - Utilities.adminAction(sender.getName(), "Turning the whitelist on.", true); - server.setWhitelist(true); - return true; - } + // all commands past this line are superadmin-only + if (!(senderIsConsole || AdminList.isSuperAdmin(sender))) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } - // off - if (args[0].equalsIgnoreCase("off")) - { - Utilities.adminAction(sender.getName(), "Turning the whitelist off.", true); - server.setWhitelist(false); - return true; - } + // on + if (args[0].equalsIgnoreCase("on")) { + Utilities.adminAction(sender.getName(), "Turning the whitelist on.", true); + server.setWhitelist(true); + return true; + } - // add - if (args[0].equalsIgnoreCase("add")) - { - if (args.length < 2) - { - return false; - } + // off + if (args[0].equalsIgnoreCase("off")) { + Utilities.adminAction(sender.getName(), "Turning the whitelist off.", true); + server.setWhitelist(false); + return true; + } - String search_name = args[1].trim().toLowerCase(); + // add + if (args[0].equalsIgnoreCase("add")) { + if (args.length < 2) { + return false; + } - OfflinePlayer player = getPlayer(search_name); + String search_name = args[1].trim().toLowerCase(); - if (player == null) - { - player = DeprecationUtil.getOfflinePlayer(server, search_name); - } + OfflinePlayer player = getPlayer(search_name); - Utilities.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist.", false); - player.setWhitelisted(true); - return true; - } + if (player == null) { + player = DeprecationUtil.getOfflinePlayer(server, search_name); + } - // remove - if ("remove".equals(args[0])) - { - if (args.length < 2) - { - return false; - } + Utilities.adminAction(sender.getName(), + "Adding " + player.getName() + " to the whitelist.", false); + player.setWhitelisted(true); + return true; + } - String search_name = args[1].trim().toLowerCase(); + // remove + if ("remove".equals(args[0])) { + if (args.length < 2) { + return false; + } - OfflinePlayer player = getPlayer(search_name); + String search_name = args[1].trim().toLowerCase(); - if (player == null) - { - player = DeprecationUtil.getOfflinePlayer(server, search_name); - } + OfflinePlayer player = getPlayer(search_name); - if (player.isWhitelisted()) - { - Utilities.adminAction(sender.getName(), "Removing " + player.getName() + " from the whitelist.", false); - player.setWhitelisted(false); - return true; - } - else - { - playerMsg(sender, "That player is not whitelisted"); - return true; - } + if (player == null) { + player = DeprecationUtil.getOfflinePlayer(server, search_name); + } - } + if (player.isWhitelisted()) { + Utilities.adminAction(sender.getName(), + "Removing " + player.getName() + " from the whitelist.", false); + player.setWhitelisted(false); + return true; + } else { + playerMsg(sender, "That player is not whitelisted"); + return true; + } - // addall - if (args[0].equalsIgnoreCase("addall")) - { - Utilities.adminAction(sender.getName(), "Adding all online players to the whitelist.", false); - int counter = 0; - for (Player player : server.getOnlinePlayers()) - { - if (!player.isWhitelisted()) - { - player.setWhitelisted(true); - counter++; - } - } + } - playerMsg(sender, "Whitelisted " + counter + " players."); - return true; - } + // addall + if (args[0].equalsIgnoreCase("addall")) { + Utilities.adminAction(sender.getName(), "Adding all online players to the whitelist.", + false); + int counter = 0; + for (Player player : server.getOnlinePlayers()) { + if (!player.isWhitelisted()) { + player.setWhitelisted(true); + counter++; + } + } - // all commands past this line are console/telnet only - if (!senderIsConsole) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } + playerMsg(sender, "Whitelisted " + counter + " players."); + return true; + } - //purge - if (args[0].equalsIgnoreCase("purge")) - { - Utilities.adminAction(sender.getName(), "Removing all players from the whitelist.", false); - playerMsg(sender, "Removed " + Server.purgeWhitelist() + " players from the whitelist."); + // all commands past this line are console/telnet only + if (!senderIsConsole) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } - return true; - } + //purge + if (args[0].equalsIgnoreCase("purge")) { + Utilities.adminAction(sender.getName(), "Removing all players from the whitelist.", + false); + playerMsg(sender, + "Removed " + Server.purgeWhitelist() + " players from the whitelist."); - // none of the commands were executed - return false; - } + return true; + } + + // none of the commands were executed + return false; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whoami.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whoami.java index ab30ad6..ca746e7 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whoami.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whoami.java @@ -7,9 +7,11 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) public class Command_whoami extends FreedomCommand { - @Override - public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - playerMsg(sender, PlayerRank.fromSender(sender).name()); - return true; - } + + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, + String[] args, boolean senderIsConsole) { + playerMsg(sender, PlayerRank.fromSender(sender).name()); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whohas.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whohas.java index 84e30d6..8948df0 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whohas.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_whohas.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.ArrayList; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import org.apache.commons.lang3.StringUtils; @@ -9,61 +11,50 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.ArrayList; -import java.util.List; - @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) public class Command_whohas extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length < 1) { - return false; - } - final boolean doSmite = args.length >= 2 && "smite".equalsIgnoreCase(args[1]); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length < 1) { + return false; + } - final String materialName = args[0]; - Material material = Material.matchMaterial(materialName); - if (material == null) - { - try - { - material = DeprecationUtil.getMaterial(Integer.parseInt(materialName)); - } - catch (NumberFormatException ex) - { - } - } + final boolean doSmite = args.length >= 2 && "smite".equalsIgnoreCase(args[1]); - if (material == null) - { - playerMsg(sender, "Invalid block: " + materialName, ChatColor.RED); - return true; - } + final String materialName = args[0]; + Material material = Material.matchMaterial(materialName); + if (material == null) { + try { + material = DeprecationUtil.getMaterial(Integer.parseInt(materialName)); + } catch (NumberFormatException ex) { + } + } - final List players = new ArrayList(); + if (material == null) { + playerMsg(sender, "Invalid block: " + materialName, ChatColor.RED); + return true; + } - for (final Player player : server.getOnlinePlayers()) - { - if (player.getInventory().contains(material)) - { - players.add(player.getName()); - if (doSmite && !AdminList.isSuperAdmin(player)) - { - Command_smite.smite(player); - } - } - } + final List players = new ArrayList(); - if (players.isEmpty()) - { - playerMsg(sender, "There are no players with that item"); - } - else - { - playerMsg(sender, "Players with item " + material.name() + ": " + StringUtils.join(players, ", ")); - } + for (final Player player : server.getOnlinePlayers()) { + if (player.getInventory().contains(material)) { + players.add(player.getName()); + if (doSmite && !AdminList.isSuperAdmin(player)) { + Command_smite.smite(player); + } + } + } - return true; - } + if (players.isEmpty()) { + playerMsg(sender, "There are no players with that item"); + } else { + playerMsg(sender, + "Players with item " + material.name() + ": " + StringUtils.join(players, ", ")); + } + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wildcard.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wildcard.java index ccb9148..b39e64c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wildcard.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wildcard.java @@ -10,49 +10,50 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) @CommandParameters(description = "Run any command on all users, username placeholder = ?.", usage = "/ [fluff] ? [fluff] ?") public class Command_wildcard extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 0) { - return false; - } - String arguments = String.join(" ", args); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (args.length == 0) { + return false; + } - if (arguments.toLowerCase().contains("wildcard") || arguments.toLowerCase().contains("gcmd")) { - playerMsg(sender, "What the hell are you trying to do, you stupid idiot...", ChatColor.RED); - return true; - } - if (arguments.toLowerCase().contains("gtfo")) - { - playerMsg(sender, "Nice try", ChatColor.RED); - return true; - } - if (arguments.toLowerCase().contains("doom")) - { - playerMsg(sender, "Look, we all hate people, but this is not the way to deal with it, doom is evil enough!", ChatColor.RED); - return true; - } - if (arguments.toLowerCase().contains("saconfig")) - { - playerMsg(sender, "WOA, WTF are you trying to do???", ChatColor.RED); - return true; - } + String arguments = String.join(" ", args); - String baseCommand = StringUtils.join(args, " "); + if (arguments.toLowerCase().contains("wildcard") || arguments.toLowerCase() + .contains("gcmd")) { + playerMsg(sender, "What the hell are you trying to do, you stupid idiot...", + ChatColor.RED); + return true; + } + if (arguments.toLowerCase().contains("gtfo")) { + playerMsg(sender, "Nice try", ChatColor.RED); + return true; + } + if (arguments.toLowerCase().contains("doom")) { + playerMsg(sender, + "Look, we all hate people, but this is not the way to deal with it, doom is evil enough!", + ChatColor.RED); + return true; + } + if (arguments.toLowerCase().contains("saconfig")) { + playerMsg(sender, "WOA, WTF are you trying to do???", ChatColor.RED); + return true; + } - if (CommandBlocker.isCommandBlocked(baseCommand, sender)) - { - // CommandBlocker handles messages and broadcasts - return true; - } + String baseCommand = StringUtils.join(args, " "); - for (Player player : server.getOnlinePlayers()) - { - String out_command = baseCommand.replaceAll("\\x3f", player.getName()); - playerMsg(sender, "Running Command: " + out_command); - server.dispatchCommand(sender, out_command); - } + if (CommandBlocker.isCommandBlocked(baseCommand, sender)) { + // CommandBlocker handles messages and broadcasts + return true; + } - return true; - } + for (Player player : server.getOnlinePlayers()) { + String out_command = baseCommand.replaceAll("\\x3f", player.getName()); + playerMsg(sender, "Running Command: " + out_command); + server.dispatchCommand(sender, out_command); + } + + return true; + } } \ No newline at end of file diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeflatlands.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeflatlands.java index c3892df..fe5f63b 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeflatlands.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeflatlands.java @@ -8,18 +8,21 @@ import org.bukkit.entity.Player; @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE, blockHostConsole = true) public class Command_wipeflatlands extends FreedomCommand { - @Override - public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - Utilities.setSavedFlag("do_wipe_flatlands", true); - Utilities.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY); + @Override + public boolean run(final CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + Utilities.setSavedFlag("do_wipe_flatlands", true); - for (Player player : server.getOnlinePlayers()) { - player.kickPlayer("Server is going offline for flatlands wipe, come back in a few minutes."); - } + Utilities.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY); - server.shutdown(); + for (Player player : server.getOnlinePlayers()) { + player.kickPlayer( + "Server is going offline for flatlands wipe, come back in a few minutes."); + } - return true; - } + server.shutdown(); + + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeuserdata.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeuserdata.java index b5a36bb..3e885a5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeuserdata.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Command_wipeuserdata.java @@ -1,25 +1,28 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.io.File; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import java.io.File; - @CommandPermissions(level = AdminLevel.SENIOR, source = SourceType.ONLY_CONSOLE) public class Command_wipeuserdata extends FreedomCommand { - @Override - public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (!server.getPluginManager().isPluginEnabled("Essentials")) { - playerMsg(sender, "Essentials is not enabled on this server"); - return true; - } - Utilities.adminAction(sender.getName(), "Wiping Essentials playerdata", true); + @Override + public boolean run(CommandSender sender, org.bukkit.entity.Player sender_p, Command cmd, + String commandLabel, String[] args, boolean senderIsConsole) { + if (!server.getPluginManager().isPluginEnabled("Essentials")) { + playerMsg(sender, "Essentials is not enabled on this server"); + return true; + } - Utilities.deleteFolder(new File(server.getPluginManager().getPlugin("Essentials").getDataFolder(), "userdata")); + Utilities.adminAction(sender.getName(), "Wiping Essentials playerdata", true); - playerMsg(sender, "All playerdata deleted."); - return true; - } + Utilities.deleteFolder( + new File(server.getPluginManager().getPlugin("Essentials").getDataFolder(), + "userdata")); + + playerMsg(sender, "All playerdata deleted."); + return true; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Commands.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Commands.java index 2cc25dd..2d2a6bc 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Commands.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/Commands.java @@ -3,110 +3,110 @@ package me.StevenLawson.TotalFreedomMod.commands; import org.bukkit.plugin.java.JavaPlugin; public class Commands { - public static void registerCommands(JavaPlugin plugin) { - plugin.getCommand("adminmode").setExecutor(new Command_adminmode()); - plugin.getCommand("adminworld").setExecutor(new Command_adminworld()); - plugin.getCommand("blockcmd").setExecutor(new Command_blockcmd()); - plugin.getCommand("cage").setExecutor(new Command_cage()); - plugin.getCommand("cake").setExecutor(new Command_cake()); - plugin.getCommand("cartsit").setExecutor(new Command_cartsit()); - plugin.getCommand("cbtool").setExecutor(new Command_cbtool()); - plugin.getCommand("cmdlist").setExecutor(new Command_cmdlist()); - plugin.getCommand("cmdspy").setExecutor(new Command_cmdspy()); - plugin.getCommand("colorme").setExecutor(new Command_colorme()); - plugin.getCommand("creative").setExecutor(new Command_creative()); - plugin.getCommand("csay").setExecutor(new Command_csay()); - plugin.getCommand("deafen").setExecutor(new Command_deafen()); - plugin.getCommand("debug").setExecutor(new Command_debug()); - plugin.getCommand("denick").setExecutor(new Command_denick()); - plugin.getCommand("deop").setExecutor(new Command_deop()); - plugin.getCommand("deopall").setExecutor(new Command_deopall()); - plugin.getCommand("dispfill").setExecutor(new Command_dispfill()); - plugin.getCommand("doom").setExecutor(new Command_doom()); - plugin.getCommand("enchant").setExecutor(new Command_enchant()); - plugin.getCommand("ender").setExecutor(new Command_ender()); - plugin.getCommand("expel").setExecutor(new Command_expel()); - plugin.getCommand("findip").setExecutor(new Command_findip()); - plugin.getCommand("flatlands").setExecutor(new Command_flatlands()); - plugin.getCommand("fr").setExecutor(new Command_fr()); - plugin.getCommand("fuckoff").setExecutor(new Command_fuckoff()); - plugin.getCommand("gadmin").setExecutor(new Command_gadmin()); - plugin.getCommand("gcmd").setExecutor(new Command_gcmd()); - plugin.getCommand("glist").setExecutor(new Command_glist()); - plugin.getCommand("gtfo").setExecutor(new Command_gtfo()); - plugin.getCommand("halt").setExecutor(new Command_halt()); - plugin.getCommand("health").setExecutor(new Command_health()); - plugin.getCommand("invis").setExecutor(new Command_invis()); - plugin.getCommand("jumppads").setExecutor(new Command_jumppads()); - plugin.getCommand("kicknoob").setExecutor(new Command_kicknoob()); - plugin.getCommand("landmine").setExecutor(new Command_landmine()); - plugin.getCommand("lastcmd").setExecutor(new Command_lastcmd()); - plugin.getCommand("list").setExecutor(new Command_list()); - plugin.getCommand("localspawn").setExecutor(new Command_localspawn()); - plugin.getCommand("lockup").setExecutor(new Command_lockup()); - plugin.getCommand("logs").setExecutor(new Command_logs()); - plugin.getCommand("moblimiter").setExecutor(new Command_moblimiter()); - plugin.getCommand("mp").setExecutor(new Command_mp()); - plugin.getCommand("mp44").setExecutor(new Command_mp44()); - plugin.getCommand("myadmin").setExecutor(new Command_myadmin()); - plugin.getCommand("nether").setExecutor(new Command_nether()); - plugin.getCommand("nf").setExecutor(new Command_nf()); - plugin.getCommand("nickclean").setExecutor(new Command_nickclean()); - plugin.getCommand("nicknyan").setExecutor(new Command_nicknyan()); - plugin.getCommand("o").setExecutor(new Command_o()); - plugin.getCommand("onlinemode").setExecutor(new Command_onlinemode()); - plugin.getCommand("op").setExecutor(new Command_op()); - plugin.getCommand("opall").setExecutor(new Command_opall()); - plugin.getCommand("opme").setExecutor(new Command_opme()); - plugin.getCommand("ops").setExecutor(new Command_ops()); - plugin.getCommand("orbit").setExecutor(new Command_orbit()); - plugin.getCommand("overlord").setExecutor(new Command_overlord()); - plugin.getCommand("permban").setExecutor(new Command_permban()); - plugin.getCommand("plugincontrol").setExecutor(new Command_plugincontrol()); - plugin.getCommand("potion").setExecutor(new Command_potion()); - plugin.getCommand("premium").setExecutor(new Command_premium()); - plugin.getCommand("protectarea").setExecutor(new Command_protectarea()); - plugin.getCommand("purgeall").setExecutor(new Command_purgeall()); - plugin.getCommand("qdeop").setExecutor(new Command_qdeop()); - plugin.getCommand("qop").setExecutor(new Command_qop()); - plugin.getCommand("radar").setExecutor(new Command_radar()); - plugin.getCommand("rank").setExecutor(new Command_rank()); - plugin.getCommand("rawsay").setExecutor(new Command_rawsay()); - plugin.getCommand("rd").setExecutor(new Command_rd()); - plugin.getCommand("report").setExecutor(new Command_report()); - plugin.getCommand("ro").setExecutor(new Command_ro()); - plugin.getCommand("rollback").setExecutor(new Command_rollback()); - plugin.getCommand("saconfig").setExecutor(new Command_saconfig()); - plugin.getCommand("say").setExecutor(new Command_say()); - plugin.getCommand("setl").setExecutor(new Command_setl()); - plugin.getCommand("setlevel").setExecutor(new Command_setlevel()); - plugin.getCommand("setlever").setExecutor(new Command_setlever()); - plugin.getCommand("setspawnworld").setExecutor(new Command_setspawnworld()); - plugin.getCommand("smite").setExecutor(new Command_smite()); - plugin.getCommand("spectator").setExecutor(new Command_spectator()); - plugin.getCommand("status").setExecutor(new Command_status()); - plugin.getCommand("stfu").setExecutor(new Command_stfu()); - plugin.getCommand("stop").setExecutor(new Command_stop()); - plugin.getCommand("survival").setExecutor(new Command_survival()); - plugin.getCommand("tag").setExecutor(new Command_tag()); - plugin.getCommand("tagnyan").setExecutor(new Command_tagnyan()); - plugin.getCommand("tban").setExecutor(new Command_tban()); - plugin.getCommand("tempban").setExecutor(new Command_tempban()); - plugin.getCommand("tfbanlist").setExecutor(new Command_tfbanlist()); - plugin.getCommand("tfipbanlist").setExecutor(new Command_tfipbanlist()); - plugin.getCommand("tfm").setExecutor(new Command_tfm()); - plugin.getCommand("toggle").setExecutor(new Command_toggle()); - plugin.getCommand("tossmob").setExecutor(new Command_tossmob()); - plugin.getCommand("trail").setExecutor(new Command_trail()); - plugin.getCommand("updatetfm").setExecutor(new Command_updatetfm()); - plugin.getCommand("uuid").setExecutor(new Command_uuid()); - plugin.getCommand("warn").setExecutor(new Command_warn()); - plugin.getCommand("whitelist").setExecutor(new Command_whitelist()); - plugin.getCommand("whohas").setExecutor(new Command_whohas()); - plugin.getCommand("wildcard").setExecutor(new Command_wildcard()); - plugin.getCommand("wipeflatlands").setExecutor(new Command_wipeflatlands()); - plugin.getCommand("wipeuserdata").setExecutor(new Command_wipeuserdata()); - plugin.getCommand("whoami").setExecutor(new Command_whoami()); - plugin.getCommand("resetplayer").setExecutor(new Command_resetplayer()); - } + + public static void registerCommands(JavaPlugin plugin) { + plugin.getCommand("adminmode").setExecutor(new Command_adminmode()); + plugin.getCommand("adminworld").setExecutor(new Command_adminworld()); + plugin.getCommand("blockcmd").setExecutor(new Command_blockcmd()); + plugin.getCommand("cage").setExecutor(new Command_cage()); + plugin.getCommand("cake").setExecutor(new Command_cake()); + plugin.getCommand("cartsit").setExecutor(new Command_cartsit()); + plugin.getCommand("cbtool").setExecutor(new Command_cbtool()); + plugin.getCommand("cmdlist").setExecutor(new Command_cmdlist()); + plugin.getCommand("cmdspy").setExecutor(new Command_cmdspy()); + plugin.getCommand("colorme").setExecutor(new Command_colorme()); + plugin.getCommand("creative").setExecutor(new Command_creative()); + plugin.getCommand("csay").setExecutor(new Command_csay()); + plugin.getCommand("deafen").setExecutor(new Command_deafen()); + plugin.getCommand("debug").setExecutor(new Command_debug()); + plugin.getCommand("denick").setExecutor(new Command_denick()); + plugin.getCommand("deop").setExecutor(new Command_deop()); + plugin.getCommand("deopall").setExecutor(new Command_deopall()); + plugin.getCommand("dispfill").setExecutor(new Command_dispfill()); + plugin.getCommand("doom").setExecutor(new Command_doom()); + plugin.getCommand("enchant").setExecutor(new Command_enchant()); + plugin.getCommand("ender").setExecutor(new Command_ender()); + plugin.getCommand("expel").setExecutor(new Command_expel()); + plugin.getCommand("findip").setExecutor(new Command_findip()); + plugin.getCommand("flatlands").setExecutor(new Command_flatlands()); + plugin.getCommand("fr").setExecutor(new Command_fr()); + plugin.getCommand("fuckoff").setExecutor(new Command_fuckoff()); + plugin.getCommand("gadmin").setExecutor(new Command_gadmin()); + plugin.getCommand("gcmd").setExecutor(new Command_gcmd()); + plugin.getCommand("glist").setExecutor(new Command_glist()); + plugin.getCommand("gtfo").setExecutor(new Command_gtfo()); + plugin.getCommand("halt").setExecutor(new Command_halt()); + plugin.getCommand("health").setExecutor(new Command_health()); + plugin.getCommand("invis").setExecutor(new Command_invis()); + plugin.getCommand("jumppads").setExecutor(new Command_jumppads()); + plugin.getCommand("kicknoob").setExecutor(new Command_kicknoob()); + plugin.getCommand("landmine").setExecutor(new Command_landmine()); + plugin.getCommand("lastcmd").setExecutor(new Command_lastcmd()); + plugin.getCommand("list").setExecutor(new Command_list()); + plugin.getCommand("localspawn").setExecutor(new Command_localspawn()); + plugin.getCommand("lockup").setExecutor(new Command_lockup()); + plugin.getCommand("logs").setExecutor(new Command_logs()); + plugin.getCommand("moblimiter").setExecutor(new Command_moblimiter()); + plugin.getCommand("mp").setExecutor(new Command_mp()); + plugin.getCommand("mp44").setExecutor(new Command_mp44()); + plugin.getCommand("myadmin").setExecutor(new Command_myadmin()); + plugin.getCommand("nether").setExecutor(new Command_nether()); + plugin.getCommand("nf").setExecutor(new Command_nf()); + plugin.getCommand("nickclean").setExecutor(new Command_nickclean()); + plugin.getCommand("nicknyan").setExecutor(new Command_nicknyan()); + plugin.getCommand("o").setExecutor(new Command_o()); + plugin.getCommand("onlinemode").setExecutor(new Command_onlinemode()); + plugin.getCommand("op").setExecutor(new Command_op()); + plugin.getCommand("opall").setExecutor(new Command_opall()); + plugin.getCommand("opme").setExecutor(new Command_opme()); + plugin.getCommand("ops").setExecutor(new Command_ops()); + plugin.getCommand("orbit").setExecutor(new Command_orbit()); + plugin.getCommand("overlord").setExecutor(new Command_overlord()); + plugin.getCommand("permban").setExecutor(new Command_permban()); + plugin.getCommand("plugincontrol").setExecutor(new Command_plugincontrol()); + plugin.getCommand("potion").setExecutor(new Command_potion()); + plugin.getCommand("premium").setExecutor(new Command_premium()); + plugin.getCommand("protectarea").setExecutor(new Command_protectarea()); + plugin.getCommand("purgeall").setExecutor(new Command_purgeall()); + plugin.getCommand("qdeop").setExecutor(new Command_qdeop()); + plugin.getCommand("qop").setExecutor(new Command_qop()); + plugin.getCommand("radar").setExecutor(new Command_radar()); + plugin.getCommand("rank").setExecutor(new Command_rank()); + plugin.getCommand("rawsay").setExecutor(new Command_rawsay()); + plugin.getCommand("rd").setExecutor(new Command_rd()); + plugin.getCommand("report").setExecutor(new Command_report()); + plugin.getCommand("ro").setExecutor(new Command_ro()); + plugin.getCommand("saconfig").setExecutor(new Command_saconfig()); + plugin.getCommand("say").setExecutor(new Command_say()); + plugin.getCommand("setl").setExecutor(new Command_setl()); + plugin.getCommand("setlevel").setExecutor(new Command_setlevel()); + plugin.getCommand("setlever").setExecutor(new Command_setlever()); + plugin.getCommand("setspawnworld").setExecutor(new Command_setspawnworld()); + plugin.getCommand("smite").setExecutor(new Command_smite()); + plugin.getCommand("spectator").setExecutor(new Command_spectator()); + plugin.getCommand("status").setExecutor(new Command_status()); + plugin.getCommand("stfu").setExecutor(new Command_stfu()); + plugin.getCommand("stop").setExecutor(new Command_stop()); + plugin.getCommand("survival").setExecutor(new Command_survival()); + plugin.getCommand("tag").setExecutor(new Command_tag()); + plugin.getCommand("tagnyan").setExecutor(new Command_tagnyan()); + plugin.getCommand("tban").setExecutor(new Command_tban()); + plugin.getCommand("tempban").setExecutor(new Command_tempban()); + plugin.getCommand("tfbanlist").setExecutor(new Command_tfbanlist()); + plugin.getCommand("tfipbanlist").setExecutor(new Command_tfipbanlist()); + plugin.getCommand("tfm").setExecutor(new Command_tfm()); + plugin.getCommand("toggle").setExecutor(new Command_toggle()); + plugin.getCommand("tossmob").setExecutor(new Command_tossmob()); + plugin.getCommand("trail").setExecutor(new Command_trail()); + plugin.getCommand("updatetfm").setExecutor(new Command_updatetfm()); + plugin.getCommand("uuid").setExecutor(new Command_uuid()); + plugin.getCommand("warn").setExecutor(new Command_warn()); + plugin.getCommand("whitelist").setExecutor(new Command_whitelist()); + plugin.getCommand("whohas").setExecutor(new Command_whohas()); + plugin.getCommand("wildcard").setExecutor(new Command_wildcard()); + plugin.getCommand("wipeflatlands").setExecutor(new Command_wipeflatlands()); + plugin.getCommand("wipeuserdata").setExecutor(new Command_wipeuserdata()); + plugin.getCommand("whoami").setExecutor(new Command_whoami()); + plugin.getCommand("resetplayer").setExecutor(new Command_resetplayer()); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/FreedomCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/FreedomCommand.java index 1a5644e..8b0acd4 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/FreedomCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/FreedomCommand.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.commands; +import java.util.Collection; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.AdminList; @@ -13,199 +14,164 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.util.Collection; - public abstract class FreedomCommand implements CommandExecutor { - public static final String MSG_NO_PERMS = ChatColor.YELLOW + "You do not have permission to use this command."; - public static final String YOU_ARE_OP = ChatColor.YELLOW + "You are now op!"; - public static final String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; - 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!"; - protected TotalFreedomMod plugin = TotalFreedomMod.plugin; - protected Server server = plugin.getServer(); - public FreedomCommand() { - } + public static final String MSG_NO_PERMS = + ChatColor.YELLOW + "You do not have permission to use this command."; + public static final String YOU_ARE_OP = ChatColor.YELLOW + "You are now op!"; + public static final String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; + 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!"; + protected TotalFreedomMod plugin = TotalFreedomMod.plugin; + protected Server server = plugin.getServer(); - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - final Player playerSender; - final boolean senderIsConsole; + public FreedomCommand() { + } - if (sender instanceof Player) { - senderIsConsole = false; - playerSender = (Player) sender; + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + final Player playerSender; + final boolean senderIsConsole; - Log.info(String.format("[PLAYER_COMMAND] %s (%s): /%s %s", - playerSender.getName(), - ChatColor.stripColor(playerSender.getDisplayName()), - label, - StringUtils.join(args, " ")), true); - } - else - { - senderIsConsole = true; - playerSender = null; + if (sender instanceof Player) { + senderIsConsole = false; + playerSender = (Player) sender; - Log.info(String.format("[CONSOLE_COMMAND] %s: /%s %s", - sender.getName(), - label, - StringUtils.join(args, " ")), true); - } + Log.info(String.format("[PLAYER_COMMAND] %s (%s): /%s %s", + playerSender.getName(), + ChatColor.stripColor(playerSender.getDisplayName()), + label, + StringUtils.join(args, " ")), true); + } else { + senderIsConsole = true; + playerSender = null; + Log.info(String.format("[CONSOLE_COMMAND] %s: /%s %s", + sender.getName(), + label, + StringUtils.join(args, " ")), true); + } - if (!senderHasPermission(sender)) - { - sender.sendMessage(FreedomCommand.MSG_NO_PERMS); - return true; - } + if (!senderHasPermission(sender)) { + sender.sendMessage(FreedomCommand.MSG_NO_PERMS); + return true; + } - return run(sender, playerSender, command, label, args, senderIsConsole); - } + return run(sender, playerSender, command, label, args, senderIsConsole); + } - abstract public boolean run(final CommandSender sender, final org.bukkit.entity.Player sender_p, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole); + abstract public boolean run(final CommandSender sender, final org.bukkit.entity.Player sender_p, + final Command cmd, final String commandLabel, final String[] args, + final boolean senderIsConsole); - public void playerMsg(final CommandSender sender, final String message, final ChatColor color) - { - if (sender == null) - { - return; - } - sender.sendMessage(color + message); - } + public void playerMsg(final CommandSender sender, final String message, final ChatColor color) { + if (sender == null) { + return; + } + sender.sendMessage(color + message); + } - public void playerMsg(final CommandSender sender, final String message) - { - playerMsg(sender, message, ChatColor.GRAY); - } + public void playerMsg(final CommandSender sender, final String message) { + playerMsg(sender, message, ChatColor.GRAY); + } - public void playerMsg(final String message, final ChatColor color) - { - // NOP - } + public void playerMsg(final String message, final ChatColor color) { + // NOP + } - public void playerMsg(final String message) - { - // NOP - } + public void playerMsg(final String message) { + // NOP + } - public boolean senderHasPermission(CommandSender sender) - { - final CommandPermissions permissions = this.getClass().getAnnotation(CommandPermissions.class); + public boolean senderHasPermission(CommandSender sender) { + final CommandPermissions permissions = this.getClass() + .getAnnotation(CommandPermissions.class); - if (permissions == null) - { - Log.warning(this.getClass().getName() + " is missing permissions annotation."); - return true; - } + if (permissions == null) { + Log.warning(this.getClass().getName() + " is missing permissions annotation."); + return true; + } - boolean isSuper = AdminList.isSuperAdmin(sender); - boolean isSenior = false; + boolean isSuper = AdminList.isSuperAdmin(sender); + boolean isSenior = false; - if (isSuper) - { - isSenior = AdminList.isSeniorAdmin(sender); - } + if (isSuper) { + isSenior = AdminList.isSeniorAdmin(sender); + } - final AdminLevel level = permissions.level(); - final SourceType source = permissions.source(); - final boolean blockHostConsole = permissions.blockHostConsole(); + final AdminLevel level = permissions.level(); + final SourceType source = permissions.source(); + final boolean blockHostConsole = permissions.blockHostConsole(); - if (!(sender instanceof Player)) - { - if (source == SourceType.ONLY_IN_GAME) - { - return false; - } + if (!(sender instanceof Player)) { + if (source == SourceType.ONLY_IN_GAME) { + return false; + } - if (level == AdminLevel.SENIOR && !isSenior) { - return false; - } + if (level == AdminLevel.SENIOR && !isSenior) { + return false; + } - if (blockHostConsole && Utilities.isFromHostConsole(sender.getName())) - { - return false; - } + return !blockHostConsole || !Utilities.isFromHostConsole(sender.getName()); + } - return true; - } + final Player senderPlayer = (Player) sender; - final Player senderPlayer = (Player) sender; + if (source == SourceType.ONLY_CONSOLE) { + return false; + } - if (source == SourceType.ONLY_CONSOLE) - { - return false; - } + if (level == AdminLevel.SENIOR) { + if (!isSenior) { + return false; + } - if (level == AdminLevel.SENIOR) { - if (!isSenior) { - return false; - } + return PlayerData.getPlayerData(senderPlayer).isSuperadminIdVerified(); + } - if (!PlayerData.getPlayerData(senderPlayer).isSuperadminIdVerified()) { - return false; - } + if (level == AdminLevel.SUPER && !isSuper) { + return false; + } - return true; - } + return level != AdminLevel.OP || senderPlayer.isOp(); + } - if (level == AdminLevel.SUPER && !isSuper) { - return false; - } + public Player getPlayer(final String partialName) { + return getPlayer(partialName, false); + } - if (level == AdminLevel.OP && !senderPlayer.isOp()) { - return false; - } + public Player getPlayer(final String partialName, final boolean exact) { + if (partialName == null || partialName.isEmpty()) { + return null; + } - return true; - } + final Collection players = server.getOnlinePlayers(); - public Player getPlayer(final String partialName) - { - return getPlayer(partialName, false); - } + // Check exact matches first. + for (final Player player : players) { + if (partialName.equalsIgnoreCase(player.getName())) { + return player; + } + } - public Player getPlayer(final String partialName, final boolean exact) - { - if (partialName == null || partialName.isEmpty()) - { - return null; - } + if (exact) { + return null; + } - final Collection players = server.getOnlinePlayers(); + // Then check partial matches in name. + for (final Player player : players) { + if (player.getName().toLowerCase().contains(partialName.toLowerCase())) { + return player; + } + } - // Check exact matches first. - for (final Player player : players) - { - if (partialName.equalsIgnoreCase(player.getName())) - { - return player; - } - } + // Then check partial matches in display name. + for (final Player player : players) { + if (player.getDisplayName().toLowerCase().contains(partialName.toLowerCase())) { + return player; + } + } - if (exact) - { - return null; - } - - // Then check partial matches in name. - for (final Player player : players) - { - if (player.getName().toLowerCase().contains(partialName.toLowerCase())) - { - return player; - } - } - - // Then check partial matches in display name. - for (final Player player : players) - { - if (player.getDisplayName().toLowerCase().contains(partialName.toLowerCase())) - { - return player; - } - } - - return null; - } + return null; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/SourceType.java b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/SourceType.java index 3935872..4c68a94 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/commands/SourceType.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/commands/SourceType.java @@ -1,6 +1,5 @@ package me.StevenLawson.TotalFreedomMod.commands; -public enum SourceType -{ - ONLY_IN_GAME, ONLY_CONSOLE, BOTH +public enum SourceType { + ONLY_IN_GAME, ONLY_CONSOLE, BOTH } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/config/Configuration.java b/src/main/java/me/StevenLawson/TotalFreedomMod/config/Configuration.java index 7ec214a..37dff1c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/config/Configuration.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/config/Configuration.java @@ -1,172 +1,158 @@ package me.StevenLawson.TotalFreedomMod.config; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.exception.ExceptionUtils; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; - /** * Represents a definable YAML configuration. * * @see YamlConfiguration */ //@Deprecated -public class Configuration extends YamlConfiguration // BukkitLib @ https://github.com/Pravian/BukkitLib +public class Configuration extends + YamlConfiguration // BukkitLib @ https://github.com/Pravian/BukkitLib { - private final Plugin plugin; - private final File configFile; - private final boolean copyDefaults; - /** - * Creates a new YamlConfig instance. - * - *

Example: - *

-     * YamlConfig config = new YamlConfig(this, "config.yml", true);
-     * config.load();
-     * 

- * - * @param plugin The plugin to which the config belongs. - * @param fileName The filename of the config file. - * @param copyDefaults If the defaults should be copied and/loaded from a config in the plugin jar-file. - */ - public Configuration(Plugin plugin, String fileName, boolean copyDefaults) - { - this(plugin, Utilities.getPluginFile(plugin, fileName), copyDefaults); - } + private final Plugin plugin; + private final File configFile; + private final boolean copyDefaults; - /** - * Creates a new YamlConfig instance. - * - *

Example: - *

-     * YamlConfig config = new YamlConfig(this, new File(plugin.getDataFolder() + "/players", "Prozza.yml"), false);
-     * config.load();
-     * 

- * - * @param plugin The plugin to which the config belongs. - * @param file The file of the config file. - * @param copyDefaults If the defaults should be copied and/loaded from a config in the plugin jar-file. - */ - public Configuration(Plugin plugin, File file, boolean copyDefaults) - { - this.plugin = plugin; - this.configFile = file; - this.copyDefaults = copyDefaults; - } + /** + * Creates a new YamlConfig instance. + * + *

Example: + *

+	 * YamlConfig config = new YamlConfig(this, "config.yml", true);
+	 * config.load();
+	 * 

+ * + * @param plugin The plugin to which the config belongs. + * @param fileName The filename of the config file. + * @param copyDefaults If the defaults should be copied and/loaded from a config in the plugin + * jar-file. + */ + public Configuration(Plugin plugin, String fileName, boolean copyDefaults) { + this(plugin, Utilities.getPluginFile(plugin, fileName), copyDefaults); + } - /** - * Validates if the configuration exists. - * - * @return True if the configuration exists. - */ - public boolean exists() - { - return configFile.exists(); - } + /** + * Creates a new YamlConfig instance. + * + *

Example: + *

+	 * YamlConfig config = new YamlConfig(this, new File(plugin.getDataFolder() + "/players", "Prozza.yml"), false);
+	 * config.load();
+	 * 

+ * + * @param plugin The plugin to which the config belongs. + * @param file The file of the config file. + * @param copyDefaults If the defaults should be copied and/loaded from a config in the plugin + * jar-file. + */ + public Configuration(Plugin plugin, File file, boolean copyDefaults) { + this.plugin = plugin; + this.configFile = file; + this.copyDefaults = copyDefaults; + } - /** - * Saves the configuration to the predefined file. - * - * @see #YamlConfig(Plugin, String, boolean) - */ - public void save() - { - try - { - super.save(configFile); - } - catch (Exception ex) - { - plugin.getLogger().severe("Could not save configuration file: " + configFile.getName()); - plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); - } - } + /** + * Validates if the configuration exists. + * + * @return True if the configuration exists. + */ + public boolean exists() { + return configFile.exists(); + } - /** - * Loads the configuration from the predefined file. - * - *

Optionally, if loadDefaults has been set to true, the file will be copied over from the default inside the jar-file of the owning plugin.

- * - * @see #YamlConfig(Plugin, String, boolean) - */ - public void load() - { - try - { - if (copyDefaults) - { - if (!configFile.exists()) - { - configFile.getParentFile().mkdirs(); - try - { - Utilities.copy(plugin.getResource(configFile.getName()), configFile); - } - catch (IOException ex) - { - plugin.getLogger().severe("Could not write default configuration file: " + configFile.getName()); - plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); - } - plugin.getLogger().info("Installed default configuration " + configFile.getName()); - } + /** + * Saves the configuration to the predefined file. + * + * @see #YamlConfig(Plugin, String, boolean) + */ + public void save() { + try { + super.save(configFile); + } catch (Exception ex) { + plugin.getLogger().severe("Could not save configuration file: " + configFile.getName()); + plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); + } + } - super.addDefaults(getDefaultConfig()); - } + /** + * Loads the configuration from the predefined file. + * + *

Optionally, if loadDefaults has been set to true, the file will be copied over from the + * default inside the jar-file of the owning plugin.

+ * + * @see #YamlConfig(Plugin, String, boolean) + */ + public void load() { + try { + if (copyDefaults) { + if (!configFile.exists()) { + configFile.getParentFile().mkdirs(); + try { + Utilities.copy(plugin.getResource(configFile.getName()), configFile); + } catch (IOException ex) { + plugin.getLogger().severe( + "Could not write default configuration file: " + configFile.getName()); + plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); + } + plugin.getLogger() + .info("Installed default configuration " + configFile.getName()); + } - if (configFile.exists()) - { - super.load(configFile); - } - } - catch (Exception ex) - { - plugin.getLogger().severe("Could not load configuration file: " + configFile.getName()); - plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); - } - } + super.addDefaults(getDefaultConfig()); + } - /** - * Returns the raw YamlConfiguration this config is based on. - * - * @return The YamlConfiguration. - * @see YamlConfiguration - */ - public YamlConfiguration getConfig() - { - return this; - } + if (configFile.exists()) { + super.load(configFile); + } + } catch (Exception ex) { + plugin.getLogger().severe("Could not load configuration file: " + configFile.getName()); + plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); + } + } - /** - * Returns the default configuration as been stored in the jar-file of the owning plugin. - * @return The default configuration. - */ - public YamlConfiguration getDefaultConfig() - { - final YamlConfiguration DEFAULT_CONFIG = new YamlConfiguration(); - try - { - final InputStreamReader isr = new InputStreamReader(plugin.getResource(configFile.getName())); - DEFAULT_CONFIG.load(isr); - isr.close(); - } - catch (IOException ex) - { - plugin.getLogger().severe("Could not load default configuration: " + configFile.getName()); - plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); - return null; - } - catch (InvalidConfigurationException ex) - { - plugin.getLogger().severe("Could not load default configuration: " + configFile.getName()); - plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); - return null; - } - return DEFAULT_CONFIG; - } + /** + * Returns the raw YamlConfiguration this config is based on. + * + * @return The YamlConfiguration. + * @see YamlConfiguration + */ + public YamlConfiguration getConfig() { + return this; + } + + /** + * Returns the default configuration as been stored in the jar-file of the owning plugin. + * + * @return The default configuration. + */ + public YamlConfiguration getDefaultConfig() { + final YamlConfiguration DEFAULT_CONFIG = new YamlConfiguration(); + try { + final InputStreamReader isr = new InputStreamReader( + plugin.getResource(configFile.getName())); + DEFAULT_CONFIG.load(isr); + isr.close(); + } catch (IOException ex) { + plugin.getLogger() + .severe("Could not load default configuration: " + configFile.getName()); + plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); + return null; + } catch (InvalidConfigurationException ex) { + plugin.getLogger() + .severe("Could not load default configuration: " + configFile.getName()); + plugin.getLogger().severe(ExceptionUtils.getStackTrace(ex)); + return null; + } + return DEFAULT_CONFIG; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/config/ConfigurationEntry.java b/src/main/java/me/StevenLawson/TotalFreedomMod/config/ConfigurationEntry.java index e887402..a206bf1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/config/ConfigurationEntry.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/config/ConfigurationEntry.java @@ -3,180 +3,165 @@ package me.StevenLawson.TotalFreedomMod.config; import java.util.List; //@Deprecated -public enum ConfigurationEntry -{ - FORCE_IP_ENABLED(Boolean.class, "forceip.enabled"), - FORCE_IP_PORT(Integer.class, "forceip.port"), - FORCE_IP_KICKMSG(String.class, "forceip.kickmsg"), - // - 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"), - HTTPD_ORIGIN(String.class, "httdp.origin"), - // - 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"), - SERVER_OP_ON_JOIN(Boolean.class, "server.op_on_join"), - // - 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"), - TOSSMOB_ENABLED(Boolean.class, "tossmob_enabled"), - 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"), - // - ANNOUNCER_ENABLED(Boolean.class, "announcer.enabled"), - ANNOUNCER_INTERVAL(Integer.class, "announcer.interval"), - ANNOUNCER_PREFIX(String.class, "announcer.prefix"), - ANNOUNCER_ANNOUNCEMENTS(List.class, "announcer.announcements"), - // - EXPLOSIVE_RADIUS(Double.class, "explosive_radius"), - FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"), - //SERVICE_CHECKER_URL(String.class, "service_checker_url"), - BLOCKED_COMMANDS(List.class, "blocked_commands"), - HOST_SENDER_NAMES(List.class, "host_sender_names"), - UNBANNABLE_USERNAMES(List.class, "unbannable_usernames"), - OVERLORD_IPS(List.class, "overlord_ips"), - NOADMIN_IPS(List.class, "noadmin_ips"), - ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"), - AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"), - CONSOLE_IS_SENIOR(Boolean.class, "console_is_senior"), - // - DISCORD_IS_ENABLED(Boolean.class, "discord.is_enabled"), - DISCORD_TOKEN(String.class, "discord.token"), - DISCORD_CHANNEL(String.class, "discord.channel"), - DISCORD_ADMIN_CHANNEL(String.class, "discord.admin_channel"), - DISCORD_PREFIX(String.class, "discord.prefix"), - DISCORD_FORMAT(String.class, "discord.format"), - DISCORD_ADMIN_FORMAT(String.class, "discord.admin_format"), - // - CHAT_FORMAT(String.class, "chat.format"), - TFM_BUILD_SHELLSCRIPT(String.class, "build_shellscript"); +public enum ConfigurationEntry { + FORCE_IP_ENABLED(Boolean.class, "forceip.enabled"), + FORCE_IP_PORT(Integer.class, "forceip.port"), + FORCE_IP_KICKMSG(String.class, "forceip.kickmsg"), + // + 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"), + HTTPD_ORIGIN(String.class, "httdp.origin"), + // + 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"), + SERVER_OP_ON_JOIN(Boolean.class, "server.op_on_join"), + // + 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"), + TOSSMOB_ENABLED(Boolean.class, "tossmob_enabled"), + 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"), + // + ANNOUNCER_ENABLED(Boolean.class, "announcer.enabled"), + ANNOUNCER_INTERVAL(Integer.class, "announcer.interval"), + ANNOUNCER_PREFIX(String.class, "announcer.prefix"), + ANNOUNCER_ANNOUNCEMENTS(List.class, "announcer.announcements"), + // + EXPLOSIVE_RADIUS(Double.class, "explosive_radius"), + FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"), + //SERVICE_CHECKER_URL(String.class, "service_checker_url"), + BLOCKED_COMMANDS(List.class, "blocked_commands"), + HOST_SENDER_NAMES(List.class, "host_sender_names"), + UNBANNABLE_USERNAMES(List.class, "unbannable_usernames"), + OVERLORD_IPS(List.class, "overlord_ips"), + NOADMIN_IPS(List.class, "noadmin_ips"), + ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"), + AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"), + CONSOLE_IS_SENIOR(Boolean.class, "console_is_senior"), + // + DISCORD_IS_ENABLED(Boolean.class, "discord.is_enabled"), + DISCORD_TOKEN(String.class, "discord.token"), + DISCORD_CHANNEL(String.class, "discord.channel"), + DISCORD_ADMIN_CHANNEL(String.class, "discord.admin_channel"), + DISCORD_PREFIX(String.class, "discord.prefix"), + DISCORD_FORMAT(String.class, "discord.format"), + DISCORD_ADMIN_FORMAT(String.class, "discord.admin_format"), + // + CHAT_FORMAT(String.class, "chat.format"), + TFM_BUILD_SHELLSCRIPT(String.class, "build_shellscript"); - private final Class type; - private final String configName; + private final Class type; + private final String configName; - ConfigurationEntry(Class type, String configName) { - this.type = type; - this.configName = configName; - } + ConfigurationEntry(Class type, String configName) { + this.type = type; + this.configName = configName; + } - public Class getType() - { - return type; - } + public static ConfigurationEntry findConfigEntry(String name) { + name = name.toLowerCase().replace("_", ""); + for (ConfigurationEntry entry : values()) { + if (entry.toString().toLowerCase().replace("_", "").equals(name)) { + return entry; + } + } + return null; + } - public String getConfigName() - { - return configName; - } + public Class getType() { + return type; + } - public String getString() - { - return MainConfig.getString(this); - } + public String getConfigName() { + return configName; + } - public String setString(String value) - { - MainConfig.setString(this, value); - return value; - } + public String getString() { + return MainConfig.getString(this); + } - public Double getDouble() - { - return MainConfig.getDouble(this); - } + public String setString(String value) { + MainConfig.setString(this, value); + return value; + } - public Double setDouble(Double value) - { - MainConfig.setDouble(this, value); - return value; - } + public Double getDouble() { + return MainConfig.getDouble(this); + } - public Boolean getBoolean() - { - return MainConfig.getBoolean(this); - } + public Double setDouble(Double value) { + MainConfig.setDouble(this, value); + return value; + } - public Boolean setBoolean(Boolean value) - { - MainConfig.setBoolean(this, value); - return value; - } + public Boolean getBoolean() { + return MainConfig.getBoolean(this); + } - public Integer getInteger() - { - return MainConfig.getInteger(this); - } + public Boolean setBoolean(Boolean value) { + MainConfig.setBoolean(this, value); + return value; + } - public Integer setInteger(Integer value) - { - MainConfig.setInteger(this, value); - return value; - } + public Integer getInteger() { + return MainConfig.getInteger(this); + } - public List getList() - { - return MainConfig.getList(this); - } + public Integer setInteger(Integer value) { + MainConfig.setInteger(this, value); + return value; + } - public static ConfigurationEntry findConfigEntry(String name) - { - name = name.toLowerCase().replace("_", ""); - for (ConfigurationEntry entry : values()) - { - if (entry.toString().toLowerCase().replace("_", "").equals(name)) - { - return entry; - } - } - return null; - } + public List getList() { + return MainConfig.getList(this); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/config/MainConfig.java b/src/main/java/me/StevenLawson/TotalFreedomMod/config/MainConfig.java index e1967c6..6e92e96 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/config/MainConfig.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/config/MainConfig.java @@ -2,308 +2,239 @@ package me.StevenLawson.TotalFreedomMod.config; import com.avaje.ebean.validation.NotNull; import com.google.common.collect.ImmutableList; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.EnumMap; +import java.util.List; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.apache.commons.io.FileUtils; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; -import java.io.*; -import java.util.EnumMap; -import java.util.List; - //@Deprecated -public class MainConfig -{ - public static final File CONFIG_FILE = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.CONFIG_FILENAME); - // - private static final EnumMap ENTRY_MAP; - private static final TFM_Defaults DEFAULTS; +public class MainConfig { - static - { - ENTRY_MAP = new EnumMap(ConfigurationEntry.class); + public static final File CONFIG_FILE = new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.CONFIG_FILENAME); + // + private static final EnumMap ENTRY_MAP; + private static final TFM_Defaults DEFAULTS; - TFM_Defaults tempDefaults = null; - try - { - try - { - InputStream defaultConfig = getDefaultConfig(); - tempDefaults = new TFM_Defaults(defaultConfig); - for (ConfigurationEntry entry : ConfigurationEntry.values()) - { - ENTRY_MAP.put(entry, tempDefaults.get(entry.getConfigName())); - } - defaultConfig.close(); - } - catch (IOException ex) - { - Log.severe(ex); - } + static { + ENTRY_MAP = new EnumMap(ConfigurationEntry.class); - copyDefaultConfig(CONFIG_FILE); + TFM_Defaults tempDefaults = null; + try { + try { + InputStream defaultConfig = getDefaultConfig(); + tempDefaults = new TFM_Defaults(defaultConfig); + for (ConfigurationEntry entry : ConfigurationEntry.values()) { + ENTRY_MAP.put(entry, tempDefaults.get(entry.getConfigName())); + } + defaultConfig.close(); + } catch (IOException ex) { + Log.severe(ex); + } - load(); - } - catch (Exception ex) - { - Log.severe(ex); - } + copyDefaultConfig(CONFIG_FILE); - DEFAULTS = tempDefaults; - } + load(); + } catch (Exception ex) { + Log.severe(ex); + } - private MainConfig() - { - throw new AssertionError(); - } + DEFAULTS = tempDefaults; + } - public static void load() - { - try - { - YamlConfiguration config = new YamlConfiguration(); + private MainConfig() { + throw new AssertionError(); + } - config.load(CONFIG_FILE); + public static void load() { + try { + YamlConfiguration config = new YamlConfiguration(); - for (ConfigurationEntry entry : ConfigurationEntry.values()) - { - String path = entry.getConfigName(); - if (config.contains(path)) - { - Object value = config.get(path); - if (value == null || entry.getType().isAssignableFrom(value.getClass())) - { - ENTRY_MAP.put(entry, value); - } - else - { - Log.warning("Value for " + entry.getConfigName() + " is of type " + value.getClass().getSimpleName() + ". Needs to be " + entry.getType().getSimpleName() + ". Using default value."); - } - } - else - { - Log.warning("Missing configuration entry " + entry.getConfigName() + ". Using default value."); - } - } - } - catch (FileNotFoundException ex) - { - Log.severe(ex); - } - catch (IOException ex) - { - Log.severe(ex); - } - catch (InvalidConfigurationException ex) - { - Log.severe(ex); - } - } + config.load(CONFIG_FILE); - @NotNull - public static String getString(ConfigurationEntry entry) - { - try - { - return get(entry, String.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - return ""; - } + for (ConfigurationEntry entry : ConfigurationEntry.values()) { + String path = entry.getConfigName(); + if (config.contains(path)) { + Object value = config.get(path); + if (value == null || entry.getType().isAssignableFrom(value.getClass())) { + ENTRY_MAP.put(entry, value); + } else { + Log.warning( + "Value for " + entry.getConfigName() + " is of type " + value.getClass() + .getSimpleName() + ". Needs to be " + entry.getType() + .getSimpleName() + ". Using default value."); + } + } else { + Log.warning("Missing configuration entry " + entry.getConfigName() + + ". Using default value."); + } + } + } catch (FileNotFoundException ex) { + Log.severe(ex); + } catch (IOException ex) { + Log.severe(ex); + } catch (InvalidConfigurationException ex) { + Log.severe(ex); + } + } - public static void setString(ConfigurationEntry entry, String value) - { - try - { - set(entry, value, String.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - } + @NotNull + public static String getString(ConfigurationEntry entry) { + try { + return get(entry, String.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + return ""; + } - @NotNull - public static Double getDouble(ConfigurationEntry entry) - { - try - { - return get(entry, Double.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - return 0D; - } + public static void setString(ConfigurationEntry entry, String value) { + try { + set(entry, value, String.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + } - public static void setDouble(ConfigurationEntry entry, Double value) - { - try - { - set(entry, value, Double.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - } + @NotNull + public static Double getDouble(ConfigurationEntry entry) { + try { + return get(entry, Double.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + return 0D; + } - @NotNull - public static Boolean getBoolean(ConfigurationEntry entry) - { - try - { - return get(entry, Boolean.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - return false; - } + public static void setDouble(ConfigurationEntry entry, Double value) { + try { + set(entry, value, Double.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + } - public static void setBoolean(ConfigurationEntry entry, Boolean value) - { - try - { - set(entry, value, Boolean.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - } + @NotNull + public static Boolean getBoolean(ConfigurationEntry entry) { + try { + return get(entry, Boolean.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + return false; + } - @NotNull - public static Integer getInteger(ConfigurationEntry entry) - { - try - { - return get(entry, Integer.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - return 0; - } + public static void setBoolean(ConfigurationEntry entry, Boolean value) { + try { + set(entry, value, Boolean.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + } - public static void setInteger(ConfigurationEntry entry, Integer value) - { - try - { - set(entry, value, Integer.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - } + @NotNull + public static Integer getInteger(ConfigurationEntry entry) { + try { + return get(entry, Integer.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + return 0; + } - @NotNull - public static List getList(ConfigurationEntry entry) - { - try - { - return get(entry, List.class); - } - catch (IllegalArgumentException ex) - { - Log.severe(ex); - } - return ImmutableList.of(); - } + public static void setInteger(ConfigurationEntry entry, Integer value) { + try { + set(entry, value, Integer.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + } - @NotNull - public static T get(ConfigurationEntry entry, Class type) throws IllegalArgumentException - { - Object value = ENTRY_MAP.get(entry); - try - { - return type.cast(value); - } - catch (ClassCastException ex) - { - throw new IllegalArgumentException(entry.name() + " is not of type " + type.getSimpleName()); - } - } + @NotNull + public static List getList(ConfigurationEntry entry) { + try { + return get(entry, List.class); + } catch (IllegalArgumentException ex) { + Log.severe(ex); + } + return ImmutableList.of(); + } - public static void set(ConfigurationEntry entry, T value, Class type) throws IllegalArgumentException - { - if (!type.isAssignableFrom(entry.getType())) - { - throw new IllegalArgumentException(entry.name() + " is not of type " + type.getSimpleName()); - } - if (value != null && !type.isAssignableFrom(value.getClass())) - { - throw new IllegalArgumentException("Value is not of type " + type.getSimpleName()); - } - ENTRY_MAP.put(entry, value); - } + @NotNull + public static T get(ConfigurationEntry entry, Class type) + throws IllegalArgumentException { + Object value = ENTRY_MAP.get(entry); + try { + return type.cast(value); + } catch (ClassCastException ex) { + throw new IllegalArgumentException( + entry.name() + " is not of type " + type.getSimpleName()); + } + } - private static void copyDefaultConfig(File targetFile) - { - if (targetFile.exists()) - { - return; - } + public static void set(ConfigurationEntry entry, T value, Class type) + throws IllegalArgumentException { + if (!type.isAssignableFrom(entry.getType())) { + throw new IllegalArgumentException( + entry.name() + " is not of type " + type.getSimpleName()); + } + if (value != null && !type.isAssignableFrom(value.getClass())) { + throw new IllegalArgumentException("Value is not of type " + type.getSimpleName()); + } + ENTRY_MAP.put(entry, value); + } - Log.info("Installing default configuration file template: " + targetFile.getPath()); + private static void copyDefaultConfig(File targetFile) { + if (targetFile.exists()) { + return; + } - try - { - InputStream defaultConfig = getDefaultConfig(); - FileUtils.copyInputStreamToFile(defaultConfig, targetFile); - defaultConfig.close(); - } - catch (IOException ex) - { - Log.severe(ex); - } - } + Log.info("Installing default configuration file template: " + targetFile.getPath()); - private static InputStream getDefaultConfig() - { - return TotalFreedomMod.plugin.getResource(TotalFreedomMod.CONFIG_FILENAME); - } + try { + InputStream defaultConfig = getDefaultConfig(); + FileUtils.copyInputStreamToFile(defaultConfig, targetFile); + defaultConfig.close(); + } catch (IOException ex) { + Log.severe(ex); + } + } - public static TFM_Defaults getDefaults() - { - return DEFAULTS; - } + private static InputStream getDefaultConfig() { + return TotalFreedomMod.plugin.getResource(TotalFreedomMod.CONFIG_FILENAME); + } - public static class TFM_Defaults - { - private YamlConfiguration defaults = null; + public static TFM_Defaults getDefaults() { + return DEFAULTS; + } - private TFM_Defaults(InputStream defaultConfig) - { - try - { - defaults = new YamlConfiguration(); - final InputStreamReader isr = new InputStreamReader(defaultConfig); - defaults.load(isr); - isr.close(); - } - catch (IOException ex) - { - Log.severe(ex); - } - catch (InvalidConfigurationException ex) - { - Log.severe(ex); - } - } + public static class TFM_Defaults { - public Object get(String path) - { - return defaults.get(path); - } - } + private YamlConfiguration defaults = null; + + private TFM_Defaults(InputStream defaultConfig) { + try { + defaults = new YamlConfiguration(); + final InputStreamReader isr = new InputStreamReader(defaultConfig); + defaults.load(isr); + isr.close(); + } catch (IOException ex) { + Log.severe(ex); + } catch (InvalidConfigurationException ex) { + Log.severe(ex); + } + } + + public Object get(String path) { + return defaults.get(path); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/config/TagConfiguration.java b/src/main/java/me/StevenLawson/TotalFreedomMod/config/TagConfiguration.java index ee09b7d..deadca6 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/config/TagConfiguration.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/config/TagConfiguration.java @@ -1,42 +1,47 @@ package me.StevenLawson.TotalFreedomMod.config; +import java.io.File; +import java.io.IOException; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import java.io.File; -import java.io.IOException; - public class TagConfiguration { - private static Plugin plugin = JavaPlugin.getPlugin(TotalFreedomMod.class); - private static final FileConfiguration playerdata = TotalFreedomMod.getPlugin(TotalFreedomMod.class).getCustomConfig(); - private static File cfile = new File(plugin.getDataFolder(), "playerTags.yml"); - public static void saveTag(String playerUuid, String tag) { - try { - // Set tag value and save. - playerdata.set(playerUuid, tag); - playerdata.save(cfile); - } catch (IOException e){ - e.printStackTrace(); - } - } - public static String getTag(String playerUuid){ - if(playerdata.get(playerUuid) != null && playerdata.isString(playerUuid)) { - if(!playerdata.getString(playerUuid).isEmpty() && !"".equalsIgnoreCase(playerdata.getString(playerUuid))){ - // Return the value if exists, checking will be done on join event. - return playerdata.getString(playerUuid); - } else { - try { - // Try and write player tags if not added - playerdata.set(playerUuid, ""); - playerdata.save(cfile); - } catch (IOException e){ - e.printStackTrace(); - } - return ""; - } - } else return null; - } + private static final FileConfiguration playerdata = TotalFreedomMod.getPlugin( + TotalFreedomMod.class).getCustomConfig(); + private static final Plugin plugin = JavaPlugin.getPlugin(TotalFreedomMod.class); + private static final File cfile = new File(plugin.getDataFolder(), "playerTags.yml"); + + public static void saveTag(String playerUuid, String tag) { + try { + // Set tag value and save. + playerdata.set(playerUuid, tag); + playerdata.save(cfile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static String getTag(String playerUuid) { + if (playerdata.get(playerUuid) != null && playerdata.isString(playerUuid)) { + if (!playerdata.getString(playerUuid).isEmpty() && !"".equalsIgnoreCase( + playerdata.getString(playerUuid))) { + // Return the value if exists, checking will be done on join event. + return playerdata.getString(playerUuid); + } else { + try { + // Try and write player tags if not added + playerdata.set(playerUuid, ""); + playerdata.save(cfile); + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + } else { + return null; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/bridge/BukkitTelnetBridge.java b/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/bridge/BukkitTelnetBridge.java index 2f722fb..594a031 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/bridge/BukkitTelnetBridge.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/bridge/BukkitTelnetBridge.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.deprecated.bridge; +import java.util.Iterator; +import java.util.Map; import me.StevenLawson.BukkitTelnet.api.TelnetCommandEvent; import me.StevenLawson.BukkitTelnet.api.TelnetPreLoginEvent; import me.StevenLawson.BukkitTelnet.api.TelnetRequestDataTagsEvent; @@ -13,70 +15,64 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import java.util.Iterator; -import java.util.Map; - @Deprecated public class BukkitTelnetBridge implements Listener { - @EventHandler(priority = EventPriority.NORMAL) - public void onTelnetPreLogin(TelnetPreLoginEvent event) { - final String ip = event.getIp(); - if (ip == null || ip.isEmpty()) { - return; - } + @EventHandler(priority = EventPriority.NORMAL) + public void onTelnetPreLogin(TelnetPreLoginEvent event) { - final Admin admin = AdminList.getEntryByIp(ip, true); + final String ip = event.getIp(); + if (ip == null || ip.isEmpty()) { + return; + } - if (admin == null || !admin.isActivated() || !admin.isTelnetAdmin()) - { - return; - } + final Admin admin = AdminList.getEntryByIp(ip, true); - event.setBypassPassword(true); - event.setName(admin.getLastLoginName()); - } + if (admin == null || !admin.isActivated() || !admin.isTelnetAdmin()) { + return; + } - @EventHandler(priority = EventPriority.NORMAL) - public void onTelnetCommand(TelnetCommandEvent event) - { - if (CommandBlocker.isCommandBlocked(event.getCommand(), event.getSender())) - { - event.setCancelled(true); - } - } + event.setBypassPassword(true); + event.setName(admin.getLastLoginName()); + } - @EventHandler(priority = EventPriority.NORMAL) - public void onTelnetRequestDataTags(TelnetRequestDataTagsEvent event) - { - final Iterator>> it = event.getDataTags().entrySet().iterator(); - while (it.hasNext()) - { - final Map.Entry> entry = it.next(); - final Player player = entry.getKey(); - final Map playerTags = entry.getValue(); + @EventHandler(priority = EventPriority.NORMAL) + public void onTelnetCommand(TelnetCommandEvent event) { + if (CommandBlocker.isCommandBlocked(event.getCommand(), event.getSender())) { + event.setCancelled(true); + } + } - boolean isAdmin = false; - boolean isTelnetAdmin = false; - boolean isSeniorAdmin = false; + @EventHandler(priority = EventPriority.NORMAL) + public void onTelnetRequestDataTags(TelnetRequestDataTagsEvent event) { + final Iterator>> it = event.getDataTags().entrySet() + .iterator(); + while (it.hasNext()) { + final Map.Entry> entry = it.next(); + final Player player = entry.getKey(); + final Map playerTags = entry.getValue(); - final Admin admin = AdminList.getEntry(player); - if (admin != null) - { - boolean isActivated = admin.isActivated(); + boolean isAdmin = false; + boolean isTelnetAdmin = false; + boolean isSeniorAdmin = false; - isAdmin = isActivated; - isTelnetAdmin = isActivated && admin.isTelnetAdmin(); - isSeniorAdmin = isActivated && admin.isSeniorAdmin(); - } + final Admin admin = AdminList.getEntry(player); + if (admin != null) { + boolean isActivated = admin.isActivated(); - playerTags.put("tfm.admin.isAdmin", isAdmin); - playerTags.put("tfm.admin.isTelnetAdmin", isTelnetAdmin); - playerTags.put("tfm.admin.isSeniorAdmin", isSeniorAdmin); + isAdmin = isActivated; + isTelnetAdmin = isActivated && admin.isTelnetAdmin(); + isSeniorAdmin = isActivated && admin.isSeniorAdmin(); + } - playerTags.put("tfm.playerdata.getTag", PlayerData.getPlayerData(player).getTag()); + playerTags.put("tfm.admin.isAdmin", isAdmin); + playerTags.put("tfm.admin.isTelnetAdmin", isTelnetAdmin); + playerTags.put("tfm.admin.isSeniorAdmin", isSeniorAdmin); - playerTags.put("tfm.essentialsBridge.getNickname", EssentialsBridge.getNickname(player.getName())); - } - } + playerTags.put("tfm.playerdata.getTag", PlayerData.getPlayerData(player).getTag()); + + playerTags.put("tfm.essentialsBridge.getNickname", + EssentialsBridge.getNickname(player.getName())); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/twitter/TwitterHandler.java b/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/twitter/TwitterHandler.java index 2254b3c..dc58111 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/twitter/TwitterHandler.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/deprecated/twitter/TwitterHandler.java @@ -1,110 +1,98 @@ package me.StevenLawson.TotalFreedomMod.deprecated.twitter; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; - @Deprecated -public class TwitterHandler -{ - private TwitterHandler() - { - throw new AssertionError(); - } +public class TwitterHandler { - public static String getTwitter(String player) - { - return request("action=gettwitter&player=" + player); - } + private TwitterHandler() { + throw new AssertionError(); + } - public static String setTwitter(String player, String twitter) - { - if (twitter.startsWith("@")) - { - twitter = twitter.replaceAll("@", ""); - } - return request("action=settwitter&player=" + player + "&twitter=" + twitter); - } + public static String getTwitter(String player) { + return request("action=gettwitter&player=" + player); + } - public static String delTwitter(String player) - { - return request("action=deltwitter&player=" + player); - } + public static String setTwitter(String player, String twitter) { + if (twitter.startsWith("@")) { + twitter = twitter.replaceAll("@", ""); + } + return request("action=settwitter&player=" + player + "&twitter=" + twitter); + } - public static void delTwitterVerbose(String targetName, CommandSender sender) - { - final String reply = delTwitter(targetName); - if ("ok".equals(reply)) - { - Utilities.adminAction(sender.getName(), "Removing " + targetName + " from TwitterBot", true); - } - else if ("disabled".equals(reply)) - { - Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); - Utilities.playerMsg(sender, "TwitterBot has been temporarily disabled, please wait until it gets re-enabled", ChatColor.RED); - } - else if ("failed".equals(reply)) - { - Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); - Utilities.playerMsg(sender, "There was a problem querying the database, please let a developer know.", ChatColor.RED); - } - else if ("false".equals(reply)) - { - Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); - Utilities.playerMsg(sender, "There was a problem with the database, please let a developer know.", ChatColor.RED); - } - else if ("cannotauth".equals(reply)) - { - Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); - Utilities.playerMsg(sender, "The database password is incorrect, please let a developer know.", ChatColor.RED); - } - else if ("notfound".equals(reply)) - { - Utilities.playerMsg(sender, targetName + " did not have a twitter handle registered to their name.", ChatColor.GREEN); - } - } + public static String delTwitter(String player) { + return request("action=deltwitter&player=" + player); + } - public static String isEnabled() - { - return request("action=getstatus"); - } + public static void delTwitterVerbose(String targetName, CommandSender sender) { + final String reply = delTwitter(targetName); + if ("ok".equals(reply)) { + Utilities.adminAction(sender.getName(), "Removing " + targetName + " from TwitterBot", + true); + } else if ("disabled".equals(reply)) { + Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); + Utilities.playerMsg(sender, + "TwitterBot has been temporarily disabled, please wait until it gets re-enabled", + ChatColor.RED); + } else if ("failed".equals(reply)) { + Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); + Utilities.playerMsg(sender, + "There was a problem querying the database, please let a developer know.", + ChatColor.RED); + } else if ("false".equals(reply)) { + Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); + Utilities.playerMsg(sender, + "There was a problem with the database, please let a developer know.", + ChatColor.RED); + } else if ("cannotauth".equals(reply)) { + Utilities.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); + Utilities.playerMsg(sender, + "The database password is incorrect, please let a developer know.", ChatColor.RED); + } else if ("notfound".equals(reply)) { + Utilities.playerMsg(sender, + targetName + " did not have a twitter handle registered to their name.", + ChatColor.GREEN); + } + } - public static String setEnabled(String status) - { - return request("action=setstatus&status=" + status); - } + public static String isEnabled() { + return request("action=getstatus"); + } - private static String request(String queryString) - { - String line = "failed"; + public static String setEnabled(String status) { + return request("action=setstatus&status=" + status); + } - final String twitterbotURL = ConfigurationEntry.TWITTERBOT_URL.getString(); - final String twitterbotSecret = ConfigurationEntry.TWITTERBOT_SECRET.getString(); + private static String request(String queryString) { + String line = "failed"; - if (twitterbotURL != null && twitterbotSecret != null && !twitterbotURL.isEmpty() && !twitterbotSecret.isEmpty()) - { - try - { - URL getUrl = new URL(twitterbotURL + "?auth=" + twitterbotSecret + "&" + queryString); - URLConnection urlConnection = getUrl.openConnection(); - // Read the response - BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); - line = in.readLine(); - in.close(); - } - catch (Exception ex) - { - Log.severe(ex); - } - } + final String twitterbotURL = ConfigurationEntry.TWITTERBOT_URL.getString(); + final String twitterbotSecret = ConfigurationEntry.TWITTERBOT_SECRET.getString(); - return line; - } + if (twitterbotURL != null && twitterbotSecret != null && !twitterbotURL.isEmpty() + && !twitterbotSecret.isEmpty()) { + try { + URL getUrl = new URL( + twitterbotURL + "?auth=" + twitterbotSecret + "&" + queryString); + URLConnection urlConnection = getUrl.openConnection(); + // Read the response + BufferedReader in = new BufferedReader( + new InputStreamReader(urlConnection.getInputStream())); + line = in.readLine(); + in.close(); + } catch (Exception ex) { + Log.severe(ex); + } + } + + return line; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/bridge/DiscordBridge.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/bridge/DiscordBridge.java index 4e45741..a10e0d5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/bridge/DiscordBridge.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/bridge/DiscordBridge.java @@ -1,12 +1,15 @@ package me.StevenLawson.TotalFreedomMod.discord.bridge; import java.util.Optional; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.discord.command.DiscordCommandManager; +import me.StevenLawson.TotalFreedomMod.util.Utilities; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.HoverEvent; @@ -25,10 +28,10 @@ import org.javacord.api.event.message.MessageCreateEvent; public class DiscordBridge { + public static DiscordCommandManager COMMAND_MANAGER; private static DiscordApi DISCORD_API; private static TextChannel CHANNEL; private static TextChannel ADMIN_CHANNEL; - public static DiscordCommandManager COMMAND_MANAGER; private static void onMessageCreateEvent(MessageCreateEvent message) { boolean isAdmin = false; @@ -43,9 +46,9 @@ public class DiscordBridge { String prefix = MainConfig.getString(ConfigurationEntry.DISCORD_PREFIX); MessageAuthor author = message.getMessage().getAuthor(); - if (author.isBotUser() || !message.isServerMessage()) { - return; - } + if (author.isBotUser() || !message.isServerMessage()) { + return; + } Optional server = message.getServer(); Optional user = author.asUser(); @@ -81,17 +84,16 @@ public class DiscordBridge { replyingTo.getReadableContent()); } - String format = MainConfig.getString((isAdmin) ? ConfigurationEntry.DISCORD_ADMIN_FORMAT - : ConfigurationEntry.DISCORD_FORMAT); + String format = MainConfig.getString( + (isAdmin) ? ConfigurationEntry.DISCORD_ADMIN_FORMAT + : ConfigurationEntry.DISCORD_FORMAT); format = format.replace("{TAG}", author.getDiscriminatedName()); format = format.replace("{USERNAME}", author.getName()); BaseComponent[] components = TextComponent.fromLegacyText( ChatColor.translateAlternateColorCodes('&', String.format(format, content))); TextComponent component = new TextComponent(reply); - for (BaseComponent baseComponent : components) { - component.addExtra(baseComponent); - } + component.addExtra(Utilities.fromBaseComponents(components)); if (message.getMessageAttachments().size() > 0) { int i = 0; @@ -196,9 +198,9 @@ public class DiscordBridge { } public static void transmitMessage(String message, boolean disconnectAfterwards) { - if (CHANNEL == null) { - return; - } + if (CHANNEL == null) { + return; + } if (!disconnectAfterwards) { CHANNEL.sendMessage(sanitizeMessage(message)); } else { @@ -206,18 +208,19 @@ public class DiscordBridge { CHANNEL.sendMessage(sanitizeMessage(message)).get(); } catch (Exception ignored) { } - /*CountDownLatch shutdownWaiter = new CountDownLatch(1); + CountDownLatch shutdownWaiter = new CountDownLatch(1); - Thread t = new Thread(() -> { - DISCORD_API.addLostConnectionListener(lostConnectionEvent -> shutdownWaiter.countDown()); - DISCORD_API.disconnect(); + Thread t = new Thread(() -> { + DISCORD_API.addLostConnectionListener( + lostConnectionEvent -> shutdownWaiter.countDown()); + DISCORD_API.disconnect(); - try { - shutdownWaiter.await(30, TimeUnit.SECONDS); - } catch (InterruptedException ignored) { - } - }); - t.start();*/ + try { + shutdownWaiter.await(30, TimeUnit.SECONDS); + } catch (InterruptedException ignored) { + } + }); + t.start(); } } @@ -226,9 +229,9 @@ public class DiscordBridge { } public static void transmitAdminMessage(String message, boolean disconnectAfterwards) { - if (ADMIN_CHANNEL == null) { - return; - } + if (ADMIN_CHANNEL == null) { + return; + } if (!disconnectAfterwards) { ADMIN_CHANNEL.sendMessage(sanitizeMessage(message)); } else { @@ -236,7 +239,7 @@ public class DiscordBridge { ADMIN_CHANNEL.sendMessage(sanitizeMessage(message)).get(); } catch (Exception ignored) { } - //DISCORD_API.disconnect(); + DISCORD_API.disconnect(); } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommand.java index 8f8d4d6..bacde97 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommand.java @@ -1,26 +1,28 @@ package me.StevenLawson.TotalFreedomMod.discord.command; +import java.util.List; import org.javacord.api.entity.message.MessageBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.util.List; - public interface DiscordCommand { - /** - * Can the user execute the command? - * @param user The user who is attempting execution - * @param server Where the user is attempting execution from - * @return If it can be executed - */ - boolean canExecute(User user, Server server); - /** - * Execute the command, and return the results - * @param user The user who executed the command - * @param args The arguments they executed it with - * @param guild - * @return The results as a MessageBuilder - */ - MessageBuilder execute(User user, List args, Server guild); + /** + * Can the user execute the command? + * + * @param user The user who is attempting execution + * @param server Where the user is attempting execution from + * @return If it can be executed + */ + boolean canExecute(User user, Server server); + + /** + * Execute the command, and return the results + * + * @param user The user who executed the command + * @param args The arguments they executed it with + * @param guild + * @return The results as a MessageBuilder + */ + MessageBuilder execute(User user, List args, Server guild); } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommandManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommandManager.java index 4a29574..6f50f26 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommandManager.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/DiscordCommandManager.java @@ -1,49 +1,61 @@ package me.StevenLawson.TotalFreedomMod.discord.command; -import me.StevenLawson.TotalFreedomMod.discord.commands.*; +import java.awt.Color; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import me.StevenLawson.TotalFreedomMod.discord.commands.AdminConsoleCommand; +import me.StevenLawson.TotalFreedomMod.discord.commands.HelpCommand; +import me.StevenLawson.TotalFreedomMod.discord.commands.ListCommand; +import me.StevenLawson.TotalFreedomMod.discord.commands.TPSCommand; +import me.StevenLawson.TotalFreedomMod.discord.commands.UptimeCommand; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.entity.message.MessageBuilder; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - public class DiscordCommandManager { - public List commands = new ArrayList<>(); - public void init() { - // Server Commands - commands.add(new ListCommand("list", "Gives a list of online players.", "Server Commands", Collections.singletonList("l"), false)); - commands.add(new TPSCommand("tps", "Lag information regarding the server.", "Server Commands", false)); - commands.add(new AdminConsoleCommand("adminconsole", "Execute admin commands from discord.", "Server Commands", Collections.singletonList("ac"),true)); - commands.add(new UptimeCommand("uptime", "Returns the uptime of the VPS.", "Server Commands", false)); + public List commands = new ArrayList<>(); - // Help - commands.add(new HelpCommand("help", "Displays the help command", "Help", false)); - } + public void init() { + // Server Commands + commands.add(new ListCommand("list", "Gives a list of online players.", "Server Commands", + Collections.singletonList("l"), false)); + commands.add( + new TPSCommand("tps", "Lag information regarding the server.", "Server Commands", + false)); + commands.add(new AdminConsoleCommand("adminconsole", "Execute admin commands from discord.", + "Server Commands", Collections.singletonList("ac"), true)); + commands.add( + new UptimeCommand("uptime", "Returns the uptime of the VPS.", "Server Commands", + false)); - public void parse(String content, User user, Server server, TextChannel channel, String prefix) { - List args = new ArrayList<>(Arrays.asList(content.split(" "))); - String commandOrAlias = args.remove(0).split(prefix)[1]; + // Help + commands.add(new HelpCommand("help", "Displays the help command", "Help", false)); + } - for (ExecutableDiscordCommand command : commands) { - if(command.command.equalsIgnoreCase(commandOrAlias) || command.aliases.contains(commandOrAlias.toLowerCase())) { - if(command.canExecute(user, server)) { - MessageBuilder messageBuilder = command.execute(user, args, server); - messageBuilder.send(channel); - } else { - EmbedBuilder errorEmbed = new EmbedBuilder(); - errorEmbed.setTitle("Command error"); - errorEmbed.setColor(Color.RED); - errorEmbed.setDescription("You don't have permission to execute this command."); - channel.sendMessage(errorEmbed); - } - } - } - } + public void parse(String content, User user, Server server, TextChannel channel, + String prefix) { + List args = new ArrayList<>(Arrays.asList(content.split(" "))); + String commandOrAlias = args.remove(0).split(prefix)[1]; + + for (ExecutableDiscordCommand command : commands) { + if (command.command.equalsIgnoreCase(commandOrAlias) || command.aliases.contains( + commandOrAlias.toLowerCase())) { + if (command.canExecute(user, server)) { + MessageBuilder messageBuilder = command.execute(user, args, server); + messageBuilder.send(channel); + } else { + EmbedBuilder errorEmbed = new EmbedBuilder(); + errorEmbed.setTitle("Command error"); + errorEmbed.setColor(Color.RED); + errorEmbed.setDescription("You don't have permission to execute this command."); + channel.sendMessage(errorEmbed); + } + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/ExecutableDiscordCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/ExecutableDiscordCommand.java index b428edf..812fe28 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/ExecutableDiscordCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/command/ExecutableDiscordCommand.java @@ -1,69 +1,73 @@ package me.StevenLawson.TotalFreedomMod.discord.command; import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.List; import org.javacord.api.entity.message.MessageBuilder; import org.javacord.api.entity.permission.Role; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.util.ArrayList; -import java.util.List; - public class ExecutableDiscordCommand implements DiscordCommand { - public String command; - public String description; - public String category; - public List aliases; - //TODO: Add support for more complex permissions - public boolean isAdmin; - /** - * Creates a command - * @param command The string the command is execute by, e.g. list - * @param description What the command does - * @param category The category of the command - * @param aliases Other strings that should execute the command - * @param isAdmin If the command should only be accessible by administrators - */ - public ExecutableDiscordCommand(String command, String description, String category, List aliases, boolean isAdmin) { - this.command = command; - this.description = description; - this.category = category; - this.aliases = ImmutableList.copyOf(aliases); - this.isAdmin = isAdmin; - } + public String command; + public String description; + public String category; + public List aliases; + //TODO: Add support for more complex permissions + public boolean isAdmin; + + /** + * Creates a command + * + * @param command The string the command is execute by, e.g. list + * @param description What the command does + * @param category The category of the command + * @param aliases Other strings that should execute the command + * @param isAdmin If the command should only be accessible by administrators + */ + public ExecutableDiscordCommand(String command, String description, String category, + List aliases, boolean isAdmin) { + this.command = command; + this.description = description; + this.category = category; + this.aliases = ImmutableList.copyOf(aliases); + this.isAdmin = isAdmin; + } - /** - * Creates a command - * @param command The string the command is execute by, e.g. list - * @param description What the command does - * @param category The category of the command - * @param isAdmin If the command should only be accessible by administrators - */ - public ExecutableDiscordCommand(String command, String description, String category, boolean isAdmin) { - this.command = command; - this.description = description; - this.category = category; - this.aliases = ImmutableList.copyOf(new ArrayList<>()); - this.isAdmin = isAdmin; - } + /** + * Creates a command + * + * @param command The string the command is execute by, e.g. list + * @param description What the command does + * @param category The category of the command + * @param isAdmin If the command should only be accessible by administrators + */ + public ExecutableDiscordCommand(String command, String description, String category, + boolean isAdmin) { + this.command = command; + this.description = description; + this.category = category; + this.aliases = ImmutableList.copyOf(new ArrayList<>()); + this.isAdmin = isAdmin; + } - public boolean canExecute(User user, Server server) { - if(this.isAdmin) { - for (Role role : user.getRoles(server)) { - if(role.getName().toLowerCase().contains("admin")) { - return true; - } - } + public boolean canExecute(User user, Server server) { + if (this.isAdmin) { + for (Role role : user.getRoles(server)) { + if (role.getName().toLowerCase().contains("admin")) { + return true; + } + } - return false; - } + return false; + } - return true; - } + return true; + } - public MessageBuilder execute(User user, List args, Server guild) { - return new MessageBuilder().setContent(""); - } + public MessageBuilder execute(User user, List args, Server guild) { + return new MessageBuilder().setContent(""); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/AdminConsoleCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/AdminConsoleCommand.java index e2867d3..015897a 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/AdminConsoleCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/AdminConsoleCommand.java @@ -1,5 +1,7 @@ package me.StevenLawson.TotalFreedomMod.discord.commands; +import java.awt.Color; +import java.util.List; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.discord.command.ExecutableDiscordCommand; import me.StevenLawson.TotalFreedomMod.discord.sender.DiscordCommandSender; @@ -10,34 +12,36 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.awt.*; -import java.util.List; - public class AdminConsoleCommand extends ExecutableDiscordCommand { - private final EmbedBuilder success = new EmbedBuilder().setTitle("Success").setColor(Color.GREEN).setDescription("Command sent."); - private final EmbedBuilder error = new EmbedBuilder().setTitle("Command error").setColor(Color.RED).setDescription("An error occured. Check your DMs for more info."); - public AdminConsoleCommand(String command, String description, String category, List aliases, boolean isAdmin) { - super(command, description, category, aliases, isAdmin); - } + private final EmbedBuilder success = new EmbedBuilder().setTitle("Success") + .setColor(Color.GREEN).setDescription("Command sent."); + private final EmbedBuilder error = new EmbedBuilder().setTitle("Command error") + .setColor(Color.RED).setDescription("An error occured. Check your DMs for more info."); - @Override - public MessageBuilder execute(User user, List args, Server guild) { - try { - new BukkitRunnable() { + public AdminConsoleCommand(String command, String description, String category, + List aliases, boolean isAdmin) { + super(command, description, category, aliases, isAdmin); + } - @Override - public void run() { - DiscordCommandSender discordCommandSender = new DiscordCommandSender(user, guild); - String command = String.join(" ", args); - Bukkit.dispatchCommand(discordCommandSender, command); - } - }.runTask(TotalFreedomMod.plugin); + @Override + public MessageBuilder execute(User user, List args, Server guild) { + try { + new BukkitRunnable() { - return new MessageBuilder().addEmbed(success); - } catch (Exception e) { - user.sendMessage(String.valueOf(e)); - return new MessageBuilder().addEmbed(error); - } - } + @Override + public void run() { + DiscordCommandSender discordCommandSender = new DiscordCommandSender(user, + guild); + String command = String.join(" ", args); + Bukkit.dispatchCommand(discordCommandSender, command); + } + }.runTask(TotalFreedomMod.plugin); + + return new MessageBuilder().addEmbed(success); + } catch (Exception e) { + user.sendMessage(String.valueOf(e)); + return new MessageBuilder().addEmbed(error); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/HelpCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/HelpCommand.java index 71fca60..b00a32f 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/HelpCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/HelpCommand.java @@ -1,5 +1,11 @@ package me.StevenLawson.TotalFreedomMod.discord.commands; +import java.awt.Color; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; @@ -9,43 +15,43 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.awt.*; -import java.util.*; -import java.util.List; - public class HelpCommand extends ExecutableDiscordCommand { - public HelpCommand(String command, String description, String category, boolean isAdmin) { - super(command, description, category, isAdmin); - } - @Override - public MessageBuilder execute(User user, List args, Server guild) { - EmbedBuilder embedBuilder = new EmbedBuilder(); - embedBuilder.setColor(Color.GREEN); - embedBuilder.setTitle("Help Command"); - Map> categories = new HashMap<>(); + public HelpCommand(String command, String description, String category, boolean isAdmin) { + super(command, description, category, isAdmin); + } - for (ExecutableDiscordCommand command : DiscordBridge.COMMAND_MANAGER.commands) { - if(!categories.containsKey(command.category)) { - categories.put(command.category, new ArrayList<>(Collections.singletonList(command))); - } else { - List commands = categories.get(command.category); - commands.add(command); - categories.put(command.category, commands); - } - } + @Override + public MessageBuilder execute(User user, List args, Server guild) { + EmbedBuilder embedBuilder = new EmbedBuilder(); + embedBuilder.setColor(Color.GREEN); + embedBuilder.setTitle("Help Command"); + Map> categories = new HashMap<>(); - for (String category : categories.keySet()) { - List commands = categories.get(category); - StringBuilder value = new StringBuilder(); + for (ExecutableDiscordCommand command : DiscordBridge.COMMAND_MANAGER.commands) { + if (!categories.containsKey(command.category)) { + categories.put(command.category, + new ArrayList<>(Collections.singletonList(command))); + } else { + List commands = categories.get(command.category); + commands.add(command); + categories.put(command.category, commands); + } + } - for (ExecutableDiscordCommand command : commands) { - value.append(String.format("**%s%s** - %s%n", MainConfig.getString(ConfigurationEntry.DISCORD_PREFIX), command.command, command.description)); - } + for (String category : categories.keySet()) { + List commands = categories.get(category); + StringBuilder value = new StringBuilder(); - embedBuilder.addField(category, value.toString().trim(), false); - } + for (ExecutableDiscordCommand command : commands) { + value.append(String.format("**%s%s** - %s%n", + MainConfig.getString(ConfigurationEntry.DISCORD_PREFIX), command.command, + command.description)); + } - return new MessageBuilder().addEmbeds(embedBuilder); - } + embedBuilder.addField(category, value.toString().trim(), false); + } + + return new MessageBuilder().addEmbeds(embedBuilder); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/ListCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/ListCommand.java index bfdfb6e..24b5556 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/ListCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/ListCommand.java @@ -1,9 +1,13 @@ package me.StevenLawson.TotalFreedomMod.discord.commands; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; import me.StevenLawson.TotalFreedomMod.discord.command.ExecutableDiscordCommand; +import me.StevenLawson.TotalFreedomMod.manager.VanishManager; import me.StevenLawson.TotalFreedomMod.player.PlayerRank; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -12,46 +16,57 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - public class ListCommand extends ExecutableDiscordCommand { - public ListCommand(String command, String description, String category, List aliases, boolean isAdmin) { - super(command, description, category, aliases, isAdmin); - } - @Override - public MessageBuilder execute(User user, List args, Server guild) { - EmbedBuilder builder = new EmbedBuilder() - .setTitle(String.format("Player List - %s", MainConfig.getString(ConfigurationEntry.SERVER_NAME))) - .setDescription(String.format("There are %s / %s online players", Bukkit.getOnlinePlayers().size(), Bukkit.getMaxPlayers())); + public ListCommand(String command, String description, String category, List aliases, + boolean isAdmin) { + super(command, description, category, aliases, isAdmin); + } - List inGameRanks = new ArrayList<>(); + @Override + public MessageBuilder execute(User user, List args, Server guild) { + EmbedBuilder builder = new EmbedBuilder() + .setTitle(String.format("Player List - %s", + MainConfig.getString(ConfigurationEntry.SERVER_NAME))) + .setDescription( + String.format("There are %s / %s online players", Bukkit.getOnlinePlayers().size(), + VanishManager.getFakeOnlinePlayers())); - for (Player player : Bukkit.getOnlinePlayers()) { - com.earth2me.essentials.User essentialsUser = EssentialsBridge.getEssentialsUser(player.getDisplayName()); + List inGameRanks = new ArrayList<>(); - if(essentialsUser != null) { - if(essentialsUser.isVanished()) continue; - } + for (Player player : Bukkit.getOnlinePlayers()) { + com.earth2me.essentials.User essentialsUser = EssentialsBridge.getEssentialsUser( + player.getDisplayName()); - PlayerRank rank = PlayerRank.fromSender(player); + if (essentialsUser != null) { + if (essentialsUser.isVanished()) { + continue; + } + } - if(!inGameRanks.contains(rank)) inGameRanks.add(rank); - } + if (VanishManager.isVanished(player)) { + continue; + } - Collections.sort(inGameRanks); - Collections.reverse(inGameRanks); + PlayerRank rank = PlayerRank.fromSender(player); - for (PlayerRank inGameRank : inGameRanks) { - List inGame = inGameRank.getInGameUsernames(); + if (!inGameRanks.contains(rank)) { + inGameRanks.add(rank); + } + } - if(inGame.size() > 0) { - builder.addField(String.format("%s (%s)", inGameRank.getPlural(), inGame.size()), String.join(", ", inGame)); - } - } + Collections.sort(inGameRanks); + Collections.reverse(inGameRanks); - return new MessageBuilder().addEmbed(builder); - } + for (PlayerRank inGameRank : inGameRanks) { + List inGame = inGameRank.getInGameUsernames(); + + if (inGame.size() > 0) { + builder.addField(String.format("%s (%s)", inGameRank.getPlural(), inGame.size()), + String.join(", ", inGame)); + } + } + + return new MessageBuilder().addEmbed(builder); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/TPSCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/TPSCommand.java index 31b0694..91223ec 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/TPSCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/TPSCommand.java @@ -1,27 +1,29 @@ package me.StevenLawson.TotalFreedomMod.discord.commands; +import java.util.List; import me.StevenLawson.TotalFreedomMod.Server; import me.StevenLawson.TotalFreedomMod.discord.command.ExecutableDiscordCommand; import org.javacord.api.entity.message.MessageBuilder; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.user.User; -import java.util.List; - public class TPSCommand extends ExecutableDiscordCommand { - public TPSCommand(String command, String description, String category, boolean isAdmin) { - super(command, description, category, isAdmin); - } - @Override - public MessageBuilder execute(User user, List args, org.javacord.api.entity.server.Server guild) { - EmbedBuilder builder = new EmbedBuilder(); - builder.setTitle("Server lag information"); - builder.addField("TPS", String.valueOf(Math.round(Server.getTPS()))); - builder.addField("Uptime", Server.getUptime()); - builder.addField("Maximum Memory", String.format("%s MB", Math.ceil(Server.getMaxMem()))); - builder.addField("Allocated Memory", String.format("%s MB", Math.floor(Server.getTotalMem()))); - builder.addField("Free Memory", String.format("%s MB", Math.ceil(Server.getFreeMem()))); - return new MessageBuilder().addEmbed(builder); - } + public TPSCommand(String command, String description, String category, boolean isAdmin) { + super(command, description, category, isAdmin); + } + + @Override + public MessageBuilder execute(User user, List args, + org.javacord.api.entity.server.Server guild) { + EmbedBuilder builder = new EmbedBuilder(); + builder.setTitle("Server lag information"); + builder.addField("TPS", String.valueOf(Math.round(Server.getTPS()))); + builder.addField("Uptime", Server.getUptime()); + builder.addField("Maximum Memory", String.format("%s MB", Math.ceil(Server.getMaxMem()))); + builder.addField("Allocated Memory", + String.format("%s MB", Math.floor(Server.getTotalMem()))); + builder.addField("Free Memory", String.format("%s MB", Math.ceil(Server.getFreeMem()))); + return new MessageBuilder().addEmbed(builder); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/UptimeCommand.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/UptimeCommand.java index d25e4b3..7adb095 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/UptimeCommand.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/commands/UptimeCommand.java @@ -1,5 +1,9 @@ package me.StevenLawson.TotalFreedomMod.discord.commands; +import java.awt.Color; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.List; import me.StevenLawson.TotalFreedomMod.discord.command.ExecutableDiscordCommand; import me.StevenLawson.TotalFreedomMod.exception.PenisException; import org.javacord.api.entity.message.MessageBuilder; @@ -7,38 +11,34 @@ import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.entity.user.User; -import java.awt.*; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.List; - public class UptimeCommand extends ExecutableDiscordCommand { - public UptimeCommand(String command, String description, String category, boolean isAdmin) { - super(command, description, category, isAdmin); - } - @Override - public MessageBuilder execute(User user, List args, Server guild) { - EmbedBuilder builder = new EmbedBuilder(); - try { - builder.setTitle("VPS Uptime Information") - .setDescription(getSystemUptime()); - } catch (Exception e) { - builder.setTitle("Command error") - .setColor(Color.RED) - .setDescription("Something went wrong"); - } - return new MessageBuilder().addEmbed(builder); - } + public UptimeCommand(String command, String description, String category, boolean isAdmin) { + super(command, description, category, isAdmin); + } - private String getSystemUptime() throws Exception { - Process uptimeProc = Runtime.getRuntime().exec("uptime"); - BufferedReader in = new BufferedReader(new InputStreamReader(uptimeProc.getInputStream())); - String line = in.readLine(); - if (line != null) { - return line; - } else { - throw new PenisException(); - } - } + @Override + public MessageBuilder execute(User user, List args, Server guild) { + EmbedBuilder builder = new EmbedBuilder(); + try { + builder.setTitle("VPS Uptime Information") + .setDescription(getSystemUptime()); + } catch (Exception e) { + builder.setTitle("Command error") + .setColor(Color.RED) + .setDescription("Something went wrong"); + } + return new MessageBuilder().addEmbed(builder); + } + + private String getSystemUptime() throws Exception { + Process uptimeProc = Runtime.getRuntime().exec("uptime"); + BufferedReader in = new BufferedReader(new InputStreamReader(uptimeProc.getInputStream())); + String line = in.readLine(); + if (line != null) { + return line; + } else { + throw new PenisException(); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/sender/DiscordCommandSender.java b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/sender/DiscordCommandSender.java index 24fa839..31d22ca 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/discord/sender/DiscordCommandSender.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/discord/sender/DiscordCommandSender.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.discord.sender; +import java.util.Set; import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; import org.bukkit.Bukkit; import org.bukkit.Server; @@ -11,108 +12,107 @@ import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.Plugin; import org.javacord.api.entity.user.User; -import java.util.Set; - public class DiscordCommandSender implements CommandSender { - private final User user; - private final org.javacord.api.entity.server.Server server; - protected final PermissibleBase perm; - public DiscordCommandSender(User user, org.javacord.api.entity.server.Server server) { - this.user = user; - this.server = server; - this.perm = new PermissibleBase(this); - } + protected final PermissibleBase perm; + private final User user; + private final org.javacord.api.entity.server.Server server; - @Override - public void sendMessage(String s) { - user.sendMessage(DiscordBridge.sanitizeMessage(s)); - } + public DiscordCommandSender(User user, org.javacord.api.entity.server.Server server) { + this.user = user; + this.server = server; + this.perm = new PermissibleBase(this); + } - @Override - public void sendMessage(String[] strings) { - user.sendMessage(DiscordBridge.sanitizeMessage(String.join("\n", strings))); - } + @Override + public void sendMessage(String s) { + user.sendMessage(DiscordBridge.sanitizeMessage(s)); + } - @Override - public Server getServer() { - return Bukkit.getServer(); - } + @Override + public void sendMessage(String[] strings) { + user.sendMessage(DiscordBridge.sanitizeMessage(String.join("\n", strings))); + } - @Override - public String getName() { - return user.getDiscriminatedName(); - } + @Override + public Server getServer() { + return Bukkit.getServer(); + } - @Override - public boolean isPermissionSet(String s) { - return this.perm.isPermissionSet(s); - } + @Override + public String getName() { + return user.getDiscriminatedName(); + } - @Override - public boolean isPermissionSet(Permission permission) { - return this.perm.isPermissionSet(permission); - } + @Override + public boolean isPermissionSet(String s) { + return this.perm.isPermissionSet(s); + } - @Override - public boolean hasPermission(String s) { - return this.perm.hasPermission(s); - } + @Override + public boolean isPermissionSet(Permission permission) { + return this.perm.isPermissionSet(permission); + } - @Override - public boolean hasPermission(Permission permission) { - return this.perm.hasPermission(permission); - } + @Override + public boolean hasPermission(String s) { + return this.perm.hasPermission(s); + } - @Override - public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b) { - return this.perm.addAttachment(plugin, s, b); - } + @Override + public boolean hasPermission(Permission permission) { + return this.perm.hasPermission(permission); + } - @Override - public PermissionAttachment addAttachment(Plugin plugin) { - return this.perm.addAttachment(plugin); - } + @Override + public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b) { + return this.perm.addAttachment(plugin, s, b); + } - @Override - public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b, int i) { - return this.perm.addAttachment(plugin, s, b, i); - } + @Override + public PermissionAttachment addAttachment(Plugin plugin) { + return this.perm.addAttachment(plugin); + } - @Override - public PermissionAttachment addAttachment(Plugin plugin, int i) { - return this.perm.addAttachment(plugin, i); - } + @Override + public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b, int i) { + return this.perm.addAttachment(plugin, s, b, i); + } - @Override - public void removeAttachment(PermissionAttachment permissionAttachment) { - this.perm.removeAttachment(permissionAttachment); - } + @Override + public PermissionAttachment addAttachment(Plugin plugin, int i) { + return this.perm.addAttachment(plugin, i); + } - @Override - public void recalculatePermissions() { - this.perm.recalculatePermissions(); - } + @Override + public void removeAttachment(PermissionAttachment permissionAttachment) { + this.perm.removeAttachment(permissionAttachment); + } - @Override - public Set getEffectivePermissions() { - return this.perm.getEffectivePermissions(); - } + @Override + public void recalculatePermissions() { + this.perm.recalculatePermissions(); + } - @Override - public boolean isOp() { - return true; - } + @Override + public Set getEffectivePermissions() { + return this.perm.getEffectivePermissions(); + } - @Override - public void setOp(boolean b) { - } + @Override + public boolean isOp() { + return true; + } - public User getUser() { - return user; - } + @Override + public void setOp(boolean b) { + } - public org.javacord.api.entity.server.Server getDiscordServer() { - return server; - } + public User getUser() { + return user; + } + + public org.javacord.api.entity.server.Server getDiscordServer() { + return server; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/exception/PenisException.java b/src/main/java/me/StevenLawson/TotalFreedomMod/exception/PenisException.java index a53b061..5013f25 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/exception/PenisException.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/exception/PenisException.java @@ -1,11 +1,12 @@ package me.StevenLawson.TotalFreedomMod.exception; public class PenisException extends Exception { - public PenisException() { - } + public PenisException() { - public PenisException(String name) { - super(name); - } + } + + public PenisException(String name) { + super(name); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/fun/JumpPads.java b/src/main/java/me/StevenLawson/TotalFreedomMod/fun/JumpPads.java index 2146d10..857bb59 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/fun/JumpPads.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/fun/JumpPads.java @@ -8,126 +8,101 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.util.Vector; -public class JumpPads -{ - public static final Material BLOCK_ID; - public static final double DAMPING_COEFFICIENT; - public static final Map PUSH_MAP; - private static JumpPadMode mode; - private static double strength; +public class JumpPads { - static - { - BLOCK_ID = Material.WOOL; - DAMPING_COEFFICIENT = 0.8; - PUSH_MAP = new HashMap(); - mode = JumpPadMode.MADGEEK; - strength = 0.4; - } + public static final Material BLOCK_ID; + public static final double DAMPING_COEFFICIENT; + public static final Map PUSH_MAP; + private static JumpPadMode mode; + private static double strength; - public static void PlayerMoveEvent(PlayerMoveEvent event) - { - if (mode == JumpPadMode.OFF) - { - return; - } + static { + BLOCK_ID = Material.WOOL; + DAMPING_COEFFICIENT = 0.8; + PUSH_MAP = new HashMap(); + mode = JumpPadMode.MADGEEK; + strength = 0.4; + } - final Player player = event.getPlayer(); - final Block block = event.getTo().getBlock(); - final Vector velocity = player.getVelocity().clone(); + public static void PlayerMoveEvent(PlayerMoveEvent event) { + if (mode == JumpPadMode.OFF) { + return; + } - if (mode == JumpPadMode.MADGEEK) - { - Boolean canPush = PUSH_MAP.get(player); - if (canPush == null) - { - canPush = true; - } - if (block.getRelative(0, -1, 0).getType() == BLOCK_ID) - { - if (canPush) - { - velocity.multiply(strength + 0.85).multiply(-1.0); - } - canPush = false; - } - else - { - canPush = true; - } - PUSH_MAP.put(player, canPush); - } - else - { - if (block.getRelative(0, -1, 0).getType() == BLOCK_ID) - { - velocity.add(new Vector(0.0, strength, 0.0)); - } + final Player player = event.getPlayer(); + final Block block = event.getTo().getBlock(); + final Vector velocity = player.getVelocity().clone(); - if (mode == JumpPadMode.NORMAL_AND_SIDEWAYS) - { - if (block.getRelative(1, 0, 0).getType() == BLOCK_ID) - { - velocity.add(new Vector(-DAMPING_COEFFICIENT * strength, 0.0, 0.0)); - } + if (mode == JumpPadMode.MADGEEK) { + Boolean canPush = PUSH_MAP.get(player); + if (canPush == null) { + canPush = true; + } + if (block.getRelative(0, -1, 0).getType() == BLOCK_ID) { + if (canPush) { + velocity.multiply(strength + 0.85).multiply(-1.0); + } + canPush = false; + } else { + canPush = true; + } + PUSH_MAP.put(player, canPush); + } else { + if (block.getRelative(0, -1, 0).getType() == BLOCK_ID) { + velocity.add(new Vector(0.0, strength, 0.0)); + } - if (block.getRelative(-1, 0, 0).getType() == BLOCK_ID) - { - velocity.add(new Vector(DAMPING_COEFFICIENT * strength, 0.0, 0.0)); - } + if (mode == JumpPadMode.NORMAL_AND_SIDEWAYS) { + if (block.getRelative(1, 0, 0).getType() == BLOCK_ID) { + velocity.add(new Vector(-DAMPING_COEFFICIENT * strength, 0.0, 0.0)); + } - if (block.getRelative(0, 0, 1).getType() == BLOCK_ID) - { - velocity.add(new Vector(0.0, 0.0, -DAMPING_COEFFICIENT * strength)); - } + if (block.getRelative(-1, 0, 0).getType() == BLOCK_ID) { + velocity.add(new Vector(DAMPING_COEFFICIENT * strength, 0.0, 0.0)); + } - if (block.getRelative(0, 0, -1).getType() == BLOCK_ID) - { - velocity.add(new Vector(0.0, 0.0, DAMPING_COEFFICIENT * strength)); - } - } - } + if (block.getRelative(0, 0, 1).getType() == BLOCK_ID) { + velocity.add(new Vector(0.0, 0.0, -DAMPING_COEFFICIENT * strength)); + } - if (!player.getVelocity().equals(velocity)) - { - player.setFallDistance(0.0f); - player.setVelocity(velocity); - } - } + if (block.getRelative(0, 0, -1).getType() == BLOCK_ID) { + velocity.add(new Vector(0.0, 0.0, DAMPING_COEFFICIENT * strength)); + } + } + } - public static JumpPadMode getMode() - { - return mode; - } + if (!player.getVelocity().equals(velocity)) { + player.setFallDistance(0.0f); + player.setVelocity(velocity); + } + } - public static void setMode(JumpPadMode mode) - { - JumpPads.mode = mode; - } + public static JumpPadMode getMode() { + return mode; + } - public static double getStrength() - { - return strength; - } + public static void setMode(JumpPadMode mode) { + JumpPads.mode = mode; + } - public static void setStrength(double strength) - { - JumpPads.strength = strength; - } + public static double getStrength() { + return strength; + } - public enum JumpPadMode - { - OFF(false), NORMAL(true), NORMAL_AND_SIDEWAYS(true), MADGEEK(true); - private final boolean on; + public static void setStrength(double strength) { + JumpPads.strength = strength; + } - JumpPadMode(boolean on) - { - this.on = on; - } + public enum JumpPadMode { + OFF(false), NORMAL(true), NORMAL_AND_SIDEWAYS(true), MADGEEK(true); + private final boolean on; - public boolean isOn() - { - return on; - } - } + JumpPadMode(boolean on) { + this.on = on; + } + + public boolean isOn() { + return on; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/gamerule/GameRuleHandler.java b/src/main/java/me/StevenLawson/TotalFreedomMod/gamerule/GameRuleHandler.java index 7c89370..632b75e 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/gamerule/GameRuleHandler.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/gamerule/GameRuleHandler.java @@ -4,117 +4,99 @@ import java.util.EnumMap; import java.util.Iterator; import java.util.List; import java.util.Map; - import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Bukkit; import org.bukkit.World; -public class GameRuleHandler -{ - private static final EnumMap GAME_RULES = new EnumMap(TFM_GameRule.class); +public class GameRuleHandler { - static - { - for (TFM_GameRule gameRule : TFM_GameRule.values()) - { - GAME_RULES.put(gameRule, gameRule.getDefaultValue()); - } - } + private static final EnumMap GAME_RULES = new EnumMap( + TFM_GameRule.class); - private GameRuleHandler() - { - throw new AssertionError(); - } + static { + for (TFM_GameRule gameRule : TFM_GameRule.values()) { + GAME_RULES.put(gameRule, gameRule.getDefaultValue()); + } + } - public static void setGameRule(TFM_GameRule gameRule, boolean value) - { - setGameRule(gameRule, value, true); - } + private GameRuleHandler() { + throw new AssertionError(); + } - public static void setGameRule(TFM_GameRule gameRule, boolean value, boolean doCommit) - { - GAME_RULES.put(gameRule, TFM_GameRule_Value.fromBoolean(value)); - if (doCommit) - { - commitGameRules(); - } - } + public static void setGameRule(TFM_GameRule gameRule, boolean value) { + setGameRule(gameRule, value, true); + } - public static void commitGameRules() - { - List worlds = Bukkit.getWorlds(); - Iterator> it = GAME_RULES.entrySet().iterator(); - while (it.hasNext()) - { - Map.Entry gameRuleEntry = it.next(); - String gameRuleName = gameRuleEntry.getKey().getGameRuleName(); - String gameRuleValue = gameRuleEntry.getValue().toString(); - for (World world : worlds) - { - world.setGameRuleValue(gameRuleName, gameRuleValue); - if (gameRuleEntry.getKey() == TFM_GameRule.DO_DAYLIGHT_CYCLE && !gameRuleEntry.getValue().toBoolean()) - { - Utilities.setWorldTime(world, 6000L); - } - } - } - } + public static void setGameRule(TFM_GameRule gameRule, boolean value, boolean doCommit) { + GAME_RULES.put(gameRule, TFM_GameRule_Value.fromBoolean(value)); + if (doCommit) { + commitGameRules(); + } + } - public enum TFM_GameRule - { - DO_FIRE_TICK("doFireTick", TFM_GameRule_Value.TRUE), - MOB_GRIEFING("mobGriefing", TFM_GameRule_Value.TRUE), - KEEP_INVENTORY("keepInventory", TFM_GameRule_Value.TRUE), - DO_MOB_SPAWNING("doMobSpawning", TFM_GameRule_Value.TRUE), - DO_MOB_LOOT("doMobLoot", TFM_GameRule_Value.TRUE), - DO_TILE_DROPS("doTileDrops", TFM_GameRule_Value.TRUE), - COMMAND_BLOCK_OUTPUT("commandBlockOutput", TFM_GameRule_Value.TRUE), - NATURAL_REGENERATION("naturalRegeneration", TFM_GameRule_Value.TRUE), - DO_DAYLIGHT_CYCLE("doDaylightCycle", TFM_GameRule_Value.TRUE); - private final String gameRuleName; - private final TFM_GameRule_Value defaultValue; + public static void commitGameRules() { + List worlds = Bukkit.getWorlds(); + Iterator> it = GAME_RULES.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry gameRuleEntry = it.next(); + String gameRuleName = gameRuleEntry.getKey().getGameRuleName(); + String gameRuleValue = gameRuleEntry.getValue().toString(); + for (World world : worlds) { + world.setGameRuleValue(gameRuleName, gameRuleValue); + if (gameRuleEntry.getKey() == TFM_GameRule.DO_DAYLIGHT_CYCLE + && !gameRuleEntry.getValue().toBoolean()) { + Utilities.setWorldTime(world, 6000L); + } + } + } + } - TFM_GameRule(String gameRuleName, TFM_GameRule_Value defaultValue) - { - this.gameRuleName = gameRuleName; - this.defaultValue = defaultValue; - } + public enum TFM_GameRule { + DO_FIRE_TICK("doFireTick", TFM_GameRule_Value.TRUE), + MOB_GRIEFING("mobGriefing", TFM_GameRule_Value.TRUE), + KEEP_INVENTORY("keepInventory", TFM_GameRule_Value.TRUE), + DO_MOB_SPAWNING("doMobSpawning", TFM_GameRule_Value.TRUE), + DO_MOB_LOOT("doMobLoot", TFM_GameRule_Value.TRUE), + DO_TILE_DROPS("doTileDrops", TFM_GameRule_Value.TRUE), + COMMAND_BLOCK_OUTPUT("commandBlockOutput", TFM_GameRule_Value.TRUE), + NATURAL_REGENERATION("naturalRegeneration", TFM_GameRule_Value.TRUE), + DO_DAYLIGHT_CYCLE("doDaylightCycle", TFM_GameRule_Value.TRUE); + private final String gameRuleName; + private final TFM_GameRule_Value defaultValue; - public String getGameRuleName() - { - return gameRuleName; - } + TFM_GameRule(String gameRuleName, TFM_GameRule_Value defaultValue) { + this.gameRuleName = gameRuleName; + this.defaultValue = defaultValue; + } - public TFM_GameRule_Value getDefaultValue() - { - return defaultValue; - } - } + public String getGameRuleName() { + return gameRuleName; + } - public enum TFM_GameRule_Value - { - TRUE("true"), FALSE("false"); - private final String value; + public TFM_GameRule_Value getDefaultValue() { + return defaultValue; + } + } - TFM_GameRule_Value(String value) - { - this.value = value; - } + public enum TFM_GameRule_Value { + TRUE("true"), FALSE("false"); + private final String value; - @Override - public String toString() - { - return this.value; - } + TFM_GameRule_Value(String value) { + this.value = value; + } - public boolean toBoolean() - { - return (this.value.equals(TFM_GameRule_Value.TRUE.value)); - } + public static TFM_GameRule_Value fromBoolean(boolean in) { + return (in ? TFM_GameRule_Value.TRUE : TFM_GameRule_Value.FALSE); + } - public static TFM_GameRule_Value fromBoolean(boolean in) - { - return (in ? TFM_GameRule_Value.TRUE : TFM_GameRule_Value.FALSE); - } - } + @Override + public String toString() { + return this.value; + } + + public boolean toBoolean() { + return (this.value.equals(TFM_GameRule_Value.TRUE.value)); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTMLGenerationTools.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTMLGenerationTools.java index 4f93c34..96008be 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTMLGenerationTools.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTMLGenerationTools.java @@ -1,58 +1,54 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; + import java.util.Collection; import java.util.Iterator; import java.util.Map; -import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; -public class HTMLGenerationTools -{ - private HTMLGenerationTools() - { - throw new AssertionError(); - } +public class HTMLGenerationTools { - public static String paragraph(String data) - { - return "

" + escapeHtml4(data) + "

\r\n"; - } + private HTMLGenerationTools() { + throw new AssertionError(); + } - public static String heading(String data, int level) - { - return "" + escapeHtml4(data) + "\r\n"; - } + public static String paragraph(String data) { + return "

" + escapeHtml4(data) + "

\r\n"; + } - public static String list(Map map) - { - StringBuilder output = new StringBuilder(); + public static String heading(String data, int level) { + return "" + escapeHtml4(data) + "\r\n"; + } - output.append("
    \r\n"); + public static String list(Map map) { + StringBuilder output = new StringBuilder(); - Iterator> it = map.entrySet().iterator(); - while (it.hasNext()) - { - Map.Entry entry = it.next(); - output.append("
  • ").append(escapeHtml4(entry.getKey().toString() + " = " + entry.getValue().toString())).append("
  • \r\n"); - } + output.append("
      \r\n"); - output.append("
    \r\n"); + Iterator> it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + output.append("
  • ").append( + escapeHtml4(entry.getKey().toString() + " = " + entry.getValue().toString())) + .append("
  • \r\n"); + } - return output.toString(); - } + output.append("
\r\n"); - public static String list(Collection list) - { - StringBuilder output = new StringBuilder(); + return output.toString(); + } - output.append("
    \r\n"); + public static String list(Collection list) { + StringBuilder output = new StringBuilder(); - for (T entry : list) - { - output.append("
  • ").append(escapeHtml4(entry.toString())).append("
  • \r\n"); - } + output.append("
      \r\n"); - output.append("
    \r\n"); + for (T entry : list) { + output.append("
  • ").append(escapeHtml4(entry.toString())).append("
  • \r\n"); + } - return output.toString(); - } + output.append("
\r\n"); + + return output.toString(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDFileModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDFileModule.java index 9448408..e8a17e5 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDFileModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDFileModule.java @@ -1,367 +1,314 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.StringTokenizer; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.httpd.NanoHTTPD.Response; import org.apache.commons.lang3.StringUtils; -import java.io.*; -import java.net.URLEncoder; -import java.util.*; - /* * This class was adapted from https://github.com/NanoHttpd/nanohttpd/blob/master/webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java */ public class HTTPDFileModule extends HTTPDModule { - private final File rootDir = new File(ConfigurationEntry.HTTPD_PUBLIC_FOLDER.getString()); - public static final Map MIME_TYPES = new HashMap(); - static { - MIME_TYPES.put("css", "text/css"); - MIME_TYPES.put("htm", "text/html"); - MIME_TYPES.put("html", "text/html"); - MIME_TYPES.put("xml", "text/xml"); - MIME_TYPES.put("java", "text/x-java-source, text/java"); - MIME_TYPES.put("txt", "text/plain"); - MIME_TYPES.put("asc", "text/plain"); - MIME_TYPES.put("yml", "text/yaml"); - MIME_TYPES.put("gif", "image/gif"); - MIME_TYPES.put("jpg", "image/jpeg"); - MIME_TYPES.put("jpeg", "image/jpeg"); - MIME_TYPES.put("png", "image/png"); - MIME_TYPES.put("mp3", "audio/mpeg"); - MIME_TYPES.put("m3u", "audio/mpeg-url"); - MIME_TYPES.put("mp4", "video/mp4"); - MIME_TYPES.put("ogv", "video/ogg"); - MIME_TYPES.put("flv", "video/x-flv"); - MIME_TYPES.put("mov", "video/quicktime"); - MIME_TYPES.put("swf", "application/x-shockwave-flash"); - MIME_TYPES.put("js", "application/javascript"); - MIME_TYPES.put("pdf", "application/pdf"); - MIME_TYPES.put("doc", "application/msword"); - MIME_TYPES.put("ogg", "application/x-ogg"); - MIME_TYPES.put("zip", "application/octet-stream"); - MIME_TYPES.put("exe", "application/octet-stream"); - MIME_TYPES.put("class", "application/octet-stream"); - } + public static final Map MIME_TYPES = new HashMap(); - public HTTPDFileModule(NanoHTTPD.HTTPSession session) { - super(session); - } + static { + MIME_TYPES.put("css", "text/css"); + MIME_TYPES.put("htm", "text/html"); + MIME_TYPES.put("html", "text/html"); + MIME_TYPES.put("xml", "text/xml"); + MIME_TYPES.put("java", "text/x-java-source, text/java"); + MIME_TYPES.put("txt", "text/plain"); + MIME_TYPES.put("asc", "text/plain"); + MIME_TYPES.put("yml", "text/yaml"); + MIME_TYPES.put("gif", "image/gif"); + MIME_TYPES.put("jpg", "image/jpeg"); + MIME_TYPES.put("jpeg", "image/jpeg"); + MIME_TYPES.put("png", "image/png"); + MIME_TYPES.put("mp3", "audio/mpeg"); + MIME_TYPES.put("m3u", "audio/mpeg-url"); + MIME_TYPES.put("mp4", "video/mp4"); + MIME_TYPES.put("ogv", "video/ogg"); + MIME_TYPES.put("flv", "video/x-flv"); + MIME_TYPES.put("mov", "video/quicktime"); + MIME_TYPES.put("swf", "application/x-shockwave-flash"); + MIME_TYPES.put("js", "application/javascript"); + MIME_TYPES.put("pdf", "application/pdf"); + MIME_TYPES.put("doc", "application/msword"); + MIME_TYPES.put("ogg", "application/x-ogg"); + MIME_TYPES.put("zip", "application/octet-stream"); + MIME_TYPES.put("exe", "application/octet-stream"); + MIME_TYPES.put("class", "application/octet-stream"); + } - private File getRootDir() - { - return rootDir; - } + private final File rootDir = new File(ConfigurationEntry.HTTPD_PUBLIC_FOLDER.getString()); - private String encodeUri(String uri) - { - String newUri = ""; - StringTokenizer st = new StringTokenizer(uri, "/ ", true); - while (st.hasMoreTokens()) - { - String tok = st.nextToken(); - if (tok.equals("/")) - { - newUri += "/"; - } - else if (tok.equals(" ")) - { - newUri += "%20"; - } - else - { - try - { - newUri += URLEncoder.encode(tok, "UTF-8"); - } - catch (UnsupportedEncodingException ignored) - { - } - } - } - return newUri; - } + public HTTPDFileModule(NanoHTTPD.HTTPSession session) { + super(session); + } - public Response serveFile(String uri, Map params, File homeDir) - { - Response res = null; + private File getRootDir() { + return rootDir; + } - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) - { - res = new Response(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); - } + private String encodeUri(String uri) { + String newUri = ""; + StringTokenizer st = new StringTokenizer(uri, "/ ", true); + while (st.hasMoreTokens()) { + String tok = st.nextToken(); + if (tok.equals("/")) { + newUri += "/"; + } else if (tok.equals(" ")) { + newUri += "%20"; + } else { + try { + newUri += URLEncoder.encode(tok, "UTF-8"); + } catch (UnsupportedEncodingException ignored) { + } + } + } + return newUri; + } - if (res == null) - { - // Remove URL arguments - uri = uri.trim().replace(File.separatorChar, '/'); - if (uri.indexOf('?') >= 0) - { - uri = uri.substring(0, uri.indexOf('?')); - } + public Response serveFile(String uri, Map params, File homeDir) { + Response res = null; - // Prohibit getting out of current directory - if (uri.startsWith("src/main") || uri.endsWith("src/main") || uri.contains("../")) - { - res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: Won't serve ../ for security reasons."); - } - } + // Make sure we won't die of an exception later + if (!homeDir.isDirectory()) { + res = new Response(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, + "INTERNAL ERRROR: serveFile(): given homeDir is not a directory."); + } - File f = new File(homeDir, uri); - if (res == null && !f.exists()) - { - res = new Response(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404, file not found."); - } + if (res == null) { + // Remove URL arguments + uri = uri.trim().replace(File.separatorChar, '/'); + if (uri.indexOf('?') >= 0) { + uri = uri.substring(0, uri.indexOf('?')); + } - // List the directory, if necessary - if (res == null && f.isDirectory()) - { - // Browsers get confused without '/' after the - // directory, send a redirect. - if (!uri.endsWith("/")) - { - uri += "/"; - res = new Response(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, "Redirected: " + uri - + ""); - res.addHeader("Location", uri); - } + // Prohibit getting out of current directory + if (uri.startsWith("src/main") || uri.endsWith("src/main") || uri.contains("../")) { + res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, + "FORBIDDEN: Won't serve ../ for security reasons."); + } + } - if (res == null) - { - // First try index.html and index.htm - if (new File(f, "index.html").exists()) - { - f = new File(homeDir, uri + "/index.html"); - } - else if (new File(f, "index.htm").exists()) - { - f = new File(homeDir, uri + "/index.htm"); - } - else if (f.canRead()) - { - // No index file, list the directory if it is readable - res = new Response(listDirectory(uri, f)); - } - else - { - res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: No directory listing."); - } - } - } + File f = new File(homeDir, uri); + if (res == null && !f.exists()) { + res = new Response(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, + "Error 404, file not found."); + } - try - { - if (res == null) - { - // Get MIME type from file name extension, if possible - String mime = null; - int dot = f.getCanonicalPath().lastIndexOf('.'); - if (dot >= 0) - { - mime = MIME_TYPES.get(f.getCanonicalPath().substring(dot + 1).toLowerCase()); - } - if (mime == null) - { - mime = HTTPDManager.MIME_DEFAULT_BINARY; - } + // List the directory, if necessary + if (res == null && f.isDirectory()) { + // Browsers get confused without '/' after the + // directory, send a redirect. + if (!uri.endsWith("/")) { + uri += "/"; + res = new Response(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, + "Redirected: " + uri + + ""); + res.addHeader("Location", uri); + } - // Calculate etag - String etag = Integer.toHexString((f.getAbsolutePath() + f.lastModified() + "" + f.length()).hashCode()); + if (res == null) { + // First try index.html and index.htm + if (new File(f, "index.html").exists()) { + f = new File(homeDir, uri + "/index.html"); + } else if (new File(f, "index.htm").exists()) { + f = new File(homeDir, uri + "/index.htm"); + } else if (f.canRead()) { + // No index file, list the directory if it is readable + res = new Response(listDirectory(uri, f)); + } else { + res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, + "FORBIDDEN: No directory listing."); + } + } + } - final long fileLen = f.length(); + try { + if (res == null) { + // Get MIME type from file name extension, if possible + String mime = null; + int dot = f.getCanonicalPath().lastIndexOf('.'); + if (dot >= 0) { + mime = MIME_TYPES.get(f.getCanonicalPath().substring(dot + 1).toLowerCase()); + } + if (mime == null) { + mime = HTTPDManager.MIME_DEFAULT_BINARY; + } - long startFrom = 0; - long endAt = -1; - final String range = params.get("range"); - if (range != null) - { - final String[] rangeParams = StringUtils.split(range, "="); - if (rangeParams.length >= 2) - { - if ("bytes".equalsIgnoreCase(rangeParams[0])) - { - try - { - int minus = rangeParams[1].indexOf('-'); - if (minus > 0) - { - startFrom = Long.parseLong(rangeParams[1].substring(0, minus)); - endAt = Long.parseLong(rangeParams[1].substring(minus + 1)); - } - } - catch (NumberFormatException ignored) - { - } - } - else if ("tail".equalsIgnoreCase(rangeParams[0])) - { - try - { - final long tailLen = Long.parseLong(rangeParams[1]); - if (tailLen < fileLen) - { - startFrom = fileLen - tailLen - 2; - if (startFrom < 0) - { - startFrom = 0; - } - } - } - catch (NumberFormatException ignored) - { - } - } - } - } + // Calculate etag + String etag = Integer.toHexString( + (f.getAbsolutePath() + f.lastModified() + "" + f.length()).hashCode()); - // Change return code and add Content-Range header when skipping is requested - if (range != null && startFrom >= 0) - { - if (startFrom >= fileLen) - { - res = new Response(Response.Status.RANGE_NOT_SATISFIABLE, NanoHTTPD.MIME_PLAINTEXT, ""); - res.addHeader("Content-Range", "bytes 0-0/" + fileLen); - res.addHeader("ETag", etag); - } - else - { - if (endAt < 0) - { - endAt = fileLen - 1; - } - long newLen = endAt - startFrom + 1; - if (newLen < 0) - { - newLen = 0; - } + final long fileLen = f.length(); - final long dataLen = newLen; - FileInputStream fis = new FileInputStream(f) - { - @Override - public int available() throws IOException - { - return (int) dataLen; - } - }; - fis.skip(startFrom); + long startFrom = 0; + long endAt = -1; + final String range = params.get("range"); + if (range != null) { + final String[] rangeParams = StringUtils.split(range, "="); + if (rangeParams.length >= 2) { + if ("bytes".equalsIgnoreCase(rangeParams[0])) { + try { + int minus = rangeParams[1].indexOf('-'); + if (minus > 0) { + startFrom = Long.parseLong(rangeParams[1].substring(0, minus)); + endAt = Long.parseLong(rangeParams[1].substring(minus + 1)); + } + } catch (NumberFormatException ignored) { + } + } else if ("tail".equalsIgnoreCase(rangeParams[0])) { + try { + final long tailLen = Long.parseLong(rangeParams[1]); + if (tailLen < fileLen) { + startFrom = fileLen - tailLen - 2; + if (startFrom < 0) { + startFrom = 0; + } + } + } catch (NumberFormatException ignored) { + } + } + } + } - res = new Response(Response.Status.PARTIAL_CONTENT, mime, fis); - res.addHeader("Content-Length", "" + dataLen); - res.addHeader("Content-Range", "bytes " + startFrom + "-" + endAt + "/" + fileLen); - res.addHeader("ETag", etag); - } - } - else - { - res = new Response(Response.Status.OK, mime, new FileInputStream(f)); - res.addHeader("Content-Length", "" + fileLen); - res.addHeader("ETag", etag); - } - } - } - catch (IOException ioe) - { - res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed."); - } + // Change return code and add Content-Range header when skipping is requested + if (range != null && startFrom >= 0) { + if (startFrom >= fileLen) { + res = new Response(Response.Status.RANGE_NOT_SATISFIABLE, + NanoHTTPD.MIME_PLAINTEXT, ""); + res.addHeader("Content-Range", "bytes 0-0/" + fileLen); + res.addHeader("ETag", etag); + } else { + if (endAt < 0) { + endAt = fileLen - 1; + } + long newLen = endAt - startFrom + 1; + if (newLen < 0) { + newLen = 0; + } - res.addHeader("Accept-Ranges", "bytes"); // Announce that the file server accepts partial content requestes - return res; - } + final long dataLen = newLen; + FileInputStream fis = new FileInputStream(f) { + @Override + public int available() throws IOException { + return (int) dataLen; + } + }; + fis.skip(startFrom); - private String listDirectory(String uri, File f) - { - String heading = "Directory " + uri; - String msg = "" + heading + "" - + "

" + heading + "

"; + res = new Response(Response.Status.PARTIAL_CONTENT, mime, fis); + res.addHeader("Content-Length", "" + dataLen); + res.addHeader("Content-Range", + "bytes " + startFrom + "-" + endAt + "/" + fileLen); + res.addHeader("ETag", etag); + } + } else { + res = new Response(Response.Status.OK, mime, new FileInputStream(f)); + res.addHeader("Content-Length", "" + fileLen); + res.addHeader("ETag", etag); + } + } + } catch (IOException ioe) { + res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, + "FORBIDDEN: Reading file failed."); + } - String up = null; - if (uri.length() > 1) - { - String u = uri.substring(0, uri.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) - { - up = uri.substring(0, slash + 1); - } - } + res.addHeader("Accept-Ranges", + "bytes"); // Announce that the file server accepts partial content requestes + return res; + } - List _files = Arrays.asList(f.list(new FilenameFilter() - { - @Override - public boolean accept(File dir, String name) - { - return new File(dir, name).isFile(); - } - })); - Collections.sort(_files); - List directories = Arrays.asList(f.list(new FilenameFilter() - { - @Override - public boolean accept(File dir, String name) - { - return new File(dir, name).isDirectory(); - } - })); - Collections.sort(directories); - if (up != null || directories.size() + _files.size() > 0) - { - msg += "
    "; - if (up != null || directories.size() > 0) - { - msg += "
    "; - if (up != null) - { - msg += "
  • ..
  • "; - } - for (int i = 0; i < directories.size(); i++) - { - String dir = directories.get(i) + "/"; - msg += "
  • " + dir + "
  • "; - } - msg += "
    "; - } - if (_files.size() > 0) - { - msg += "
    "; - for (int i = 0; i < _files.size(); i++) - { - String file = _files.get(i); + private String listDirectory(String uri, File f) { + String heading = "Directory " + uri; + String msg = "" + heading + "" + + "

    " + heading + "

    "; - msg += "
  • " + file + ""; - File curFile = new File(f, file); - long len = curFile.length(); - msg += " ("; - if (len < 1024) - { - msg += len + " bytes"; - } - else if (len < 1024 * 1024) - { - msg += len / 1024 + "." + (len % 1024 / 10 % 100) + " KB"; - } - else - { - msg += len / (1024 * 1024) + "." + len % (1024 * 1024) / 10 % 100 + " MB"; - } - msg += ")
  • "; - } - msg += "
    "; - } - msg += "
"; - } - msg += ""; - return msg; - } + String up = null; + if (uri.length() > 1) { + String u = uri.substring(0, uri.length() - 1); + int slash = u.lastIndexOf('/'); + if (slash >= 0 && slash < u.length()) { + up = uri.substring(0, slash + 1); + } + } - @Override - public Response getResponse() - { - return serveFile(uri, params, getRootDir()); - } + List _files = Arrays.asList(f.list(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return new File(dir, name).isFile(); + } + })); + Collections.sort(_files); + List directories = Arrays.asList(f.list(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return new File(dir, name).isDirectory(); + } + })); + Collections.sort(directories); + if (up != null || directories.size() + _files.size() > 0) { + msg += "
    "; + if (up != null || directories.size() > 0) { + msg += "
    "; + if (up != null) { + msg += "
  • ..
  • "; + } + for (int i = 0; i < directories.size(); i++) { + String dir = directories.get(i) + "/"; + msg += "
  • " + dir + "
  • "; + } + msg += "
    "; + } + if (_files.size() > 0) { + msg += "
    "; + for (int i = 0; i < _files.size(); i++) { + String file = _files.get(i); + + msg += "
  • " + + file + ""; + File curFile = new File(f, file); + long len = curFile.length(); + msg += " ("; + if (len < 1024) { + msg += len + " bytes"; + } else if (len < 1024 * 1024) { + msg += len / 1024 + "." + (len % 1024 / 10 % 100) + " KB"; + } else { + msg += len / (1024 * 1024) + "." + len % (1024 * 1024) / 10 % 100 + " MB"; + } + msg += ")
  • "; + } + msg += "
    "; + } + msg += "
"; + } + msg += ""; + return msg; + } + + @Override + public Response getResponse() { + return serveFile(uri, params, getRootDir()); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDHelpModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDHelpModule.java index 74721c5..582302d 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDHelpModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDHelpModule.java @@ -1,5 +1,16 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.heading; +import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.paragraph; +import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.lang3.StringUtils; import org.bukkit.Bukkit; @@ -7,114 +18,103 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.PluginIdentifiableCommand; -import java.util.*; - -import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.heading; -import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.paragraph; -import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; - public class HTTPDHelpModule extends HTTPDModule { - public HTTPDHelpModule(NanoHTTPD.HTTPSession session) { - super(session); - } - @Override - public String getBody() { - StringBuilder responseBody = new StringBuilder(); + public HTTPDHelpModule(NanoHTTPD.HTTPSession session) { + super(session); + } - CommandMap commandMap = Utilities.getField(Bukkit.getServer().getPluginManager(), "commandMap"); - HashMap knownCommands; - if (commandMap == null - || (knownCommands = Utilities.getField(commandMap, "knownCommands")) == null) { - return paragraph("Error loading commands."); - } + private static String buildDescription(Command command) { + StringBuilder sb = new StringBuilder(); - responseBody - .append(heading("Command Help", 1)) - .append(paragraph( - "This page is an automatically generated listing of all plugin commands that are currently live on the server. " - + "Please note that it does not include vanilla server commands.")); + sb.append( + "
  • {$CMD_NAME} - Usage: {$CMD_USAGE}" + .replace("{$CMD_NAME}", escapeHtml4(command.getName().trim())) + .replace("{$CMD_USAGE}", escapeHtml4(command.getUsage().trim()))); - final Map> commandsByPlugin = new HashMap>(); + if (!command.getAliases().isEmpty()) { + sb.append( + " - Aliases: {$CMD_ALIASES}" + .replace("{$CMD_ALIASES}", + escapeHtml4(StringUtils.join(command.getAliases(), ", ")))); + } - final Iterator> itKnownCommands = knownCommands.entrySet().iterator(); - while (itKnownCommands.hasNext()) - { - final Map.Entry entry = itKnownCommands.next(); - final String name = entry.getKey(); - final Command command = entry.getValue(); - if (name.equalsIgnoreCase(command.getName())) - { - String pluginName = "Bukkit Default"; - if (command instanceof PluginIdentifiableCommand) - { - pluginName = ((PluginIdentifiableCommand) command).getPlugin().getName(); - } - List pluginCommands = commandsByPlugin.get(pluginName); - if (pluginCommands == null) - { - commandsByPlugin.put(pluginName, pluginCommands = new ArrayList()); - } - pluginCommands.add(command); - } - } + sb.append( + "
    {$CMD_DESC}
  • \r\n" + .replace("{$CMD_DESC}", escapeHtml4(command.getDescription().trim()))); - final Iterator>> itCommandsByPlugin = commandsByPlugin.entrySet().iterator(); - while (itCommandsByPlugin.hasNext()) - { - final Map.Entry> entry = itCommandsByPlugin.next(); - final String pluginName = entry.getKey(); - final List commands = entry.getValue(); + return sb.toString(); + } - Collections.sort(commands, Comparator.comparing(Command::getName)); + @Override + public String getBody() { + StringBuilder responseBody = new StringBuilder(); - responseBody.append(heading(pluginName, 2)).append("
      \r\n"); + CommandMap commandMap = Utilities.getField(Bukkit.getServer().getPluginManager(), + "commandMap"); + HashMap knownCommands; + if (commandMap == null + || (knownCommands = Utilities.getField(commandMap, "knownCommands")) == null) { + return paragraph("Error loading commands."); + } - for (Command command : commands) - { - responseBody.append(buildDescription(command)); - } + responseBody + .append(heading("Command Help", 1)) + .append(paragraph( + "This page is an automatically generated listing of all plugin commands that are currently live on the server. " + + "Please note that it does not include vanilla server commands.")); - responseBody.append("
    \r\n"); - } + final Map> commandsByPlugin = new HashMap>(); - return responseBody.toString(); - } + final Iterator> itKnownCommands = knownCommands.entrySet() + .iterator(); + while (itKnownCommands.hasNext()) { + final Map.Entry entry = itKnownCommands.next(); + final String name = entry.getKey(); + final Command command = entry.getValue(); + if (name.equalsIgnoreCase(command.getName())) { + String pluginName = "Bukkit Default"; + if (command instanceof PluginIdentifiableCommand) { + pluginName = ((PluginIdentifiableCommand) command).getPlugin().getName(); + } + List pluginCommands = commandsByPlugin.get(pluginName); + if (pluginCommands == null) { + commandsByPlugin.put(pluginName, pluginCommands = new ArrayList()); + } + pluginCommands.add(command); + } + } - private static String buildDescription(Command command) - { - StringBuilder sb = new StringBuilder(); + final Iterator>> itCommandsByPlugin = commandsByPlugin.entrySet() + .iterator(); + while (itCommandsByPlugin.hasNext()) { + final Map.Entry> entry = itCommandsByPlugin.next(); + final String pluginName = entry.getKey(); + final List commands = entry.getValue(); - sb.append( - "
  • {$CMD_NAME} - Usage: {$CMD_USAGE}" - .replace("{$CMD_NAME}", escapeHtml4(command.getName().trim())) - .replace("{$CMD_USAGE}", escapeHtml4(command.getUsage().trim()))); + Collections.sort(commands, Comparator.comparing(Command::getName)); - if (!command.getAliases().isEmpty()) - { - sb.append( - " - Aliases: {$CMD_ALIASES}" - .replace("{$CMD_ALIASES}", escapeHtml4(StringUtils.join(command.getAliases(), ", ")))); - } + responseBody.append(heading(pluginName, 2)).append("
      \r\n"); - sb.append( - "
      {$CMD_DESC}\r\n" - .replace("{$CMD_DESC}", escapeHtml4(command.getDescription().trim()))); + for (Command command : commands) { + responseBody.append(buildDescription(command)); + } - return sb.toString(); - } + responseBody.append("
    \r\n"); + } - @Override - public String getTitle() - { - return "TotalFreedomMod :: Command Help"; - } + return responseBody.toString(); + } - @Override - public String getStyle() - { - return ".commandName{font-weight:bold;}.commandDescription{padding-left:15px;}li{margin:.15em;padding:.15em;}"; - } + @Override + public String getTitle() { + return "TotalFreedomMod :: Command Help"; + } + + @Override + public String getStyle() { + return ".commandName{font-weight:bold;}.commandDescription{padding-left:15px;}li{margin:.15em;padding:.15em;}"; + } // @Override // public String getScript() // { diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDListModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDListModule.java index 9060472..dcd6d97 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDListModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDListModule.java @@ -1,70 +1,60 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.util.Collection; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.Collection; - public class HTTPDListModule extends HTTPDModule { - public HTTPDListModule(NanoHTTPD.HTTPSession session) { - super(session); - } - @Override - public String getBody() { - final StringBuilder body = new StringBuilder(); + public HTTPDListModule(NanoHTTPD.HTTPSession session) { + super(session); + } - final Collection onlinePlayers = Bukkit.getOnlinePlayers(); + @Override + public String getBody() { + final StringBuilder body = new StringBuilder(); - body.append("

    There are ").append(onlinePlayers.size()).append("/").append(Bukkit.getMaxPlayers()).append(" players online:

    \r\n"); + final Collection onlinePlayers = Bukkit.getOnlinePlayers(); - body.append("
      \r\n"); + body.append("

      There are ").append(onlinePlayers.size()).append("/") + .append(Bukkit.getMaxPlayers()).append(" players online:

      \r\n"); - for (Player player : onlinePlayers) - { - String prefix = ""; - if (AdminList.isSuperAdmin(player)) - { - if (AdminList.isSeniorAdmin(player)) - { - prefix = "[SrA]"; - } - else - { - prefix = "[SA]"; - } + body.append("
        \r\n"); - if (Utilities.DEVELOPERS.contains(player.getName())) - { - prefix = "[Dev]"; - } + for (Player player : onlinePlayers) { + String prefix = ""; + if (AdminList.isSuperAdmin(player)) { + if (AdminList.isSeniorAdmin(player)) { + prefix = "[SrA]"; + } else { + prefix = "[SA]"; + } - if (player.getName().equals("markbyron")) - { - prefix = "[Owner]"; - } - } - else - { - if (player.isOp()) - { - prefix = "[OP]"; - } - } + if (Utilities.DEVELOPERS.contains(player.getName())) { + prefix = "[Dev]"; + } - body.append("
      • ").append(prefix).append(player.getName()).append("
      • \r\n"); - } + if (player.getName().equals("markbyron")) { + prefix = "[Owner]"; + } + } else { + if (player.isOp()) { + prefix = "[OP]"; + } + } - body.append("
      \r\n"); + body.append("
    • ").append(prefix).append(player.getName()).append("
    • \r\n"); + } - return body.toString(); - } + body.append("
    \r\n"); - @Override - public String getTitle() - { - return "Total Freedom - Online Users"; - } + return body.toString(); + } + + @Override + public String getTitle() { + return "Total Freedom - Online Users"; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDManager.java index 2832b63..dd9f3f1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDManager.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDManager.java @@ -1,5 +1,11 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.concurrent.Callable; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; @@ -9,258 +15,219 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.bukkit.Bukkit; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.util.concurrent.Callable; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class HTTPDManager { - public static String MIME_DEFAULT_BINARY; - // - private static final Pattern EXT_REGEX; - // - public static final int PORT; - // - private static final TFM_HTTPD HTTPD; - private HTTPDManager() { - throw new AssertionError(); - } + // + public static final int PORT; + // + private static final Pattern EXT_REGEX; + // + private static final TFM_HTTPD HTTPD; + public static String MIME_DEFAULT_BINARY; - static - { - MIME_DEFAULT_BINARY = "application/octet-stream"; - EXT_REGEX = Pattern.compile("\\.([^\\.\\s]+)$"); - PORT = ConfigurationEntry.HTTPD_PORT.getInteger(); - HTTPD = new TFM_HTTPD(PORT); - } + static { + MIME_DEFAULT_BINARY = "application/octet-stream"; + EXT_REGEX = Pattern.compile("\\.([^\\.\\s]+)$"); + PORT = ConfigurationEntry.HTTPD_PORT.getInteger(); + HTTPD = new TFM_HTTPD(PORT); + } - public static void start() - { - if (!ConfigurationEntry.HTTPD_ENABLED.getBoolean()) - { - return; - } + private HTTPDManager() { + throw new AssertionError(); + } - try - { - HTTPD.start(); + public static void start() { + if (!ConfigurationEntry.HTTPD_ENABLED.getBoolean()) { + return; + } - if (HTTPD.isAlive()) - { - Log.info("TFM HTTPd started. Listening on port: " + HTTPD.getListeningPort()); - } - else - { - Log.info("Error starting TFM HTTPd."); - } - } - catch (IOException ex) - { - Log.severe(ex); - } - } + try { + HTTPD.start(); - public static void stop() - { - if (!ConfigurationEntry.HTTPD_ENABLED.getBoolean()) { - return; - } + if (HTTPD.isAlive()) { + Log.info("TFM HTTPd started. Listening on port: " + HTTPD.getListeningPort()); + } else { + Log.info("Error starting TFM HTTPd."); + } + } catch (IOException ex) { + Log.severe(ex); + } + } - HTTPD.stop(); + public static void stop() { + if (!ConfigurationEntry.HTTPD_ENABLED.getBoolean()) { + return; + } - Log.info("TFM HTTPd stopped."); - } + HTTPD.stop(); - public static Response serveFileBasic(File file) { - Response response = null; + Log.info("TFM HTTPd stopped."); + } - if (file != null && file.exists()) { - try { - String mimetype = null; + public static Response serveFileBasic(File file) { + Response response = null; - Matcher matcher = EXT_REGEX.matcher(file.getCanonicalPath()); - if (matcher.find()) { - mimetype = HTTPDFileModule.MIME_TYPES.get(matcher.group(1)); - } + if (file != null && file.exists()) { + try { + String mimetype = null; - if (mimetype == null || mimetype.trim().isEmpty()) { - mimetype = MIME_DEFAULT_BINARY; - } + Matcher matcher = EXT_REGEX.matcher(file.getCanonicalPath()); + if (matcher.find()) { + mimetype = HTTPDFileModule.MIME_TYPES.get(matcher.group(1)); + } - response = new Response(Response.Status.OK, mimetype, new FileInputStream(file)); - response.addHeader("Content-Length", "" + file.length()); - } catch (IOException ex) { - Log.severe(ex); - } - } + if (mimetype == null || mimetype.trim().isEmpty()) { + mimetype = MIME_DEFAULT_BINARY; + } - return response; - } + response = new Response(Response.Status.OK, mimetype, new FileInputStream(file)); + response.addHeader("Content-Length", "" + file.length()); + } catch (IOException ex) { + Log.severe(ex); + } + } - private static class TFM_HTTPD extends NanoHTTPD { - public TFM_HTTPD(int port) { - super(port); - } + return response; + } - public TFM_HTTPD(String hostname, int port) { - super(hostname, port); - } + private enum ModuleType { + DUMP(new ModuleExecutable(false, "dump") { + @Override + public Response getResponse(HTTPSession session) { + return new Response(Response.Status.OK, NanoHTTPD.MIME_PLAINTEXT, + "The DUMP module is disabled. It is intended for debugging use only."); + } + }), + HELP(new ModuleExecutable(true, "help") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDHelpModule(session).getResponse(); + } + }), + LIST(new ModuleExecutable(true, "list") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDListModule(session).getResponse(); + } + }), + FILE(new ModuleExecutable(false, "file") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDFileModule(session).getResponse(); + } + }), + SCHEMATIC(new ModuleExecutable(false, "schematic") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDSchematicModule(session).getResponse(); + } + }), + PERMBANS(new ModuleExecutable(false, "permbans") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDPermanentBansModule(session).getResponse(); + } + }), + PLAYERS(new ModuleExecutable(true, "players") { + @Override + public Response getResponse(HTTPSession session) { + return new HTTPDPlayersModule(session).getResponse(); + } + }), + LOGS(new ModuleExecutable(false, "logs") { + @Override + public Response getResponse(HTTPSession session) { + return new LogFileModule(session).getResponse(); + } + }); + // + private final ModuleExecutable moduleExecutable; - @Override - public Response serve(HTTPSession session) { - Response response; + ModuleType(ModuleExecutable moduleExecutable) { + this.moduleExecutable = moduleExecutable; + } - try { - final String[] args = StringUtils.split(session.getUri(), "/"); - final ModuleType moduleType = args.length >= 1 ? ModuleType.getByName(args[0]) : ModuleType.FILE; - response = moduleType.getModuleExecutable().execute(session); - } catch (Exception ex) { - response = new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "Error 500: Internal Server Error\r\n" + ex.getMessage() + "\r\n" + ExceptionUtils.getStackTrace(ex)); - } + private static ModuleType getByName(String needle) { + for (ModuleType type : values()) { + if (type.getModuleExecutable().getName().equalsIgnoreCase(needle)) { + return type; + } + } + return FILE; + } - if (response == null) { - response = new Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Error 404: Not Found - The requested resource was not found on this server."); - } + public ModuleExecutable getModuleExecutable() { + return moduleExecutable; + } - return response; - } - } + private abstract static class ModuleExecutable { - private enum ModuleType { - DUMP(new ModuleExecutable(false, "dump") { - @Override - public Response getResponse(HTTPSession session) { - return new Response(Response.Status.OK, NanoHTTPD.MIME_PLAINTEXT, "The DUMP module is disabled. It is intended for debugging use only."); - } - }), - HELP(new ModuleExecutable(true, "help") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDHelpModule(session).getResponse(); - } - }), - LIST(new ModuleExecutable(true, "list") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDListModule(session).getResponse(); - } - }), - FILE(new ModuleExecutable(false, "file") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDFileModule(session).getResponse(); - } - }), - SCHEMATIC(new ModuleExecutable(false, "schematic") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDSchematicModule(session).getResponse(); - } - }), - PERMBANS(new ModuleExecutable(false, "permbans") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDPermanentBansModule(session).getResponse(); - } - }), - PLAYERS(new ModuleExecutable(true, "players") - { - @Override - public Response getResponse(HTTPSession session) - { - return new HTTPDPlayersModule(session).getResponse(); - } - }), - LOGS(new ModuleExecutable(false, "logs") - { - @Override - public Response getResponse(HTTPSession session) - { - return new LogFileModule(session).getResponse(); - } - }); - // - private final ModuleExecutable moduleExecutable; + private final boolean runOnBukkitThread; + private final String name; - ModuleType(ModuleExecutable moduleExecutable) - { - this.moduleExecutable = moduleExecutable; - } + public ModuleExecutable(boolean runOnBukkitThread, String name) { + this.runOnBukkitThread = runOnBukkitThread; + this.name = name; + } - private abstract static class ModuleExecutable - { - private final boolean runOnBukkitThread; - private final String name; + public Response execute(final HTTPSession session) { + try { + if (this.runOnBukkitThread) { + return Bukkit.getScheduler() + .callSyncMethod(TotalFreedomMod.plugin, new Callable() { + @Override + public Response call() throws Exception { + return getResponse(session); + } + }).get(); + } else { + return getResponse(session); + } + } catch (Exception ex) { + Log.severe(ex); + } + return null; + } - public ModuleExecutable(boolean runOnBukkitThread, String name) - { - this.runOnBukkitThread = runOnBukkitThread; - this.name = name; - } + public abstract Response getResponse(HTTPSession session); - public Response execute(final HTTPSession session) - { - try - { - if (this.runOnBukkitThread) - { - return Bukkit.getScheduler().callSyncMethod(TotalFreedomMod.plugin, new Callable() - { - @Override - public Response call() throws Exception - { - return getResponse(session); - } - }).get(); - } - else - { - return getResponse(session); - } - } - catch (Exception ex) - { - Log.severe(ex); - } - return null; - } + public String getName() { + return name; + } + } + } - public abstract Response getResponse(HTTPSession session); + private static class TFM_HTTPD extends NanoHTTPD { - public String getName() - { - return name; - } - } + public TFM_HTTPD(int port) { + super(port); + } - public ModuleExecutable getModuleExecutable() - { - return moduleExecutable; - } + public TFM_HTTPD(String hostname, int port) { + super(hostname, port); + } - private static ModuleType getByName(String needle) - { - for (ModuleType type : values()) - { - if (type.getModuleExecutable().getName().equalsIgnoreCase(needle)) - { - return type; - } - } - return FILE; - } - } + @Override + public Response serve(HTTPSession session) { + Response response; + + try { + final String[] args = StringUtils.split(session.getUri(), "/"); + final ModuleType moduleType = + args.length >= 1 ? ModuleType.getByName(args[0]) : ModuleType.FILE; + response = moduleType.getModuleExecutable().execute(session); + } catch (Exception ex) { + response = new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, + "Error 500: Internal Server Error\r\n" + ex.getMessage() + "\r\n" + + ExceptionUtils.getStackTrace(ex)); + } + + if (response == null) { + response = new Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, + "Error 404: Not Found - The requested resource was not found on this server."); + } + + return response; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDModule.java index 43129fc..dbb8cd9 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDModule.java @@ -1,69 +1,60 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.net.Socket; +import java.util.HashMap; +import java.util.Map; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.httpd.NanoHTTPD.HTTPSession; import me.StevenLawson.TotalFreedomMod.httpd.NanoHTTPD.Method; import me.StevenLawson.TotalFreedomMod.httpd.NanoHTTPD.Response; -import java.net.Socket; -import java.util.HashMap; -import java.util.Map; - public abstract class HTTPDModule { - protected final String uri; - protected final Method method; - protected final Map headers; - protected final Map params; - protected final Socket socket; - protected final HTTPSession session; - public HTTPDModule(HTTPSession session) { - this.uri = session.getUri(); - this.method = session.getMethod(); - this.headers = session.getHeaders(); - this.params = session.getParms(); - this.socket = session.getSocket(); - this.session = session; - } + protected final String uri; + protected final Method method; + protected final Map headers; + protected final Map params; + protected final Socket socket; + protected final HTTPSession session; - public String getBody() - { - return null; - } + public HTTPDModule(HTTPSession session) { + this.uri = session.getUri(); + this.method = session.getMethod(); + this.headers = session.getHeaders(); + this.params = session.getParms(); + this.socket = session.getSocket(); + this.session = session; + } - public String getTitle() - { - return null; - } + public String getBody() { + return null; + } - public String getStyle() - { - return null; - } + public String getTitle() { + return null; + } - public String getScript() - { - return null; - } + public String getStyle() { + return null; + } - public Response getResponse() - { - return new HTTPDPageBuilder(getBody(), getTitle(), getStyle(), getScript()).getResponse(); - } + public String getScript() { + return null; + } - protected final Map getFiles() - { - Map files = new HashMap(); + public Response getResponse() { + return new HTTPDPageBuilder(getBody(), getTitle(), getStyle(), getScript()).getResponse(); + } - try - { - session.parseBody(files); - } - catch (Exception ex) - { - Log.severe(ex); - } + protected final Map getFiles() { + Map files = new HashMap(); - return files; - } + try { + session.parseBody(files); + } catch (Exception ex) { + Log.severe(ex); + } + + return files; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPageBuilder.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPageBuilder.java index 1152a21..c9e9971 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPageBuilder.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPageBuilder.java @@ -3,68 +3,65 @@ package me.StevenLawson.TotalFreedomMod.httpd; import me.StevenLawson.TotalFreedomMod.httpd.NanoHTTPD.Response; public class HTTPDPageBuilder { - private static final String TEMPLATE = "\r\n" - + "\r\n" - + "\r\n" - + "{$TITLE}\r\n" - + "\r\n" - + "{$STYLE}" - + "{$SCRIPT}" - + "\r\n" - + "\r\n{$BODY}\r\n" - + "\r\n"; - private static final String STYLE = "\r\n"; - private static final String SCRIPT = "\r\n" - + "\r\n" - + "\r\n"; - // - private String body = null; - private String title = null; - private String style = null; - private String script = null; - public HTTPDPageBuilder() { - } + private static final String TEMPLATE = "\r\n" + + "\r\n" + + "\r\n" + + "{$TITLE}\r\n" + + "\r\n" + + "{$STYLE}" + + "{$SCRIPT}" + + "\r\n" + + "\r\n{$BODY}\r\n" + + "\r\n"; + private static final String STYLE = "\r\n"; + private static final String SCRIPT = + "\r\n" + + "\r\n" + + "\r\n"; + // + private String body = null; + private String title = null; + private String style = null; + private String script = null; - public HTTPDPageBuilder(String body, String title, String style, String script) { - this.body = body; - this.title = title; - this.style = style; - this.script = script; - } + public HTTPDPageBuilder() { + } - public void setBody(String body) - { - this.body = body; - } + public HTTPDPageBuilder(String body, String title, String style, String script) { + this.body = body; + this.title = title; + this.style = style; + this.script = script; + } - public void setTitle(String title) - { - this.title = title; - } + public void setBody(String body) { + this.body = body; + } - public void setStyle(String style) - { - this.style = style; - } + public void setTitle(String title) { + this.title = title; + } - public void setScript(String script) - { - this.script = script; - } + public void setStyle(String style) { + this.style = style; + } - public Response getResponse() - { - return new Response(this.toString()); - } + public void setScript(String script) { + this.script = script; + } - @Override - public String toString() - { - return TEMPLATE - .replace("{$BODY}", this.body == null ? "" : this.body) - .replace("{$TITLE}", this.title == null ? "" : this.title) - .replace("{$STYLE}", this.style == null ? "" : STYLE.replace("{$STYLE}", this.style)) - .replace("{$SCRIPT}", this.script == null ? "" : SCRIPT.replace("{$SCRIPT}", this.script)); - } + public Response getResponse() { + return new Response(this.toString()); + } + + @Override + public String toString() { + return TEMPLATE + .replace("{$BODY}", this.body == null ? "" : this.body) + .replace("{$TITLE}", this.title == null ? "" : this.title) + .replace("{$STYLE}", this.style == null ? "" : STYLE.replace("{$STYLE}", this.style)) + .replace("{$SCRIPT}", + this.script == null ? "" : SCRIPT.replace("{$SCRIPT}", this.script)); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPermanentBansModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPermanentBansModule.java index f467381..0bd6143 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPermanentBansModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPermanentBansModule.java @@ -1,24 +1,25 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.io.File; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import java.io.File; - public class HTTPDPermanentBansModule extends HTTPDModule { - public HTTPDPermanentBansModule(NanoHTTPD.HTTPSession session) { - super(session); - } - @Override - public NanoHTTPD.Response getResponse() { - File permbanFile = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PERMBAN_FILENAME); - if (permbanFile.exists()) { - return HTTPDManager.serveFileBasic(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PERMBAN_FILENAME)); - } - else - { - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, - "Error 404: Not Found - The requested resource was not found on this server."); - } - } + public HTTPDPermanentBansModule(NanoHTTPD.HTTPSession session) { + super(session); + } + + @Override + public NanoHTTPD.Response getResponse() { + File permbanFile = new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.PERMBAN_FILENAME); + if (permbanFile.exists()) { + return HTTPDManager.serveFileBasic( + new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PERMBAN_FILENAME)); + } else { + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, + NanoHTTPD.MIME_PLAINTEXT, + "Error 404: Not Found - The requested resource was not found on this server."); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPlayersModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPlayersModule.java index e664cbd..96fed26 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPlayersModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDPlayersModule.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; @@ -9,78 +10,71 @@ import org.bukkit.entity.Player; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import java.util.UUID; - public class HTTPDPlayersModule extends HTTPDModule { - public HTTPDPlayersModule(NanoHTTPD.HTTPSession session) { - super(session); - } - @Override - @SuppressWarnings("unchecked") - public NanoHTTPD.Response getResponse() { - final JSONObject responseObject = new JSONObject(); + public HTTPDPlayersModule(NanoHTTPD.HTTPSession session) { + super(session); + } - final JSONArray players = new JSONArray(); - final JSONArray superadmins = new JSONArray(); - final JSONArray telnetadmins = new JSONArray(); - final JSONArray senioradmins = new JSONArray(); - final JSONArray developers = new JSONArray(); + @Override + @SuppressWarnings("unchecked") + public NanoHTTPD.Response getResponse() { + final JSONObject responseObject = new JSONObject(); - // All online players - for (Player player : TotalFreedomMod.server.getOnlinePlayers()) - { - players.add(player.getName()); - } + final JSONArray players = new JSONArray(); + final JSONArray superadmins = new JSONArray(); + final JSONArray telnetadmins = new JSONArray(); + final JSONArray senioradmins = new JSONArray(); + final JSONArray developers = new JSONArray(); - // Super admins (non-telnet and non-senior) - for (UUID superadmin : AdminList.getSuperUUIDs()) - { - if (AdminList.getSeniorUUIDs().contains(superadmin)) - { - continue; - } + // All online players + for (Player player : TotalFreedomMod.server.getOnlinePlayers()) { + players.add(player.getName()); + } - if (AdminList.getTelnetUUIDs().contains(superadmin)) - { - continue; - } + // Super admins (non-telnet and non-senior) + for (UUID superadmin : AdminList.getSuperUUIDs()) { + if (AdminList.getSeniorUUIDs().contains(superadmin)) { + continue; + } - superadmins.add(getName(superadmin)); - } + if (AdminList.getTelnetUUIDs().contains(superadmin)) { + continue; + } - // Telnet admins (non-senior) - for (UUID telnetadmin : AdminList.getTelnetUUIDs()) - { - if (AdminList.getSeniorUUIDs().contains(telnetadmin)) - { - continue; - } - telnetadmins.add(getName(telnetadmin)); - } + superadmins.add(getName(superadmin)); + } - // Senior admins - for (UUID senioradmin : AdminList.getSeniorUUIDs()) - { - senioradmins.add(getName(senioradmin)); - } + // Telnet admins (non-senior) + for (UUID telnetadmin : AdminList.getTelnetUUIDs()) { + if (AdminList.getSeniorUUIDs().contains(telnetadmin)) { + continue; + } + telnetadmins.add(getName(telnetadmin)); + } - // Developers - developers.addAll(Utilities.DEVELOPERS); + // Senior admins + for (UUID senioradmin : AdminList.getSeniorUUIDs()) { + senioradmins.add(getName(senioradmin)); + } - responseObject.put("players", players); - responseObject.put("superadmins", superadmins); - responseObject.put("telnetadmins", telnetadmins); - responseObject.put("senioradmins", senioradmins); - responseObject.put("developers", developers); + // Developers + developers.addAll(Utilities.DEVELOPERS); - final NanoHTTPD.Response response = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_JSON, responseObject.toString()); - response.addHeader("Access-Control-Allow-Origin", MainConfig.getString(ConfigurationEntry.HTTPD_ORIGIN)); - return response; - } + responseObject.put("players", players); + responseObject.put("superadmins", superadmins); + responseObject.put("telnetadmins", telnetadmins); + responseObject.put("senioradmins", senioradmins); + responseObject.put("developers", developers); - private String getName(UUID uuid) - { - return AdminList.getEntry(uuid).getLastLoginName(); - } + final NanoHTTPD.Response response = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, + NanoHTTPD.MIME_JSON, responseObject.toString()); + response.addHeader("Access-Control-Allow-Origin", + MainConfig.getString(ConfigurationEntry.HTTPD_ORIGIN)); + return response; + } + + private String getName(UUID uuid) { + return AdminList.getEntry(uuid).getLastLoginName(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDSchematicModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDSchematicModule.java index 08ffda4..99c90d9 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDSchematicModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDSchematicModule.java @@ -1,5 +1,14 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.admin.Admin; import me.StevenLawson.TotalFreedomMod.admin.AdminList; @@ -9,289 +18,246 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; -import java.io.File; -import java.io.IOException; -import java.util.*; -import java.util.regex.Pattern; - public class HTTPDSchematicModule extends HTTPDModule { - private static final File SCHEMATIC_FOLDER = new File("./plugins/WorldEdit/schematics/"); - private static final String REQUEST_FORM_FILE_ELEMENT_NAME = "schematicFile"; - private static final Pattern SCHEMATIC_FILENAME_LC = Pattern.compile("^[a-z0-9_'!,\\-]{1,30}\\.schematic$"); - private static final String[] SCHEMATIC_FILTER = new String[] - { - "schematic" - }; - private static final String UPLOAD_FORM = "
    \n" - + "

    Select a schematic file to upload. Filenames must be alphanumeric, between 1 and 30 characters long (inclusive), and have a .schematic extension.

    \n" - + "\n" - + "
    \n" - + "\n" - + "
    "; - public HTTPDSchematicModule(NanoHTTPD.HTTPSession session) { - super(session); - } + private static final File SCHEMATIC_FOLDER = new File("./plugins/WorldEdit/schematics/"); + private static final String REQUEST_FORM_FILE_ELEMENT_NAME = "schematicFile"; + private static final Pattern SCHEMATIC_FILENAME_LC = Pattern.compile( + "^[a-z0-9_'!,\\-]{1,30}\\.schematic$"); + private static final String[] SCHEMATIC_FILTER = new String[] + { + "schematic" + }; + private static final String UPLOAD_FORM = + "
    \n" + + "

    Select a schematic file to upload. Filenames must be alphanumeric, between 1 and 30 characters long (inclusive), and have a .schematic extension.

    \n" + + "\n" + + "
    \n" + + "\n" + + "
    "; - @Override - public Response getResponse() - { - try - { - return new HTTPDPageBuilder(body(), title(), null, null).getResponse(); - } - catch (ResponseOverrideException ex) - { - return ex.getResponse(); - } - } + public HTTPDSchematicModule(NanoHTTPD.HTTPSession session) { + super(session); + } - public String title() - { - return "TotalFreedomMod :: Schematic Manager"; - } + private static String getArg(String[] args, int index) { + String out = (args.length == index + 1 ? args[index] : null); + return (out == null ? null : (out.trim().isEmpty() ? null : out.trim())); + } - public String body() throws ResponseOverrideException - { - if (!SCHEMATIC_FOLDER.exists()) - { - return HTMLGenerationTools.paragraph("Can't find the WorldEdit schematic folder."); - } + @Override + public Response getResponse() { + try { + return new HTTPDPageBuilder(body(), title(), null, null).getResponse(); + } catch (ResponseOverrideException ex) { + return ex.getResponse(); + } + } - final StringBuilder out = new StringBuilder(); + public String title() { + return "TotalFreedomMod :: Schematic Manager"; + } - final String[] args = StringUtils.split(uri, "/"); - final ModuleMode mode = ModuleMode.getMode(getArg(args, 1)); + public String body() throws ResponseOverrideException { + if (!SCHEMATIC_FOLDER.exists()) { + return HTMLGenerationTools.paragraph("Can't find the WorldEdit schematic folder."); + } - switch (mode) - { - case LIST: - { - Collection schematics = FileUtils.listFiles(SCHEMATIC_FOLDER, SCHEMATIC_FILTER, false); + final StringBuilder out = new StringBuilder(); - final List schematicsFormatted = new ArrayList(); - for (File schematic : schematics) - { - String filename = StringEscapeUtils.escapeHtml4(schematic.getName()); + final String[] args = StringUtils.split(uri, "/"); + final ModuleMode mode = ModuleMode.getMode(getArg(args, 1)); - if (SCHEMATIC_FILENAME_LC.matcher(filename.trim().toLowerCase()).find()) - { - schematicsFormatted.add("
  • " + filename + "
  • "); - } - else - { - schematicsFormatted.add("
  • " + filename + " - (Illegal filename, can't download)
  • "); - } - } + switch (mode) { + case LIST: { + Collection schematics = FileUtils.listFiles(SCHEMATIC_FOLDER, + SCHEMATIC_FILTER, false); - Collections.sort(schematicsFormatted, new Comparator() - { - @Override - public int compare(String a, String b) - { - return a.toLowerCase().compareTo(b.toLowerCase()); - } - }); + final List schematicsFormatted = new ArrayList(); + for (File schematic : schematics) { + String filename = StringEscapeUtils.escapeHtml4(schematic.getName()); - out - .append(HTMLGenerationTools.heading("Schematics:", 1)) - .append("
      ") - .append(StringUtils.join(schematicsFormatted, "\r\n")) - .append("
    "); + if (SCHEMATIC_FILENAME_LC.matcher(filename.trim().toLowerCase()).find()) { + schematicsFormatted.add( + "
  • " + + filename + "
  • "); + } else { + schematicsFormatted.add( + "
  • " + filename + " - (Illegal filename, can't download)
  • "); + } + } - break; - } - case DOWNLOAD: - { - try - { - throw new ResponseOverrideException(downloadSchematic(params.get("schematicName"))); - } - catch (SchematicTransferException ex) - { - out.append(HTMLGenerationTools.paragraph("Error downloading schematic: " + ex.getMessage())); - } - break; - } - case UPLOAD: - { - final String remoteAddress = socket.getInetAddress().getHostAddress(); - if (!isAuthorized(remoteAddress)) - { - out.append(HTMLGenerationTools.paragraph("Schematic upload access denied: Your IP, " + remoteAddress + ", is not registered to a superadmin on this server.")); - } - else - { - if (method == Method.POST) - { - try - { - uploadSchematic(); - out.append(HTMLGenerationTools.paragraph("Schematic uploaded successfully.")); - } - catch (SchematicTransferException ex) - { - out.append(HTMLGenerationTools.paragraph("Error uploading schematic: " + ex.getMessage())); - } - } - else - { - out.append(UPLOAD_FORM); - } - } - break; - } - default: - { - out.append(HTMLGenerationTools.paragraph("Invalid request mode.")); - break; - } - } + Collections.sort(schematicsFormatted, new Comparator() { + @Override + public int compare(String a, String b) { + return a.toLowerCase().compareTo(b.toLowerCase()); + } + }); - return out.toString(); - } + out + .append(HTMLGenerationTools.heading("Schematics:", 1)) + .append("
      ") + .append(StringUtils.join(schematicsFormatted, "\r\n")) + .append("
    "); - private boolean uploadSchematic() throws SchematicTransferException - { - Map files = getFiles(); + break; + } + case DOWNLOAD: { + try { + throw new ResponseOverrideException( + downloadSchematic(params.get("schematicName"))); + } catch (SchematicTransferException ex) { + out.append(HTMLGenerationTools.paragraph( + "Error downloading schematic: " + ex.getMessage())); + } + break; + } + case UPLOAD: { + final String remoteAddress = socket.getInetAddress().getHostAddress(); + if (!isAuthorized(remoteAddress)) { + out.append(HTMLGenerationTools.paragraph( + "Schematic upload access denied: Your IP, " + remoteAddress + + ", is not registered to a superadmin on this server.")); + } else { + if (method == Method.POST) { + try { + uploadSchematic(); + out.append( + HTMLGenerationTools.paragraph("Schematic uploaded successfully.")); + } catch (SchematicTransferException ex) { + out.append(HTMLGenerationTools.paragraph( + "Error uploading schematic: " + ex.getMessage())); + } + } else { + out.append(UPLOAD_FORM); + } + } + break; + } + default: { + out.append(HTMLGenerationTools.paragraph("Invalid request mode.")); + break; + } + } - final String tempFileName = files.get(REQUEST_FORM_FILE_ELEMENT_NAME); - if (tempFileName == null) - { - throw new SchematicTransferException("No file transmitted to server."); - } + return out.toString(); + } - final File tempFile = new File(tempFileName); - if (!tempFile.exists()) - { - throw new SchematicTransferException(); - } + private boolean uploadSchematic() throws SchematicTransferException { + Map files = getFiles(); - String origFileName = params.get(REQUEST_FORM_FILE_ELEMENT_NAME); - if (origFileName == null || (origFileName = origFileName.trim()).isEmpty()) - { - throw new SchematicTransferException("Can't resolve original file name."); - } + final String tempFileName = files.get(REQUEST_FORM_FILE_ELEMENT_NAME); + if (tempFileName == null) { + throw new SchematicTransferException("No file transmitted to server."); + } - if (tempFile.length() > FileUtils.ONE_KB * 64L) - { - throw new SchematicTransferException("Schematic is too big (64kb max)."); - } + final File tempFile = new File(tempFileName); + if (!tempFile.exists()) { + throw new SchematicTransferException(); + } - if (!SCHEMATIC_FILENAME_LC.matcher(origFileName.toLowerCase()).find()) - { - throw new SchematicTransferException("File name must be alphanumeric, between 1 and 30 characters long (inclusive), and have a \".schematic\" extension."); - } + String origFileName = params.get(REQUEST_FORM_FILE_ELEMENT_NAME); + if (origFileName == null || (origFileName = origFileName.trim()).isEmpty()) { + throw new SchematicTransferException("Can't resolve original file name."); + } - final File targetFile = new File(SCHEMATIC_FOLDER.getPath(), origFileName); - if (targetFile.exists()) - { - throw new SchematicTransferException("Schematic already exists on the server."); - } + if (tempFile.length() > FileUtils.ONE_KB * 64L) { + throw new SchematicTransferException("Schematic is too big (64kb max)."); + } - try - { - FileUtils.copyFile(tempFile, targetFile); - } - catch (IOException ex) - { - Log.severe(ex); - throw new SchematicTransferException(); - } + if (!SCHEMATIC_FILENAME_LC.matcher(origFileName.toLowerCase()).find()) { + throw new SchematicTransferException( + "File name must be alphanumeric, between 1 and 30 characters long (inclusive), and have a \".schematic\" extension."); + } - return true; - } + final File targetFile = new File(SCHEMATIC_FOLDER.getPath(), origFileName); + if (targetFile.exists()) { + throw new SchematicTransferException("Schematic already exists on the server."); + } - private Response downloadSchematic(String schematicName) throws SchematicTransferException - { - if (schematicName == null || !SCHEMATIC_FILENAME_LC.matcher((schematicName = schematicName.trim()).toLowerCase()).find()) - { - throw new SchematicTransferException("Invalid schematic name requested: " + schematicName); - } + try { + FileUtils.copyFile(tempFile, targetFile); + } catch (IOException ex) { + Log.severe(ex); + throw new SchematicTransferException(); + } - final File targetFile = new File(SCHEMATIC_FOLDER.getPath(), schematicName); - if (!targetFile.exists()) - { - throw new SchematicTransferException("Schematic not found: " + schematicName); - } + return true; + } - Response response = HTTPDManager.serveFileBasic(targetFile); + private Response downloadSchematic(String schematicName) throws SchematicTransferException { + if (schematicName == null || !SCHEMATIC_FILENAME_LC.matcher( + (schematicName = schematicName.trim()).toLowerCase()).find()) { + throw new SchematicTransferException( + "Invalid schematic name requested: " + schematicName); + } - response.addHeader("Content-Disposition", "attachment; filename=" + targetFile.getName() + ";"); + final File targetFile = new File(SCHEMATIC_FOLDER.getPath(), schematicName); + if (!targetFile.exists()) { + throw new SchematicTransferException("Schematic not found: " + schematicName); + } - return response; - } + Response response = HTTPDManager.serveFileBasic(targetFile); - private boolean isAuthorized(String remoteAddress) - { - Admin entry = AdminList.getEntryByIp(remoteAddress); - return entry != null && entry.isActivated(); - } + response.addHeader("Content-Disposition", + "attachment; filename=" + targetFile.getName() + ";"); - private static class SchematicTransferException extends Exception - { - public SchematicTransferException() - { - } + return response; + } - public SchematicTransferException(String string) - { - super(string); - } - } + private boolean isAuthorized(String remoteAddress) { + Admin entry = AdminList.getEntryByIp(remoteAddress); + return entry != null && entry.isActivated(); + } - private static class ResponseOverrideException extends Exception - { - private final Response response; + private enum ModuleMode { + LIST("list"), + UPLOAD("upload"), + DOWNLOAD("download"), + INVALID(null); + // + private final String modeName; - public ResponseOverrideException(Response response) - { - this.response = response; - } + ModuleMode(String modeName) { + this.modeName = modeName; + } - public Response getResponse() - { - return response; - } - } + public static ModuleMode getMode(String needle) { + for (ModuleMode mode : values()) { + final String haystack = mode.toString(); + if (haystack != null && haystack.equalsIgnoreCase(needle)) { + return mode; + } + } + return INVALID; + } - private static String getArg(String[] args, int index) - { - String out = (args.length == index + 1 ? args[index] : null); - return (out == null ? null : (out.trim().isEmpty() ? null : out.trim())); - } + @Override + public String toString() { + return this.modeName; + } + } - private enum ModuleMode - { - LIST("list"), - UPLOAD("upload"), - DOWNLOAD("download"), - INVALID(null); - // - private final String modeName; + private static class SchematicTransferException extends Exception { - ModuleMode(String modeName) - { - this.modeName = modeName; - } + public SchematicTransferException() { + } - @Override - public String toString() - { - return this.modeName; - } + public SchematicTransferException(String string) { + super(string); + } + } - public static ModuleMode getMode(String needle) - { - for (ModuleMode mode : values()) - { - final String haystack = mode.toString(); - if (haystack != null && haystack.equalsIgnoreCase(needle)) - { - return mode; - } - } - return INVALID; - } - } + private static class ResponseOverrideException extends Exception { + + private final Response response; + + public ResponseOverrideException(Response response) { + this.response = response; + } + + public Response getResponse() { + return response; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDumpModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDumpModule.java index 86a7e93..cc8f7d3 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDumpModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/HTTPDumpModule.java @@ -1,111 +1,100 @@ package me.StevenLawson.TotalFreedomMod.httpd; -import me.StevenLawson.TotalFreedomMod.Log; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; +import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.list; +import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.paragraph; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.Map; - -import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.list; -import static me.StevenLawson.TotalFreedomMod.httpd.HTMLGenerationTools.paragraph; +import me.StevenLawson.TotalFreedomMod.Log; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; public class HTTPDumpModule extends HTTPDModule { - private File echoFile = null; - private final String body; - public HTTPDumpModule(NanoHTTPD.HTTPSession session) { - super(session); + private final String body; + private File echoFile = null; - //Body needs to be computed before getResponse, so we know if a text response or a file echo is needed. - this.body = body(); - } + public HTTPDumpModule(NanoHTTPD.HTTPSession session) { + super(session); - @Override - public NanoHTTPD.Response getResponse() - { - String echo = params.get("echo"); - boolean doEcho = echo != null && ((echo = echo.toLowerCase().trim()).equalsIgnoreCase("true") || echo.equalsIgnoreCase("1")); + //Body needs to be computed before getResponse, so we know if a text response or a file echo is needed. + this.body = body(); + } - if (doEcho && this.echoFile != null && this.echoFile.exists()) - { - return HTTPDManager.serveFileBasic(this.echoFile); - } - else - { - return super.getResponse(); - } - } + @Override + public NanoHTTPD.Response getResponse() { + String echo = params.get("echo"); + boolean doEcho = + echo != null && ((echo = echo.toLowerCase().trim()).equalsIgnoreCase("true") + || echo.equalsIgnoreCase("1")); - @Override - public String getBody() - { - return body; - } + if (doEcho && this.echoFile != null && this.echoFile.exists()) { + return HTTPDManager.serveFileBasic(this.echoFile); + } else { + return super.getResponse(); + } + } - private String body() - { - StringBuilder responseBody = new StringBuilder(); + @Override + public String getBody() { + return body; + } - String remoteAddress = socket.getInetAddress().getHostAddress(); + private String body() { + StringBuilder responseBody = new StringBuilder(); - String[] args = StringUtils.split(uri, "/"); + String remoteAddress = socket.getInetAddress().getHostAddress(); - Map files = getFiles(); + String[] args = StringUtils.split(uri, "/"); - responseBody - .append(paragraph("URI: " + uri)) - .append(paragraph("args (Length: " + args.length + "): " + StringUtils.join(args, ","))) - .append(paragraph("Method: " + method.toString())) - .append(paragraph("Remote Address: " + remoteAddress)) - .append(paragraph("Headers:")) - .append(list(headers)) - .append(paragraph("Params:")) - .append(list(params)) - .append(paragraph("Files:")) - .append(list(files)); + Map files = getFiles(); - Iterator> it = files.entrySet().iterator(); - while (it.hasNext()) - { - Map.Entry entry = it.next(); - String formName = entry.getKey(); - String tempFileName = entry.getValue(); - String origFileName = params.get(formName); + responseBody + .append(paragraph("URI: " + uri)) + .append(paragraph("args (Length: " + args.length + "): " + StringUtils.join(args, ","))) + .append(paragraph("Method: " + method.toString())) + .append(paragraph("Remote Address: " + remoteAddress)) + .append(paragraph("Headers:")) + .append(list(headers)) + .append(paragraph("Params:")) + .append(list(params)) + .append(paragraph("Files:")) + .append(list(files)); - File tempFile = new File(tempFileName); - if (tempFile.exists()) - { - this.echoFile = tempFile; + Iterator> it = files.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + String formName = entry.getKey(); + String tempFileName = entry.getValue(); + String origFileName = params.get(formName); - if (origFileName.contains("../")) - { - continue; - } + File tempFile = new File(tempFileName); + if (tempFile.exists()) { + this.echoFile = tempFile; - String targetFileName = "./public_html/uploads/" + origFileName; + if (origFileName.contains("../")) { + continue; + } - File targetFile = new File(targetFileName); + String targetFileName = "./public_html/uploads/" + origFileName; - try - { - FileUtils.copyFile(tempFile, targetFile); - } - catch (IOException ex) - { - Log.severe(ex); - } - } - } + File targetFile = new File(targetFileName); - return responseBody.toString(); - } + try { + FileUtils.copyFile(tempFile, targetFile); + } catch (IOException ex) { + Log.severe(ex); + } + } + } - @Override - public String getTitle() - { - return "TotalFreedomMod :: Request Debug Dumper"; - } + return responseBody.toString(); + } + + @Override + public String getTitle() { + return "TotalFreedomMod :: Request Debug Dumper"; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/LogFileModule.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/LogFileModule.java index 17e9dab..6eef38c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/LogFileModule.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/LogFileModule.java @@ -1,23 +1,21 @@ package me.StevenLawson.TotalFreedomMod.httpd; +import java.io.File; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import java.io.File; - public class LogFileModule extends HTTPDFileModule { - public LogFileModule(NanoHTTPD.HTTPSession session) { - super(session); - } - @Override - public NanoHTTPD.Response getResponse() { - if (ConfigurationEntry.LOGS_SECRET.getString().equals(params.get("password"))) - { - return serveFile("latest.log", params, new File("./logs")); - } - else - { - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "Incorrect password."); - } - } + public LogFileModule(NanoHTTPD.HTTPSession session) { + super(session); + } + + @Override + public NanoHTTPD.Response getResponse() { + if (ConfigurationEntry.LOGS_SECRET.getString().equals(params.get("password"))) { + return serveFile("latest.log", params, new File("./logs")); + } else { + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.FORBIDDEN, + NanoHTTPD.MIME_PLAINTEXT, "Incorrect password."); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/NanoHTTPD.java b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/NanoHTTPD.java index 9ea59d7..b38a5be 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/NanoHTTPD.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/httpd/NanoHTTPD.java @@ -40,7 +40,8 @@ import me.StevenLawson.TotalFreedomMod.Log; *

    *

    * NanoHTTPD - *

    Copyright (c) 2012-2013 by Paul S. Hawke, 2001,2005-2013 by Jarno Elonen, 2010 by Konstantinos Togias

    + *

    Copyright (c) 2012-2013 by Paul S. Hawke, 2001,2005-2013 by Jarno Elonen, 2010 by + * Konstantinos Togias

    *

    *

    * Features + limitations: @@ -79,1492 +80,1295 @@ import me.StevenLawson.TotalFreedomMod.Log; *

    * See the separate "LICENSE.md" file for the distribution license (Modified BSD licence) */ -public abstract class NanoHTTPD -{ - /** - * Common mime type for dynamic content: plain text - */ - public static final String MIME_PLAINTEXT = "text/plain"; - /** - * Common mime type for dynamic content: html - */ - public static final String MIME_HTML = "text/html"; - // TFM Start - /** - * Common mime type for dynamic content: json - */ - public static final String MIME_JSON = "application/json"; - // TFM End - /** - * Pseudo-Parameter to use to store the actual query string in the parameters map for later re-processing. - */ - private static final String QUERY_STRING_PARAMETER = "NanoHttpd.QUERY_STRING"; - private final String hostname; - private final int myPort; - private ServerSocket myServerSocket; - private Thread myThread; - /** - * Pluggable strategy for asynchronously executing requests. - */ - private AsyncRunner asyncRunner; - /** - * Pluggable strategy for creating and cleaning up temporary files. - */ - private TempFileManagerFactory tempFileManagerFactory; - - /** - * Constructs an HTTP server on given port. - */ - public NanoHTTPD(int port) - { - this(null, port); - } - - /** - * Constructs an HTTP server on given hostname and port. - */ - public NanoHTTPD(String hostname, int port) - { - this.hostname = hostname; - this.myPort = port; - setTempFileManagerFactory(new DefaultTempFileManagerFactory()); - setAsyncRunner(new DefaultAsyncRunner()); - } - - private static final void safeClose(ServerSocket serverSocket) - { - if (serverSocket != null) - { - try - { - serverSocket.close(); - } - catch (IOException e) - { - } - } - } - - private static final void safeClose(Socket socket) - { - if (socket != null) - { - try - { - socket.close(); - } - catch (IOException e) - { - } - } - } - - private static final void safeClose(Closeable closeable) - { - if (closeable != null) - { - try - { - closeable.close(); - } - catch (IOException e) - { - } - } - } - - /** - * Start the server. - * - * @throws IOException if the socket is in use. - */ - public void start() throws IOException - { - myServerSocket = new ServerSocket(); - myServerSocket.bind((hostname != null) ? new InetSocketAddress(hostname, myPort) : new InetSocketAddress(myPort)); - - myThread = new Thread(new Runnable() - { - @Override - public void run() - { - do - { - try - { - final Socket finalAccept = myServerSocket.accept(); - final InputStream inputStream = finalAccept.getInputStream(); - if (inputStream == null) - { - safeClose(finalAccept); - } - else - { - asyncRunner.exec(new Runnable() - { - @Override - public void run() - { - OutputStream outputStream = null; - try - { - outputStream = finalAccept.getOutputStream(); - TempFileManager tempFileManager = tempFileManagerFactory.create(); - HTTPSession session = new HTTPSession(tempFileManager, inputStream, outputStream, finalAccept); - while (!finalAccept.isClosed()) - { - session.execute(); - } - } - catch (Exception e) - { - // When the socket is closed by the client, we throw our own SocketException - // to break the "keep alive" loop above. - if (!(e instanceof SocketException && "NanoHttpd Shutdown".equals(e.getMessage()))) - { - Log.severe(e); - } - } - finally - { - safeClose(outputStream); - safeClose(inputStream); - safeClose(finalAccept); - } - } - }); - } - } - catch (IOException e) - { - } - } - while (!myServerSocket.isClosed()); - } - }); - myThread.setDaemon(true); - myThread.setName("NanoHttpd Main Listener"); - myThread.start(); - } - - /** - * Stop the server. - */ - public void stop() - { - try - { - safeClose(myServerSocket); - myThread.join(); - } - catch (Exception e) - { - Log.severe(e); - } - } - - public final int getListeningPort() - { - return myServerSocket == null ? -1 : myServerSocket.getLocalPort(); - } - - public final boolean wasStarted() - { - return myServerSocket != null && myThread != null; - } - - public final boolean isAlive() - { - return wasStarted() && !myServerSocket.isClosed() && myThread.isAlive(); - } - - /** - * Override this to customize the server. - *

    - *

    - * (By default, this delegates to serveFile() and allows directory listing.) - * - * @param uri Percent-decoded URI without parameters, for example "/index.cgi" - * @param method "GET", "POST" etc. - * @param parms Parsed, percent decoded parameters from URI and, in case of POST, data. - * @param headers Header entries, percent decoded - * @return HTTP response, see class Response for details - */ - @Deprecated - public Response serve(String uri, Method method, Map headers, Map parms, - Map files) - { - return new Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Not Found"); - } - - /** - * Override this to customize the server. - *

    - *

    - * (By default, this delegates to serveFile() and allows directory listing.) - * - * @param session The HTTP session - * @return HTTP response, see class Response for details - */ - public Response serve(HTTPSession session) - { - Map files = new HashMap(); - Method method = session.getMethod(); - if (Method.PUT.equals(method) || Method.POST.equals(method)) - { - try - { - session.parseBody(files); - } - catch (IOException ioe) - { - return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); - } - catch (ResponseException re) - { - return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); - } - } - - return serve(session.getUri(), method, session.getHeaders(), session.getParms(), files); - } - - /** - * Decode percent encoded String values. - * - * @param str the percent encoded String - * @return expanded form of the input, for example "foo%20bar" becomes "foo bar" - */ - protected String decodePercent(String str) - { - String decoded = null; - try - { - decoded = URLDecoder.decode(str, "UTF8"); - } - catch (UnsupportedEncodingException ignored) - { - } - return decoded; - } - - /** - * Decode parameters from a URL, handing the case where a single parameter name might have been - * supplied several times, by return lists of values. In general these lists will contain a single - * element. - * - * @param parms original NanoHttpd parameters values, as passed to the serve() method. - * @return a map of String (parameter name) to List<String> (a list of the values supplied). - */ - protected Map> decodeParameters(Map parms) - { - return this.decodeParameters(parms.get(QUERY_STRING_PARAMETER)); - } - - /** - * Decode parameters from a URL, handing the case where a single parameter name might have been - * supplied several times, by return lists of values. In general these lists will contain a single - * element. - * - * @param queryString a query string pulled from the URL. - * @return a map of String (parameter name) to List<String> (a list of the values supplied). - */ - protected Map> decodeParameters(String queryString) - { - Map> parms = new HashMap>(); - if (queryString != null) - { - StringTokenizer st = new StringTokenizer(queryString, "&"); - while (st.hasMoreTokens()) - { - String e = st.nextToken(); - int sep = e.indexOf('='); - String propertyName = (sep >= 0) ? decodePercent(e.substring(0, sep)).trim() : decodePercent(e).trim(); - if (!parms.containsKey(propertyName)) - { - parms.put(propertyName, new ArrayList()); - } - String propertyValue = (sep >= 0) ? decodePercent(e.substring(sep + 1)) : null; - if (propertyValue != null) - { - parms.get(propertyName).add(propertyValue); - } - } - } - return parms; - } - - // ------------------------------------------------------------------------------- // - // - // Threading Strategy. - // - // ------------------------------------------------------------------------------- // - /** - * Pluggable strategy for asynchronously executing requests. - * - * @param asyncRunner new strategy for handling threads. - */ - public void setAsyncRunner(AsyncRunner asyncRunner) - { - this.asyncRunner = asyncRunner; - } - - // ------------------------------------------------------------------------------- // - // - // Temp file handling strategy. - // - // ------------------------------------------------------------------------------- // - /** - * Pluggable strategy for creating and cleaning up temporary files. - * - * @param tempFileManagerFactory new strategy for handling temp files. - */ - public void setTempFileManagerFactory(TempFileManagerFactory tempFileManagerFactory) - { - this.tempFileManagerFactory = tempFileManagerFactory; - } - - /** - * HTTP Request methods, with the ability to decode a String back to its enum value. - */ - public enum Method - { - GET, PUT, POST, DELETE, HEAD; - - static Method lookup(String method) - { - for (Method m : Method.values()) - { - if (m.toString().equalsIgnoreCase(method)) - { - return m; - } - } - return null; - } - } - - /** - * Pluggable strategy for asynchronously executing requests. - */ - public interface AsyncRunner - { - void exec(Runnable code); - } - - /** - * Factory to create temp file managers. - */ - public interface TempFileManagerFactory - { - TempFileManager create(); - } - - // ------------------------------------------------------------------------------- // - /** - * Temp file manager. - *

    - *

    Temp file managers are created 1-to-1 with incoming requests, to create and cleanup - * temporary files created as a result of handling the request.

    - */ - public interface TempFileManager - { - TempFile createTempFile() throws Exception; - - void clear(); - } - - /** - * A temp file. - *

    - *

    Temp files are responsible for managing the actual temporary storage and cleaning - * themselves up when no longer needed.

    - */ - public interface TempFile - { - OutputStream open() throws Exception; - - void delete() throws Exception; - - String getName(); - } - - /** - * Default threading strategy for NanoHttpd. - *

    - *

    By default, the server spawns a new Thread for every incoming request. These are set - * to daemon status, and named according to the request number. The name is - * useful when profiling the application.

    - */ - public static class DefaultAsyncRunner implements AsyncRunner - { - private long requestCount; - - @Override - public void exec(Runnable code) - { - ++requestCount; - Thread t = new Thread(code); - t.setDaemon(true); - t.setName("NanoHttpd Request Processor (#" + requestCount + ")"); - t.start(); - } - } - - /** - * Default strategy for creating and cleaning up temporary files. - *

    - *

    This class stores its files in the standard location (that is, - * wherever java.io.tmpdir points to). Files are added - * to an internal list, and deleted when no longer needed (that is, - * when clear() is invoked at the end of processing a - * request).

    - */ - public static class DefaultTempFileManager implements TempFileManager - { - private final String tmpdir; - private final List tempFiles; - - public DefaultTempFileManager() - { - tmpdir = System.getProperty("java.io.tmpdir"); - tempFiles = new ArrayList(); - } - - @Override - public TempFile createTempFile() throws Exception - { - DefaultTempFile tempFile = new DefaultTempFile(tmpdir); - tempFiles.add(tempFile); - return tempFile; - } - - @Override - public void clear() - { - for (TempFile file : tempFiles) - { - try - { - file.delete(); - } - catch (Exception ignored) - { - } - } - tempFiles.clear(); - } - } - - /** - * Default strategy for creating and cleaning up temporary files. - *

    - *

    By default, files are created by File.createTempFile() in - * the directory specified.

    - */ - public static class DefaultTempFile implements TempFile - { - private final File file; - private final OutputStream fstream; - - public DefaultTempFile(String tempdir) throws IOException - { - file = File.createTempFile("NanoHTTPD-", "", new File(tempdir)); - fstream = new FileOutputStream(file); - } - - @Override - public OutputStream open() throws Exception - { - return fstream; - } - - @Override - public void delete() throws Exception - { - safeClose(fstream); - file.delete(); - } - - @Override - public String getName() - { - return file.getAbsolutePath(); - } - } - - /** - * HTTP response. Return one of these from serve(). - */ - public static class Response - { - /** - * HTTP status code after processing, e.g. "200 OK", HTTP_OK - */ - private Status status; - /** - * MIME type of content, e.g. "text/html" - */ - private String mimeType; - /** - * Data of the response, may be null. - */ - private InputStream data; - /** - * Headers for the HTTP response. Use addHeader() to add lines. - */ - private final Map header = new HashMap(); - /** - * The request method that spawned this response. - */ - private Method requestMethod; - /** - * Use chunkedTransfer - */ - private boolean chunkedTransfer; - - /** - * Default constructor: response = HTTP_OK, mime = MIME_HTML and your supplied message - */ - public Response(String msg) - { - this(Status.OK, MIME_HTML, msg); - } - - /** - * Basic constructor. - */ - public Response(Status status, String mimeType, InputStream data) - { - this.status = status; - this.mimeType = mimeType; - this.data = data; - } - - /** - * Convenience method that makes an InputStream out of given text. - */ - public Response(Status status, String mimeType, String txt) - { - this.status = status; - this.mimeType = mimeType; - this.data = txt != null ? new ByteArrayInputStream(txt.getBytes(StandardCharsets.UTF_8)) : null; - } - - /** - * Adds given line to the header. - */ - public void addHeader(String name, String value) - { - header.put(name, value); - } - - /** - * Sends given response to the socket. - */ - private void send(OutputStream outputStream) - { - String mime = mimeType; - SimpleDateFormat gmtFrmt = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss 'GMT'", Locale.US); - gmtFrmt.setTimeZone(TimeZone.getTimeZone("GMT")); - - try - { - if (status == null) - { - throw new Error("sendResponse(): Status can't be null."); - } - PrintWriter pw = new PrintWriter(outputStream); - pw.print("HTTP/1.1 " + status.getDescription() + " \r\n"); - - if (mime != null) - { - pw.print("Content-Type: " + mime + "\r\n"); - } - - if (header == null || header.get("Date") == null) - { - pw.print("Date: " + gmtFrmt.format(new Date()) + "\r\n"); - } - - if (header != null) - { - for (String key : header.keySet()) - { - String value = header.get(key); - pw.print(key + ": " + value + "\r\n"); - } - } - - pw.print("Connection: keep-alive\r\n"); - - if (requestMethod != Method.HEAD && chunkedTransfer) - { - sendAsChunked(outputStream, pw); - } - else - { - sendAsFixedLength(outputStream, pw); - } - outputStream.flush(); - safeClose(data); - } - catch (IOException ioe) - { - // Couldn't write? No can do. - } - } - - private void sendAsChunked(OutputStream outputStream, PrintWriter pw) throws IOException - { - pw.print("Transfer-Encoding: chunked\r\n"); - pw.print("\r\n"); - pw.flush(); - int BUFFER_SIZE = 16 * 1024; - byte[] CRLF = "\r\n".getBytes(); - byte[] buff = new byte[BUFFER_SIZE]; - int read; - while ((read = data.read(buff)) > 0) - { - outputStream.write(String.format("%x\r\n", read).getBytes()); - outputStream.write(buff, 0, read); - outputStream.write(CRLF); - } - outputStream.write(String.format("0\r\n\r\n").getBytes()); - } - - private void sendAsFixedLength(OutputStream outputStream, PrintWriter pw) throws IOException - { - int pending = data != null ? data.available() : 0; // This is to support partial sends, see serveFile() - pw.print("Content-Length: " + pending + "\r\n"); - - pw.print("\r\n"); - pw.flush(); - - if (requestMethod != Method.HEAD && data != null) - { - int BUFFER_SIZE = 16 * 1024; - byte[] buff = new byte[BUFFER_SIZE]; - while (pending > 0) - { - int read = data.read(buff, 0, ((pending > BUFFER_SIZE) ? BUFFER_SIZE : pending)); - if (read <= 0) - { - break; - } - outputStream.write(buff, 0, read); - - pending -= read; - } - } - } - - public Status getStatus() - { - return status; - } - - public void setStatus(Status status) - { - this.status = status; - } - - public String getMimeType() - { - return mimeType; - } - - public void setMimeType(String mimeType) - { - this.mimeType = mimeType; - } - - public InputStream getData() - { - return data; - } - - public void setData(InputStream data) - { - this.data = data; - } - - public Method getRequestMethod() - { - return requestMethod; - } - - public void setRequestMethod(Method requestMethod) - { - this.requestMethod = requestMethod; - } - - public void setChunkedTransfer(boolean chunkedTransfer) - { - this.chunkedTransfer = chunkedTransfer; - } - - /** - * Some HTTP response status codes - */ - public enum Status - { - OK(200, "OK"), CREATED(201, "Created"), ACCEPTED(202, "Accepted"), NO_CONTENT(204, "No Content"), PARTIAL_CONTENT(206, "Partial Content"), REDIRECT(301, - "Moved Permanently"), NOT_MODIFIED(304, "Not Modified"), BAD_REQUEST(400, "Bad Request"), UNAUTHORIZED(401, - "Unauthorized"), FORBIDDEN(403, "Forbidden"), NOT_FOUND(404, "Not Found"), RANGE_NOT_SATISFIABLE(416, - "Requested Range Not Satisfiable"), INTERNAL_ERROR(500, "Internal Server Error"); - private final int requestStatus; - private final String description; - - Status(int requestStatus, String description) - { - this.requestStatus = requestStatus; - this.description = description; - } - - public int getRequestStatus() - { - return this.requestStatus; - } - - public String getDescription() - { - return "" + this.requestStatus + " " + description; - } - } - } - - public static final class ResponseException extends Exception - { - private final Response.Status status; - - public ResponseException(Response.Status status, String message) - { - super(message); - this.status = status; - } - - public ResponseException(Response.Status status, String message, Exception e) - { - super(message, e); - this.status = status; - } - - public Response.Status getStatus() - { - return status; - } - } - - /** - * Default strategy for creating and cleaning up temporary files. - */ - private class DefaultTempFileManagerFactory implements TempFileManagerFactory - { - @Override - public TempFileManager create() - { - return new DefaultTempFileManager(); - } - } - - /** - * Handles one session, i.e. parses the HTTP request and returns the response. - */ - protected class HTTPSession - { - public static final int BUFSIZE = 8192; - private final TempFileManager tempFileManager; - private final OutputStream outputStream; - private final Socket socket; - private InputStream inputStream; - private int splitbyte; - private int rlen; - private String uri; - private Method method; - private Map parms; - private Map headers; - private CookieHandler cookies; - - public HTTPSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream, Socket socket) - { - this.tempFileManager = tempFileManager; - this.inputStream = inputStream; - this.outputStream = outputStream; - this.socket = socket; - } - - public void execute() throws IOException - { - try - { - // Read the first 8192 bytes. - // The full header should fit in here. - // Apache's default header limit is 8KB. - // Do NOT assume that a single read will get the entire header at once! - byte[] buf = new byte[BUFSIZE]; - splitbyte = 0; - rlen = 0; - { - int read = inputStream.read(buf, 0, BUFSIZE); - if (read == -1) - { - // socket was been closed - throw new SocketException("NanoHttpd Shutdown"); - } - while (read > 0) - { - rlen += read; - splitbyte = findHeaderEnd(buf, rlen); - if (splitbyte > 0) - { - break; - } - read = inputStream.read(buf, rlen, BUFSIZE - rlen); - } - } - - if (splitbyte < rlen) - { - ByteArrayInputStream splitInputStream = new ByteArrayInputStream(buf, splitbyte, rlen - splitbyte); - SequenceInputStream sequenceInputStream = new SequenceInputStream(splitInputStream, inputStream); - inputStream = sequenceInputStream; - } - - parms = new HashMap(); - headers = new HashMap(); - - // Create a BufferedReader for parsing the header. - BufferedReader hin = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(buf, 0, rlen))); - - // Decode the header into parms and header java properties - Map pre = new HashMap(); - decodeHeader(hin, pre, parms, headers); - - method = Method.lookup(pre.get("method")); - if (method == null) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Syntax error."); - } - - uri = pre.get("uri"); - - cookies = new CookieHandler(headers); - - // Ok, now do the serve() - Response r = serve(this); - if (r == null) - { - throw new ResponseException(Response.Status.INTERNAL_ERROR, "SERVER INTERNAL ERROR: Serve() returned a null response."); - } - else - { - cookies.unloadQueue(r); - r.setRequestMethod(method); - r.send(outputStream); - } - } - catch (SocketException e) - { - // throw it out to close socket object (finalAccept) - throw e; - } - catch (IOException ioe) - { - Response r = new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); - r.send(outputStream); - safeClose(outputStream); - } - catch (ResponseException re) - { - Response r = new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); - r.send(outputStream); - safeClose(outputStream); - } - finally - { - tempFileManager.clear(); - } - } - - protected void parseBody(Map files) throws IOException, ResponseException - { - RandomAccessFile randomAccessFile = null; - BufferedReader in = null; - try - { - - randomAccessFile = getTmpBucket(); - - long size; - if (headers.containsKey("content-length")) - { - size = Integer.parseInt(headers.get("content-length")); - } - else if (splitbyte < rlen) - { - size = rlen - splitbyte; - } - else - { - size = 0; - } - - // Now read all the body and write it to f - byte[] buf = new byte[512]; - while (rlen >= 0 && size > 0) - { - rlen = inputStream.read(buf, 0, 512); - size -= rlen; - if (rlen > 0) - { - randomAccessFile.write(buf, 0, rlen); - } - } - - // Get the raw body as a byte [] - ByteBuffer fbuf = randomAccessFile.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, randomAccessFile.length()); - randomAccessFile.seek(0); - - // Create a BufferedReader for easily reading it as string. - InputStream bin = new FileInputStream(randomAccessFile.getFD()); - in = new BufferedReader(new InputStreamReader(bin)); - - // If the method is POST, there may be parameters - // in data section, too, read it: - if (Method.POST.equals(method)) - { - String contentType = ""; - String contentTypeHeader = headers.get("content-type"); - - StringTokenizer st = null; - if (contentTypeHeader != null) - { - st = new StringTokenizer(contentTypeHeader, ",; "); - if (st.hasMoreTokens()) - { - contentType = st.nextToken(); - } - } - - if ("multipart/form-data".equalsIgnoreCase(contentType)) - { - // Handle multipart/form-data - if (!st.hasMoreTokens()) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Content type is multipart/form-data but boundary missing. Usage: GET /example/file.html"); - } - - String boundaryStartString = "boundary="; - int boundaryContentStart = contentTypeHeader.indexOf(boundaryStartString) + boundaryStartString.length(); - String boundary = contentTypeHeader.substring(boundaryContentStart); - if (boundary.startsWith("\"") && boundary.endsWith("\"")) - { - boundary = boundary.substring(1, boundary.length() - 1); - } - - decodeMultipartData(boundary, fbuf, in, parms, files); - } - else - { - // Handle application/x-www-form-urlencoded - String postLine = ""; - char[] pbuf = new char[512]; - int read = in.read(pbuf); - while (read >= 0 && !postLine.endsWith("\r\n")) - { - postLine += String.valueOf(pbuf, 0, read); - read = in.read(pbuf); - } - postLine = postLine.trim(); - decodeParms(postLine, parms); - } - } - else if (Method.PUT.equals(method)) - { - files.put("content", saveTmpFile(fbuf, 0, fbuf.limit())); - } - } - finally - { - safeClose(randomAccessFile); - safeClose(in); - } - } - - /** - * Decodes the sent headers and loads the data into Key/value pairs - */ - private void decodeHeader(BufferedReader in, Map pre, Map parms, Map headers) - throws ResponseException - { - try - { - // Read the request line - String inLine = in.readLine(); - if (inLine == null) - { - return; - } - - StringTokenizer st = new StringTokenizer(inLine); - if (!st.hasMoreTokens()) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Syntax error. Usage: GET /example/file.html"); - } - - pre.put("method", st.nextToken()); - - if (!st.hasMoreTokens()) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Missing URI. Usage: GET /example/file.html"); - } - - String uri = st.nextToken(); - - // Decode parameters from the URI - int qmi = uri.indexOf('?'); - if (qmi >= 0) - { - decodeParms(uri.substring(qmi + 1), parms); - uri = decodePercent(uri.substring(0, qmi)); - } - else - { - uri = decodePercent(uri); - } - - // If there's another token, it's protocol version, - // followed by HTTP headers. Ignore version but parse headers. - // NOTE: this now forces header names lowercase since they are - // case insensitive and vary by client. - if (st.hasMoreTokens()) - { - String line = in.readLine(); - while (line != null && line.trim().length() > 0) - { - int p = line.indexOf(':'); - if (p >= 0) - { - headers.put(line.substring(0, p).trim().toLowerCase(), line.substring(p + 1).trim()); - } - line = in.readLine(); - } - } - - pre.put("uri", uri); - } - catch (IOException ioe) - { - throw new ResponseException(Response.Status.INTERNAL_ERROR, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage(), ioe); - } - } - - /** - * Decodes the Multipart Body data and put it into Key/Value pairs. - */ - private void decodeMultipartData(String boundary, ByteBuffer fbuf, BufferedReader in, Map parms, - Map files) throws ResponseException - { - try - { - int[] bpositions = getBoundaryPositions(fbuf, boundary.getBytes()); - int boundarycount = 1; - String mpline = in.readLine(); - while (mpline != null) - { - if (!mpline.contains(boundary)) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Content type is multipart/form-data but next chunk does not start with boundary. Usage: GET /example/file.html"); - } - boundarycount++; - Map item = new HashMap(); - mpline = in.readLine(); - while (mpline != null && mpline.trim().length() > 0) - { - int p = mpline.indexOf(':'); - if (p != -1) - { - item.put(mpline.substring(0, p).trim().toLowerCase(), mpline.substring(p + 1).trim()); - } - mpline = in.readLine(); - } - if (mpline != null) - { - String contentDisposition = item.get("content-disposition"); - if (contentDisposition == null) - { - throw new ResponseException(Response.Status.BAD_REQUEST, "BAD REQUEST: Content type is multipart/form-data but no content-disposition info found. Usage: GET /example/file.html"); - } - StringTokenizer st = new StringTokenizer(contentDisposition, "; "); - Map disposition = new HashMap(); - while (st.hasMoreTokens()) - { - String token = st.nextToken(); - int p = token.indexOf('='); - if (p != -1) - { - disposition.put(token.substring(0, p).trim().toLowerCase(), token.substring(p + 1).trim()); - } - } - String pname = disposition.get("name"); - pname = pname.substring(1, pname.length() - 1); - - String value = ""; - if (item.get("content-type") == null) - { - while (mpline != null && !mpline.contains(boundary)) - { - mpline = in.readLine(); - if (mpline != null) - { - int d = mpline.indexOf(boundary); - if (d == -1) - { - value += mpline; - } - else - { - value += mpline.substring(0, d - 2); - } - } - } - } - else - { - if (boundarycount > bpositions.length) - { - throw new ResponseException(Response.Status.INTERNAL_ERROR, "Error processing request"); - } - int offset = stripMultipartHeaders(fbuf, bpositions[boundarycount - 2]); - String path = saveTmpFile(fbuf, offset, bpositions[boundarycount - 1] - offset - 4); - files.put(pname, path); - value = disposition.get("filename"); - value = value.substring(1, value.length() - 1); - do - { - mpline = in.readLine(); - } - while (mpline != null && !mpline.contains(boundary)); - } - parms.put(pname, value); - } - } - } - catch (IOException ioe) - { - throw new ResponseException(Response.Status.INTERNAL_ERROR, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage(), ioe); - } - } - - /** - * Find byte index separating header from body. It must be the last byte of the first two sequential new lines. - */ - private int findHeaderEnd(final byte[] buf, int rlen) - { - int splitbyte = 0; - while (splitbyte + 3 < rlen) - { - if (buf[splitbyte] == '\r' && buf[splitbyte + 1] == '\n' && buf[splitbyte + 2] == '\r' && buf[splitbyte + 3] == '\n') - { - return splitbyte + 4; - } - splitbyte++; - } - return 0; - } - - /** - * Find the byte positions where multipart boundaries start. - */ - private int[] getBoundaryPositions(ByteBuffer b, byte[] boundary) - { - int matchcount = 0; - int matchbyte = -1; - List matchbytes = new ArrayList(); - for (int i = 0; i < b.limit(); i++) - { - if (b.get(i) == boundary[matchcount]) - { - if (matchcount == 0) - { - matchbyte = i; - } - matchcount++; - if (matchcount == boundary.length) - { - matchbytes.add(matchbyte); - matchcount = 0; - matchbyte = -1; - } - } - else - { - i -= matchcount; - matchcount = 0; - matchbyte = -1; - } - } - int[] ret = new int[matchbytes.size()]; - for (int i = 0; i < ret.length; i++) - { - ret[i] = matchbytes.get(i); - } - return ret; - } - - /** - * Retrieves the content of a sent file and saves it to a temporary file. The full path to the saved file is returned. - */ - private String saveTmpFile(ByteBuffer b, int offset, int len) - { - String path = ""; - if (len > 0) - { - FileOutputStream fileOutputStream = null; - try - { - TempFile tempFile = tempFileManager.createTempFile(); - ByteBuffer src = b.duplicate(); - fileOutputStream = new FileOutputStream(tempFile.getName()); - FileChannel dest = fileOutputStream.getChannel(); - src.position(offset).limit(offset + len); - dest.write(src.slice()); - path = tempFile.getName(); - } - catch (Exception e) - { // Catch exception if any - Log.severe(e); - } - finally - { - safeClose(fileOutputStream); - } - } - return path; - } - - private RandomAccessFile getTmpBucket() - { - try - { - TempFile tempFile = tempFileManager.createTempFile(); - return new RandomAccessFile(tempFile.getName(), "rw"); - } - catch (Exception e) - { - Log.severe(e); - } - return null; - } - - /** - * It returns the offset separating multipart file headers from the file's data. - */ - private int stripMultipartHeaders(ByteBuffer b, int offset) - { - int i; - for (i = offset; i < b.limit(); i++) - { - if (b.get(i) == '\r' && b.get(++i) == '\n' && b.get(++i) == '\r' && b.get(++i) == '\n') - { - break; - } - } - return i + 1; - } - - /** - * Decodes parameters in percent-encoded URI-format ( e.g. "name=Jack%20Daniels&pass=Single%20Malt" ) and - * adds them to given Map. NOTE: this doesn't support multiple identical keys due to the simplicity of Map. - */ - private void decodeParms(String parms, Map p) - { - if (parms == null) - { - p.put(QUERY_STRING_PARAMETER, ""); - return; - } - - p.put(QUERY_STRING_PARAMETER, parms); - StringTokenizer st = new StringTokenizer(parms, "&"); - while (st.hasMoreTokens()) - { - String e = st.nextToken(); - int sep = e.indexOf('='); - if (sep >= 0) - { - p.put(decodePercent(e.substring(0, sep)).trim(), - decodePercent(e.substring(sep + 1))); - } - else - { - p.put(decodePercent(e).trim(), ""); - } - } - } - - public final Map getParms() - { - return parms; - } - - public final Map getHeaders() - { - return headers; - } - - public final String getUri() - { - return uri; - } - - public final Method getMethod() - { - return method; - } - - public final InputStream getInputStream() - { - return inputStream; - } - - public CookieHandler getCookies() - { - return cookies; - } - - public Socket getSocket() - { - return socket; - } - } - - public static class Cookie - { - private final String n; - private final String v; - private final String e; - - public Cookie(String name, String value, String expires) - { - n = name; - v = value; - e = expires; - } - - public Cookie(String name, String value) - { - this(name, value, 30); - } - - public Cookie(String name, String value, int numDays) - { - n = name; - v = value; - e = getHTTPTime(numDays); - } - - public String getHTTPHeader() - { - String fmt = "%s=%s; expires=%s"; - return String.format(fmt, n, v, e); - } - - public static String getHTTPTime(int days) - { - Calendar calendar = Calendar.getInstance(); - SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); - dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); - calendar.add(Calendar.DAY_OF_MONTH, days); - return dateFormat.format(calendar.getTime()); - } - } - - /** - * Provides rudimentary support for cookies. - * Doesn't support 'path', 'secure' nor 'httpOnly'. - * Feel free to improve it and/or add unsupported features. - * - * @author LordFokas - */ - public class CookieHandler implements Iterable - { - private final HashMap cookies = new HashMap(); - private final ArrayList queue = new ArrayList(); - - public CookieHandler(Map httpHeaders) - { - String raw = httpHeaders.get("cookie"); - if (raw != null) - { - String[] tokens = raw.split(";"); - for (String token : tokens) - { - String[] data = token.trim().split("="); - if (data.length == 2) - { - cookies.put(data[0], data[1]); - } - } - } - } - - @Override - public Iterator iterator() - { - return cookies.keySet().iterator(); - } - - /** - * Read a cookie from the HTTP Headers. - * - * @param name The cookie's name. - * @return The cookie's value if it exists, null otherwise. - */ - public String read(String name) - { - return cookies.get(name); - } - - /** - * Sets a cookie. - * - * @param name The cookie's name. - * @param value The cookie's value. - * @param expires How many days until the cookie expires. - */ - public void set(String name, String value, int expires) - { - queue.add(new Cookie(name, value, Cookie.getHTTPTime(expires))); - } - - public void set(Cookie cookie) - { - queue.add(cookie); - } - - /** - * Set a cookie with an expiration date from a month ago, effectively deleting it on the client side. - * - * @param name The cookie name. - */ - public void delete(String name) - { - set(name, "-delete-", -30); - } - - /** - * Internally used by the webserver to add all queued cookies into the Response's HTTP Headers. - * - * @param response The Response object to which headers the queued cookies will be added. - */ - public void unloadQueue(Response response) - { - for (Cookie cookie : queue) - { - response.addHeader("Set-Cookie", cookie.getHTTPHeader()); - } - } - } +public abstract class NanoHTTPD { + + /** + * Common mime type for dynamic content: plain text + */ + public static final String MIME_PLAINTEXT = "text/plain"; + /** + * Common mime type for dynamic content: html + */ + public static final String MIME_HTML = "text/html"; + // TFM Start + /** + * Common mime type for dynamic content: json + */ + public static final String MIME_JSON = "application/json"; + // TFM End + /** + * Pseudo-Parameter to use to store the actual query string in the parameters map for later + * re-processing. + */ + private static final String QUERY_STRING_PARAMETER = "NanoHttpd.QUERY_STRING"; + private final String hostname; + private final int myPort; + private ServerSocket myServerSocket; + private Thread myThread; + /** + * Pluggable strategy for asynchronously executing requests. + */ + private AsyncRunner asyncRunner; + /** + * Pluggable strategy for creating and cleaning up temporary files. + */ + private TempFileManagerFactory tempFileManagerFactory; + + /** + * Constructs an HTTP server on given port. + */ + public NanoHTTPD(int port) { + this(null, port); + } + + /** + * Constructs an HTTP server on given hostname and port. + */ + public NanoHTTPD(String hostname, int port) { + this.hostname = hostname; + this.myPort = port; + setTempFileManagerFactory(new DefaultTempFileManagerFactory()); + setAsyncRunner(new DefaultAsyncRunner()); + } + + private static final void safeClose(ServerSocket serverSocket) { + if (serverSocket != null) { + try { + serverSocket.close(); + } catch (IOException e) { + } + } + } + + private static final void safeClose(Socket socket) { + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + } + } + } + + private static final void safeClose(Closeable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (IOException e) { + } + } + } + + /** + * Start the server. + * + * @throws IOException if the socket is in use. + */ + public void start() throws IOException { + myServerSocket = new ServerSocket(); + myServerSocket.bind((hostname != null) ? new InetSocketAddress(hostname, myPort) + : new InetSocketAddress(myPort)); + + myThread = new Thread(new Runnable() { + @Override + public void run() { + do { + try { + final Socket finalAccept = myServerSocket.accept(); + final InputStream inputStream = finalAccept.getInputStream(); + if (inputStream == null) { + safeClose(finalAccept); + } else { + asyncRunner.exec(new Runnable() { + @Override + public void run() { + OutputStream outputStream = null; + try { + outputStream = finalAccept.getOutputStream(); + TempFileManager tempFileManager = tempFileManagerFactory.create(); + HTTPSession session = new HTTPSession(tempFileManager, + inputStream, outputStream, finalAccept); + while (!finalAccept.isClosed()) { + session.execute(); + } + } catch (Exception e) { + // When the socket is closed by the client, we throw our own SocketException + // to break the "keep alive" loop above. + if (!(e instanceof SocketException + && "NanoHttpd Shutdown".equals(e.getMessage()))) { + Log.severe(e); + } + } finally { + safeClose(outputStream); + safeClose(inputStream); + safeClose(finalAccept); + } + } + }); + } + } catch (IOException e) { + } + } + while (!myServerSocket.isClosed()); + } + }); + myThread.setDaemon(true); + myThread.setName("NanoHttpd Main Listener"); + myThread.start(); + } + + /** + * Stop the server. + */ + public void stop() { + try { + safeClose(myServerSocket); + myThread.join(); + } catch (Exception e) { + Log.severe(e); + } + } + + public final int getListeningPort() { + return myServerSocket == null ? -1 : myServerSocket.getLocalPort(); + } + + public final boolean wasStarted() { + return myServerSocket != null && myThread != null; + } + + public final boolean isAlive() { + return wasStarted() && !myServerSocket.isClosed() && myThread.isAlive(); + } + + /** + * Override this to customize the server. + *

    + *

    + * (By default, this delegates to serveFile() and allows directory listing.) + * + * @param uri Percent-decoded URI without parameters, for example "/index.cgi" + * @param method "GET", "POST" etc. + * @param parms Parsed, percent decoded parameters from URI and, in case of POST, data. + * @param headers Header entries, percent decoded + * @return HTTP response, see class Response for details + */ + @Deprecated + public Response serve(String uri, Method method, Map headers, + Map parms, + Map files) { + return new Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Not Found"); + } + + /** + * Override this to customize the server. + *

    + *

    + * (By default, this delegates to serveFile() and allows directory listing.) + * + * @param session The HTTP session + * @return HTTP response, see class Response for details + */ + public Response serve(HTTPSession session) { + Map files = new HashMap(); + Method method = session.getMethod(); + if (Method.PUT.equals(method) || Method.POST.equals(method)) { + try { + session.parseBody(files); + } catch (IOException ioe) { + return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, + "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); + } catch (ResponseException re) { + return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); + } + } + + return serve(session.getUri(), method, session.getHeaders(), session.getParms(), files); + } + + /** + * Decode percent encoded String values. + * + * @param str the percent encoded String + * @return expanded form of the input, for example "foo%20bar" becomes "foo bar" + */ + protected String decodePercent(String str) { + String decoded = null; + try { + decoded = URLDecoder.decode(str, "UTF8"); + } catch (UnsupportedEncodingException ignored) { + } + return decoded; + } + + /** + * Decode parameters from a URL, handing the case where a single parameter name might have been + * supplied several times, by return lists of values. In general these lists will contain a + * single element. + * + * @param parms original NanoHttpd parameters values, as passed to the + * serve() method. + * @return a map of String (parameter name) to List<String> (a + * list of the values supplied). + */ + protected Map> decodeParameters(Map parms) { + return this.decodeParameters(parms.get(QUERY_STRING_PARAMETER)); + } + + /** + * Decode parameters from a URL, handing the case where a single parameter name might have been + * supplied several times, by return lists of values. In general these lists will contain a + * single element. + * + * @param queryString a query string pulled from the URL. + * @return a map of String (parameter name) to List<String> (a + * list of the values supplied). + */ + protected Map> decodeParameters(String queryString) { + Map> parms = new HashMap>(); + if (queryString != null) { + StringTokenizer st = new StringTokenizer(queryString, "&"); + while (st.hasMoreTokens()) { + String e = st.nextToken(); + int sep = e.indexOf('='); + String propertyName = (sep >= 0) ? decodePercent(e.substring(0, sep)).trim() + : decodePercent(e).trim(); + if (!parms.containsKey(propertyName)) { + parms.put(propertyName, new ArrayList()); + } + String propertyValue = (sep >= 0) ? decodePercent(e.substring(sep + 1)) : null; + if (propertyValue != null) { + parms.get(propertyName).add(propertyValue); + } + } + } + return parms; + } + + // ------------------------------------------------------------------------------- // + // + // Threading Strategy. + // + // ------------------------------------------------------------------------------- // + + /** + * Pluggable strategy for asynchronously executing requests. + * + * @param asyncRunner new strategy for handling threads. + */ + public void setAsyncRunner(AsyncRunner asyncRunner) { + this.asyncRunner = asyncRunner; + } + + // ------------------------------------------------------------------------------- // + // + // Temp file handling strategy. + // + // ------------------------------------------------------------------------------- // + + /** + * Pluggable strategy for creating and cleaning up temporary files. + * + * @param tempFileManagerFactory new strategy for handling temp files. + */ + public void setTempFileManagerFactory(TempFileManagerFactory tempFileManagerFactory) { + this.tempFileManagerFactory = tempFileManagerFactory; + } + + /** + * HTTP Request methods, with the ability to decode a String back to its enum + * value. + */ + public enum Method { + GET, PUT, POST, DELETE, HEAD; + + static Method lookup(String method) { + for (Method m : Method.values()) { + if (m.toString().equalsIgnoreCase(method)) { + return m; + } + } + return null; + } + } + + /** + * Pluggable strategy for asynchronously executing requests. + */ + public interface AsyncRunner { + + void exec(Runnable code); + } + + /** + * Factory to create temp file managers. + */ + public interface TempFileManagerFactory { + + TempFileManager create(); + } + + // ------------------------------------------------------------------------------- // + + /** + * Temp file manager. + *

    + *

    Temp file managers are created 1-to-1 with incoming requests, to create and cleanup + * temporary files created as a result of handling the request.

    + */ + public interface TempFileManager { + + TempFile createTempFile() throws Exception; + + void clear(); + } + + /** + * A temp file. + *

    + *

    Temp files are responsible for managing the actual temporary storage and cleaning + * themselves up when no longer needed.

    + */ + public interface TempFile { + + OutputStream open() throws Exception; + + void delete() throws Exception; + + String getName(); + } + + /** + * Default threading strategy for NanoHttpd. + *

    + *

    By default, the server spawns a new Thread for every incoming request. These are set + * to daemon status, and named according to the request number. The name is useful when + * profiling the application.

    + */ + public static class DefaultAsyncRunner implements AsyncRunner { + + private long requestCount; + + @Override + public void exec(Runnable code) { + ++requestCount; + Thread t = new Thread(code); + t.setDaemon(true); + t.setName("NanoHttpd Request Processor (#" + requestCount + ")"); + t.start(); + } + } + + /** + * Default strategy for creating and cleaning up temporary files. + *

    + *

    This class stores its files in the standard location (that is, + * wherever java.io.tmpdir points to). Files are added to an internal list, and + * deleted when no longer needed (that is, when clear() is invoked at the end of + * processing a request).

    + */ + public static class DefaultTempFileManager implements TempFileManager { + + private final String tmpdir; + private final List tempFiles; + + public DefaultTempFileManager() { + tmpdir = System.getProperty("java.io.tmpdir"); + tempFiles = new ArrayList(); + } + + @Override + public TempFile createTempFile() throws Exception { + DefaultTempFile tempFile = new DefaultTempFile(tmpdir); + tempFiles.add(tempFile); + return tempFile; + } + + @Override + public void clear() { + for (TempFile file : tempFiles) { + try { + file.delete(); + } catch (Exception ignored) { + } + } + tempFiles.clear(); + } + } + + /** + * Default strategy for creating and cleaning up temporary files. + *

    + *

    By default, files are created by File.createTempFile() in + * the directory specified.

    + */ + public static class DefaultTempFile implements TempFile { + + private final File file; + private final OutputStream fstream; + + public DefaultTempFile(String tempdir) throws IOException { + file = File.createTempFile("NanoHTTPD-", "", new File(tempdir)); + fstream = new FileOutputStream(file); + } + + @Override + public OutputStream open() throws Exception { + return fstream; + } + + @Override + public void delete() throws Exception { + safeClose(fstream); + file.delete(); + } + + @Override + public String getName() { + return file.getAbsolutePath(); + } + } + + /** + * HTTP response. Return one of these from serve(). + */ + public static class Response { + + /** + * Headers for the HTTP response. Use addHeader() to add lines. + */ + private final Map header = new HashMap(); + /** + * HTTP status code after processing, e.g. "200 OK", HTTP_OK + */ + private Status status; + /** + * MIME type of content, e.g. "text/html" + */ + private String mimeType; + /** + * Data of the response, may be null. + */ + private InputStream data; + /** + * The request method that spawned this response. + */ + private Method requestMethod; + /** + * Use chunkedTransfer + */ + private boolean chunkedTransfer; + + /** + * Default constructor: response = HTTP_OK, mime = MIME_HTML and your supplied message + */ + public Response(String msg) { + this(Status.OK, MIME_HTML, msg); + } + + /** + * Basic constructor. + */ + public Response(Status status, String mimeType, InputStream data) { + this.status = status; + this.mimeType = mimeType; + this.data = data; + } + + /** + * Convenience method that makes an InputStream out of given text. + */ + public Response(Status status, String mimeType, String txt) { + this.status = status; + this.mimeType = mimeType; + this.data = + txt != null ? new ByteArrayInputStream(txt.getBytes(StandardCharsets.UTF_8)) : null; + } + + /** + * Adds given line to the header. + */ + public void addHeader(String name, String value) { + header.put(name, value); + } + + /** + * Sends given response to the socket. + */ + private void send(OutputStream outputStream) { + String mime = mimeType; + SimpleDateFormat gmtFrmt = new SimpleDateFormat("E, d MMM yyyy HH:mm:ss 'GMT'", + Locale.US); + gmtFrmt.setTimeZone(TimeZone.getTimeZone("GMT")); + + try { + if (status == null) { + throw new Error("sendResponse(): Status can't be null."); + } + PrintWriter pw = new PrintWriter(outputStream); + pw.print("HTTP/1.1 " + status.getDescription() + " \r\n"); + + if (mime != null) { + pw.print("Content-Type: " + mime + "\r\n"); + } + + if (header == null || header.get("Date") == null) { + pw.print("Date: " + gmtFrmt.format(new Date()) + "\r\n"); + } + + if (header != null) { + for (String key : header.keySet()) { + String value = header.get(key); + pw.print(key + ": " + value + "\r\n"); + } + } + + pw.print("Connection: keep-alive\r\n"); + + if (requestMethod != Method.HEAD && chunkedTransfer) { + sendAsChunked(outputStream, pw); + } else { + sendAsFixedLength(outputStream, pw); + } + outputStream.flush(); + safeClose(data); + } catch (IOException ioe) { + // Couldn't write? No can do. + } + } + + private void sendAsChunked(OutputStream outputStream, PrintWriter pw) throws IOException { + pw.print("Transfer-Encoding: chunked\r\n"); + pw.print("\r\n"); + pw.flush(); + int BUFFER_SIZE = 16 * 1024; + byte[] CRLF = "\r\n".getBytes(); + byte[] buff = new byte[BUFFER_SIZE]; + int read; + while ((read = data.read(buff)) > 0) { + outputStream.write(String.format("%x\r\n", read).getBytes()); + outputStream.write(buff, 0, read); + outputStream.write(CRLF); + } + outputStream.write(String.format("0\r\n\r\n").getBytes()); + } + + private void sendAsFixedLength(OutputStream outputStream, PrintWriter pw) + throws IOException { + int pending = data != null ? data.available() + : 0; // This is to support partial sends, see serveFile() + pw.print("Content-Length: " + pending + "\r\n"); + + pw.print("\r\n"); + pw.flush(); + + if (requestMethod != Method.HEAD && data != null) { + int BUFFER_SIZE = 16 * 1024; + byte[] buff = new byte[BUFFER_SIZE]; + while (pending > 0) { + int read = data.read(buff, 0, + ((pending > BUFFER_SIZE) ? BUFFER_SIZE : pending)); + if (read <= 0) { + break; + } + outputStream.write(buff, 0, read); + + pending -= read; + } + } + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public String getMimeType() { + return mimeType; + } + + public void setMimeType(String mimeType) { + this.mimeType = mimeType; + } + + public InputStream getData() { + return data; + } + + public void setData(InputStream data) { + this.data = data; + } + + public Method getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(Method requestMethod) { + this.requestMethod = requestMethod; + } + + public void setChunkedTransfer(boolean chunkedTransfer) { + this.chunkedTransfer = chunkedTransfer; + } + + /** + * Some HTTP response status codes + */ + public enum Status { + OK(200, "OK"), CREATED(201, "Created"), ACCEPTED(202, "Accepted"), NO_CONTENT(204, + "No Content"), PARTIAL_CONTENT(206, "Partial Content"), REDIRECT(301, + "Moved Permanently"), NOT_MODIFIED(304, "Not Modified"), BAD_REQUEST(400, + "Bad Request"), UNAUTHORIZED(401, + "Unauthorized"), FORBIDDEN(403, "Forbidden"), NOT_FOUND(404, + "Not Found"), RANGE_NOT_SATISFIABLE(416, + "Requested Range Not Satisfiable"), INTERNAL_ERROR(500, "Internal Server Error"); + private final int requestStatus; + private final String description; + + Status(int requestStatus, String description) { + this.requestStatus = requestStatus; + this.description = description; + } + + public int getRequestStatus() { + return this.requestStatus; + } + + public String getDescription() { + return "" + this.requestStatus + " " + description; + } + } + } + + public static final class ResponseException extends Exception { + + private final Response.Status status; + + public ResponseException(Response.Status status, String message) { + super(message); + this.status = status; + } + + public ResponseException(Response.Status status, String message, Exception e) { + super(message, e); + this.status = status; + } + + public Response.Status getStatus() { + return status; + } + } + + public static class Cookie { + + private final String n; + private final String v; + private final String e; + + public Cookie(String name, String value, String expires) { + n = name; + v = value; + e = expires; + } + + public Cookie(String name, String value) { + this(name, value, 30); + } + + public Cookie(String name, String value, int numDays) { + n = name; + v = value; + e = getHTTPTime(numDays); + } + + public static String getHTTPTime(int days) { + Calendar calendar = Calendar.getInstance(); + SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", + Locale.US); + dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); + calendar.add(Calendar.DAY_OF_MONTH, days); + return dateFormat.format(calendar.getTime()); + } + + public String getHTTPHeader() { + String fmt = "%s=%s; expires=%s"; + return String.format(fmt, n, v, e); + } + } + + /** + * Default strategy for creating and cleaning up temporary files. + */ + private class DefaultTempFileManagerFactory implements TempFileManagerFactory { + + @Override + public TempFileManager create() { + return new DefaultTempFileManager(); + } + } + + /** + * Handles one session, i.e. parses the HTTP request and returns the response. + */ + protected class HTTPSession { + + public static final int BUFSIZE = 8192; + private final TempFileManager tempFileManager; + private final OutputStream outputStream; + private final Socket socket; + private InputStream inputStream; + private int splitbyte; + private int rlen; + private String uri; + private Method method; + private Map parms; + private Map headers; + private CookieHandler cookies; + + public HTTPSession(TempFileManager tempFileManager, InputStream inputStream, + OutputStream outputStream, Socket socket) { + this.tempFileManager = tempFileManager; + this.inputStream = inputStream; + this.outputStream = outputStream; + this.socket = socket; + } + + public void execute() throws IOException { + try { + // Read the first 8192 bytes. + // The full header should fit in here. + // Apache's default header limit is 8KB. + // Do NOT assume that a single read will get the entire header at once! + byte[] buf = new byte[BUFSIZE]; + splitbyte = 0; + rlen = 0; + { + int read = inputStream.read(buf, 0, BUFSIZE); + if (read == -1) { + // socket was been closed + throw new SocketException("NanoHttpd Shutdown"); + } + while (read > 0) { + rlen += read; + splitbyte = findHeaderEnd(buf, rlen); + if (splitbyte > 0) { + break; + } + read = inputStream.read(buf, rlen, BUFSIZE - rlen); + } + } + + if (splitbyte < rlen) { + ByteArrayInputStream splitInputStream = new ByteArrayInputStream(buf, splitbyte, + rlen - splitbyte); + SequenceInputStream sequenceInputStream = new SequenceInputStream( + splitInputStream, inputStream); + inputStream = sequenceInputStream; + } + + parms = new HashMap(); + headers = new HashMap(); + + // Create a BufferedReader for parsing the header. + BufferedReader hin = new BufferedReader( + new InputStreamReader(new ByteArrayInputStream(buf, 0, rlen))); + + // Decode the header into parms and header java properties + Map pre = new HashMap(); + decodeHeader(hin, pre, parms, headers); + + method = Method.lookup(pre.get("method")); + if (method == null) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Syntax error."); + } + + uri = pre.get("uri"); + + cookies = new CookieHandler(headers); + + // Ok, now do the serve() + Response r = serve(this); + if (r == null) { + throw new ResponseException(Response.Status.INTERNAL_ERROR, + "SERVER INTERNAL ERROR: Serve() returned a null response."); + } else { + cookies.unloadQueue(r); + r.setRequestMethod(method); + r.send(outputStream); + } + } catch (SocketException e) { + // throw it out to close socket object (finalAccept) + throw e; + } catch (IOException ioe) { + Response r = new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, + "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); + r.send(outputStream); + safeClose(outputStream); + } catch (ResponseException re) { + Response r = new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); + r.send(outputStream); + safeClose(outputStream); + } finally { + tempFileManager.clear(); + } + } + + protected void parseBody(Map files) throws IOException, ResponseException { + RandomAccessFile randomAccessFile = null; + BufferedReader in = null; + try { + + randomAccessFile = getTmpBucket(); + + long size; + if (headers.containsKey("content-length")) { + size = Integer.parseInt(headers.get("content-length")); + } else if (splitbyte < rlen) { + size = rlen - splitbyte; + } else { + size = 0; + } + + // Now read all the body and write it to f + byte[] buf = new byte[512]; + while (rlen >= 0 && size > 0) { + rlen = inputStream.read(buf, 0, 512); + size -= rlen; + if (rlen > 0) { + randomAccessFile.write(buf, 0, rlen); + } + } + + // Get the raw body as a byte [] + ByteBuffer fbuf = randomAccessFile.getChannel() + .map(FileChannel.MapMode.READ_ONLY, 0, randomAccessFile.length()); + randomAccessFile.seek(0); + + // Create a BufferedReader for easily reading it as string. + InputStream bin = new FileInputStream(randomAccessFile.getFD()); + in = new BufferedReader(new InputStreamReader(bin)); + + // If the method is POST, there may be parameters + // in data section, too, read it: + if (Method.POST.equals(method)) { + String contentType = ""; + String contentTypeHeader = headers.get("content-type"); + + StringTokenizer st = null; + if (contentTypeHeader != null) { + st = new StringTokenizer(contentTypeHeader, ",; "); + if (st.hasMoreTokens()) { + contentType = st.nextToken(); + } + } + + if ("multipart/form-data".equalsIgnoreCase(contentType)) { + // Handle multipart/form-data + if (!st.hasMoreTokens()) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Content type is multipart/form-data but boundary missing. Usage: GET /example/file.html"); + } + + String boundaryStartString = "boundary="; + int boundaryContentStart = contentTypeHeader.indexOf(boundaryStartString) + + boundaryStartString.length(); + String boundary = contentTypeHeader.substring(boundaryContentStart); + if (boundary.startsWith("\"") && boundary.endsWith("\"")) { + boundary = boundary.substring(1, boundary.length() - 1); + } + + decodeMultipartData(boundary, fbuf, in, parms, files); + } else { + // Handle application/x-www-form-urlencoded + String postLine = ""; + char[] pbuf = new char[512]; + int read = in.read(pbuf); + while (read >= 0 && !postLine.endsWith("\r\n")) { + postLine += String.valueOf(pbuf, 0, read); + read = in.read(pbuf); + } + postLine = postLine.trim(); + decodeParms(postLine, parms); + } + } else if (Method.PUT.equals(method)) { + files.put("content", saveTmpFile(fbuf, 0, fbuf.limit())); + } + } finally { + safeClose(randomAccessFile); + safeClose(in); + } + } + + /** + * Decodes the sent headers and loads the data into Key/value pairs + */ + private void decodeHeader(BufferedReader in, Map pre, + Map parms, Map headers) + throws ResponseException { + try { + // Read the request line + String inLine = in.readLine(); + if (inLine == null) { + return; + } + + StringTokenizer st = new StringTokenizer(inLine); + if (!st.hasMoreTokens()) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Syntax error. Usage: GET /example/file.html"); + } + + pre.put("method", st.nextToken()); + + if (!st.hasMoreTokens()) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Missing URI. Usage: GET /example/file.html"); + } + + String uri = st.nextToken(); + + // Decode parameters from the URI + int qmi = uri.indexOf('?'); + if (qmi >= 0) { + decodeParms(uri.substring(qmi + 1), parms); + uri = decodePercent(uri.substring(0, qmi)); + } else { + uri = decodePercent(uri); + } + + // If there's another token, it's protocol version, + // followed by HTTP headers. Ignore version but parse headers. + // NOTE: this now forces header names lowercase since they are + // case insensitive and vary by client. + if (st.hasMoreTokens()) { + String line = in.readLine(); + while (line != null && line.trim().length() > 0) { + int p = line.indexOf(':'); + if (p >= 0) { + headers.put(line.substring(0, p).trim().toLowerCase(), + line.substring(p + 1).trim()); + } + line = in.readLine(); + } + } + + pre.put("uri", uri); + } catch (IOException ioe) { + throw new ResponseException(Response.Status.INTERNAL_ERROR, + "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage(), ioe); + } + } + + /** + * Decodes the Multipart Body data and put it into Key/Value pairs. + */ + private void decodeMultipartData(String boundary, ByteBuffer fbuf, BufferedReader in, + Map parms, + Map files) throws ResponseException { + try { + int[] bpositions = getBoundaryPositions(fbuf, boundary.getBytes()); + int boundarycount = 1; + String mpline = in.readLine(); + while (mpline != null) { + if (!mpline.contains(boundary)) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Content type is multipart/form-data but next chunk does not start with boundary. Usage: GET /example/file.html"); + } + boundarycount++; + Map item = new HashMap(); + mpline = in.readLine(); + while (mpline != null && mpline.trim().length() > 0) { + int p = mpline.indexOf(':'); + if (p != -1) { + item.put(mpline.substring(0, p).trim().toLowerCase(), + mpline.substring(p + 1).trim()); + } + mpline = in.readLine(); + } + if (mpline != null) { + String contentDisposition = item.get("content-disposition"); + if (contentDisposition == null) { + throw new ResponseException(Response.Status.BAD_REQUEST, + "BAD REQUEST: Content type is multipart/form-data but no content-disposition info found. Usage: GET /example/file.html"); + } + StringTokenizer st = new StringTokenizer(contentDisposition, "; "); + Map disposition = new HashMap(); + while (st.hasMoreTokens()) { + String token = st.nextToken(); + int p = token.indexOf('='); + if (p != -1) { + disposition.put(token.substring(0, p).trim().toLowerCase(), + token.substring(p + 1).trim()); + } + } + String pname = disposition.get("name"); + pname = pname.substring(1, pname.length() - 1); + + String value = ""; + if (item.get("content-type") == null) { + while (mpline != null && !mpline.contains(boundary)) { + mpline = in.readLine(); + if (mpline != null) { + int d = mpline.indexOf(boundary); + if (d == -1) { + value += mpline; + } else { + value += mpline.substring(0, d - 2); + } + } + } + } else { + if (boundarycount > bpositions.length) { + throw new ResponseException(Response.Status.INTERNAL_ERROR, + "Error processing request"); + } + int offset = stripMultipartHeaders(fbuf, bpositions[boundarycount - 2]); + String path = saveTmpFile(fbuf, offset, + bpositions[boundarycount - 1] - offset - 4); + files.put(pname, path); + value = disposition.get("filename"); + value = value.substring(1, value.length() - 1); + do { + mpline = in.readLine(); + } + while (mpline != null && !mpline.contains(boundary)); + } + parms.put(pname, value); + } + } + } catch (IOException ioe) { + throw new ResponseException(Response.Status.INTERNAL_ERROR, + "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage(), ioe); + } + } + + /** + * Find byte index separating header from body. It must be the last byte of the first two + * sequential new lines. + */ + private int findHeaderEnd(final byte[] buf, int rlen) { + int splitbyte = 0; + while (splitbyte + 3 < rlen) { + if (buf[splitbyte] == '\r' && buf[splitbyte + 1] == '\n' + && buf[splitbyte + 2] == '\r' && buf[splitbyte + 3] == '\n') { + return splitbyte + 4; + } + splitbyte++; + } + return 0; + } + + /** + * Find the byte positions where multipart boundaries start. + */ + private int[] getBoundaryPositions(ByteBuffer b, byte[] boundary) { + int matchcount = 0; + int matchbyte = -1; + List matchbytes = new ArrayList(); + for (int i = 0; i < b.limit(); i++) { + if (b.get(i) == boundary[matchcount]) { + if (matchcount == 0) { + matchbyte = i; + } + matchcount++; + if (matchcount == boundary.length) { + matchbytes.add(matchbyte); + matchcount = 0; + matchbyte = -1; + } + } else { + i -= matchcount; + matchcount = 0; + matchbyte = -1; + } + } + int[] ret = new int[matchbytes.size()]; + for (int i = 0; i < ret.length; i++) { + ret[i] = matchbytes.get(i); + } + return ret; + } + + /** + * Retrieves the content of a sent file and saves it to a temporary file. The full path to + * the saved file is returned. + */ + private String saveTmpFile(ByteBuffer b, int offset, int len) { + String path = ""; + if (len > 0) { + FileOutputStream fileOutputStream = null; + try { + TempFile tempFile = tempFileManager.createTempFile(); + ByteBuffer src = b.duplicate(); + fileOutputStream = new FileOutputStream(tempFile.getName()); + FileChannel dest = fileOutputStream.getChannel(); + src.position(offset).limit(offset + len); + dest.write(src.slice()); + path = tempFile.getName(); + } catch (Exception e) { // Catch exception if any + Log.severe(e); + } finally { + safeClose(fileOutputStream); + } + } + return path; + } + + private RandomAccessFile getTmpBucket() { + try { + TempFile tempFile = tempFileManager.createTempFile(); + return new RandomAccessFile(tempFile.getName(), "rw"); + } catch (Exception e) { + Log.severe(e); + } + return null; + } + + /** + * It returns the offset separating multipart file headers from the file's data. + */ + private int stripMultipartHeaders(ByteBuffer b, int offset) { + int i; + for (i = offset; i < b.limit(); i++) { + if (b.get(i) == '\r' && b.get(++i) == '\n' && b.get(++i) == '\r' + && b.get(++i) == '\n') { + break; + } + } + return i + 1; + } + + /** + * Decodes parameters in percent-encoded URI-format ( e.g. "name=Jack%20Daniels&pass=Single%20Malt" + * ) and adds them to given Map. NOTE: this doesn't support multiple identical keys due to + * the simplicity of Map. + */ + private void decodeParms(String parms, Map p) { + if (parms == null) { + p.put(QUERY_STRING_PARAMETER, ""); + return; + } + + p.put(QUERY_STRING_PARAMETER, parms); + StringTokenizer st = new StringTokenizer(parms, "&"); + while (st.hasMoreTokens()) { + String e = st.nextToken(); + int sep = e.indexOf('='); + if (sep >= 0) { + p.put(decodePercent(e.substring(0, sep)).trim(), + decodePercent(e.substring(sep + 1))); + } else { + p.put(decodePercent(e).trim(), ""); + } + } + } + + public final Map getParms() { + return parms; + } + + public final Map getHeaders() { + return headers; + } + + public final String getUri() { + return uri; + } + + public final Method getMethod() { + return method; + } + + public final InputStream getInputStream() { + return inputStream; + } + + public CookieHandler getCookies() { + return cookies; + } + + public Socket getSocket() { + return socket; + } + } + + /** + * Provides rudimentary support for cookies. Doesn't support 'path', 'secure' nor 'httpOnly'. + * Feel free to improve it and/or add unsupported features. + * + * @author LordFokas + */ + public class CookieHandler implements Iterable { + + private final HashMap cookies = new HashMap(); + private final ArrayList queue = new ArrayList(); + + public CookieHandler(Map httpHeaders) { + String raw = httpHeaders.get("cookie"); + if (raw != null) { + String[] tokens = raw.split(";"); + for (String token : tokens) { + String[] data = token.trim().split("="); + if (data.length == 2) { + cookies.put(data[0], data[1]); + } + } + } + } + + @Override + public Iterator iterator() { + return cookies.keySet().iterator(); + } + + /** + * Read a cookie from the HTTP Headers. + * + * @param name The cookie's name. + * @return The cookie's value if it exists, null otherwise. + */ + public String read(String name) { + return cookies.get(name); + } + + /** + * Sets a cookie. + * + * @param name The cookie's name. + * @param value The cookie's value. + * @param expires How many days until the cookie expires. + */ + public void set(String name, String value, int expires) { + queue.add(new Cookie(name, value, Cookie.getHTTPTime(expires))); + } + + public void set(Cookie cookie) { + queue.add(cookie); + } + + /** + * Set a cookie with an expiration date from a month ago, effectively deleting it on the + * client side. + * + * @param name The cookie name. + */ + public void delete(String name) { + set(name, "-delete-", -30); + } + + /** + * Internally used by the webserver to add all queued cookies into the Response's HTTP + * Headers. + * + * @param response The Response object to which headers the queued cookies will be added. + */ + public void unloadQueue(Response response) { + for (Cookie cookie : queue) { + response.addHeader("Set-Cookie", cookie.getHTTPHeader()); + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/BlockListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/BlockListener.java index c47fc88..e4c62f0 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/BlockListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/BlockListener.java @@ -8,7 +8,6 @@ import me.StevenLawson.TotalFreedomMod.player.HeartBeat; import me.StevenLawson.TotalFreedomMod.player.PlayerData; import me.StevenLawson.TotalFreedomMod.util.Utilities; import me.StevenLawson.TotalFreedomMod.world.ProtectedArea; -import me.StevenLawson.TotalFreedomMod.world.RollbackManager; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -16,265 +15,230 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.*; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockFromToEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.ItemStack; public class BlockListener implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void onBlockBurn(BlockBurnEvent event) { - if (!ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean()) { - event.setCancelled(true); - } - } - @EventHandler(priority = EventPriority.HIGH) - public void onBlockIgnite(BlockIgniteEvent event) - { - if (!ConfigurationEntry.ALLOW_FIRE_PLACE.getBoolean()) - { - event.setCancelled(true); - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onBlockBurn(BlockBurnEvent event) { + if (!ConfigurationEntry.ALLOW_FIRE_SPREAD.getBoolean()) { + event.setCancelled(true); + } + } - @EventHandler(priority = EventPriority.NORMAL) - public void onBlockBreak(BlockBreakEvent event) - { - final Player player = event.getPlayer(); - final Location location = event.getBlock().getLocation(); + @EventHandler(priority = EventPriority.HIGH) + public void onBlockIgnite(BlockIgniteEvent event) { + if (!ConfigurationEntry.ALLOW_FIRE_PLACE.getBoolean()) { + event.setCancelled(true); + } + } - if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) - { - final PlayerData playerdata = PlayerData.getPlayerData(player); + @EventHandler(priority = EventPriority.NORMAL) + public void onBlockBreak(BlockBreakEvent event) { + final Player player = event.getPlayer(); + final Location location = event.getBlock().getLocation(); - final Location playerLocation = player.getLocation(); + if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) { + final PlayerData playerdata = PlayerData.getPlayerData(player); - final double nukeMonitorRange = ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble().doubleValue(); + final Location playerLocation = player.getLocation(); - boolean outOfRange = false; - if (!playerLocation.getWorld().equals(location.getWorld())) - { - outOfRange = true; - } - else if (playerLocation.distanceSquared(location) > (nukeMonitorRange * nukeMonitorRange)) - { - outOfRange = true; - } + final double nukeMonitorRange = ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble() + .doubleValue(); - if (outOfRange) - { - if (playerdata.incrementAndGetFreecamDestroyCount() > ConfigurationEntry.FREECAM_TRIGGER_COUNT.getInteger()) - { - Utilities.bcastMsg(player.getName() + " has been flagged for possible freecam nuking.", ChatColor.RED); - Utilities.autoEject(player, "Freecam (extended range) block breaking is not permitted on this server."); + boolean outOfRange = false; + if (!playerLocation.getWorld().equals(location.getWorld())) { + outOfRange = true; + } else if (playerLocation.distanceSquared(location) > (nukeMonitorRange + * nukeMonitorRange)) { + outOfRange = true; + } - playerdata.resetFreecamDestroyCount(); + if (outOfRange) { + if (playerdata.incrementAndGetFreecamDestroyCount() + > ConfigurationEntry.FREECAM_TRIGGER_COUNT.getInteger()) { + Utilities.bcastMsg( + player.getName() + " has been flagged for possible freecam nuking.", + ChatColor.RED); + Utilities.autoEject(player, + "Freecam (extended range) block breaking is not permitted on this server."); - event.setCancelled(true); - return; - } - } + playerdata.resetFreecamDestroyCount(); - final Long lastRan = HeartBeat.getLastRan(); - if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) - { - // Log.warning("Heartbeat service timeout - can't check block place/break rates."); - } - else - { - if (playerdata.incrementAndGetBlockDestroyCount() > ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.getInteger()) - { - Utilities.bcastMsg(player.getName() + " is breaking blocks too fast!", ChatColor.RED); - Utilities.autoEject(player, "You are breaking blocks too fast. Nukers are not permitted on this server."); + event.setCancelled(true); + return; + } + } - playerdata.resetBlockDestroyCount(); + final Long lastRan = HeartBeat.getLastRan(); + if (lastRan == null + || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { + // Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } else { + if (playerdata.incrementAndGetBlockDestroyCount() + > ConfigurationEntry.NUKE_MONITOR_COUNT_BREAK.getInteger()) { + Utilities.bcastMsg(player.getName() + " is breaking blocks too fast!", + ChatColor.RED); + Utilities.autoEject(player, + "You are breaking blocks too fast. Nukers are not permitted on this server."); - event.setCancelled(true); - return; - } - } - } + playerdata.resetBlockDestroyCount(); - if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) - { - if (!AdminList.isSuperAdmin(player)) - { - if (ProtectedArea.isInProtectedArea(location)) - { - event.setCancelled(true); - } - } - } - } + event.setCancelled(true); + return; + } + } + } - @EventHandler(priority = EventPriority.HIGH) - public void onBlockPlace(BlockPlaceEvent event) - { - Player player = event.getPlayer(); - Location blockLocation = event.getBlock().getLocation(); + if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { + if (!AdminList.isSuperAdmin(player)) { + if (ProtectedArea.isInProtectedArea(location)) { + event.setCancelled(true); + } + } + } + } - if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) - { - PlayerData playerdata = PlayerData.getPlayerData(player); + @EventHandler(priority = EventPriority.HIGH) + public void onBlockPlace(BlockPlaceEvent event) { + Player player = event.getPlayer(); + Location blockLocation = event.getBlock().getLocation(); - Location playerLocation = player.getLocation(); + if (ConfigurationEntry.NUKE_MONITOR_ENABLED.getBoolean()) { + PlayerData playerdata = PlayerData.getPlayerData(player); - double nukeMonitorRange = ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble().doubleValue(); + Location playerLocation = player.getLocation(); - boolean outOfRange = false; - if (!playerLocation.getWorld().equals(blockLocation.getWorld())) - { - outOfRange = true; - } - else if (playerLocation.distanceSquared(blockLocation) > (nukeMonitorRange * nukeMonitorRange)) - { - outOfRange = true; - } + double nukeMonitorRange = ConfigurationEntry.NUKE_MONITOR_RANGE.getDouble() + .doubleValue(); - if (outOfRange) - { - if (playerdata.incrementAndGetFreecamPlaceCount() > ConfigurationEntry.FREECAM_TRIGGER_COUNT.getInteger()) - { - Utilities.bcastMsg(player.getName() + " has been flagged for possible freecam building.", ChatColor.RED); - Utilities.autoEject(player, "Freecam (extended range) block building is not permitted on this server."); + boolean outOfRange = false; + if (!playerLocation.getWorld().equals(blockLocation.getWorld())) { + outOfRange = true; + } else if (playerLocation.distanceSquared(blockLocation) > (nukeMonitorRange + * nukeMonitorRange)) { + outOfRange = true; + } - playerdata.resetFreecamPlaceCount(); + if (outOfRange) { + if (playerdata.incrementAndGetFreecamPlaceCount() + > ConfigurationEntry.FREECAM_TRIGGER_COUNT.getInteger()) { + Utilities.bcastMsg( + player.getName() + " has been flagged for possible freecam building.", + ChatColor.RED); + Utilities.autoEject(player, + "Freecam (extended range) block building is not permitted on this server."); - event.setCancelled(true); - return; - } - } + playerdata.resetFreecamPlaceCount(); - Long lastRan = HeartBeat.getLastRan(); - if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) - { - //Log.warning("Heartbeat service timeout - can't check block place/break rates."); - } - else - { - if (playerdata.incrementAndGetBlockPlaceCount() > ConfigurationEntry.NUKE_MONITOR_COUNT_PLACE.getInteger()) - { - Utilities.bcastMsg(player.getName() + " is placing blocks too fast!", ChatColor.RED); - Utilities.autoEject(player, "You are placing blocks too fast."); + event.setCancelled(true); + return; + } + } - playerdata.resetBlockPlaceCount(); + Long lastRan = HeartBeat.getLastRan(); + if (lastRan == null + || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { + //Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } else { + if (playerdata.incrementAndGetBlockPlaceCount() + > ConfigurationEntry.NUKE_MONITOR_COUNT_PLACE.getInteger()) { + Utilities.bcastMsg(player.getName() + " is placing blocks too fast!", + ChatColor.RED); + Utilities.autoEject(player, "You are placing blocks too fast."); - event.setCancelled(true); - return; - } - } - } + playerdata.resetBlockPlaceCount(); - if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) - { - if (!AdminList.isSuperAdmin(player)) - { - if (ProtectedArea.isInProtectedArea(blockLocation)) - { - event.setCancelled(true); - return; - } - } - } + event.setCancelled(true); + return; + } + } + } - switch (event.getBlockPlaced().getType()) - { - case LAVA: - case STATIONARY_LAVA: - { - if (ConfigurationEntry.ALLOW_LAVA_PLACE.getBoolean()) - { - Log.info(String.format("%s placed lava @ %s", player.getName(), Utilities.formatLocation(event.getBlock().getLocation()))); + if (ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { + if (!AdminList.isSuperAdmin(player)) { + if (ProtectedArea.isInProtectedArea(blockLocation)) { + event.setCancelled(true); + return; + } + } + } - player.getInventory().clear(player.getInventory().getHeldItemSlot()); - } - else - { - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); - player.sendMessage(ChatColor.GRAY + "Lava placement is currently disabled."); + switch (event.getBlockPlaced().getType()) { + case LAVA: + case STATIONARY_LAVA: { + if (ConfigurationEntry.ALLOW_LAVA_PLACE.getBoolean()) { + Log.info(String.format("%s placed lava @ %s", player.getName(), + Utilities.formatLocation(event.getBlock().getLocation()))); - event.setCancelled(true); - } - break; - } - case WATER: - case STATIONARY_WATER: - { - if (ConfigurationEntry.ALLOW_WATER_PLACE.getBoolean()) - { - Log.info(String.format("%s placed water @ %s", player.getName(), Utilities.formatLocation(event.getBlock().getLocation()))); + player.getInventory().clear(player.getInventory().getHeldItemSlot()); + } else { + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); + player.sendMessage(ChatColor.GRAY + "Lava placement is currently disabled."); - player.getInventory().clear(player.getInventory().getHeldItemSlot()); - } - else - { - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); - player.sendMessage(ChatColor.GRAY + "Water placement is currently disabled."); + event.setCancelled(true); + } + break; + } + case WATER: + case STATIONARY_WATER: { + if (ConfigurationEntry.ALLOW_WATER_PLACE.getBoolean()) { + Log.info(String.format("%s placed water @ %s", player.getName(), + Utilities.formatLocation(event.getBlock().getLocation()))); - event.setCancelled(true); - } - break; - } - case FIRE: - { - if (ConfigurationEntry.ALLOW_FIRE_PLACE.getBoolean()) - { - Log.info(String.format("%s placed fire @ %s", player.getName(), Utilities.formatLocation(event.getBlock().getLocation()))); + player.getInventory().clear(player.getInventory().getHeldItemSlot()); + } else { + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); + player.sendMessage(ChatColor.GRAY + "Water placement is currently disabled."); - player.getInventory().clear(player.getInventory().getHeldItemSlot()); - } - else - { - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); - player.sendMessage(ChatColor.GRAY + "Fire placement is currently disabled."); + event.setCancelled(true); + } + break; + } + case FIRE: { + if (ConfigurationEntry.ALLOW_FIRE_PLACE.getBoolean()) { + Log.info(String.format("%s placed fire @ %s", player.getName(), + Utilities.formatLocation(event.getBlock().getLocation()))); - event.setCancelled(true); - } - break; - } - case TNT: - { - if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - Log.info(String.format("%s placed TNT @ %s", player.getName(), Utilities.formatLocation(event.getBlock().getLocation()))); + player.getInventory().clear(player.getInventory().getHeldItemSlot()); + } else { + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); + player.sendMessage(ChatColor.GRAY + "Fire placement is currently disabled."); - player.getInventory().clear(player.getInventory().getHeldItemSlot()); - } - else - { - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); + event.setCancelled(true); + } + break; + } + case TNT: { + if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + Log.info(String.format("%s placed TNT @ %s", player.getName(), + Utilities.formatLocation(event.getBlock().getLocation()))); - player.sendMessage(ChatColor.GRAY + "TNT is currently disabled."); - event.setCancelled(true); - } - break; - } - } - } + player.getInventory().clear(player.getInventory().getHeldItemSlot()); + } else { + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onRollbackBlockBreak(BlockBreakEvent event) - { - if (!AdminList.isSuperAdmin(event.getPlayer())) - { - RollbackManager.blockBreak(event); - } - } + player.sendMessage(ChatColor.GRAY + "TNT is currently disabled."); + event.setCancelled(true); + } + break; + } + } + } - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onRollbackBlockPlace(BlockPlaceEvent event) - { - if (!AdminList.isSuperAdmin(event.getPlayer())) - { - RollbackManager.blockPlace(event); - } - } - - @EventHandler(priority = EventPriority.HIGH) - public void onBlockFromTo(BlockFromToEvent event) - { - if (!ConfigurationEntry.ALLOW_FLUID_SPREAD.getBoolean()) - { - event.setCancelled(true); - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onBlockFromTo(BlockFromToEvent event) { + if (!ConfigurationEntry.ALLOW_FLUID_SPREAD.getBoolean()) { + event.setCancelled(true); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/EntityListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/EntityListener.java index d307f39..01e2ba8 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/EntityListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/EntityListener.java @@ -1,178 +1,158 @@ package me.StevenLawson.TotalFreedomMod.listener; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import org.bukkit.entity.*; +import org.bukkit.entity.Bat; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Ghast; +import org.bukkit.entity.Giant; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Slime; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Vehicle; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.entity.*; -import org.bukkit.event.vehicle.*; -import org.bukkit.util.Vector; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.event.entity.EntityCombustEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.ExplosionPrimeEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.vehicle.VehicleEntityCollisionEvent; public class EntityListener implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void onEntityExplode(EntityExplodeEvent event) { - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { - event.setCancelled(true); - return; - } - event.setYield(0.0F); - } + @EventHandler(priority = EventPriority.HIGH) + public void onEntityExplode(EntityExplodeEvent event) { + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + event.setCancelled(true); + return; + } - @EventHandler(priority = EventPriority.HIGH) - public void onExplosionPrime(ExplosionPrimeEvent event) - { - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - event.setCancelled(true); - return; - } + event.setYield(0.0F); + } - event.setRadius((float) ConfigurationEntry.EXPLOSIVE_RADIUS.getDouble().doubleValue()); - } + @EventHandler(priority = EventPriority.HIGH) + public void onExplosionPrime(ExplosionPrimeEvent event) { + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + event.setCancelled(true); + return; + } - @EventHandler(priority = EventPriority.HIGH) - public void onEntityCombust(EntityCombustEvent event) - { - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - event.setCancelled(true); - } - } + event.setRadius((float) ConfigurationEntry.EXPLOSIVE_RADIUS.getDouble().doubleValue()); + } - @EventHandler(priority = EventPriority.HIGH) - public void onEntityDamage(EntityDamageEvent event) - { - switch (event.getCause()) - { - case LAVA: - { - if (!ConfigurationEntry.ALLOW_LAVA_DAMAGE.getBoolean()) - { - event.setCancelled(true); - return; - } - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onEntityCombust(EntityCombustEvent event) { + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + event.setCancelled(true); + } + } - if (ConfigurationEntry.ENABLE_PET_PROTECT.getBoolean()) - { - Entity entity = event.getEntity(); - if (entity instanceof Tameable) - { - if (((Tameable) entity).isTamed()) - { - event.setCancelled(true); - } - } - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onEntityDamage(EntityDamageEvent event) { + switch (event.getCause()) { + case LAVA: { + if (!ConfigurationEntry.ALLOW_LAVA_DAMAGE.getBoolean()) { + event.setCancelled(true); + return; + } + } + } - @EventHandler(priority = EventPriority.NORMAL) - public void onCreatureSpawn(CreatureSpawnEvent event) - { - if (ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()) - { - if (event.getSpawnReason().equals(CreatureSpawnEvent.SpawnReason.EGG)) - { - event.setCancelled(true); - return; - } + if (ConfigurationEntry.ENABLE_PET_PROTECT.getBoolean()) { + Entity entity = event.getEntity(); + if (entity instanceof Tameable) { + if (((Tameable) entity).isTamed()) { + event.setCancelled(true); + } + } + } + } - Entity spawned = event.getEntity(); + @EventHandler(priority = EventPriority.NORMAL) + public void onCreatureSpawn(CreatureSpawnEvent event) { + if (ConfigurationEntry.MOB_LIMITER_ENABLED.getBoolean()) { + if (event.getSpawnReason().equals(CreatureSpawnEvent.SpawnReason.EGG)) { + event.setCancelled(true); + return; + } - if (spawned instanceof EnderDragon) - { - if (ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean()) - { - event.setCancelled(true); - return; - } - } - else if (spawned instanceof Ghast) - { - if (ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean()) - { - event.setCancelled(true); - return; - } - } - else if (spawned instanceof Slime) - { - if (ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean()) - { - event.setCancelled(true); - return; - } - } - else if (spawned instanceof Giant) - { - if (ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean()) - { - event.setCancelled(true); - return; - } - } - else if (spawned instanceof Bat) - { - event.setCancelled(true); - return; - } + Entity spawned = event.getEntity(); - int mobLimiterMax = ConfigurationEntry.MOB_LIMITER_MAX.getInteger().intValue(); + if (spawned instanceof EnderDragon) { + if (ConfigurationEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean()) { + event.setCancelled(true); + return; + } + } else if (spawned instanceof Ghast) { + if (ConfigurationEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean()) { + event.setCancelled(true); + return; + } + } else if (spawned instanceof Slime) { + if (ConfigurationEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean()) { + event.setCancelled(true); + return; + } + } else if (spawned instanceof Giant) { + if (ConfigurationEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean()) { + event.setCancelled(true); + return; + } + } else if (spawned instanceof Bat) { + event.setCancelled(true); + return; + } - if (mobLimiterMax > 0) - { - int mobcount = 0; + int mobLimiterMax = ConfigurationEntry.MOB_LIMITER_MAX.getInteger().intValue(); - for (Entity entity : event.getLocation().getWorld().getLivingEntities()) - { - if (!(entity instanceof HumanEntity)) - { - mobcount++; - } - } + if (mobLimiterMax > 0) { + int mobcount = 0; - if (mobcount > mobLimiterMax) - { - event.setCancelled(true); - } - } - } - } + for (Entity entity : event.getLocation().getWorld().getLivingEntities()) { + if (!(entity instanceof HumanEntity)) { + mobcount++; + } + } - //FIXME Make patch better + if (mobcount > mobLimiterMax) { + event.setCancelled(true); + } + } + } + } - @EventHandler(priority = EventPriority.HIGH) - public void onVehicleCollisionEntity(VehicleEntityCollisionEvent event) { - if(event.getEntity() instanceof Vehicle) { - event.setCollisionCancelled(true); - event.setPickupCancelled(true); - event.setCancelled(true); - event.getVehicle().remove(); - } - } + //FIXME Make patch better - @EventHandler(priority = EventPriority.HIGH) - public void onEntityDeath(EntityDeathEvent event) - { - if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) - { - event.setDroppedExp(0); - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onVehicleCollisionEntity(VehicleEntityCollisionEvent event) { + if (event.getEntity() instanceof Vehicle) { + event.setCollisionCancelled(true); + event.setPickupCancelled(true); + event.setCancelled(true); + event.getVehicle().remove(); + } + } - @EventHandler(priority = EventPriority.NORMAL) - public void onProjectileHit(ProjectileHitEvent event) - { - if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - Projectile entity = event.getEntity(); - if (event.getEntityType() == EntityType.ARROW) - { - entity.getWorld().createExplosion(entity.getLocation(), 2F); - } - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onEntityDeath(EntityDeathEvent event) { + if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) { + event.setDroppedExp(0); + } + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onProjectileHit(ProjectileHitEvent event) { + if (ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + Projectile entity = event.getEntity(); + if (event.getEntityType() == EntityType.ARROW) { + entity.getWorld().createExplosion(entity.getLocation(), 2F); + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/PlayerListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/PlayerListener.java index 3477f9c..3264248 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/PlayerListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/PlayerListener.java @@ -1,27 +1,45 @@ package me.StevenLawson.TotalFreedomMod.listener; +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Random; +import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.Server; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.ban.BanManager; -import me.StevenLawson.TotalFreedomMod.config.TagConfiguration; -import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; import me.StevenLawson.TotalFreedomMod.command.CommandBlocker; +import me.StevenLawson.TotalFreedomMod.commands.Command_doom; import me.StevenLawson.TotalFreedomMod.commands.Command_landmine; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.config.MainConfig; +import me.StevenLawson.TotalFreedomMod.config.TagConfiguration; +import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; import me.StevenLawson.TotalFreedomMod.fun.JumpPads; -import me.StevenLawson.TotalFreedomMod.player.*; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; +import me.StevenLawson.TotalFreedomMod.manager.VanishManager; +import me.StevenLawson.TotalFreedomMod.player.HeartBeat; +import me.StevenLawson.TotalFreedomMod.player.Player; +import me.StevenLawson.TotalFreedomMod.player.PlayerData; +import me.StevenLawson.TotalFreedomMod.player.PlayerList; +import me.StevenLawson.TotalFreedomMod.player.PlayerRank; import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; import me.StevenLawson.TotalFreedomMod.util.SynchronousUtil; import me.StevenLawson.TotalFreedomMod.util.Utilities; import me.StevenLawson.TotalFreedomMod.world.AdminWorld; -import me.StevenLawson.TotalFreedomMod.world.RollbackManager; -import me.StevenLawson.TotalFreedomMod.world.RollbackManager.RollbackEntry; import net.md_5.bungee.api.chat.TextComponent; import org.apache.commons.lang3.StringUtils; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.TNTPrimed; @@ -30,911 +48,832 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.LeavesDecayEvent; -import org.bukkit.event.player.*; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; -import org.javacord.api.entity.message.component.Component; - -import java.awt.*; -import java.util.*; -import java.util.List; -import java.util.Map.Entry; -import java.util.regex.Pattern; public class PlayerListener implements Listener { - public static final List BLOCKED_MUTED_CMDS = Arrays.asList(StringUtils.split("say,main.java.me,msg,m,tell,r,reply,mail,email", ",")); - public static final int MSG_PER_HEARTBEAT = 10; - public static final int DEFAULT_PORT = 25565; - public static final int MAX_XY_COORD = 30000000; - - @EventHandler(priority = EventPriority.HIGH) - public void onPlayerInteract(PlayerInteractEvent event) { - final org.bukkit.entity.Player player = event.getPlayer(); - final PlayerData playerdata = PlayerData.getPlayerData(player); - - switch (event.getAction()) - { - case RIGHT_CLICK_AIR: - case RIGHT_CLICK_BLOCK: - { - switch (event.getMaterial()) - { - case WATER_BUCKET: - { - if (ConfigurationEntry.ALLOW_WATER_PLACE.getBoolean()) - { - break; - } - - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); - player.sendMessage(ChatColor.GRAY + "Water buckets are currently disabled."); - event.setCancelled(true); - break; - } - - case LAVA_BUCKET: - { - if (ConfigurationEntry.ALLOW_LAVA_PLACE.getBoolean()) - { - break; - } - - player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); - player.sendMessage(ChatColor.GRAY + "Lava buckets are currently disabled."); - event.setCancelled(true); - break; - } - - case EXPLOSIVE_MINECART: - { - if (ConfigurationEntry.ALLOW_TNT_MINECARTS.getBoolean()) - { - break; - } - - player.getInventory().clear(player.getInventory().getHeldItemSlot()); - player.sendMessage(ChatColor.GRAY + "TNT minecarts are currently disabled."); - event.setCancelled(true); - break; - } - } - break; - } - - case LEFT_CLICK_AIR: - case LEFT_CLICK_BLOCK: - { - switch (event.getMaterial()) - { - case STICK: - { - if (!AdminList.isSuperAdmin(player)) - { - break; - } - - event.setCancelled(true); - - final Location location = DeprecationUtil.getTargetBlock(player, null, 5).getLocation(); - final List entries = RollbackManager.getEntriesAtLocation(location); - - if (entries.isEmpty()) - { - Utilities.playerMsg(player, "No block edits at that location."); - break; - } - - Utilities.playerMsg(player, "Block edits at (" - + ChatColor.WHITE + "x" + location.getBlockX() - + ", y" + location.getBlockY() - + ", z" + location.getBlockZ() - + ChatColor.BLUE + ")" + ChatColor.WHITE + ":", ChatColor.BLUE); - for (RollbackEntry entry : entries) - { - Utilities.playerMsg(player, " - " + ChatColor.BLUE + entry.author + " " + entry.getType() + " " - + StringUtils.capitalize(entry.getMaterial().toString().toLowerCase()) + (entry.data == 0 ? "" : ":" + entry.data)); - } - - break; - } - - case BONE: - { - if (!playerdata.mobThrowerEnabled()) - { - break; - } - - Location player_pos = player.getLocation(); - Vector direction = player_pos.getDirection().normalize(); - - LivingEntity rezzed_mob = (LivingEntity) player.getWorld().spawnEntity(player_pos.add(direction.multiply(2.0)), playerdata.mobThrowerCreature()); - rezzed_mob.setVelocity(direction.multiply(playerdata.mobThrowerSpeed())); - playerdata.enqueueMob(rezzed_mob); - - event.setCancelled(true); - break; - } - - case SULPHUR: - { - if (!playerdata.isMP44Armed()) - { - break; - } - - event.setCancelled(true); - - if (playerdata.toggleMP44Firing()) - { - playerdata.startArrowShooter(TotalFreedomMod.plugin); - } - else - { - playerdata.stopArrowShooter(); - } - break; - } - - case BLAZE_ROD: - { - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - break; - } - - if (!AdminList.isSeniorAdmin(player, true)) - { - break; - } - - event.setCancelled(true); - Block targetBlock; - - if (event.getAction().equals(Action.LEFT_CLICK_AIR)) - { - targetBlock = DeprecationUtil.getTargetBlock(player, null, 120); - } - else - { - targetBlock = event.getClickedBlock(); - } - - if (targetBlock == null) - { - player.sendMessage("Can't resolve target block."); - break; - } - - player.getWorld().createExplosion(targetBlock.getLocation(), 4F, true); - player.getWorld().strikeLightning(targetBlock.getLocation()); - - break; - } - - case CARROT: - { - if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - break; - } - - if (!AdminList.isSeniorAdmin(player, true)) - { - break; - } - - Location location = player.getLocation().clone(); - - Vector playerPostion = location.toVector().add(new Vector(0.0, 1.65, 0.0)); - Vector playerDirection = location.getDirection().normalize(); - - double distance = 150.0; - Block targetBlock = DeprecationUtil.getTargetBlock(player, null, Math.round((float) distance)); - if (targetBlock != null) - { - distance = location.distance(targetBlock.getLocation()); - } - - final List affected = new ArrayList(); - - Block lastBlock = null; - for (double offset = 0.0; offset <= distance; offset += (distance / 25.0)) - { - Block block = playerPostion.clone().add(playerDirection.clone().multiply(offset)).toLocation(player.getWorld()).getBlock(); - - if (!block.equals(lastBlock)) - { - if (block.isEmpty()) - { - affected.add(block); - block.setType(Material.TNT); - } - else - { - break; - } - } - - lastBlock = block; - } - - new BukkitRunnable() - { - @Override - public void run() - { - for (Block tntBlock : affected) - { - TNTPrimed tnt = tntBlock.getWorld().spawn(tntBlock.getLocation(), TNTPrimed.class); - tnt.setFuseTicks(5); - tntBlock.setType(Material.AIR); - } - } - }.runTaskLater(TotalFreedomMod.plugin, 30L); - - event.setCancelled(true); - break; - } - - case RAW_FISH: - { - final int RADIUS_HIT = 5; - final int STRENGTH = 4; - - // Clownfish - if (DeprecationUtil.getData_MaterialData(event.getItem().getData()) == 2) - { - if (AdminList.isSeniorAdmin(player, true) || AdminList.isTelnetAdmin(player, true)) - { - boolean didHit = false; - - final Location playerLoc = player.getLocation(); - final Vector playerLocVec = playerLoc.toVector(); - - final List players = player.getWorld().getPlayers(); - for (final org.bukkit.entity.Player target : players) - { - if (target == player) - { - continue; - } - - final Location targetPos = target.getLocation(); - final Vector targetPosVec = targetPos.toVector(); - - try - { - if (targetPosVec.distanceSquared(playerLocVec) < (RADIUS_HIT * RADIUS_HIT)) - { - Utilities.setFlying(player, false); - target.setVelocity(targetPosVec.subtract(playerLocVec).normalize().multiply(STRENGTH)); - didHit = true; - } - } - catch (IllegalArgumentException ex) - { - } - } - - if (didHit) - { - final Sound[] sounds = Sound.values(); - for (Sound sound : sounds) - { - if (sound.toString().contains("HIT")) - { - playerLoc.getWorld().playSound(randomOffset(playerLoc, 5.0), sound, 100.0f, randomDoubleRange(0.5, 2.0).floatValue()); - } - } - } - } - else - { - final StringBuilder msg = new StringBuilder(); - final char[] chars = (player.getName() + " is a clown.").toCharArray(); - for (char c : chars) - { - msg.append(Utilities.randomChatColor()).append(c); - } - Utilities.bcastMsg(msg.toString()); - - player.getInventory().getItemInHand().setType(Material.POTATO_ITEM); - } - - event.setCancelled(true); - break; - } - } - } - break; - } - } - } - private static final Random RANDOM = new Random(); - - private static Location randomOffset(Location a, double magnitude) - { - return a.clone().add(randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude); - } - - private static Double randomDoubleRange(double min, double max) - { - return min + (RANDOM.nextDouble() * ((max - min) + 1.0)); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerTeleport(PlayerTeleportEvent event) - { - final org.bukkit.entity.Player player = event.getPlayer(); - final PlayerData playerdata = PlayerData.getPlayerData(player); - // Check absolute value to account for negatives - if (Math.abs(event.getTo().getX()) >= MAX_XY_COORD || Math.abs(event.getTo().getZ()) >= MAX_XY_COORD) - { - event.setCancelled(true); // illegal position, cancel it - } - - if (!AdminList.isSuperAdmin(player) && playerdata.isFrozen()) - { - Utilities.setFlying(player, true); - event.setTo(playerdata.getFreezeLocation()); - return; // Don't process adminworld validation - } - - AdminWorld.getInstance().validateMovement(event); - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerMove(PlayerMoveEvent event) - { - final Location from = event.getFrom(); - final Location to = event.getTo(); - try - { - if (from.getWorld() == to.getWorld() && from.distanceSquared(to) < (0.0001 * 0.0001)) - { - // If player just rotated, but didn't move, don't process this event. - return; - } - } - catch (IllegalArgumentException ex) - { - } - - if (!AdminWorld.getInstance().validateMovement(event)) - { - return; - } - - final org.bukkit.entity.Player player = event.getPlayer(); - final PlayerData playerdata = PlayerData.getPlayerData(player); - - for (Entry fuckoff : TotalFreedomMod.fuckoffEnabledFor.entrySet()) - { - org.bukkit.entity.Player fuckoffPlayer = fuckoff.getKey(); - - if (fuckoffPlayer.equals(player) || !fuckoffPlayer.isOnline()) - { - continue; - } - - double fuckoffRange = fuckoff.getValue(); - - Location playerLocation = player.getLocation(); - Location fuckoffLocation = fuckoffPlayer.getLocation(); - - double distanceSquared; - try - { - distanceSquared = playerLocation.distanceSquared(fuckoffLocation); - } - catch (IllegalArgumentException ex) - { - continue; - } - - if (distanceSquared < (fuckoffRange * fuckoffRange)) - { - event.setTo(fuckoffLocation.clone().add(playerLocation.subtract(fuckoffLocation).toVector().normalize().multiply(fuckoffRange * 1.1))); - break; - } - } - - // Freeze - if (!AdminList.isSuperAdmin(player) && playerdata.isFrozen()) - { - Utilities.setFlying(player, true); - event.setTo(playerdata.getFreezeLocation()); - } - - if (playerdata.isCaged()) - { - Location targetPos = player.getLocation().add(0, 1, 0); - - boolean outOfCage; - if (!targetPos.getWorld().equals(playerdata.getCagePos().getWorld())) - { - outOfCage = true; - } - else - { - outOfCage = targetPos.distanceSquared(playerdata.getCagePos()) > (2.5 * 2.5); - } - - if (outOfCage) - { - playerdata.setCaged(true, targetPos, playerdata.getCageMaterial(PlayerData.CageLayer.OUTER), playerdata.getCageMaterial(PlayerData.CageLayer.INNER)); - playerdata.regenerateHistory(); - playerdata.clearHistory(); - Utilities.buildHistory(targetPos, 2, playerdata); - Utilities.generateHollowCube(targetPos, 2, playerdata.getCageMaterial(PlayerData.CageLayer.OUTER)); - Utilities.generateCube(targetPos, 1, playerdata.getCageMaterial(PlayerData.CageLayer.INNER)); - } - } - - if (playerdata.isOrbiting()) - { - if (player.getVelocity().length() < playerdata.orbitStrength() * (2.0 / 3.0)) - { - player.setVelocity(new Vector(0, playerdata.orbitStrength(), 0)); - } - } - - if (JumpPads.getMode().isOn()) - { - JumpPads.PlayerMoveEvent(event); - } - - if (!(ConfigurationEntry.LANDMINES_ENABLED.getBoolean() && ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean())) - { - return; - } - - final Iterator landmines = Command_landmine.TFM_LandmineData.landmines.iterator(); - while (landmines.hasNext()) - { - final Command_landmine.TFM_LandmineData landmine = landmines.next(); - - final Location location = landmine.location; - if (location.getBlock().getType() != Material.TNT) - { - landmines.remove(); - continue; - } - - if (landmine.player.equals(player)) - { - break; - } - - if (!player.getWorld().equals(location.getWorld())) - { - continue; - } - - if (!(player.getLocation().distanceSquared(location) <= (landmine.radius * landmine.radius))) - { - break; - } - - landmine.location.getBlock().setType(Material.AIR); - - final TNTPrimed tnt1 = location.getWorld().spawn(location, TNTPrimed.class); - tnt1.setFuseTicks(40); - tnt1.setPassenger(player); - tnt1.setVelocity(new Vector(0.0, 2.0, 0.0)); - - final TNTPrimed tnt2 = location.getWorld().spawn(player.getLocation(), TNTPrimed.class); - tnt2.setFuseTicks(1); - - player.setGameMode(GameMode.SURVIVAL); - landmines.remove(); - } - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onLeavesDecay(LeavesDecayEvent event) - { - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerChat(AsyncPlayerChatEvent event) - { - try - { - final org.bukkit.entity.Player player = event.getPlayer(); - String message = event.getMessage().trim(); - - final PlayerData playerdata = PlayerData.getPlayerDataSync(player); - - // Check for spam - final Long lastRan = HeartBeat.getLastRan(); - if (lastRan == null || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) - { - //Log.warning("Heartbeat service timeout - can't check block place/break rates."); - } - else - { - if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) - { - SynchronousUtil.bcastMsg(player.getName() + " was automatically kicked for spamming chat.", ChatColor.RED); - SynchronousUtil.autoEject(player, "Kicked for spamming chat."); - - playerdata.resetMsgCount(); - - event.setCancelled(true); - return; - } - } - - // Check for message repeat - if (playerdata.getLastMessage().equalsIgnoreCase(message)) - { - SynchronousUtil.playerMsg(player, "Please do not repeat messages."); - event.setCancelled(true); - return; - } - - playerdata.setLastMessage(message); - - // Check for muted - if (playerdata.isMuted()) - { - if (!AdminList.isSuperAdminSync(player)) - { - SynchronousUtil.playerMsg(player, ChatColor.RED + "You are muted, STFU! - You will be unmuted in 5 minutes."); - event.setCancelled(true); - return; - } - - playerdata.setMuted(false); - } - - // Strip color from messages - message = ChatColor.stripColor(message); - - // Truncate messages that are too long - 100 characters is vanilla client max - if (message.length() > 100) - { - message = message.substring(0, 100); - SynchronousUtil.playerMsg(player, "Message was shortened because it was too long to send."); - } - - // Check for caps - if (message.length() >= 6) - { - int caps = 0; - for (char c : message.toCharArray()) - { - if (Character.isUpperCase(c)) - { - caps++; - } - } - if (((float) caps / (float) message.length()) > 0.65) //Compute a ratio so that longer sentences can have more caps. - { - message = message.toLowerCase(); - } - } - - // Check for adminchat - if (playerdata.inAdminChat()) - { - SynchronousUtil.adminChatMessage(player, message, false); - event.setCancelled(true); - return; - } - - // Finally, set message - event.setMessage(ChatColor.translateAlternateColorCodes('&', message)); - - // Set the tag - if (playerdata.getTag() != null) { - event.setFormat(ChatColor.translateAlternateColorCodes('&', MainConfig.getString(ConfigurationEntry.CHAT_FORMAT)).replace("{RANK}", playerdata.getTag().replaceAll("%", "%%"))); - } - - DiscordBridge.transmitMessage(DiscordBridge.fullySanitizeDiscordMessage(String.format(event.getFormat(), event.getPlayer().getDisplayName(), event.getMessage()))); - } - catch (Exception ex) - { - Log.severe(ex); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) - { - String command = event.getMessage(); - final org.bukkit.entity.Player player = event.getPlayer(); - - final PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.setLastCommand(command); - - if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) - { - Utilities.bcastMsg(player.getName() + " was automatically kicked for spamming commands.", ChatColor.RED); - Utilities.autoEject(player, "Kicked for spamming commands."); - - playerdata.resetMsgCount(); - - Utilities.TFM_EntityWiper.wipeEntities(true, true); - - event.setCancelled(true); - return; - } - - if (playerdata.allCommandsBlocked()) - { - Utilities.playerMsg(player, "Your commands have been blocked by an admin.", ChatColor.RED); - event.setCancelled(true); - return; - } - - // Block commands if player is muted - if (playerdata.isMuted()) - { - if (!AdminList.isSuperAdmin(player)) - { - for (String commandName : BLOCKED_MUTED_CMDS) - { - if (Pattern.compile("^/" + commandName.toLowerCase() + " ").matcher(command.toLowerCase()).find()) - { - player.sendMessage(ChatColor.RED + "That command is blocked while you are muted."); - event.setCancelled(true); - return; - } - } - } - else - { - playerdata.setMuted(false); - } - } - - if (ConfigurationEntry.ENABLE_PREPROCESS_LOG.getBoolean()) - { - Log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), command), true); - } - - // Blocked commands - if (CommandBlocker.isCommandBlocked(command, player, true)) - { - // CommandBlocker handles messages and broadcasts - event.setCancelled(true); - } - - if (!AdminList.isSuperAdmin(player)) - { - for (org.bukkit.entity.Player pl : Bukkit.getOnlinePlayers()) - { - if (AdminList.isSuperAdmin(pl) && PlayerData.getPlayerData(pl).cmdspyEnabled()) - { - Utilities.playerMsg(pl, player.getName() + ": " + command); - } - } - } - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerDropItem(PlayerDropItemEvent event) - { - if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) - { - if (event.getPlayer().getWorld().getEntities().size() > 750) - { - event.setCancelled(true); - } - else - { - event.getItemDrop().remove(); - } - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerKick(PlayerKickEvent event) - { - playerLeave(event.getPlayer()); - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerQuit(PlayerQuitEvent event) - { - playerLeave(event.getPlayer()); - } - - private void playerLeave(org.bukkit.entity.Player player) - { - TotalFreedomMod.fuckoffEnabledFor.remove(player); - - final PlayerData playerdata = PlayerData.getPlayerData(player); - - playerdata.disarmMP44(); - - if (playerdata.isCaged()) { - playerdata.regenerateHistory(); - playerdata.clearHistory(); - } - - if (PlayerList.existsEntry(player)) { - DiscordBridge.transmitMessage(String.format("**%s left the server**", DiscordBridge.fullySanitizeDiscordMessage(player.getDisplayName()))); - } - - PlayerList.removeEntry(player); - Log.info("[EXIT] " + player.getName() + " left the game.", true); - - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerJoin(PlayerJoinEvent event) - { - final org.bukkit.entity.Player player = event.getPlayer(); - final String ip = Utilities.getIp(player); - final Player playerEntry; - Log.info("[JOIN] " + Utilities.formatPlayer(player) + " joined the game with IP address: " + ip, true); - TextComponent textComponent = new TextComponent(String.format("%s is joining with IP %s.", player.getName(), Utilities.getFuzzyIp(ip))); - textComponent.setColor(ChatColor.GRAY.asBungee()); - - for (org.bukkit.entity.Player onlinePlayer : Bukkit.getOnlinePlayers()) - { - if (AdminList.isSuperAdmin(player)) - { - onlinePlayer.spigot().sendMessage(textComponent); - } - } - - DiscordBridge.transmitAdminMessage(DiscordBridge.fullySanitizeDiscordMessage(textComponent.getText())); - - // Check absolute value to account for negatives - if (Math.abs(player.getLocation().getX()) >= MAX_XY_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XY_COORD) - { - player.teleport(player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn - } - // Handle PlayerList entry (persistent) - if (PlayerList.existsEntry(player)) - { - playerEntry = PlayerList.getEntry(player); - playerEntry.setLastLoginUnix(Utilities.getUnixTime()); - playerEntry.setLastLoginName(player.getName()); - playerEntry.addIp(ip); - playerEntry.save(); - } - else - { - playerEntry = PlayerList.getEntry(player); - Log.info("Added new player: " + Utilities.formatPlayer(player)); - } - - // Generate PlayerData (non-persistent) - final PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.setSuperadminIdVerified(false); - - if (AdminList.isSuperAdmin(player)) - { - for (String storedIp : playerEntry.getIps()) - { - BanManager.unbanIp(storedIp); - BanManager.unbanIp(Utilities.getFuzzyIp(storedIp)); - } - - BanManager.unbanUuid(UUIDManager.getUniqueId(player)); - - player.setOp(true); - - // Verify strict IP match - if (!AdminList.isIdentityMatched(player)) - { - playerdata.setSuperadminIdVerified(false); - Utilities.bcastMsg("Warning: " + player.getName() + " is an admin, but is using an account not registered to one of their ip-list.", ChatColor.RED); - } - else - { - playerdata.setSuperadminIdVerified(true); - AdminList.updateLastLogin(player); - } - } - - // Handle admin impostors - if (AdminList.isAdminImpostor(player)) - { - Utilities.bcastMsg("Warning: " + player.getName() + " has been flagged as an impostor and has been frozen!", ChatColor.RED); - Utilities.bcastMsg(ChatColor.AQUA + player.getName() + " is " + PlayerRank.getLoginMessage(player)); - player.getInventory().clear(); - player.setOp(false); - player.setGameMode(GameMode.SURVIVAL); - PlayerData.getPlayerData(player).setFrozen(true); - } - else if (AdminList.isSuperAdmin(player) || Utilities.DEVELOPERS.contains(player.getName())) - { - Utilities.bcastMsg(ChatColor.AQUA + player.getName() + " is " + PlayerRank.getLoginMessage(player)); - } - - //TODO: Cleanup - String name = player.getName(); - if (AdminList.isSuperAdmin(player)) - { - if (ConfigurationEntry.SERVER_OWNERS.getList().contains(name)) - { - name = ChatColor.BLUE + name; - PlayerData.getPlayerData(player).setTag("&8[&9Owner&8]"); - } - else if (AdminList.isSeniorAdmin(player)) - { - name = ChatColor.LIGHT_PURPLE + name; - PlayerData.getPlayerData(player).setTag("&8[&dSenior Admin&8]"); - } - else if (AdminList.isTelnetAdmin(player, true)) - { - name = ChatColor.DARK_GREEN + name; - PlayerData.getPlayerData(player).setTag("&8[&2Telnet Admin&8]"); - } - else - { - name = ChatColor.AQUA + name; - PlayerData.getPlayerData(player).setTag("&8[&BSuper Admin&8]"); - } - - if (Utilities.DEVELOPERS.contains(player.getName())) { - PlayerData.getPlayerData(player).setTag("&8[&5Developer&8] " + PlayerData.getPlayerData(player).getTag()); - } - } else if (Utilities.DEVELOPERS.contains(player.getName())) - { - name = ChatColor.DARK_PURPLE + name; - PlayerData.getPlayerData(player).setTag("&8[&5Developer&8]"); - } - - try - { - player.setPlayerListName(StringUtils.substring(name, 0, 16)); - } - catch (IllegalArgumentException ex) - { - } - - new BukkitRunnable() - { - @Override - public void run() - { - if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) { - player.sendMessage(ChatColor.RED + "Server is currently closed to non-superadmins."); - } - - if (TotalFreedomMod.lockdownEnabled) { - Utilities.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED); - } - } - }.runTaskLater(TotalFreedomMod.plugin, 20L * 1L); - - if (!player.hasPlayedBefore()) { - if (Boolean.TRUE.equals(MainConfig.getBoolean(ConfigurationEntry.SERVER_OP_ON_JOIN))) { - PlayerRank rank = PlayerRank.fromSender(player); - - if (rank.equals(PlayerRank.NON_OP)) { - player.setOp(true); - } - } - } - if(TagConfiguration.getTag(player.getUniqueId().toString()) != null){ - String playerTag = TagConfiguration.getTag(player.getUniqueId().toString()); - if(!"".equalsIgnoreCase(playerTag)){ - PlayerData.getPlayerData(player).setTag(playerTag); - } - } - DiscordBridge.transmitMessage(String.format("**%s joined the server**", DiscordBridge.fullySanitizeDiscordMessage(player.getDisplayName()))); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event) - { - Server.handlePlayerPreLogin(event); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerLogin(PlayerLoginEvent event) - { - Server.handlePlayerLogin(event); - } + + public static final List BLOCKED_MUTED_CMDS = Arrays.asList( + StringUtils.split("say,main.java.me,msg,m,tell,r,reply,mail,email", ",")); + public static final List MOCK_THE_MOLES_FOREVER = Arrays.asList( + "%s advocates for doxxing of children.", "%s is fat.", "%s has no real friends.", + "%s's parents don't love them.", "%s doesn't go outside.", "%s doesn't have a life.", + "%s is a virgin.", "%s wants a cupcake.", "%s glows in the dark.", + "%s is friends with F_x.", "%s should take a seat."); + public static final List BY_BEING_A_MOLE_YOU_MOCK_YOURSELF = Arrays.asList( + "I love kissing children!", "Can I have a cupcake?", + "Officer, it was just a silly goof! Why aren't you laughing?", "I love MCFreedom!", + "I love FreedomForever!", "I'm here to collect my cupcake.", "Do you have any cupcakes?", + "I like pineapple pizza.", "Do you have any pineapple pizza?", + "I dislike Cherry Pepsi Max.", + "Guys, did you know my father is getting milk? He hasn't been back for hours, I'm worried...", + "My wife's boyfriend is a nice guy.", "My wife's boyfriend got me a new Switch!", + "My wife's boyfriend got me a new PS5!"); + public static final int MSG_PER_HEARTBEAT = 10; + public static final int DEFAULT_PORT = 25565; + public static final int MAX_XY_COORD = 30000000; + private static final Random RANDOM = new Random(); + + private static Location randomOffset(Location a, double magnitude) { + return a.clone() + .add(randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude, + randomDoubleRange(-1.0, 1.0) * magnitude); + } + + private static Double randomDoubleRange(double min, double max) { + return min + (RANDOM.nextDouble() * ((max - min) + 1.0)); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerInteract(PlayerInteractEvent event) { + final org.bukkit.entity.Player player = event.getPlayer(); + final PlayerData playerdata = PlayerData.getPlayerData(player); + + switch (event.getAction()) { + case RIGHT_CLICK_AIR: + case RIGHT_CLICK_BLOCK: { + switch (event.getMaterial()) { + case WATER_BUCKET: { + if (ConfigurationEntry.ALLOW_WATER_PLACE.getBoolean()) { + break; + } + + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); + player.sendMessage( + ChatColor.GRAY + "Water buckets are currently disabled."); + event.setCancelled(true); + break; + } + + case LAVA_BUCKET: { + if (ConfigurationEntry.ALLOW_LAVA_PLACE.getBoolean()) { + break; + } + + player.getInventory().setItem(player.getInventory().getHeldItemSlot(), + new ItemStack(Material.COOKIE, 1)); + player.sendMessage(ChatColor.GRAY + "Lava buckets are currently disabled."); + event.setCancelled(true); + break; + } + + case EXPLOSIVE_MINECART: { + if (ConfigurationEntry.ALLOW_TNT_MINECARTS.getBoolean()) { + break; + } + + player.getInventory().clear(player.getInventory().getHeldItemSlot()); + player.sendMessage( + ChatColor.GRAY + "TNT minecarts are currently disabled."); + event.setCancelled(true); + break; + } + } + break; + } + + case LEFT_CLICK_AIR: + case LEFT_CLICK_BLOCK: { + switch (event.getMaterial()) { + case BONE: { + if (!playerdata.mobThrowerEnabled()) { + break; + } + + Location player_pos = player.getLocation(); + Vector direction = player_pos.getDirection().normalize(); + + LivingEntity rezzed_mob = (LivingEntity) player.getWorld() + .spawnEntity(player_pos.add(direction.multiply(2.0)), + playerdata.mobThrowerCreature()); + rezzed_mob.setVelocity(direction.multiply(playerdata.mobThrowerSpeed())); + playerdata.enqueueMob(rezzed_mob); + + event.setCancelled(true); + break; + } + + case SULPHUR: { + if (!playerdata.isMP44Armed()) { + break; + } + + event.setCancelled(true); + + if (playerdata.toggleMP44Firing()) { + playerdata.startArrowShooter(TotalFreedomMod.plugin); + } else { + playerdata.stopArrowShooter(); + } + break; + } + + case BLAZE_ROD: { + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + break; + } + + if (!AdminList.isSeniorAdmin(player, true)) { + break; + } + + event.setCancelled(true); + Block targetBlock; + + if (event.getAction().equals(Action.LEFT_CLICK_AIR)) { + targetBlock = DeprecationUtil.getTargetBlock(player, null, 120); + } else { + targetBlock = event.getClickedBlock(); + } + + if (targetBlock == null) { + player.sendMessage("Can't resolve target block."); + break; + } + + player.getWorld().createExplosion(targetBlock.getLocation(), 4F, true); + player.getWorld().strikeLightning(targetBlock.getLocation()); + + break; + } + + case CARROT: { + if (!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean()) { + break; + } + + if (!AdminList.isSeniorAdmin(player, true)) { + break; + } + + Location location = player.getLocation().clone(); + + Vector playerPostion = location.toVector().add(new Vector(0.0, 1.65, 0.0)); + Vector playerDirection = location.getDirection().normalize(); + + double distance = 150.0; + Block targetBlock = DeprecationUtil.getTargetBlock(player, null, + Math.round((float) distance)); + if (targetBlock != null) { + distance = location.distance(targetBlock.getLocation()); + } + + final List affected = new ArrayList(); + + Block lastBlock = null; + for (double offset = 0.0; offset <= distance; offset += (distance / 25.0)) { + Block block = playerPostion.clone() + .add(playerDirection.clone().multiply(offset)) + .toLocation(player.getWorld()).getBlock(); + + if (!block.equals(lastBlock)) { + if (block.isEmpty()) { + affected.add(block); + block.setType(Material.TNT); + } else { + break; + } + } + + lastBlock = block; + } + + new BukkitRunnable() { + @Override + public void run() { + for (Block tntBlock : affected) { + TNTPrimed tnt = tntBlock.getWorld() + .spawn(tntBlock.getLocation(), TNTPrimed.class); + tnt.setFuseTicks(5); + tntBlock.setType(Material.AIR); + } + } + }.runTaskLater(TotalFreedomMod.plugin, 30L); + + event.setCancelled(true); + break; + } + + case RAW_FISH: { + final int RADIUS_HIT = 5; + final int STRENGTH = 4; + + // Clownfish + if (DeprecationUtil.getData_MaterialData(event.getItem().getData()) == 2) { + if (AdminList.isSeniorAdmin(player, true) || AdminList.isTelnetAdmin( + player, true)) { + boolean didHit = false; + + final Location playerLoc = player.getLocation(); + final Vector playerLocVec = playerLoc.toVector(); + + final List players = player.getWorld() + .getPlayers(); + for (final org.bukkit.entity.Player target : players) { + if (target == player) { + continue; + } + + final Location targetPos = target.getLocation(); + final Vector targetPosVec = targetPos.toVector(); + + try { + if (targetPosVec.distanceSquared(playerLocVec) < (RADIUS_HIT + * RADIUS_HIT)) { + Utilities.setFlying(player, false); + target.setVelocity( + targetPosVec.subtract(playerLocVec).normalize() + .multiply(STRENGTH)); + didHit = true; + } + } catch (IllegalArgumentException ex) { + } + } + + if (didHit) { + final Sound[] sounds = Sound.values(); + for (Sound sound : sounds) { + if (sound.toString().contains("HIT")) { + playerLoc.getWorld() + .playSound(randomOffset(playerLoc, 5.0), sound, + 100.0f, + randomDoubleRange(0.5, 2.0).floatValue()); + } + } + } + } else { + final StringBuilder msg = new StringBuilder(); + final char[] chars = (player.getName() + + " is a clown.").toCharArray(); + for (char c : chars) { + msg.append(Utilities.randomChatColor()).append(c); + } + Utilities.bcastMsg(msg.toString()); + + player.getInventory().getItemInHand().setType(Material.POTATO_ITEM); + } + + event.setCancelled(true); + break; + } + } + } + break; + } + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerTeleport(PlayerTeleportEvent event) { + final org.bukkit.entity.Player player = event.getPlayer(); + final PlayerData playerdata = PlayerData.getPlayerData(player); + // Check absolute value to account for negatives + if (Math.abs(event.getTo().getX()) >= MAX_XY_COORD + || Math.abs(event.getTo().getZ()) >= MAX_XY_COORD) { + event.setCancelled(true); // illegal position, cancel it + } + + if (!AdminList.isSuperAdmin(player) && playerdata.isFrozen()) { + Utilities.setFlying(player, true); + event.setTo(playerdata.getFreezeLocation()); + return; // Don't process adminworld validation + } + + AdminWorld.getInstance().validateMovement(event); + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerMove(PlayerMoveEvent event) { + final Location from = event.getFrom(); + final Location to = event.getTo(); + try { + if (from.getWorld() == to.getWorld() && from.distanceSquared(to) < (0.0001 * 0.0001)) { + // If player just rotated, but didn't move, don't process this event. + return; + } + } catch (IllegalArgumentException ex) { + } + + if (!AdminWorld.getInstance().validateMovement(event)) { + return; + } + + final org.bukkit.entity.Player player = event.getPlayer(); + final PlayerData playerdata = PlayerData.getPlayerData(player); + + for (Entry fuckoff : TotalFreedomMod.fuckoffEnabledFor.entrySet()) { + org.bukkit.entity.Player fuckoffPlayer = fuckoff.getKey(); + + if (fuckoffPlayer.equals(player) || !fuckoffPlayer.isOnline()) { + continue; + } + + double fuckoffRange = fuckoff.getValue(); + + Location playerLocation = player.getLocation(); + Location fuckoffLocation = fuckoffPlayer.getLocation(); + + double distanceSquared; + try { + distanceSquared = playerLocation.distanceSquared(fuckoffLocation); + } catch (IllegalArgumentException ex) { + continue; + } + + if (distanceSquared < (fuckoffRange * fuckoffRange)) { + event.setTo(fuckoffLocation.clone().add( + playerLocation.subtract(fuckoffLocation).toVector().normalize() + .multiply(fuckoffRange * 1.1))); + break; + } + } + + // Freeze + if (!AdminList.isSuperAdmin(player) && playerdata.isFrozen()) { + Utilities.setFlying(player, true); + event.setTo(playerdata.getFreezeLocation()); + } + + if (playerdata.isCaged()) { + Location targetPos = player.getLocation().add(0, 1, 0); + + boolean outOfCage; + if (!targetPos.getWorld().equals(playerdata.getCagePos().getWorld())) { + outOfCage = true; + } else { + outOfCage = targetPos.distanceSquared(playerdata.getCagePos()) > (2.5 * 2.5); + } + + if (outOfCage) { + playerdata.setCaged(true, targetPos, + playerdata.getCageMaterial(PlayerData.CageLayer.OUTER), + playerdata.getCageMaterial(PlayerData.CageLayer.INNER)); + playerdata.regenerateHistory(); + playerdata.clearHistory(); + Utilities.buildHistory(targetPos, 2, playerdata); + Utilities.generateHollowCube(targetPos, 2, + playerdata.getCageMaterial(PlayerData.CageLayer.OUTER)); + Utilities.generateCube(targetPos, 1, + playerdata.getCageMaterial(PlayerData.CageLayer.INNER)); + } + } + + if (playerdata.isOrbiting()) { + if (player.getVelocity().length() < playerdata.orbitStrength() * (2.0 / 3.0)) { + player.setVelocity(new Vector(0, playerdata.orbitStrength(), 0)); + } + } + + if (JumpPads.getMode().isOn()) { + JumpPads.PlayerMoveEvent(event); + } + + if (!(ConfigurationEntry.LANDMINES_ENABLED.getBoolean() + && ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean())) { + return; + } + + final Iterator landmines = Command_landmine.TFM_LandmineData.landmines.iterator(); + while (landmines.hasNext()) { + final Command_landmine.TFM_LandmineData landmine = landmines.next(); + + final Location location = landmine.location; + if (location.getBlock().getType() != Material.TNT) { + landmines.remove(); + continue; + } + + if (landmine.player.equals(player)) { + break; + } + + if (!player.getWorld().equals(location.getWorld())) { + continue; + } + + if (!(player.getLocation().distanceSquared(location) <= (landmine.radius + * landmine.radius))) { + break; + } + + landmine.location.getBlock().setType(Material.AIR); + + final TNTPrimed tnt1 = location.getWorld().spawn(location, TNTPrimed.class); + tnt1.setFuseTicks(40); + tnt1.setPassenger(player); + tnt1.setVelocity(new Vector(0.0, 2.0, 0.0)); + + final TNTPrimed tnt2 = location.getWorld().spawn(player.getLocation(), TNTPrimed.class); + tnt2.setFuseTicks(1); + + player.setGameMode(GameMode.SURVIVAL); + landmines.remove(); + } + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onLeavesDecay(LeavesDecayEvent event) { + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerChat(AsyncPlayerChatEvent event) { + try { + final org.bukkit.entity.Player player = event.getPlayer(); + String message = event.getMessage().trim(); + + final PlayerData playerdata = PlayerData.getPlayerDataSync(player); + + // Check for spam + final Long lastRan = HeartBeat.getLastRan(); + if (lastRan == null + || lastRan + TotalFreedomMod.HEARTBEAT_RATE * 1000L < System.currentTimeMillis()) { + //Log.warning("Heartbeat service timeout - can't check block place/break rates."); + } else { + if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) { + SynchronousUtil.bcastMsg( + player.getName() + " was automatically kicked for spamming chat.", + ChatColor.RED); + SynchronousUtil.autoEject(player, "Kicked for spamming chat."); + + playerdata.resetMsgCount(); + + event.setCancelled(true); + return; + } + } + + // Check for message repeat + if (playerdata.getLastMessage().equalsIgnoreCase(message)) { + SynchronousUtil.playerMsg(player, "Please do not repeat messages."); + event.setCancelled(true); + return; + } + + playerdata.setLastMessage(message); + + // Check for muted + if (playerdata.isMuted()) { + if (!AdminList.isSuperAdminSync(player)) { + SynchronousUtil.playerMsg(player, + ChatColor.RED + "You are muted, STFU! - You will be unmuted in 5 minutes."); + event.setCancelled(true); + return; + } + + playerdata.setMuted(false); + } + + // Strip color from messages + message = ChatColor.stripColor(message); + + // Truncate messages that are too long - 100 characters is vanilla client max + if (message.length() > 100) { + message = message.substring(0, 100); + SynchronousUtil.playerMsg(player, + "Message was shortened because it was too long to send."); + } + + // Check for caps + if (message.length() >= 6) { + int caps = 0; + for (char c : message.toCharArray()) { + if (Character.isUpperCase(c)) { + caps++; + } + } + if (((float) caps / (float) message.length()) + > 0.65) //Compute a ratio so that longer sentences can have more caps. + { + message = message.toLowerCase(); + } + } + + // Check for adminchat + if (playerdata.inAdminChat()) { + SynchronousUtil.adminChatMessage(player, message, false); + event.setCancelled(true); + return; + } + + // Finally, set message + event.setMessage(ChatColor.translateAlternateColorCodes('&', message)); + + if (message.toLowerCase().contains("molesllc") || message.toLowerCase() + .contains("moles llc") || message.toLowerCase().contains("discord.gg/moles")) { + SecureRandom secureRandom = new SecureRandom(); + Utilities.bcastMsg(String.format(MOCK_THE_MOLES_FOREVER.get( + secureRandom.nextInt(MOCK_THE_MOLES_FOREVER.size())), + player.getName() + ChatColor.RED), ChatColor.RED); + Command_doom.doom(Bukkit.getConsoleSender(), player); + event.setMessage(BY_BEING_A_MOLE_YOU_MOCK_YOURSELF.get( + secureRandom.nextInt(BY_BEING_A_MOLE_YOU_MOCK_YOURSELF.size()))); + return; + } + + // Set the tag + if (playerdata.getTag() != null) { + event.setFormat(ChatColor.translateAlternateColorCodes('&', + MainConfig.getString(ConfigurationEntry.CHAT_FORMAT)) + .replace("{RANK}", playerdata.getTag().replaceAll("%", "%%"))); + } + + DiscordBridge.transmitMessage(DiscordBridge.fullySanitizeDiscordMessage( + String.format(event.getFormat(), event.getPlayer().getDisplayName(), + event.getMessage()))); + } catch (Exception ex) { + Log.severe(ex); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { + String command = event.getMessage(); + final org.bukkit.entity.Player player = event.getPlayer(); + + final PlayerData playerdata = PlayerData.getPlayerData(player); + playerdata.setLastCommand(command); + + if (playerdata.incrementAndGetMsgCount() > MSG_PER_HEARTBEAT) { + Utilities.bcastMsg( + player.getName() + " was automatically kicked for spamming commands.", + ChatColor.RED); + Utilities.autoEject(player, "Kicked for spamming commands."); + + playerdata.resetMsgCount(); + + Utilities.TFM_EntityWiper.wipeEntities(true, true); + + event.setCancelled(true); + return; + } + + if (playerdata.allCommandsBlocked()) { + Utilities.playerMsg(player, "Your commands have been blocked by an admin.", + ChatColor.RED); + event.setCancelled(true); + return; + } + + // Block commands if player is muted + if (playerdata.isMuted()) { + if (!AdminList.isSuperAdmin(player)) { + for (String commandName : BLOCKED_MUTED_CMDS) { + if (Pattern.compile("^/" + commandName.toLowerCase() + " ") + .matcher(command.toLowerCase()).find()) { + player.sendMessage( + ChatColor.RED + "That command is blocked while you are muted."); + event.setCancelled(true); + return; + } + } + } else { + playerdata.setMuted(false); + } + } + + if (ConfigurationEntry.ENABLE_PREPROCESS_LOG.getBoolean()) { + Log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), + ChatColor.stripColor(player.getDisplayName()), command), true); + } + + // Blocked commands + if (CommandBlocker.isCommandBlocked(command, player, true)) { + // CommandBlocker handles messages and broadcasts + event.setCancelled(true); + } + + if (!AdminList.isSuperAdmin(player)) { + for (org.bukkit.entity.Player pl : Bukkit.getOnlinePlayers()) { + if (AdminList.isSuperAdmin(pl) && PlayerData.getPlayerData(pl).cmdspyEnabled()) { + Utilities.playerMsg(pl, player.getName() + ": " + command); + } + } + } + } + + @EventHandler(priority = EventPriority.NORMAL) + public void onPlayerDropItem(PlayerDropItemEvent event) { + if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) { + if (event.getPlayer().getWorld().getEntities().size() > 750) { + event.setCancelled(true); + } else { + event.getItemDrop().remove(); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerKick(PlayerKickEvent event) { + playerLeave(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerQuit(PlayerQuitEvent event) { + final org.bukkit.entity.Player player = event.getPlayer(); + + if (VanishManager.isVanished(player)) { + event.setQuitMessage(null); + VanishManager.unvanishPlayer(player); + } + + playerLeave(event.getPlayer()); + } + + private void playerLeave(org.bukkit.entity.Player player) { + TotalFreedomMod.fuckoffEnabledFor.remove(player); + + final PlayerData playerdata = PlayerData.getPlayerData(player); + + playerdata.disarmMP44(); + + if (playerdata.isCaged()) { + playerdata.regenerateHistory(); + playerdata.clearHistory(); + } + + if (PlayerList.existsEntry(player)) { + DiscordBridge.transmitMessage(String.format("**%s left the server**", + DiscordBridge.fullySanitizeDiscordMessage(player.getDisplayName()))); + } + + PlayerList.removeEntry(player); + Log.info("[EXIT] " + player.getName() + " left the game.", true); + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerJoin(PlayerJoinEvent event) { + VanishManager.loadVanishedPlayers(event.getPlayer()); + + final org.bukkit.entity.Player player = event.getPlayer(); + final String ip = Utilities.getIp(player); + final Player playerEntry; + Log.info( + "[JOIN] " + Utilities.formatPlayer(player) + " joined the game with IP address: " + ip, + true); + TextComponent textComponent = new TextComponent( + String.format("%s is joining with IP %s.", player.getName(), Utilities.getFuzzyIp(ip))); + textComponent.setColor(ChatColor.GRAY.asBungee()); + + for (org.bukkit.entity.Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (AdminList.isSuperAdmin(player)) { + onlinePlayer.spigot().sendMessage(textComponent); + } + } + + DiscordBridge.transmitAdminMessage( + DiscordBridge.fullySanitizeDiscordMessage(textComponent.getText())); + + // Check absolute value to account for negatives + if (Math.abs(player.getLocation().getX()) >= MAX_XY_COORD + || Math.abs(player.getLocation().getZ()) >= MAX_XY_COORD) { + player.teleport( + player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn + } + // Handle PlayerList entry (persistent) + if (PlayerList.existsEntry(player)) { + playerEntry = PlayerList.getEntry(player); + playerEntry.setLastLoginUnix(Utilities.getUnixTime()); + playerEntry.setLastLoginName(player.getName()); + playerEntry.addIp(ip); + playerEntry.save(); + } else { + playerEntry = PlayerList.getEntry(player); + Log.info("Added new player: " + Utilities.formatPlayer(player)); + } + + // Generate PlayerData (non-persistent) + final PlayerData playerdata = PlayerData.getPlayerData(player); + playerdata.setSuperadminIdVerified(false); + + if (AdminList.isSuperAdmin(player)) { + for (String storedIp : playerEntry.getIps()) { + BanManager.unbanIp(storedIp); + BanManager.unbanIp(Utilities.getFuzzyIp(storedIp)); + } + + BanManager.unbanUuid(UUIDManager.getUniqueId(player)); + + player.setOp(true); + + // Verify strict IP match + if (!AdminList.isIdentityMatched(player)) { + playerdata.setSuperadminIdVerified(false); + Utilities.bcastMsg("Warning: " + player.getName() + + " is an admin, but is using an account not registered to one of their ip-list.", + ChatColor.RED); + } else { + playerdata.setSuperadminIdVerified(true); + AdminList.updateLastLogin(player); + } + } + + // Handle admin impostors + if (AdminList.isAdminImpostor(player)) { + Utilities.bcastMsg("Warning: " + player.getName() + + " has been flagged as an impostor and has been frozen!", ChatColor.RED); + + player.getInventory().clear(); + player.setOp(false); + player.setGameMode(GameMode.SURVIVAL); + PlayerData.getPlayerData(player).setFrozen(true); + } + + // Be the same as vanish + TextComponent component = Utilities.fromBaseComponents( + TextComponent.fromLegacyText( + String.format(net.md_5.bungee.api.ChatColor.AQUA + "%s is %s", player.getName(), + Utilities.colorize(PlayerRank.getLoginMessage(player))))); + + Bukkit.spigot().broadcast(component); + + //TODO: Cleanup + String name = player.getName(); + if (AdminList.isSuperAdmin(player)) { + if (ConfigurationEntry.SERVER_OWNERS.getList().contains(name)) { + name = ChatColor.BLUE + name; + PlayerData.getPlayerData(player).setTag("&8[&9Owner&8]"); + } else if (AdminList.isSeniorAdmin(player)) { + name = ChatColor.LIGHT_PURPLE + name; + PlayerData.getPlayerData(player).setTag("&8[&dSenior Admin&8]"); + } else if (AdminList.isTelnetAdmin(player, true)) { + name = ChatColor.DARK_GREEN + name; + PlayerData.getPlayerData(player).setTag("&8[&2Telnet Admin&8]"); + } else { + name = ChatColor.AQUA + name; + PlayerData.getPlayerData(player).setTag("&8[&BSuper Admin&8]"); + } + + if (Utilities.DEVELOPERS.contains(player.getName())) { + PlayerData.getPlayerData(player) + .setTag("&8[&5Developer&8] " + PlayerData.getPlayerData(player).getTag()); + } + } else if (Utilities.DEVELOPERS.contains(player.getName())) { + name = ChatColor.DARK_PURPLE + name; + PlayerData.getPlayerData(player).setTag("&8[&5Developer&8]"); + } + + try { + player.setPlayerListName(StringUtils.substring(name, 0, 16)); + } catch (IllegalArgumentException ex) { + } + + new BukkitRunnable() { + @Override + public void run() { + if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) { + player.sendMessage( + ChatColor.RED + "Server is currently closed to non-superadmins."); + } + + if (TotalFreedomMod.lockdownEnabled) { + Utilities.playerMsg(player, + "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", + ChatColor.RED); + } + } + }.runTaskLater(TotalFreedomMod.plugin, 20L * 1L); + + if (!player.hasPlayedBefore()) { + if (Boolean.TRUE.equals(MainConfig.getBoolean(ConfigurationEntry.SERVER_OP_ON_JOIN))) { + PlayerRank rank = PlayerRank.fromSender(player); + + if (rank.equals(PlayerRank.NON_OP)) { + player.setOp(true); + } + } + } + if (TagConfiguration.getTag(player.getUniqueId().toString()) != null) { + String playerTag = TagConfiguration.getTag(player.getUniqueId().toString()); + if (!"".equalsIgnoreCase(playerTag)) { + PlayerData.getPlayerData(player).setTag(playerTag); + } + } + DiscordBridge.transmitMessage(String.format("**%s joined the server**", + DiscordBridge.fullySanitizeDiscordMessage(player.getDisplayName()))); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event) { + Server.handlePlayerPreLogin(event); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerLogin(PlayerLoginEvent event) { + Server.handlePlayerLogin(event); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/ServerListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/ServerListener.java index 8126fa2..52bc353 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/ServerListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/ServerListener.java @@ -12,48 +12,45 @@ import org.bukkit.event.Listener; import org.bukkit.event.server.ServerListPingEvent; public class ServerListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST) - public void onServerPing(ServerListPingEvent event) { - final String ip = event.getAddress().getHostAddress(); - if (BanManager.isIpBanned(ip)) { - event.setMotd(ChatColor.RED + "You are banned."); - return; - } + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerPing(ServerListPingEvent event) { + final String ip = event.getAddress().getHostAddress(); - if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) - { - event.setMotd(ChatColor.RED + "Server is in adminmode."); - return; - } + if (BanManager.isIpBanned(ip)) { + event.setMotd(ChatColor.RED + "You are banned."); + return; + } - if (Bukkit.hasWhitelist()) - { - event.setMotd(ChatColor.RED + "Server is whitelisted."); - return; - } + if (ConfigurationEntry.ADMIN_ONLY_MODE.getBoolean()) { + event.setMotd(ChatColor.RED + "Server is in adminmode."); + return; + } - if (Bukkit.getOnlinePlayers().size() >= Bukkit.getMaxPlayers()) - { - event.setMotd(ChatColor.RED + "Server is full."); - return; - } + if (Bukkit.hasWhitelist()) { + event.setMotd(ChatColor.RED + "Server is whitelisted."); + return; + } - if (!ConfigurationEntry.SERVER_COLORFUL_MOTD.getBoolean()) - { - event.setMotd(Utilities.colorize(ConfigurationEntry.SERVER_MOTD.getString() - .replace("%mcversion%", Server.getVersion()))); - return; - } - // Colorful MOTD + if (Bukkit.getOnlinePlayers().size() >= Bukkit.getMaxPlayers()) { + event.setMotd(ChatColor.RED + "Server is full."); + return; + } - final StringBuilder motd = new StringBuilder(); + if (!ConfigurationEntry.SERVER_COLORFUL_MOTD.getBoolean()) { + event.setMotd(Utilities.colorize(ConfigurationEntry.SERVER_MOTD.getString() + .replace("%mcversion%", Server.getVersion()))); + return; + } + // Colorful MOTD - for (String word : ConfigurationEntry.SERVER_MOTD.getString().replace("%mcversion%", Server.getVersion()).split(" ")) - { - motd.append(Utilities.randomChatColor()).append(word).append(" "); - } + final StringBuilder motd = new StringBuilder(); - event.setMotd(Utilities.colorize(motd.toString())); - } + for (String word : ConfigurationEntry.SERVER_MOTD.getString() + .replace("%mcversion%", Server.getVersion()).split(" ")) { + motd.append(Utilities.randomChatColor()).append(word).append(" "); + } + + event.setMotd(Utilities.colorize(motd.toString())); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WeatherListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WeatherListener.java index 0802905..cd36575 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WeatherListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WeatherListener.java @@ -9,42 +9,36 @@ import org.bukkit.event.weather.ThunderChangeEvent; import org.bukkit.event.weather.WeatherChangeEvent; public class WeatherListener implements Listener { - @EventHandler(priority = EventPriority.HIGH) - public void onThunderChange(ThunderChangeEvent event) { - try { - if (event.getWorld() == AdminWorld.getInstance().getWorld() && AdminWorld.getInstance().getWeatherMode() != AdminWorld.WeatherMode.OFF) { - return; - } - } - catch (Exception ex) - { - } - if (event.toThunderState() && ConfigurationEntry.DISABLE_WEATHER.getBoolean()) - { - event.setCancelled(true); - return; - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onThunderChange(ThunderChangeEvent event) { + try { + if (event.getWorld() == AdminWorld.getInstance().getWorld() + && AdminWorld.getInstance().getWeatherMode() != AdminWorld.WeatherMode.OFF) { + return; + } + } catch (Exception ex) { + } - @EventHandler(priority = EventPriority.HIGH) - public void onWeatherChange(WeatherChangeEvent event) - { - try - { - if (event.getWorld() == AdminWorld.getInstance().getWorld() && AdminWorld.getInstance().getWeatherMode() != AdminWorld.WeatherMode.OFF) - { - return; - } - } - catch (Exception ex) - { - } + if (event.toThunderState() && ConfigurationEntry.DISABLE_WEATHER.getBoolean()) { + event.setCancelled(true); + return; + } + } - if (event.toWeatherState() && ConfigurationEntry.DISABLE_WEATHER.getBoolean()) - { - event.setCancelled(true); - return; - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onWeatherChange(WeatherChangeEvent event) { + try { + if (event.getWorld() == AdminWorld.getInstance().getWorld() + && AdminWorld.getInstance().getWeatherMode() != AdminWorld.WeatherMode.OFF) { + return; + } + } catch (Exception ex) { + } + + if (event.toWeatherState() && ConfigurationEntry.DISABLE_WEATHER.getBoolean()) { + event.setCancelled(true); + return; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WorldEditListener.java b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WorldEditListener.java index fd5586b..6d693a9 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WorldEditListener.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/listener/WorldEditListener.java @@ -12,48 +12,48 @@ import org.bukkit.event.Listener; public class WorldEditListener implements Listener { - @EventHandler - public void onSelectionChange(final SelectionChangedEvent event) { - final Player player = event.getPlayer(); + @EventHandler + public void onSelectionChange(final SelectionChangedEvent event) { + final Player player = event.getPlayer(); - if (AdminList.isSuperAdmin(player)) { - return; - } + if (AdminList.isSuperAdmin(player)) { + return; + } - if (ProtectedArea.isInProtectedArea( - event.getMinVector(), - event.getMaxVector(), - event.getWorld().getName())) - { + if (ProtectedArea.isInProtectedArea( + event.getMinVector(), + event.getMaxVector(), + event.getWorld().getName())) { - player.sendMessage(ChatColor.RED + "The region that you selected contained a protected area. Selection cleared."); - event.setCancelled(true); - } - } + player.sendMessage(ChatColor.RED + + "The region that you selected contained a protected area. Selection cleared."); + event.setCancelled(true); + } + } - @EventHandler - public void onLimitChanged(LimitChangedEvent event) - { - final Player player = event.getPlayer(); + @EventHandler + public void onLimitChanged(LimitChangedEvent event) { + final Player player = event.getPlayer(); - if (AdminList.isSuperAdmin(player)) - { - return; - } + if (AdminList.isSuperAdmin(player)) { + return; + } - if (!event.getPlayer().equals(event.getTarget())) - { - player.sendMessage(ChatColor.RED + "Only admins can change the limit for other players!"); - event.setCancelled(true); - } + if (!event.getPlayer().equals(event.getTarget())) { + player.sendMessage( + ChatColor.RED + "Only admins can change the limit for other players!"); + event.setCancelled(true); + } - if (event.getLimit() < 0 || event.getLimit() > 10000) - { - player.setOp(false); - Utilities.bcastMsg(event.getPlayer().getName() + " tried to set their WorldEdit limit to " + event.getLimit() + " and has been de-opped", ChatColor.RED); - event.setCancelled(true); - player.sendMessage(ChatColor.RED + "You cannot set your limit higher than 10000 or to -1!"); - } - } + if (event.getLimit() < 0 || event.getLimit() > 10000) { + player.setOp(false); + Utilities.bcastMsg( + event.getPlayer().getName() + " tried to set their WorldEdit limit to " + + event.getLimit() + " and has been de-opped", ChatColor.RED); + event.setCancelled(true); + player.sendMessage( + ChatColor.RED + "You cannot set your limit higher than 10000 or to -1!"); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/manager/UUIDManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/manager/UUIDManager.java new file mode 100644 index 0000000..a2024c2 --- /dev/null +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/manager/UUIDManager.java @@ -0,0 +1,288 @@ +package me.StevenLawson.TotalFreedomMod.manager; + +import com.google.common.collect.ImmutableList; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.Callable; +import me.StevenLawson.TotalFreedomMod.Log; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import me.StevenLawson.TotalFreedomMod.player.PlayerData; +import me.StevenLawson.TotalFreedomMod.sql.SQLiteDatabase; +import me.StevenLawson.TotalFreedomMod.sql.SQLiteDatabase.Statement; +import me.StevenLawson.TotalFreedomMod.util.SQLUtil; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; + +public class UUIDManager { + + public static final String TABLE_NAME = "uuids"; + private static final SQLiteDatabase SQL; + private static final Statement FIND; + private static final Statement UPDATE; + + static { + SQL = new SQLiteDatabase( + "uuids.db", + TABLE_NAME, + "username VARCHAR(" + TotalFreedomMod.MAX_USERNAME_LENGTH + + ") NOT NULL PRIMARY KEY, uuid CHAR(36) NOT NULL"); + + FIND = SQL.addPreparedStatement( + "SELECT * FROM " + TABLE_NAME + " WHERE lower(username) = ?;"); + UPDATE = SQL.addPreparedStatement( + "REPLACE INTO " + TABLE_NAME + " (username, uuid) VALUES (?, ?);"); + } + + private UUIDManager() { + throw new AssertionError(); + } + + public static void load() { + // Init DB + SQL.connect(); + } + + public static void close() { + SQL.close(); + } + + public static int purge() { + return SQL.purge(); + } + + public static UUID newPlayer(Player player, String ip) { + Log.info("Obtaining UUID for new player: " + player.getName()); + + final String username = player.getName().toLowerCase(); + + // Look in DB + final UUID dbUuid = find(username); + if (dbUuid != null) { + return dbUuid; + } + + // Find UUID and update in DB if not found + // Try API + UUID uuid = TFM_UuidResolver.getUUIDOf(username); + if (uuid == null) { + // Spoof + uuid = generateSpoofUuid(username); + } + + update(username, uuid); + return uuid; + } + + private static UUID generateOfflineUUID(String username) { + return UUID.nameUUIDFromBytes(("OfflinePlayer:" + username).getBytes()); + } + + public static UUID getUniqueId(OfflinePlayer offlinePlayer) { + // Online check first + if (offlinePlayer.isOnline() && PlayerData.hasPlayerData(offlinePlayer.getPlayer())) { + return PlayerData.getPlayerData(offlinePlayer.getPlayer()).getUniqueId(); + } + + // If the offline player's uuid isn't offline, just return that. + if (!offlinePlayer.getUniqueId().equals(generateOfflineUUID(offlinePlayer.getName()))) { + return offlinePlayer.getUniqueId(); + } + + // DB, API, Spoof + return getUniqueId(offlinePlayer.getName()); + } + + public static UUID getUniqueId(String username) { + // Use Bukkit + final Player player = Bukkit.getPlayerExact(username); + if (player != null) { + return player.getUniqueId(); + } + + // Look in DB + final UUID dbUuid = find(username); + if (dbUuid != null) { + return dbUuid; + } + + // Try API + final UUID apiUuid = TFM_UuidResolver.getUUIDOf(username); + if (apiUuid != null) { + return apiUuid; + } + + // Spoof + return generateSpoofUuid(username); + } + + public static void rawSetUUID(String name, UUID uuid) { + if (name == null || uuid == null || name.isEmpty()) { + Log.warning("Not setting raw UUID: name and uuid may not be null!"); + return; + } + + update(name.toLowerCase().trim(), uuid); + } + + private static UUID find(String searchName) { + if (!SQL.connect()) { + return null; + } + + final ResultSet result; + try { + final PreparedStatement statement = FIND.getStatement(); + statement.clearParameters(); + statement.setString(1, searchName.toLowerCase()); + result = statement.executeQuery(); + } catch (Exception ex) { + Log.severe("Could not execute find statement!"); + Log.severe(ex); + return null; + } + + if (!SQLUtil.hasData(result)) { + SQLUtil.close(result); + return null; + } + + try { + final String uuidString = result.getString("uuid"); + return UUID.fromString(uuidString); + } catch (Exception ex) { + Log.severe(ex); + return null; + } finally { + SQLUtil.close(result); + } + } + + private static boolean update(String username, UUID uuid) { + if (!SQL.connect()) { + return false; + } + + try { + final PreparedStatement statement = UPDATE.getStatement(); + statement.clearParameters(); + statement.setString(1, username.toLowerCase()); + statement.setString(2, uuid.toString()); + statement.executeUpdate(); + return true; + } catch (Exception ex) { + Log.severe("Could not execute update statement!"); + Log.severe(ex); + return false; + } + } + + private static UUID generateSpoofUuid(String name) { + name = name.toLowerCase(); + Log.info("Generating spoof UUID for " + name); + + try { + final MessageDigest digest = MessageDigest.getInstance("SHA256"); + final byte[] result = digest.digest(name.getBytes()); + final StringBuilder builder = new StringBuilder(); + for (int i = 0; i < result.length; i++) { + builder.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); + } + + return UUID.fromString( + "deadbeef" + + "-" + builder.substring(8, 12) + + "-" + builder.substring(12, 16) + + "-" + builder.substring(16, 20) + + "-" + builder.substring(20, 32)); + } catch (NoSuchAlgorithmException ex) { + Log.warning("Could not generate spoof UUID: SHA1 algorithm not found!"); + } + + return UUID.randomUUID(); + } + + public static class TFM_UuidResolver implements Callable> { + + private static final double PROFILES_PER_REQUEST = 100; + private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; + private final JSONParser jsonParser = new JSONParser(); + private final List names; + + public TFM_UuidResolver(List names) { + this.names = ImmutableList.copyOf(names); + } + + public static UUID getUUIDOf(String name) { + return new TFM_UuidResolver(Arrays.asList(name)).call().get(name); + } + + @Override + public Map call() { + final Map uuidMap = new HashMap(); + int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); + for (int i = 0; i < requests; i++) { + try { + final URL url = new URL(PROFILE_URL); + final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + + final String body = JSONArray.toJSONString( + names.subList(i * 100, Math.min((i + 1) * 100, names.size()))); + + final OutputStream stream = connection.getOutputStream(); + stream.write(body.getBytes()); + stream.flush(); + stream.close(); + + final JSONArray array = (JSONArray) jsonParser.parse( + new InputStreamReader(connection.getInputStream())); + + for (Object profile : array) { + final JSONObject jsonProfile = (JSONObject) profile; + final String id = (String) jsonProfile.get("id"); + final String name = (String) jsonProfile.get("name"); + final UUID uuid = UUID.fromString( + id.substring(0, 8) + + "-" + id.substring(8, 12) + + "-" + id.substring(12, 16) + + "-" + id.substring(16, 20) + + "-" + id.substring(20, 32)); + uuidMap.put(name, uuid); + } + + if (i != requests - 1) { + Thread.sleep(100L); + } + } catch (Exception ex) { + Log.severe("Could not resolve UUID(s) of " + + StringUtils.join( + names.subList(i * 100, Math.min((i + 1) * 100, names.size())), ", ")); + //Log.severe(ex); + } + } + return uuidMap; + } + } + +} diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/manager/VanishManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/manager/VanishManager.java new file mode 100644 index 0000000..778f886 --- /dev/null +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/manager/VanishManager.java @@ -0,0 +1,107 @@ +package me.StevenLawson.TotalFreedomMod.manager; + +import java.util.ArrayList; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import me.StevenLawson.TotalFreedomMod.admin.Admin; +import me.StevenLawson.TotalFreedomMod.admin.AdminList; +import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; +import me.StevenLawson.TotalFreedomMod.player.PlayerData; +import me.StevenLawson.TotalFreedomMod.player.PlayerRank; +import me.StevenLawson.TotalFreedomMod.util.Utilities; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.TranslatableComponent; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class VanishManager { + + private static final ArrayList vanishedPlayers = new ArrayList<>(); + + public static void vanishPlayer(Player player) { + if (vanishedPlayers.contains(player)) { + // Fail silently + + return; + } + + vanishedPlayers.add(player); + } + + public static void unvanishPlayer(Player player) { + if (!vanishedPlayers.contains(player)) { + // Fail silently + + return; + } + + vanishedPlayers.remove(player); + } + + public static boolean isVanished(Player player) { + return vanishedPlayers.contains(player); + } + + public static void loadVanishedPlayers(Player player) { + for (Player vanishedPlayer : vanishedPlayers) { + player.hidePlayer(vanishedPlayer); + } + } + + public static void fakeLeave(Player player) { + TotalFreedomMod.fuckoffEnabledFor.remove(player); + + final PlayerData playerdata = PlayerData.getPlayerData(player); + + playerdata.disarmMP44(); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (!onlinePlayer.equals(player)) { + onlinePlayer.hidePlayer(player); + } + } + + DiscordBridge.transmitMessage(String.format("**%s left the server**", + DiscordBridge.fullySanitizeDiscordMessage(player.getDisplayName()))); + + TextComponent leftComponent = new TextComponent( + String.format("%s left the game.", player.getName())); + leftComponent.setColor(ChatColor.YELLOW); + + Bukkit.spigot().broadcast(leftComponent); + + vanishPlayer(player); + } + + public static void fakeJoin(Player player) { + Admin asAdmin = AdminList.getEntry(player); + + TranslatableComponent joinComponent = new TranslatableComponent( + "multiplayer.player.joined"); + joinComponent.addWith(player.getName()); + joinComponent.setColor(ChatColor.YELLOW); + + TextComponent loginComponent = Utilities.fromBaseComponents( + TextComponent.fromLegacyText( + String.format(ChatColor.AQUA + "%s is %s", player.getName(), + Utilities.colorize(PlayerRank.getLoginMessage(player))))); + + Bukkit.spigot().broadcast(loginComponent); + Bukkit.spigot().broadcast(joinComponent); + + DiscordBridge.transmitMessage(String.format("**%s joined the server**", player.getName())); + + unvanishPlayer(player); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + onlinePlayer.showPlayer(player); + } + } + + public static int getFakeOnlinePlayers() { + if (vanishedPlayers.size() == 0) { + return Bukkit.getOnlinePlayers().size(); + } + return Bukkit.getOnlinePlayers().size() - vanishedPlayers.size(); + } +} diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/HeartBeat.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/HeartBeat.java index 7a51ffd..49f4111 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/HeartBeat.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/HeartBeat.java @@ -10,81 +10,71 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -public class HeartBeat extends BukkitRunnable -{ - private static final long AUTO_KICK_TIME = (long) ConfigurationEntry.AUTOKICK_TIME.getInteger() * 1000L; - private final TotalFreedomMod plugin; - private final Server server; - private static Long lastRan = null; +public class HeartBeat extends BukkitRunnable { - public HeartBeat(TotalFreedomMod instance) - { - this.plugin = instance; - this.server = plugin.getServer(); - } + private static final long AUTO_KICK_TIME = + (long) ConfigurationEntry.AUTOKICK_TIME.getInteger() * 1000L; + private static Long lastRan = null; + private final TotalFreedomMod plugin; + private final Server server; - public static Long getLastRan() - { - return lastRan; - } + public HeartBeat(TotalFreedomMod instance) { + this.plugin = instance; + this.server = plugin.getServer(); + } - @Override - public void run() - { - lastRan = System.currentTimeMillis(); + public static Long getLastRan() { + return lastRan; + } - final boolean doAwayKickCheck = ConfigurationEntry.AUTOKICK_ENABLED.getBoolean() - && EssentialsBridge.isEssentialsEnabled() - && ((server.getOnlinePlayers().size() / server.getMaxPlayers()) > ConfigurationEntry.AUTOKICK_THRESHOLD.getDouble()); + @Override + public void run() { + lastRan = System.currentTimeMillis(); - for (Player player : server.getOnlinePlayers()) - { - final PlayerData playerdata = PlayerData.getPlayerData(player); - playerdata.resetMsgCount(); - playerdata.resetBlockDestroyCount(); - playerdata.resetBlockPlaceCount(); + final boolean doAwayKickCheck = ConfigurationEntry.AUTOKICK_ENABLED.getBoolean() + && EssentialsBridge.isEssentialsEnabled() + && ((server.getOnlinePlayers().size() / server.getMaxPlayers()) + > ConfigurationEntry.AUTOKICK_THRESHOLD.getDouble()); - if (doAwayKickCheck) - { - final long lastActivity = EssentialsBridge.getLastActivity(player.getName()); - if (lastActivity > 0 && lastActivity + AUTO_KICK_TIME < System.currentTimeMillis()) - { - player.kickPlayer("Automatically kicked by server for inactivity."); - } - } - } + for (Player player : server.getOnlinePlayers()) { + final PlayerData playerdata = PlayerData.getPlayerData(player); + playerdata.resetMsgCount(); + playerdata.resetBlockDestroyCount(); + playerdata.resetBlockPlaceCount(); - if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) - { - Utilities.TFM_EntityWiper.wipeEntities(!ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean(), false); - } + if (doAwayKickCheck) { + final long lastActivity = EssentialsBridge.getLastActivity(player.getName()); + if (lastActivity > 0 + && lastActivity + AUTO_KICK_TIME < System.currentTimeMillis()) { + player.kickPlayer("Automatically kicked by server for inactivity."); + } + } + } - if (ConfigurationEntry.DISABLE_WEATHER.getBoolean()) - { - for (World world : server.getWorlds()) - { - try - { - if (world == AdminWorld.getInstance().getWorld() && AdminWorld.getInstance().getWeatherMode() != AdminWorld.WeatherMode.OFF) - { - continue; - } - } - catch (Exception ex) - { - } + if (ConfigurationEntry.AUTO_ENTITY_WIPE.getBoolean()) { + Utilities.TFM_EntityWiper.wipeEntities( + !ConfigurationEntry.ALLOW_EXPLOSIONS.getBoolean(), false); + } - if (world.getWeatherDuration() > 0) - { - world.setThundering(false); - world.setWeatherDuration(0); - } - else if (world.getThunderDuration() > 0) - { - world.setStorm(false); - world.setThunderDuration(0); - } - } - } - } + if (ConfigurationEntry.DISABLE_WEATHER.getBoolean()) { + for (World world : server.getWorlds()) { + try { + if (world == AdminWorld.getInstance().getWorld() + && AdminWorld.getInstance().getWeatherMode() + != AdminWorld.WeatherMode.OFF) { + continue; + } + } catch (Exception ex) { + } + + if (world.getWeatherDuration() > 0) { + world.setThundering(false); + world.setWeatherDuration(0); + } else if (world.getThunderDuration() > 0) { + world.setStorm(false); + world.setThunderDuration(0); + } + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/Player.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/Player.java index cc2f8cc..e46593c 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/Player.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/Player.java @@ -1,144 +1,124 @@ package me.StevenLawson.TotalFreedomMod.player; -import java.sql.Array; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; - -import com.google.common.collect.ImmutableList; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.configuration.ConfigurationSection; -public class Player -{ - private final UUID uuid; - private String firstJoinName; - private String lastJoinName; - private long firstJoinUnix; - private long lastJoinUnix; - private final List ips; +public class Player { - protected Player(UUID uuid, ConfigurationSection section) - { - this(uuid); + private final UUID uuid; + private final List ips; + private String firstJoinName; + private String lastJoinName; + private long firstJoinUnix; + private long lastJoinUnix; - this.firstJoinName = section.getString("firstjoinname"); - this.lastJoinName = section.getString("lastjoinname"); + protected Player(UUID uuid, ConfigurationSection section) { + this(uuid); - this.firstJoinUnix = section.getLong("firstjoinunix"); - this.lastJoinUnix = section.getLong("lastjoinunix"); + this.firstJoinName = section.getString("firstjoinname"); + this.lastJoinName = section.getString("lastjoinname"); - this.ips.addAll(section.getStringList("ips")); - } + this.firstJoinUnix = section.getLong("firstjoinunix"); + this.lastJoinUnix = section.getLong("lastjoinunix"); - protected Player(UUID uuid, String firstJoinName, String lastJoinName, long firstJoinUnix, long lastJoinUnix, List ips) - { - this(uuid); + this.ips.addAll(section.getStringList("ips")); + } - this.firstJoinName = firstJoinName; - this.lastJoinName = lastJoinName; + protected Player(UUID uuid, String firstJoinName, String lastJoinName, long firstJoinUnix, + long lastJoinUnix, List ips) { + this(uuid); - this.firstJoinUnix = firstJoinUnix; - this.lastJoinUnix = lastJoinUnix; + this.firstJoinName = firstJoinName; + this.lastJoinName = lastJoinName; - this.ips.addAll(ips); - } + this.firstJoinUnix = firstJoinUnix; + this.lastJoinUnix = lastJoinUnix; - protected Player(UUID uuid) - { - if (uuid == null) - { - throw new IllegalArgumentException("UUID can not be null!"); - } + this.ips.addAll(ips); + } - this.uuid = uuid; - this.ips = new ArrayList(); - } + protected Player(UUID uuid) { + if (uuid == null) { + throw new IllegalArgumentException("UUID can not be null!"); + } - // Getters / Setters below - public UUID getUniqueId() - { - return uuid; - } + this.uuid = uuid; + this.ips = new ArrayList(); + } - public List getFuzziedIps() { - final ArrayList fuzziedIps = new ArrayList<>(); + // Getters / Setters below + public UUID getUniqueId() { + return uuid; + } - for (String ip : ips) - { - fuzziedIps.add(Utilities.getFuzzyIp(ip)); - } + public List getFuzziedIps() { + final ArrayList fuzziedIps = new ArrayList<>(); - return ImmutableList.copyOf(fuzziedIps); - } + for (String ip : ips) { + fuzziedIps.add(Utilities.getFuzzyIp(ip)); + } - public List getIps() - { - return Collections.unmodifiableList(ips); - } + return ImmutableList.copyOf(fuzziedIps); + } - public String getFirstLoginName() - { - return firstJoinName; - } + public List getIps() { + return Collections.unmodifiableList(ips); + } - public void setFirstLoginName(String firstJoinName) - { - this.firstJoinName = firstJoinName; - } + public String getFirstLoginName() { + return firstJoinName; + } - public String getLastLoginName() - { - return lastJoinName; - } + public void setFirstLoginName(String firstJoinName) { + this.firstJoinName = firstJoinName; + } - public void setLastLoginName(String lastJoinName) - { - this.lastJoinName = lastJoinName; - } + public String getLastLoginName() { + return lastJoinName; + } - public long getFirstLoginUnix() - { - return firstJoinUnix; - } + public void setLastLoginName(String lastJoinName) { + this.lastJoinName = lastJoinName; + } - public void setFirstLoginUnix(long firstJoinUnix) - { - this.firstJoinUnix = firstJoinUnix; - } + public long getFirstLoginUnix() { + return firstJoinUnix; + } - public long getLastLoginUnix() - { - return lastJoinUnix; - } + public void setFirstLoginUnix(long firstJoinUnix) { + this.firstJoinUnix = firstJoinUnix; + } - public void setLastLoginUnix(long lastJoinUnix) - { - this.lastJoinUnix = lastJoinUnix; - } + public long getLastLoginUnix() { + return lastJoinUnix; + } - public boolean addIp(String ip) - { - if (!ips.contains(ip)) - { - ips.add(ip); - return true; - } - return false; - } + public void setLastLoginUnix(long lastJoinUnix) { + this.lastJoinUnix = lastJoinUnix; + } - public final boolean isComplete() - { - return firstJoinName != null - && lastJoinName != null - && firstJoinUnix != 0 - && lastJoinUnix != 0 - && !ips.isEmpty(); - } + public boolean addIp(String ip) { + if (!ips.contains(ip)) { + ips.add(ip); + return true; + } + return false; + } - public void save() - { - PlayerList.save(this); - } + public final boolean isComplete() { + return firstJoinName != null + && lastJoinName != null + && firstJoinUnix != 0 + && lastJoinUnix != 0 + && !ips.isEmpty(); + } + + public void save() { + PlayerList.save(this); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerData.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerData.java index 6bfb20d..89c5d32 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerData.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerData.java @@ -1,12 +1,20 @@ package me.StevenLawson.TotalFreedomMod.player; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.bridge.EssentialsBridge; -import me.StevenLawson.TotalFreedomMod.commands.AdminLevel; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -14,574 +22,476 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; -import java.util.*; - public class PlayerData { - public static final Map PLAYER_DATA = new HashMap(); // ip,data - public static final long AUTO_PURGE = 20L * 60L * 5L; - - public static boolean hasPlayerData(Player player) { - return PLAYER_DATA.containsKey(Utilities.getIp(player)); - } - - public static PlayerData getPlayerDataSync(Player player) - { - synchronized (PLAYER_DATA) - { - return getPlayerData(player); - } - } - - public static PlayerData getPlayerData(Player player) - { - final String ip = Utilities.getIp(player); - - PlayerData data = PlayerData.PLAYER_DATA.get(ip); - - if (data != null) - { - return data; - } - - if (Bukkit.getOnlineMode()) - { - for (PlayerData dataTest : PLAYER_DATA.values()) - { - if (dataTest.player.getName().equalsIgnoreCase(player.getName())) - { - data = dataTest; - break; - } - } - } - - if (data != null) - { - return data; - } - - data = new PlayerData(player, UUIDManager.getUniqueId(player), ip); - PlayerData.PLAYER_DATA.put(ip, data); - - return data; - } - // - private final Player player; - private final String ip; - private final UUID uuid; - // - private BukkitTask unmuteTask; - private BukkitTask unfreezeTask; - private Location freezeLocation; - private boolean isHalted = false; - private int messageCount = 0; - private int totalBlockDestroy = 0; - private int totalBlockPlace = 0; - private int freecamDestroyCount = 0; - private int freecamPlaceCount = 0; - private boolean isCaged = false; - private Location cagePosition; - private final List cageHistory = new ArrayList(); - private Material cageOuterMaterial = Material.GLASS; - private Material cageInnerMatterial = Material.AIR; - private boolean isOrbiting = false; - private double orbitStrength = 10.0; - private boolean mobThrowerEnabled = false; - private EntityType mobThrowerEntity = EntityType.PIG; - private double mobThrowerSpeed = 4.0; - private final List mobThrowerQueue = new ArrayList(); - private BukkitTask mp44ScheduleTask = null; - private boolean mp44Armed = false; - private boolean mp44Firing = false; - private BukkitTask lockupScheduleTask = null; - private String lastMessage = ""; - private boolean inAdminchat = false; - private boolean allCommandsBlocked = false; - private boolean verifiedSuperadminId = false; - private String lastCommand = ""; - private boolean cmdspyEnabled = false; - private String tag = null; - private int warningCount = 0; - - private PlayerData(Player player, UUID uuid, String ip) - { - this.player = player; - this.uuid = uuid; - this.ip = ip; - } - - public String getIpAddress() - { - return this.ip; - } - - public UUID getUniqueId() - { - return uuid; - } - - public boolean isOrbiting() - { - return isOrbiting; - } - - public void startOrbiting(double strength) - { - this.isOrbiting = true; - this.orbitStrength = strength; - } - - public void stopOrbiting() - { - this.isOrbiting = false; - } - - public double orbitStrength() - { - return orbitStrength; - } - - public void setCaged(boolean state) - { - this.isCaged = state; - } - - public void setCaged(boolean state, Location location, Material outer, Material inner) - { - this.isCaged = state; - this.cagePosition = location; - this.cageOuterMaterial = outer; - this.cageInnerMatterial = inner; - } - - public boolean isCaged() - { - return isCaged; - } - - public Material getCageMaterial(CageLayer layer) - { - switch (layer) - { - case OUTER: - return this.cageOuterMaterial; - case INNER: - return this.cageInnerMatterial; - default: - return this.cageOuterMaterial; - } - } - - public Location getCagePos() - { - return cagePosition; - } - - public void clearHistory() - { - cageHistory.clear(); - } - - public void insertHistoryBlock(Location location, Material material) - { - cageHistory.add(new TFM_BlockData(location, material)); - } - - public void regenerateHistory() - { - for (TFM_BlockData blockdata : this.cageHistory) - { - blockdata.location.getBlock().setType(blockdata.material); - } - } - - public Location getFreezeLocation() - { - return freezeLocation; - } - - public boolean isFrozen() - { - return unfreezeTask != null; - } - - public void setFrozen(boolean freeze) - { - cancel(unfreezeTask); - unfreezeTask = null; - freezeLocation = null; - - if (player.getGameMode() != GameMode.CREATIVE) - { - Utilities.setFlying(player, false); - } - - if (!freeze) - { - return; - } - - freezeLocation = player.getLocation(); // Blockify location - Utilities.setFlying(player, true); // Avoid infinite falling - - unfreezeTask = new BukkitRunnable() - { - @Override - public void run() - { - Utilities.adminAction("TotalFreedom", "Unfreezing " + player.getName(), false); - setFrozen(false); - } - - }.runTaskLater(TotalFreedomMod.plugin, AUTO_PURGE); - } - - public void resetMsgCount() - { - this.messageCount = 0; - } - - public int incrementAndGetMsgCount() - { - return this.messageCount++; - } - - public int incrementAndGetBlockDestroyCount() - { - return this.totalBlockDestroy++; - } - - public void resetBlockDestroyCount() - { - this.totalBlockDestroy = 0; - } - - public int incrementAndGetBlockPlaceCount() - { - return this.totalBlockPlace++; - } - - public void resetBlockPlaceCount() - { - this.totalBlockPlace = 0; - } - - public int incrementAndGetFreecamDestroyCount() - { - return this.freecamDestroyCount++; - } - - public void resetFreecamDestroyCount() - { - this.freecamDestroyCount = 0; - } - - public int incrementAndGetFreecamPlaceCount() - { - return this.freecamPlaceCount++; - } - - public void resetFreecamPlaceCount() - { - this.freecamPlaceCount = 0; - } - - public void enableMobThrower(EntityType mobThrowerCreature, double mobThrowerSpeed) - { - this.mobThrowerEnabled = true; - this.mobThrowerEntity = mobThrowerCreature; - this.mobThrowerSpeed = mobThrowerSpeed; - } - - public void disableMobThrower() - { - this.mobThrowerEnabled = false; - } - - public EntityType mobThrowerCreature() - { - return this.mobThrowerEntity; - } - - public double mobThrowerSpeed() - { - return this.mobThrowerSpeed; - } - - public boolean mobThrowerEnabled() - { - return this.mobThrowerEnabled; - } - - public void enqueueMob(LivingEntity mob) - { - mobThrowerQueue.add(mob); - if (mobThrowerQueue.size() > 4) - { - LivingEntity oldmob = mobThrowerQueue.remove(0); - if (oldmob != null) - { - oldmob.damage(500.0); - } - } - } - - public void startArrowShooter(TotalFreedomMod plugin) - { - this.stopArrowShooter(); - this.mp44ScheduleTask = new ArrowShooter(this.player).runTaskTimer(plugin, 1L, 1L); - this.mp44Firing = true; - } - - public void stopArrowShooter() - { - if (this.mp44ScheduleTask != null) - { - this.mp44ScheduleTask.cancel(); - this.mp44ScheduleTask = null; - } - this.mp44Firing = false; - } - - public void armMP44() - { - this.mp44Armed = true; - this.stopArrowShooter(); - } - - public void disarmMP44() - { - this.mp44Armed = false; - this.stopArrowShooter(); - } - - public boolean isMP44Armed() - { - return this.mp44Armed; - } - - public boolean toggleMP44Firing() - { - this.mp44Firing = !this.mp44Firing; - return mp44Firing; - } - - public boolean isMuted() - { - return unmuteTask != null; - } - - public void setMuted(boolean muted) - { - cancel(unmuteTask); - unmuteTask = null; - - if (!muted) - { - return; - } - - unmuteTask = new BukkitRunnable() - { - @Override - public void run() - { - Utilities.adminAction("TotalFreedom", "Unmuting " + player.getName(), false); - setMuted(false); - } - }.runTaskLater(TotalFreedomMod.plugin, AUTO_PURGE); - } - - public boolean isHalted() - { - return this.isHalted; - } - - public void setHalted(boolean halted) - { - this.isHalted = halted; - - if (halted) - { - player.setOp(false); - player.setGameMode(GameMode.SURVIVAL); - Utilities.setFlying(player, false); - EssentialsBridge.setNickname(player.getName(), player.getName()); - player.closeInventory(); - player.setTotalExperience(0); - - stopOrbiting(); - setFrozen(true); - setMuted(true); - - player.sendMessage(ChatColor.GRAY + "You have been halted, don't move!"); - } - else - { - player.setOp(true); - player.setGameMode(GameMode.CREATIVE); - setFrozen(false); - setMuted(false); - - player.sendMessage(ChatColor.GRAY + "You are no longer halted."); - } - - } - - public BukkitTask getLockupScheduleID() - { - return this.lockupScheduleTask; - } - - public void setLockupScheduleID(BukkitTask id) - { - this.lockupScheduleTask = id; - } - - public void setLastMessage(String message) - { - this.lastMessage = message; - } - - public String getLastMessage() - { - return lastMessage; - } - - public void setAdminChat(boolean inAdminchat) - { - this.inAdminchat = inAdminchat; - } - - public boolean inAdminChat() - { - return this.inAdminchat; - } - - public boolean allCommandsBlocked() - { - return this.allCommandsBlocked; - } - - public void setCommandsBlocked(boolean commandsBlocked) - { - this.allCommandsBlocked = commandsBlocked; - } - - // If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. - // After the check for this is done in PlayerListener, never change it elsewhere. - public boolean isSuperadminIdVerified() - { - return this.verifiedSuperadminId; - } - - // If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. - // After the check for this is done in PlayerListener, never change it elsewhere. - public void setSuperadminIdVerified(boolean verifiedSuperadminId) - { - this.verifiedSuperadminId = verifiedSuperadminId; - } - - public String getLastCommand() - { - return lastCommand; - } - - public void setLastCommand(String lastCommand) - { - this.lastCommand = lastCommand; - } - - public void setCommandSpy(boolean enabled) - { - this.cmdspyEnabled = enabled; - } - - public boolean cmdspyEnabled() - { - return cmdspyEnabled; - } - - public void setTag(String tag) - { - if (tag == null) - { - this.tag = null; - } - else - { - this.tag = Utilities.colorize(tag) + ChatColor.RESET; - } - } - - public String getTag() - { - return this.tag; - } - - public int getWarningCount() - { - return this.warningCount; - } - - public void incrementWarnings() - { - this.warningCount++; - - if (this.warningCount % 2 == 0) - { - this.player.getWorld().strikeLightning(this.player.getLocation()); - Utilities.playerMsg(this.player, ChatColor.RED + "You have been warned at least twice now, make sure to read the rules at " + ConfigurationEntry.SERVER_BAN_URL.getString()); - } - } - - public void cancel(BukkitTask task) - { - if (task == null) - { - return; - } - - try - { - task.cancel(); - } - catch (Exception ex) - { - } - } - - public enum CageLayer - { - INNER, OUTER - } - - private class TFM_BlockData - { - public Material material; - public Location location; - - private TFM_BlockData(Location location, Material material) - { - this.location = location; - this.material = material; - } - } - - private class ArrowShooter extends BukkitRunnable - { - private final Player player; - - private ArrowShooter(Player player) - { - this.player = player; - } - - @Override - public void run() - { - Arrow shot = player.launchProjectile(Arrow.class); - shot.setVelocity(shot.getVelocity().multiply(2.0)); - } - } + + public static final Map PLAYER_DATA = new HashMap(); // ip,data + public static final long AUTO_PURGE = 20L * 60L * 5L; + // + private final Player player; + private final String ip; + private final UUID uuid; + private final List cageHistory = new ArrayList(); + private final List mobThrowerQueue = new ArrayList(); + // + private BukkitTask unmuteTask; + private BukkitTask unfreezeTask; + private Location freezeLocation; + private boolean isHalted = false; + private int messageCount = 0; + private int totalBlockDestroy = 0; + private int totalBlockPlace = 0; + private int freecamDestroyCount = 0; + private int freecamPlaceCount = 0; + private boolean isCaged = false; + private Location cagePosition; + private Material cageOuterMaterial = Material.GLASS; + private Material cageInnerMatterial = Material.AIR; + private boolean isOrbiting = false; + private double orbitStrength = 10.0; + private boolean mobThrowerEnabled = false; + private EntityType mobThrowerEntity = EntityType.PIG; + private double mobThrowerSpeed = 4.0; + private BukkitTask mp44ScheduleTask = null; + private boolean mp44Armed = false; + private boolean mp44Firing = false; + private BukkitTask lockupScheduleTask = null; + private String lastMessage = ""; + private boolean inAdminchat = false; + private boolean allCommandsBlocked = false; + private boolean verifiedSuperadminId = false; + private String lastCommand = ""; + private boolean cmdspyEnabled = false; + private String tag = null; + private int warningCount = 0; + private PlayerData(Player player, UUID uuid, String ip) { + this.player = player; + this.uuid = uuid; + this.ip = ip; + } + + public static boolean hasPlayerData(Player player) { + return PLAYER_DATA.containsKey(Utilities.getIp(player)); + } + + public static PlayerData getPlayerDataSync(Player player) { + synchronized (PLAYER_DATA) { + return getPlayerData(player); + } + } + + public static PlayerData getPlayerData(Player player) { + final String ip = Utilities.getIp(player); + + PlayerData data = PlayerData.PLAYER_DATA.get(ip); + + if (data != null) { + return data; + } + + if (Bukkit.getOnlineMode()) { + for (PlayerData dataTest : PLAYER_DATA.values()) { + if (dataTest.player.getName().equalsIgnoreCase(player.getName())) { + data = dataTest; + break; + } + } + } + + if (data != null) { + return data; + } + + data = new PlayerData(player, UUIDManager.getUniqueId(player), ip); + PlayerData.PLAYER_DATA.put(ip, data); + + return data; + } + + public String getIpAddress() { + return this.ip; + } + + public UUID getUniqueId() { + return uuid; + } + + public boolean isOrbiting() { + return isOrbiting; + } + + public void startOrbiting(double strength) { + this.isOrbiting = true; + this.orbitStrength = strength; + } + + public void stopOrbiting() { + this.isOrbiting = false; + } + + public double orbitStrength() { + return orbitStrength; + } + + public void setCaged(boolean state, Location location, Material outer, Material inner) { + this.isCaged = state; + this.cagePosition = location; + this.cageOuterMaterial = outer; + this.cageInnerMatterial = inner; + } + + public boolean isCaged() { + return isCaged; + } + + public void setCaged(boolean state) { + this.isCaged = state; + } + + public Material getCageMaterial(CageLayer layer) { + switch (layer) { + case OUTER: + return this.cageOuterMaterial; + case INNER: + return this.cageInnerMatterial; + default: + return this.cageOuterMaterial; + } + } + + public Location getCagePos() { + return cagePosition; + } + + public void clearHistory() { + cageHistory.clear(); + } + + public void insertHistoryBlock(Location location, Material material) { + cageHistory.add(new TFM_BlockData(location, material)); + } + + public void regenerateHistory() { + for (TFM_BlockData blockdata : this.cageHistory) { + blockdata.location.getBlock().setType(blockdata.material); + } + } + + public Location getFreezeLocation() { + return freezeLocation; + } + + public boolean isFrozen() { + return unfreezeTask != null; + } + + public void setFrozen(boolean freeze) { + cancel(unfreezeTask); + unfreezeTask = null; + freezeLocation = null; + + if (player.getGameMode() != GameMode.CREATIVE) { + Utilities.setFlying(player, false); + } + + if (!freeze) { + return; + } + + freezeLocation = player.getLocation(); // Blockify location + Utilities.setFlying(player, true); // Avoid infinite falling + + unfreezeTask = new BukkitRunnable() { + @Override + public void run() { + Utilities.adminAction("TotalFreedom", "Unfreezing " + player.getName(), false); + setFrozen(false); + } + + }.runTaskLater(TotalFreedomMod.plugin, AUTO_PURGE); + } + + public void resetMsgCount() { + this.messageCount = 0; + } + + public int incrementAndGetMsgCount() { + return this.messageCount++; + } + + public int incrementAndGetBlockDestroyCount() { + return this.totalBlockDestroy++; + } + + public void resetBlockDestroyCount() { + this.totalBlockDestroy = 0; + } + + public int incrementAndGetBlockPlaceCount() { + return this.totalBlockPlace++; + } + + public void resetBlockPlaceCount() { + this.totalBlockPlace = 0; + } + + public int incrementAndGetFreecamDestroyCount() { + return this.freecamDestroyCount++; + } + + public void resetFreecamDestroyCount() { + this.freecamDestroyCount = 0; + } + + public int incrementAndGetFreecamPlaceCount() { + return this.freecamPlaceCount++; + } + + public void resetFreecamPlaceCount() { + this.freecamPlaceCount = 0; + } + + public void enableMobThrower(EntityType mobThrowerCreature, double mobThrowerSpeed) { + this.mobThrowerEnabled = true; + this.mobThrowerEntity = mobThrowerCreature; + this.mobThrowerSpeed = mobThrowerSpeed; + } + + public void disableMobThrower() { + this.mobThrowerEnabled = false; + } + + public EntityType mobThrowerCreature() { + return this.mobThrowerEntity; + } + + public double mobThrowerSpeed() { + return this.mobThrowerSpeed; + } + + public boolean mobThrowerEnabled() { + return this.mobThrowerEnabled; + } + + public void enqueueMob(LivingEntity mob) { + mobThrowerQueue.add(mob); + if (mobThrowerQueue.size() > 4) { + LivingEntity oldmob = mobThrowerQueue.remove(0); + if (oldmob != null) { + oldmob.damage(500.0); + } + } + } + + public void startArrowShooter(TotalFreedomMod plugin) { + this.stopArrowShooter(); + this.mp44ScheduleTask = new ArrowShooter(this.player).runTaskTimer(plugin, 1L, 1L); + this.mp44Firing = true; + } + + public void stopArrowShooter() { + if (this.mp44ScheduleTask != null) { + this.mp44ScheduleTask.cancel(); + this.mp44ScheduleTask = null; + } + this.mp44Firing = false; + } + + public void armMP44() { + this.mp44Armed = true; + this.stopArrowShooter(); + } + + public void disarmMP44() { + this.mp44Armed = false; + this.stopArrowShooter(); + } + + public boolean isMP44Armed() { + return this.mp44Armed; + } + + public boolean toggleMP44Firing() { + this.mp44Firing = !this.mp44Firing; + return mp44Firing; + } + + public boolean isMuted() { + return unmuteTask != null; + } + + public void setMuted(boolean muted) { + cancel(unmuteTask); + unmuteTask = null; + + if (!muted) { + return; + } + + unmuteTask = new BukkitRunnable() { + @Override + public void run() { + Utilities.adminAction("TotalFreedom", "Unmuting " + player.getName(), false); + setMuted(false); + } + }.runTaskLater(TotalFreedomMod.plugin, AUTO_PURGE); + } + + public boolean isHalted() { + return this.isHalted; + } + + public void setHalted(boolean halted) { + this.isHalted = halted; + + if (halted) { + player.setOp(false); + player.setGameMode(GameMode.SURVIVAL); + Utilities.setFlying(player, false); + EssentialsBridge.setNickname(player.getName(), player.getName()); + player.closeInventory(); + player.setTotalExperience(0); + + stopOrbiting(); + setFrozen(true); + setMuted(true); + + player.sendMessage(ChatColor.GRAY + "You have been halted, don't move!"); + } else { + player.setOp(true); + player.setGameMode(GameMode.CREATIVE); + setFrozen(false); + setMuted(false); + + player.sendMessage(ChatColor.GRAY + "You are no longer halted."); + } + + } + + public BukkitTask getLockupScheduleID() { + return this.lockupScheduleTask; + } + + public void setLockupScheduleID(BukkitTask id) { + this.lockupScheduleTask = id; + } + + public String getLastMessage() { + return lastMessage; + } + + public void setLastMessage(String message) { + this.lastMessage = message; + } + + public void setAdminChat(boolean inAdminchat) { + this.inAdminchat = inAdminchat; + } + + public boolean inAdminChat() { + return this.inAdminchat; + } + + public boolean allCommandsBlocked() { + return this.allCommandsBlocked; + } + + public void setCommandsBlocked(boolean commandsBlocked) { + this.allCommandsBlocked = commandsBlocked; + } + + // If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. + // After the check for this is done in PlayerListener, never change it elsewhere. + public boolean isSuperadminIdVerified() { + return this.verifiedSuperadminId; + } + + // If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. + // After the check for this is done in PlayerListener, never change it elsewhere. + public void setSuperadminIdVerified(boolean verifiedSuperadminId) { + this.verifiedSuperadminId = verifiedSuperadminId; + } + + public String getLastCommand() { + return lastCommand; + } + + public void setLastCommand(String lastCommand) { + this.lastCommand = lastCommand; + } + + public void setCommandSpy(boolean enabled) { + this.cmdspyEnabled = enabled; + } + + public boolean cmdspyEnabled() { + return cmdspyEnabled; + } + + public String getTag() { + return this.tag; + } + + public void setTag(String tag) { + if (tag == null) { + this.tag = null; + } else { + this.tag = Utilities.colorize(tag) + ChatColor.RESET; + } + } + + public int getWarningCount() { + return this.warningCount; + } + + public void incrementWarnings() { + this.warningCount++; + + if (this.warningCount % 2 == 0) { + this.player.getWorld().strikeLightning(this.player.getLocation()); + Utilities.playerMsg(this.player, ChatColor.RED + + "You have been warned at least twice now, make sure to read the rules at " + + ConfigurationEntry.SERVER_BAN_URL.getString()); + } + } + + public void cancel(BukkitTask task) { + if (task == null) { + return; + } + + try { + task.cancel(); + } catch (Exception ex) { + } + } + + public enum CageLayer { + INNER, OUTER + } + + private class TFM_BlockData { + + public Material material; + public Location location; + + private TFM_BlockData(Location location, Material material) { + this.location = location; + this.material = material; + } + } + + private class ArrowShooter extends BukkitRunnable { + + private final Player player; + + private ArrowShooter(Player player) { + this.player = player; + } + + @Override + public void run() { + Arrow shot = player.launchProjectile(Arrow.class); + shot.setVelocity(shot.getVelocity().multiply(2.0)); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerList.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerList.java index bfef0fe..79d4bb2 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerList.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerList.java @@ -1,170 +1,175 @@ package me.StevenLawson.TotalFreedomMod.player; import com.google.common.collect.Sets; +import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.config.Configuration; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.bukkit.Bukkit; -import java.io.File; -import java.util.*; - public class PlayerList { - private static final Map PLAYER_LIST = new HashMap(); + private static final Map PLAYER_LIST = new HashMap(); - private PlayerList() { - throw new AssertionError(); - } + private PlayerList() { + throw new AssertionError(); + } - public static Set getAllPlayers() { - return Collections.unmodifiableSet(Sets.newHashSet(PLAYER_LIST.values())); - } + public static Set getAllPlayers() { + return Collections.unmodifiableSet(Sets.newHashSet(PLAYER_LIST.values())); + } - public static void load() { - PLAYER_LIST.clear(); + public static void load() { + PLAYER_LIST.clear(); - // Load online players - for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { - getEntry(player); - } + // Load online players + for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { + getEntry(player); + } - Log.info("Loaded playerdata for " + PLAYER_LIST.size() + " players"); - } + Log.info("Loaded playerdata for " + PLAYER_LIST.size() + " players"); + } - public static void saveAll() { - for (Player entry : PLAYER_LIST.values()) { - save(entry); - } - } + public static void saveAll() { + for (Player entry : PLAYER_LIST.values()) { + save(entry); + } + } - // May return null - public static Player getEntry(UUID uuid) { - if (PLAYER_LIST.containsKey(uuid)) { - return PLAYER_LIST.get(uuid); - } + // May return null + public static Player getEntry(UUID uuid) { + if (PLAYER_LIST.containsKey(uuid)) { + return PLAYER_LIST.get(uuid); + } - final File configFile = getConfigFile(uuid); + final File configFile = getConfigFile(uuid); - if (!configFile.exists()) { - return null; - } + if (!configFile.exists()) { + return null; + } - final Player entry = new Player(uuid, getConfig(uuid)); + final Player entry = new Player(uuid, getConfig(uuid)); - if (entry.isComplete()) { - PLAYER_LIST.put(uuid, entry); - return entry; - } else { - Log.warning("Could not load entry: Entry is not complete!"); - configFile.delete(); - } + if (entry.isComplete()) { + PLAYER_LIST.put(uuid, entry); + return entry; + } else { + Log.warning("Could not load entry: Entry is not complete!"); + configFile.delete(); + } - return null; - } + return null; + } - public static Player getEntry(org.bukkit.entity.Player player) { - final UUID uuid = UUIDManager.getUniqueId(player); - Player entry = getEntry(uuid); + public static Player getEntry(org.bukkit.entity.Player player) { + final UUID uuid = UUIDManager.getUniqueId(player); + Player entry = getEntry(uuid); - if (entry != null) { - return entry; - } + if (entry != null) { + return entry; + } - final long unix = Utilities.getUnixTime(); - entry = new Player(uuid); - entry.setFirstLoginName(player.getName()); - entry.setLastLoginName(player.getName()); - entry.setFirstLoginUnix(unix); - entry.setLastLoginUnix(unix); - entry.addIp(Utilities.getIp(player)); + final long unix = Utilities.getUnixTime(); + entry = new Player(uuid); + entry.setFirstLoginName(player.getName()); + entry.setLastLoginName(player.getName()); + entry.setFirstLoginUnix(unix); + entry.setLastLoginUnix(unix); + entry.addIp(Utilities.getIp(player)); - save(entry); - PLAYER_LIST.put(uuid, entry); + save(entry); + PLAYER_LIST.put(uuid, entry); - return entry; - } + return entry; + } - public static void removeEntry(org.bukkit.entity.Player player) { - final UUID uuid = UUIDManager.getUniqueId(player); + public static void removeEntry(org.bukkit.entity.Player player) { + final UUID uuid = UUIDManager.getUniqueId(player); - if (!PLAYER_LIST.containsKey(uuid)) { - return; - } + if (!PLAYER_LIST.containsKey(uuid)) { + return; + } - save(PLAYER_LIST.get(uuid)); + save(PLAYER_LIST.get(uuid)); - PLAYER_LIST.remove(uuid); - } + PLAYER_LIST.remove(uuid); + } - public static boolean existsEntry(org.bukkit.entity.Player player) { - return existsEntry(UUIDManager.getUniqueId(player)); - } + public static boolean existsEntry(org.bukkit.entity.Player player) { + return existsEntry(UUIDManager.getUniqueId(player)); + } - public static boolean existsEntry(UUID uuid) { - return getConfigFile(uuid).exists(); - } + public static boolean existsEntry(UUID uuid) { + return getConfigFile(uuid).exists(); + } - public static void setUniqueId(Player entry, UUID newUuid) { - if (entry.getUniqueId().equals(newUuid)) { - Log.warning("Not setting new UUID: UUIDs match!"); - return; - } + public static void setUniqueId(Player entry, UUID newUuid) { + if (entry.getUniqueId().equals(newUuid)) { + Log.warning("Not setting new UUID: UUIDs match!"); + return; + } - // Add new entry - final Player newEntry = new Player( - newUuid, - entry.getFirstLoginName(), - entry.getLastLoginName(), - entry.getFirstLoginUnix(), - entry.getLastLoginUnix(), - entry.getIps()); - newEntry.save(); - PLAYER_LIST.put(newUuid, newEntry); + // Add new entry + final Player newEntry = new Player( + newUuid, + entry.getFirstLoginName(), + entry.getLastLoginName(), + entry.getFirstLoginUnix(), + entry.getLastLoginUnix(), + entry.getIps()); + newEntry.save(); + PLAYER_LIST.put(newUuid, newEntry); - // Remove old entry - PLAYER_LIST.remove(entry.getUniqueId()); - final File oldFile = getConfigFile(entry.getUniqueId()); - if (oldFile.exists() && !oldFile.delete()) { - Log.warning("Could not delete config: " + getConfigFile(entry.getUniqueId()).getName()); - } - } + // Remove old entry + PLAYER_LIST.remove(entry.getUniqueId()); + final File oldFile = getConfigFile(entry.getUniqueId()); + if (oldFile.exists() && !oldFile.delete()) { + Log.warning("Could not delete config: " + getConfigFile(entry.getUniqueId()).getName()); + } + } - public static void purgeAll() { - for (File file : getConfigFolder().listFiles()) { - file.delete(); - } + public static void purgeAll() { + for (File file : getConfigFolder().listFiles()) { + file.delete(); + } - // Load online players - load(); - } + // Load online players + load(); + } - public static File getConfigFolder() { - return new File(TotalFreedomMod.plugin.getDataFolder(), "players"); - } + public static File getConfigFolder() { + return new File(TotalFreedomMod.plugin.getDataFolder(), "players"); + } - public static File getConfigFile(UUID uuid) { - return new File(getConfigFolder(), uuid + ".yml"); - } + public static File getConfigFile(UUID uuid) { + return new File(getConfigFolder(), uuid + ".yml"); + } - public static Configuration getConfig(UUID uuid) { - final Configuration config = new Configuration(TotalFreedomMod.plugin, getConfigFile(uuid), false); - config.load(); - return config; - } + public static Configuration getConfig(UUID uuid) { + final Configuration config = new Configuration(TotalFreedomMod.plugin, getConfigFile(uuid), + false); + config.load(); + return config; + } - public static void save(Player entry) { - if (!entry.isComplete()) { - throw new IllegalArgumentException("Entry is not complete!"); - } + public static void save(Player entry) { + if (!entry.isComplete()) { + throw new IllegalArgumentException("Entry is not complete!"); + } - final Configuration config = getConfig(entry.getUniqueId()); - config.set("firstjoinname", entry.getFirstLoginName()); - config.set("lastjoinname", entry.getLastLoginName()); - config.set("firstjoinunix", entry.getFirstLoginUnix()); - config.set("lastjoinunix", entry.getLastLoginUnix()); - config.set("ips", entry.getIps()); - config.save(); - } + final Configuration config = getConfig(entry.getUniqueId()); + config.set("firstjoinname", entry.getFirstLoginName()); + config.set("lastjoinname", entry.getLastLoginName()); + config.set("firstjoinunix", entry.getFirstLoginUnix()); + config.set("lastjoinunix", entry.getLastLoginUnix()); + config.set("ips", entry.getIps()); + config.save(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java index c065882..8902a0b 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/player/PlayerRank.java @@ -1,6 +1,11 @@ package me.StevenLawson.TotalFreedomMod.player; +import static me.StevenLawson.TotalFreedomMod.util.Utilities.DEVELOPERS; + import com.google.common.collect.ImmutableList; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; import me.StevenLawson.TotalFreedomMod.admin.Admin; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; @@ -12,181 +17,158 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.javacord.api.entity.permission.Role; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; +public enum PlayerRank implements Comparator, Comparable { + IMPOSTOR("an " + ChatColor.YELLOW + ChatColor.UNDERLINE + "Impostor", + ChatColor.YELLOW.toString() + ChatColor.UNDERLINE + "[IMP]", "Impostors", 0), + NON_OP("a " + ChatColor.GREEN + "Non-OP", ChatColor.GREEN.toString(), "Non-Operators", 1), + OP("an " + ChatColor.RED + "OP", ChatColor.RED + "[OP]", "Operators", 2), + SUPER("a " + ChatColor.GOLD + "Super Admin", ChatColor.GOLD + "[SA]", "Super Admins", 3), + TELNET("a " + ChatColor.DARK_GREEN + "Super Telnet Admin", ChatColor.DARK_GREEN + "[STA]", + "Super Telnet Admins", 4), + SENIOR("a " + ChatColor.LIGHT_PURPLE + "Senior Admin", ChatColor.LIGHT_PURPLE + "[SrA]", + "Senior Admins", 5), + DEVELOPER("a " + ChatColor.DARK_PURPLE + "Developer", ChatColor.DARK_PURPLE + "[Dev]", + "Developers", 6), + OWNER("an " + ChatColor.BLUE + "Owner", ChatColor.BLUE + "[Owner]", "Owners", 7), + CONSOLE("The " + ChatColor.DARK_PURPLE + "Console", ChatColor.DARK_PURPLE + "[Console]", 8); + private final String loginMessage; + private final String prefix; -import static me.StevenLawson.TotalFreedomMod.util.Utilities.DEVELOPERS; -import static me.StevenLawson.TotalFreedomMod.util.Utilities.getPluginFile; - -public enum PlayerRank implements Comparator, Comparable -{ - IMPOSTOR("an " + ChatColor.YELLOW + ChatColor.UNDERLINE + "Impostor", ChatColor.YELLOW.toString() + ChatColor.UNDERLINE + "[IMP]", "Impostors", 0), - NON_OP("a " + ChatColor.GREEN + "Non-OP", ChatColor.GREEN.toString(), "Non-Operators", 1), - OP("an " + ChatColor.RED + "OP", ChatColor.RED + "[OP]", "Operators" ,2), - SUPER("a " + ChatColor.GOLD + "Super Admin", ChatColor.GOLD + "[SA]", "Super Admins", 3), - TELNET("a " + ChatColor.DARK_GREEN + "Super Telnet Admin", ChatColor.DARK_GREEN + "[STA]", "Super Telnet Admins", 4), - SENIOR("a " + ChatColor.LIGHT_PURPLE + "Senior Admin", ChatColor.LIGHT_PURPLE + "[SrA]", "Senior Admins", 5), - DEVELOPER("a " + ChatColor.DARK_PURPLE + "Developer", ChatColor.DARK_PURPLE + "[Dev]", "Developers", 6), - OWNER("an " + ChatColor.BLUE + "Owner", ChatColor.BLUE + "[Owner]", "Owners", 7), - CONSOLE("The " + ChatColor.DARK_PURPLE + "Console", ChatColor.DARK_PURPLE + "[Console]", 8); - private final String loginMessage; - private final String prefix; - - private final String plural; - private final int ordinal; + private final String plural; + private final int ordinal; - PlayerRank(String loginMessage, String prefix, int ordinal) { - this.loginMessage = loginMessage; - this.prefix = prefix; - this.plural = ""; - this.ordinal = ordinal; - } + PlayerRank(String loginMessage, String prefix, int ordinal) { + this.loginMessage = loginMessage; + this.prefix = prefix; + this.plural = ""; + this.ordinal = ordinal; + } - PlayerRank(String loginMessage, String prefix, String plural, int ordinal) - { - this.loginMessage = loginMessage; - this.prefix = prefix; - this.plural = plural; - this.ordinal = ordinal; - } + PlayerRank(String loginMessage, String prefix, String plural, int ordinal) { + this.loginMessage = loginMessage; + this.prefix = prefix; + this.plural = plural; + this.ordinal = ordinal; + } - public static String getLoginMessage(CommandSender sender) - { - // Handle console - if (!(sender instanceof Player)) - { - return fromSender(sender).getLoginMessage(); - } + public static String getLoginMessage(CommandSender sender) { + // Handle console + if (!(sender instanceof Player)) { + return fromSender(sender).getLoginMessage(); + } - // Handle admins - final Admin entry = AdminList.getEntry((Player) sender); - if (entry == null) - { - // Player is not an admin - return fromSender(sender).getLoginMessage(); - } + // Handle admins + final Admin entry = AdminList.getEntry((Player) sender); + if (entry == null) { + // Player is not an admin + return fromSender(sender).getLoginMessage(); + } - // Custom login message - final String loginMessage = entry.getCustomLoginMessage(); + // Custom login message + final String loginMessage = entry.getCustomLoginMessage(); - if (loginMessage == null || loginMessage.isEmpty()) - { - return fromSender(sender).getLoginMessage(); - } + if (loginMessage == null || loginMessage.isEmpty()) { + return fromSender(sender).getLoginMessage(); + } - return ChatColor.translateAlternateColorCodes('&', loginMessage); - } + return ChatColor.translateAlternateColorCodes('&', loginMessage); + } - public static PlayerRank fromSender(CommandSender sender) - { - if (sender instanceof DiscordCommandSender) { - DiscordCommandSender discordSender = (DiscordCommandSender) sender; - List roles = discordSender.getUser().getRoles(discordSender.getDiscordServer()); + public static PlayerRank fromSender(CommandSender sender) { + if (sender instanceof DiscordCommandSender) { + DiscordCommandSender discordSender = (DiscordCommandSender) sender; + List roles = discordSender.getUser().getRoles(discordSender.getDiscordServer()); - for (Role role : roles) { - if(role.getName().toLowerCase().contains("senior")) { - return SENIOR; - } - } + for (Role role : roles) { + if (role.getName().toLowerCase().contains("senior")) { + return SENIOR; + } + } - return SUPER; - } - if (!(sender instanceof Player)) - { - return CONSOLE; - } + return SUPER; + } + if (!(sender instanceof Player)) { + return CONSOLE; + } - if (AdminList.isAdminImpostor((Player) sender)) - { - return IMPOSTOR; - } + if (AdminList.isAdminImpostor((Player) sender)) { + return IMPOSTOR; + } + + final Admin entry = AdminList.getEntryByIp(Utilities.getIp((Player) sender)); + + final PlayerRank rank; + + if (entry != null && entry.isActivated()) { + if (ConfigurationEntry.SERVER_OWNERS.getList().contains(sender.getName())) { + return OWNER; + } + + if (entry.isSeniorAdmin()) { + rank = SENIOR; + } else if (entry.isTelnetAdmin()) { + rank = TELNET; + } else { + rank = SUPER; + } + } else { + if (DEVELOPERS.contains(sender.getName())) { + return DEVELOPER; + } else if (sender.isOp()) { + rank = OP; + } else { + rank = NON_OP; + } + + } + return rank; + } + + public String getPrefix() { + return prefix; + } + + public String getLoginMessage() { + return loginMessage; + } - final Admin entry = AdminList.getEntryByIp(Utilities.getIp((Player) sender)); + public String getPlural() { + return plural; + } - final PlayerRank rank; + public int getOrdinal() { + return ordinal; + } - if (entry != null && entry.isActivated()) - { - if (ConfigurationEntry.SERVER_OWNERS.getList().contains(sender.getName())) - { - return OWNER; - } + public List getWithRank() { + List inGame = new ArrayList<>(); - if (entry.isSeniorAdmin()) - { - rank = SENIOR; - } - else if (entry.isTelnetAdmin()) - { - rank = TELNET; - } - else - { - rank = SUPER; - } - } - else - { - if (DEVELOPERS.contains(sender.getName())) { - return DEVELOPER; - } else if (sender.isOp()) - { - rank = OP; - } - else - { - rank = NON_OP; - } + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (fromSender(onlinePlayer).equals(this)) { + inGame.add(onlinePlayer); + } + } - } - return rank; - } + return ImmutableList.copyOf(inGame); + } - public String getPrefix() - { - return prefix; - } + public List getInGameUsernames() { + List inGame = new ArrayList<>(); - public String getLoginMessage() - { - return loginMessage; - } + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (fromSender(onlinePlayer).equals(this)) { + inGame.add(onlinePlayer.getName()); + } + } + return ImmutableList.copyOf(inGame); - public String getPlural() { - return plural; - } + } - public int getOrdinal() { - return ordinal; - } - - public List getWithRank() { - List inGame = new ArrayList<>(); - - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - if(fromSender(onlinePlayer).equals(this)) inGame.add(onlinePlayer); - } - - return ImmutableList.copyOf(inGame); - } - - public List getInGameUsernames() { - List inGame = new ArrayList<>(); - - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - if(fromSender(onlinePlayer).equals(this)) inGame.add(onlinePlayer.getName()); - } - - return ImmutableList.copyOf(inGame); - - } - - @Override - public int compare(PlayerRank o1, PlayerRank o2) { - return o1.ordinal - o2.ordinal; - } + @Override + public int compare(PlayerRank o1, PlayerRank o2) { + return o1.ordinal - o2.ordinal; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/player/UUIDManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/player/UUIDManager.java deleted file mode 100644 index 36978ba..0000000 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/player/UUIDManager.java +++ /dev/null @@ -1,262 +0,0 @@ -package me.StevenLawson.TotalFreedomMod.player; - -import com.google.common.collect.ImmutableList; -import me.StevenLawson.TotalFreedomMod.Log; -import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.sql.SQLiteDatabase; -import me.StevenLawson.TotalFreedomMod.sql.SQLiteDatabase.Statement; -import me.StevenLawson.TotalFreedomMod.util.SQLUtil; -import org.apache.commons.lang3.StringUtils; -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; - -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.*; -import java.util.concurrent.Callable; - -public class UUIDManager { - - public static final String TABLE_NAME = "uuids"; - private static final SQLiteDatabase SQL; - private static final Statement FIND; - private static final Statement UPDATE; - - private UUIDManager() { - throw new AssertionError(); - } - - static { - SQL = new SQLiteDatabase( - "uuids.db", - TABLE_NAME, - "username VARCHAR(" + TotalFreedomMod.MAX_USERNAME_LENGTH + ") NOT NULL PRIMARY KEY, uuid CHAR(36) NOT NULL"); - - FIND = SQL.addPreparedStatement("SELECT * FROM " + TABLE_NAME + " WHERE lower(username) = ?;"); - UPDATE = SQL.addPreparedStatement("REPLACE INTO " + TABLE_NAME + " (username, uuid) VALUES (?, ?);"); - } - - public static void load() { - // Init DB - SQL.connect(); - } - - public static void close() { - SQL.close(); - } - - public static int purge() { - return SQL.purge(); - } - - public static UUID newPlayer(Player player, String ip) { - Log.info("Obtaining UUID for new player: " + player.getName()); - - final String username = player.getName().toLowerCase(); - - // Look in DB - final UUID dbUuid = find(username); - if (dbUuid != null) { - return dbUuid; - } - - // Find UUID and update in DB if not found - // Try API - UUID uuid = TFM_UuidResolver.getUUIDOf(username); - if (uuid == null) { - // Spoof - uuid = generateSpoofUuid(username); - } - - update(username, uuid); - return uuid; - } - - public static UUID getUniqueId(OfflinePlayer offlinePlayer) { - // Online check first - if (offlinePlayer.isOnline() && PlayerData.hasPlayerData(offlinePlayer.getPlayer())) { - return PlayerData.getPlayerData(offlinePlayer.getPlayer()).getUniqueId(); - } - - // DB, API, Spoof - return getUniqueId(offlinePlayer.getName()); - } - - public static UUID getUniqueId(String username) { - // Look in DB - final UUID dbUuid = find(username); - if (dbUuid != null) { - return dbUuid; - } - - // Try API - final UUID apiUuid = TFM_UuidResolver.getUUIDOf(username); - if (apiUuid != null) { - return apiUuid; - } - - // Spoof - return generateSpoofUuid(username); - } - - public static void rawSetUUID(String name, UUID uuid) { - if (name == null || uuid == null || name.isEmpty()) { - Log.warning("Not setting raw UUID: name and uuid may not be null!"); - return; - } - - update(name.toLowerCase().trim(), uuid); - } - - private static UUID find(String searchName) { - if (!SQL.connect()) { - return null; - } - - final ResultSet result; - try { - final PreparedStatement statement = FIND.getStatement(); - statement.clearParameters(); - statement.setString(1, searchName.toLowerCase()); - result = statement.executeQuery(); - } catch (Exception ex) { - Log.severe("Could not execute find statement!"); - Log.severe(ex); - return null; - } - - if (!SQLUtil.hasData(result)) { - SQLUtil.close(result); - return null; - } - - try { - final String uuidString = result.getString("uuid"); - return UUID.fromString(uuidString); - } catch (Exception ex) { - Log.severe(ex); - return null; - } finally { - SQLUtil.close(result); - } - } - - private static boolean update(String username, UUID uuid) { - if (!SQL.connect()) { - return false; - } - - try { - final PreparedStatement statement = UPDATE.getStatement(); - statement.clearParameters(); - statement.setString(1, username.toLowerCase()); - statement.setString(2, uuid.toString()); - statement.executeUpdate(); - return true; - } catch (Exception ex) { - Log.severe("Could not execute update statement!"); - Log.severe(ex); - return false; - } - } - - private static UUID generateSpoofUuid(String name) { - name = name.toLowerCase(); - Log.info("Generating spoof UUID for " + name); - - try { - final MessageDigest digest = MessageDigest.getInstance("SHA256"); - final byte[] result = digest.digest(name.getBytes()); - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < result.length; i++) { - builder.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); - } - - return UUID.fromString( - "deadbeef" - + "-" + builder.substring(8, 12) - + "-" + builder.substring(12, 16) - + "-" + builder.substring(16, 20) - + "-" + builder.substring(20, 32)); - } catch (NoSuchAlgorithmException ex) { - Log.warning("Could not generate spoof UUID: SHA1 algorithm not found!"); - } - - return UUID.randomUUID(); - } - - public static class TFM_UuidResolver implements Callable> { - - private static final double PROFILES_PER_REQUEST = 100; - private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; - private final JSONParser jsonParser = new JSONParser(); - private final List names; - - public TFM_UuidResolver(List names) { - this.names = ImmutableList.copyOf(names); - } - - @Override - public Map call() { - final Map uuidMap = new HashMap(); - int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); - for (int i = 0; i < requests; i++) { - try { - final URL url = new URL(PROFILE_URL); - final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setUseCaches(false); - connection.setDoInput(true); - connection.setDoOutput(true); - - final String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size()))); - - final OutputStream stream = connection.getOutputStream(); - stream.write(body.getBytes()); - stream.flush(); - stream.close(); - - final JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream())); - - for (Object profile : array) { - final JSONObject jsonProfile = (JSONObject) profile; - final String id = (String) jsonProfile.get("id"); - final String name = (String) jsonProfile.get("name"); - final UUID uuid = UUID.fromString( - id.substring(0, 8) - + "-" + id.substring(8, 12) - + "-" + id.substring(12, 16) - + "-" + id.substring(16, 20) - + "-" + id.substring(20, 32)); - uuidMap.put(name, uuid); - } - - if (i != requests - 1) { - Thread.sleep(100L); - } - } catch (Exception ex) { - Log.severe("Could not resolve UUID(s) of " - + StringUtils.join(names.subList(i * 100, Math.min((i + 1) * 100, names.size())), ", ")); - //Log.severe(ex); - } - } - return uuidMap; - } - - public static UUID getUUIDOf(String name) { - return new TFM_UuidResolver(Arrays.asList(name)).call().get(name); - } - } - -} diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/sql/SQLiteDatabase.java b/src/main/java/me/StevenLawson/TotalFreedomMod/sql/SQLiteDatabase.java index 6bd15bc..d8905ec 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/sql/SQLiteDatabase.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/sql/SQLiteDatabase.java @@ -1,141 +1,121 @@ package me.StevenLawson.TotalFreedomMod.sql; -import me.StevenLawson.TotalFreedomMod.Log; -import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.util.SQLUtil; -import me.husky.Database; -import me.husky.sqlite.SQLite; - import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import me.StevenLawson.TotalFreedomMod.Log; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import me.StevenLawson.TotalFreedomMod.util.SQLUtil; +import me.husky.Database; +import me.husky.sqlite.SQLite; public class SQLiteDatabase { - private final Database sql; - private final String table; - private final String fields; - private final List statements; + private final Database sql; + private final String table; + private final String fields; + private final List statements; - public SQLiteDatabase(String filename, String table, String fields) { - this.sql = new SQLite(TotalFreedomMod.plugin, filename); - this.table = table; - this.fields = fields; - this.statements = new ArrayList(); - } + public SQLiteDatabase(String filename, String table, String fields) { + this.sql = new SQLite(TotalFreedomMod.plugin, filename); + this.table = table; + this.fields = fields; + this.statements = new ArrayList(); + } - public Statement addPreparedStatement(String query) - { - if (sql.checkConnection()) - { - throw new IllegalStateException("Can not add prepared statements after connecting!"); - } + public Statement addPreparedStatement(String query) { + if (sql.checkConnection()) { + throw new IllegalStateException("Can not add prepared statements after connecting!"); + } - final Statement statement = new Statement(query); - statements.add(statement); - return statement; - } + final Statement statement = new Statement(query); + statements.add(statement); + return statement; + } - @Deprecated - public Database db() - { - return sql; - } + @Deprecated + public Database db() { + return sql; + } - public boolean connect() - { - if (sql.checkConnection()) - { - return true; - } + public boolean connect() { + if (sql.checkConnection()) { + return true; + } - final Connection con = sql.openConnection(); - if (con == null) - { - return false; - } + final Connection con = sql.openConnection(); + if (con == null) { + return false; + } - if (!SQLUtil.hasTable(con, table)) { - Log.info("Creating table: " + table); + if (!SQLUtil.hasTable(con, table)) { + Log.info("Creating table: " + table); - if (!SQLUtil.createTable(con, table, fields)) { - Log.severe("Could not create table: " + table); - return false; - } - } + if (!SQLUtil.createTable(con, table, fields)) { + Log.severe("Could not create table: " + table); + return false; + } + } - // Prepare statements - for (Statement statement : statements) - { - if (!statement.prepare()) - { - return false; - } - } + // Prepare statements + for (Statement statement : statements) { + if (!statement.prepare()) { + return false; + } + } - return true; - } + return true; + } - public void close() - { - sql.closeConnection(); - } + public void close() { + sql.closeConnection(); + } - public int purge() - { - if (!connect()) - { - return 0; - } + public int purge() { + if (!connect()) { + return 0; + } - Log.warning("Truncating table: " + table); + Log.warning("Truncating table: " + table); - final int result = SQLUtil.updateQuery(sql.getConnection(), "DELETE FROM " + table + ";"); + final int result = SQLUtil.updateQuery(sql.getConnection(), "DELETE FROM " + table + ";"); - if (result == -1) - { - Log.warning("Could not truncate table: " + table); - } + if (result == -1) { + Log.warning("Could not truncate table: " + table); + } - return result; - } + return result; + } - public class Statement - { - private final String query; - private PreparedStatement statement; + public class Statement { - private Statement(String query) - { - this.query = query; - } + private final String query; + private PreparedStatement statement; - private boolean prepare() - { - try - { - statement = sql.getConnection().prepareStatement(query); - return true; - } - catch (SQLException ex) - { - Log.severe("Could not prepare statement: " + query); - Log.severe(ex); - return false; - } - } + private Statement(String query) { + this.query = query; + } - public void invalidate() - { - statement = null; - statements.remove(this); - } + private boolean prepare() { + try { + statement = sql.getConnection().prepareStatement(query); + return true; + } catch (SQLException ex) { + Log.severe("Could not prepare statement: " + query); + Log.severe(ex); + return false; + } + } - public PreparedStatement getStatement() - { - return statement; - } - } + public void invalidate() { + statement = null; + statements.remove(this); + } + + public PreparedStatement getStatement() { + return statement; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/util/DeprecationUtil.java b/src/main/java/me/StevenLawson/TotalFreedomMod/util/DeprecationUtil.java index ee0a2aa..ee9a2c8 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/util/DeprecationUtil.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/util/DeprecationUtil.java @@ -10,55 +10,46 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.material.MaterialData; @SuppressWarnings("deprecation") -public class DeprecationUtil -{ - public static Block getTargetBlock(LivingEntity entity, HashSet< Byte> transparent, int maxDistance) - { - return entity.getTargetBlock(transparent, maxDistance); - } +public class DeprecationUtil { - public static OfflinePlayer getOfflinePlayer(Server server, String name) - { - return server.getOfflinePlayer(name); - } + public static Block getTargetBlock(LivingEntity entity, HashSet transparent, + int maxDistance) { + return entity.getTargetBlock(transparent, maxDistance); + } - public static Material getMaterial(int id) - { - return Material.getMaterial(id); - } + public static OfflinePlayer getOfflinePlayer(Server server, String name) { + return server.getOfflinePlayer(name); + } - public static byte getData_MaterialData(MaterialData md) - { - return md.getData(); - } + public static Material getMaterial(int id) { + return Material.getMaterial(id); + } - public static void setData_MaterialData(MaterialData md, byte data) - { - md.setData(data); - } + public static byte getData_MaterialData(MaterialData md) { + return md.getData(); + } - public static byte getData_Block(Block block) - { - return block.getData(); - } + public static void setData_MaterialData(MaterialData md, byte data) { + md.setData(data); + } - public static void setData_Block(Block block, byte data) - { - block.setData(data); - } + public static byte getData_Block(Block block) { + return block.getData(); + } - public static org.bukkit.material.Lever makeLeverWithData(byte data) - { - return new org.bukkit.material.Lever(Material.LEVER, data); - } + public static void setData_Block(Block block, byte data) { + block.setData(data); + } - public static int getTypeId_Block(Block block) - { - return block.getTypeId(); - } + public static org.bukkit.material.Lever makeLeverWithData(byte data) { + return new org.bukkit.material.Lever(Material.LEVER, data); + } - public static String getName_EntityType(EntityType et) - { - return et.getName(); - } + public static int getTypeId_Block(Block block) { + return block.getTypeId(); + } + + public static String getName_EntityType(EntityType et) { + return et.getName(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/util/SQLUtil.java b/src/main/java/me/StevenLawson/TotalFreedomMod/util/SQLUtil.java index 478d8c1..f599147 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/util/SQLUtil.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/util/SQLUtil.java @@ -1,100 +1,75 @@ package me.StevenLawson.TotalFreedomMod.util; -import me.StevenLawson.TotalFreedomMod.Log; - import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; +import me.StevenLawson.TotalFreedomMod.Log; public class SQLUtil { - public static boolean hasTable(Connection con, String table) { - try { - final DatabaseMetaData dbm = con.getMetaData(); - final ResultSet tables = dbm.getTables(null, null, table, null); - return tables.next(); - } - catch (SQLException ex) - { - Log.severe(ex); - return false; - } - } + public static boolean hasTable(Connection con, String table) { + try { + final DatabaseMetaData dbm = con.getMetaData(); + final ResultSet tables = dbm.getTables(null, null, table, null); + return tables.next(); + } catch (SQLException ex) { + Log.severe(ex); + return false; + } + } - public static ResultSet executeQuery(Connection con, String query) - { - try - { - return con.createStatement().executeQuery(query); - } - catch (SQLException ex) - { - Log.severe(ex); - return null; - } - } + public static ResultSet executeQuery(Connection con, String query) { + try { + return con.createStatement().executeQuery(query); + } catch (SQLException ex) { + Log.severe(ex); + return null; + } + } - public static int updateQuery(Connection con, String query) - { - try - { - return con.createStatement().executeUpdate(query); - } - catch (SQLException ex) - { - Log.severe(ex); - return -1; - } - } + public static int updateQuery(Connection con, String query) { + try { + return con.createStatement().executeUpdate(query); + } catch (SQLException ex) { + Log.severe(ex); + return -1; + } + } - public static boolean createTable(Connection con, String name, String fields) - { - try - { - con.createStatement().execute("CREATE TABLE " + name + " (" + fields + ");"); - return true; - } - catch (SQLException ex) - { - Log.severe(ex); - return false; - } - } + public static boolean createTable(Connection con, String name, String fields) { + try { + con.createStatement().execute("CREATE TABLE " + name + " (" + fields + ");"); + return true; + } catch (SQLException ex) { + Log.severe(ex); + return false; + } + } - public static void close(ResultSet result) - { - if (result == null) - { - return; - } + public static void close(ResultSet result) { + if (result == null) { + return; + } - try - { - result.close(); - } - catch (SQLException ex) - { - Log.severe(ex); - } - } + try { + result.close(); + } catch (SQLException ex) { + Log.severe(ex); + } + } - public static boolean hasData(ResultSet result) - { - if (result == null) - { - return false; - } + public static boolean hasData(ResultSet result) { + if (result == null) { + return false; + } - try - { - return result.next(); - } - catch (SQLException ex) - { - Log.severe(ex); - return false; - } - } + try { + return result.next(); + } catch (SQLException ex) { + Log.severe(ex); + return false; + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/util/SynchronousUtil.java b/src/main/java/me/StevenLawson/TotalFreedomMod/util/SynchronousUtil.java index 094b981..56ff243 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/util/SynchronousUtil.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/util/SynchronousUtil.java @@ -6,76 +6,61 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; -public class SynchronousUtil -{ +public class SynchronousUtil { - public static void playerMsg(final Player player, final String message) - { - new BukkitRunnable() - { + public static void playerMsg(final Player player, final String message) { + new BukkitRunnable() { - @Override - public void run() - { - Utilities.playerMsg(player, message); - } + @Override + public void run() { + Utilities.playerMsg(player, message); + } - }.runTask(TotalFreedomMod.plugin); - } + }.runTask(TotalFreedomMod.plugin); + } - public static void playerKick(final Player player, final String reason) - { - new BukkitRunnable() - { + public static void playerKick(final Player player, final String reason) { + new BukkitRunnable() { - @Override - public void run() - { - player.kickPlayer(reason); - } + @Override + public void run() { + player.kickPlayer(reason); + } - }.runTask(TotalFreedomMod.plugin); - } + }.runTask(TotalFreedomMod.plugin); + } - public static void adminChatMessage(final CommandSender sender, final String message, final boolean isRed) - { - new BukkitRunnable() - { + public static void adminChatMessage(final CommandSender sender, final String message, + final boolean isRed) { + new BukkitRunnable() { - @Override - public void run() - { - Utilities.adminChatMessage(sender, message, isRed); - } + @Override + public void run() { + Utilities.adminChatMessage(sender, message, isRed); + } - }.runTask(TotalFreedomMod.plugin); - } + }.runTask(TotalFreedomMod.plugin); + } - public static void autoEject(final Player player, final String kickMessage) - { - new BukkitRunnable() - { + public static void autoEject(final Player player, final String kickMessage) { + new BukkitRunnable() { - @Override - public void run() - { - Utilities.autoEject(player, kickMessage); - } + @Override + public void run() { + Utilities.autoEject(player, kickMessage); + } - }.runTask(TotalFreedomMod.plugin); - } + }.runTask(TotalFreedomMod.plugin); + } - public static void bcastMsg(final String message, final ChatColor color) - { - new BukkitRunnable() - { + public static void bcastMsg(final String message, final ChatColor color) { + new BukkitRunnable() { - @Override - public void run() - { - Utilities.bcastMsg(message, color); - } + @Override + public void run() { + Utilities.bcastMsg(message, color); + } - }.runTask(TotalFreedomMod.plugin); - } + }.runTask(TotalFreedomMod.plugin); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java b/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java index 0add9c8..de3e6e2 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/util/Utilities.java @@ -1,1100 +1,994 @@ package me.StevenLawson.TotalFreedomMod.util; -import me.StevenLawson.TotalFreedomMod.Log; -import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.admin.AdminList; -import me.StevenLawson.TotalFreedomMod.ban.Ban; -import me.StevenLawson.TotalFreedomMod.ban.BanManager; -import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; -import me.StevenLawson.TotalFreedomMod.config.Configuration; -import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; -import me.StevenLawson.TotalFreedomMod.player.Player; -import me.StevenLawson.TotalFreedomMod.player.*; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.block.Skull; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.*; -import org.bukkit.plugin.Plugin; -import org.bukkit.util.FileUtil; - -import java.io.*; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; import java.lang.reflect.Field; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; - -public class Utilities -{ - private static final Map ejectTracker = new HashMap(); - public static final Map mobtypes = new HashMap(); - // See https://github.com/TotalFreedom/License - None of the listed names may be removed. - public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "DarthSalmon", "AcidicCyanide", "Wild1145", "WickedGamingUK", "G6_", "videogamesm12", "maniaplay", "evanbt"); - private static final Random RANDOM = new Random(); - public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z"; - public static final Map CHAT_COLOR_NAMES = new HashMap(); - public static final List CHAT_COLOR_POOL = Arrays.asList( - ChatColor.DARK_BLUE, - ChatColor.DARK_GREEN, - ChatColor.DARK_AQUA, - ChatColor.DARK_RED, - ChatColor.DARK_PURPLE, - ChatColor.GOLD, - ChatColor.BLUE, - ChatColor.GREEN, - ChatColor.AQUA, - ChatColor.RED, - ChatColor.LIGHT_PURPLE, - ChatColor.YELLOW); - - static - { - for (EntityType type : EntityType.values()) - { - try - { - if (DeprecationUtil.getName_EntityType(type) != null) - { - if (Creature.class.isAssignableFrom(type.getEntityClass())) - { - mobtypes.put(DeprecationUtil.getName_EntityType(type).toLowerCase(), type); - } - } - } - catch (Exception ex) - { - } - } - - for (ChatColor chatColor : CHAT_COLOR_POOL) - { - CHAT_COLOR_NAMES.put(chatColor.name().toLowerCase().replace("_", ""), chatColor); - } - } - - private Utilities() - { - throw new AssertionError(); - } - - public static void bcastMsg(String message, ChatColor color, boolean transmitToDiscord) { - Log.info(message, true); - - for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { - player.sendMessage((color == null ? "" : color) + message); - } - - if(transmitToDiscord) { - DiscordBridge.transmitMessage(message.replaceAll("([`_~*])", "\\\\$1")); - } - } - - public static void bcastMsg(String message, ChatColor color) { - bcastMsg(message, color, true); - } - - public static void bcastMsg(String message, boolean transmitToDiscord) { - bcastMsg(message, null, transmitToDiscord); - } - - public static void bcastMsg(String message) - { - Utilities.bcastMsg(message, null); - } - - // Still in use by listeners - public static void playerMsg(CommandSender sender, String message, ChatColor color) - { - sender.sendMessage(color + message); - } - - // Still in use by listeners - public static void playerMsg(CommandSender sender, String message) - { - Utilities.playerMsg(sender, message, ChatColor.GRAY); - } - - public static void setFlying(org.bukkit.entity.Player player, boolean flying) - { - player.setAllowFlight(true); - player.setFlying(flying); - } - - public static void adminAction(String adminName, String action, boolean isRed) - { - Utilities.bcastMsg(adminName + " - " + action, (isRed ? ChatColor.RED : ChatColor.AQUA)); - } - - public static String getIp(OfflinePlayer player) - { - if (player.isOnline()) - { - return player.getPlayer().getAddress().getAddress().getHostAddress().trim(); - } - - final Player entry = PlayerList.getEntry(UUIDManager.getUniqueId(player)); - - return (entry == null ? null : entry.getIps().get(0)); - } - - public static boolean isUniqueId(String uuid) - { - try - { - UUID.fromString(uuid); - return true; - } - catch (IllegalArgumentException ex) - { - return false; - } - } - - public static String formatLocation(Location location) - { - return String.format("%s: (%d, %d, %d)", - location.getWorld().getName(), - Math.round(location.getX()), - Math.round(location.getY()), - Math.round(location.getZ())); - } - - public static String formatPlayer(OfflinePlayer player) - { - return player.getName() + " (" + UUIDManager.getUniqueId(player) + ")"; - } - - /** - * Escapes an IP-address to a config-friendly version. - * - *

    Example: - *

    -     * IpUtils.toEscapedString("192.168.1.192"); // 192_168_1_192
    -     * 

    - * - * @param ip The IP-address to escape. - * @return The config-friendly IP address. - * @see #fromEscapedString(String) - */ - public static String toEscapedString(String ip) // BukkitLib @ https://github.com/Pravian/BukkitLib - { - return ip.trim().replaceAll("\\.", "_"); - } - - /** - * Un-escapes a config-friendly Ipv4-address. - * - *

    Example: - *

    -     * IpUtils.fromEscapedString("192_168_1_192"); // 192.168.1.192
    -     * 

    - * - * @param escapedIp The IP-address to un-escape. - * @return The config-friendly IP address. - * @see #toEscapedString(String) - */ - public static String fromEscapedString(String escapedIp) // BukkitLib @ https://github.com/Pravian/BukkitLib - { - return escapedIp.trim().replaceAll("_", "\\."); - } - - public static void gotoWorld(org.bukkit.entity.Player player, String targetWorld) - { - if (player == null) - { - return; - } - - if (player.getWorld().getName().equalsIgnoreCase(targetWorld)) - { - playerMsg(player, "Going to main world.", ChatColor.GRAY); - player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation()); - return; - } - - for (World world : Bukkit.getWorlds()) - { - if (world.getName().equalsIgnoreCase(targetWorld)) - { - playerMsg(player, "Going to world: " + targetWorld, ChatColor.GRAY); - player.teleport(world.getSpawnLocation()); - return; - } - } - - playerMsg(player, "World " + targetWorld + " not found.", ChatColor.GRAY); - } - - public static String decolorize(String string) - { - return string.replaceAll("\\u00A7(?=[0-9a-fk-or])", "&"); - } - - public static void buildHistory(Location location, int length, PlayerData playerdata) - { - 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++) - { - final Block block = center.getRelative(xOffset, yOffset, zOffset); - playerdata.insertHistoryBlock(block.getLocation(), block.getType()); - } - } - } - } - - public static void generateCube(Location location, int length, Material material) - { - 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++) - { - final Block block = center.getRelative(xOffset, yOffset, zOffset); - if (block.getType() != material) - { - block.setType(material); - } - } - } - } - } - - public static void generateHollowCube(Location location, int length, Material material) - { - 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++) - { - // Hollow - if (Math.abs(xOffset) != length && Math.abs(yOffset) != length && Math.abs(zOffset) != length) - { - continue; - } - - final Block block = center.getRelative(xOffset, yOffset, zOffset); - - if (material != Material.SKULL) - { - // Glowstone light - if (material != Material.GLASS && xOffset == 0 && yOffset == 2 && zOffset == 0) - { - block.setType(Material.GLOWSTONE); - continue; - } - - block.setType(material); - } - else // Darth mode - { - if (Math.abs(xOffset) == length && Math.abs(yOffset) == length && Math.abs(zOffset) == length) - { - block.setType(Material.GLOWSTONE); - continue; - } - - block.setType(Material.SKULL); - final Skull skull = (Skull) block.getState(); - skull.setSkullType(SkullType.PLAYER); - skull.setOwner("Prozza"); - skull.update(); - } - } - } - } - } - - public static void setWorldTime(World world, long ticks) - { - long time = world.getTime(); - time -= time % 24000; - world.setTime(time + 24000 + ticks); - } - - public static void createDefaultConfiguration(final String configFileName) - { - final File targetFile = new File(TotalFreedomMod.plugin.getDataFolder(), configFileName); - - if (targetFile.exists()) - { - return; - } - - Log.info("Installing default configuration file template: " + targetFile.getPath()); - - try - { - final InputStream configFileStream = TotalFreedomMod.plugin.getResource(configFileName); - FileUtils.copyInputStreamToFile(configFileStream, targetFile); - configFileStream.close(); - } - catch (IOException ex) - { - Log.severe(ex); - } - } - - public static boolean deleteFolder(final File file) - { - if (file.exists() && file.isDirectory()) - { - return FileUtils.deleteQuietly(file); - } - 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) - { - Log.info("Removing core dump file: " + dump.getName()); - dump.delete(); - } - } - - public static EntityType getEntityType(String mobname) throws Exception - { - mobname = mobname.toLowerCase().trim(); - - if (!Utilities.mobtypes.containsKey(mobname)) - { - throw new Exception(); - } - - return Utilities.mobtypes.get(mobname); - } - - /** - * Write the specified InputStream to a file. - * - * @param in The InputStream from which to read. - * @param file The File to write to. - * @throws IOException - */ - public static void copy(InputStream in, File file) throws IOException // BukkitLib @ https://github.com/Pravian/BukkitLib - { - if (!file.exists()) - { - file.getParentFile().mkdirs(); - } - - final OutputStream out = new FileOutputStream(file); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) - { - out.write(buf, 0, len); - } - out.close(); - in.close(); - } - - /** - * Returns a file at located at the Plugins Data folder. - * - * @param plugin The plugin to use - * @param name The name of the file. - * @return The requested file. - */ - public static File getPluginFile(Plugin plugin, String name) // BukkitLib @ https://github.com/Pravian/BukkitLib - { - return new File(plugin.getDataFolder(), name); - } - - public static void autoEject(org.bukkit.entity.Player player, String kickMessage) - { - EjectMethod method = EjectMethod.STRIKE_ONE; - final String ip = Utilities.getIp(player); - - if (!Utilities.ejectTracker.containsKey(ip)) - { - Utilities.ejectTracker.put(ip, 0); - } - - int kicks = Utilities.ejectTracker.get(ip); - kicks += 1; - - Utilities.ejectTracker.put(ip, kicks); - - if (kicks <= 1) - { - method = EjectMethod.STRIKE_ONE; - } - else if (kicks == 2) - { - method = EjectMethod.STRIKE_TWO; - } - else if (kicks >= 3) - { - method = EjectMethod.STRIKE_THREE; - } - - Log.info("AutoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + method); - - player.setOp(false); - player.setGameMode(GameMode.SURVIVAL); - player.getInventory().clear(); - - switch (method) - { - case STRIKE_ONE: - { - final Calendar cal = new GregorianCalendar(); - cal.add(Calendar.MINUTE, 1); - final Date expires = cal.getTime(); - - Utilities.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 1 minute."); - - BanManager.addIpBan(new Ban(ip, player.getName(), "AutoEject", expires, kickMessage)); - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", expires, kickMessage)); - player.kickPlayer(kickMessage); - - break; - } - case STRIKE_TWO: - { - final Calendar c = new GregorianCalendar(); - c.add(Calendar.MINUTE, 3); - final Date expires = c.getTime(); - - Utilities.bcastMsg(ChatColor.RED + player.getName() + " has been banned for 3 minutes."); - - BanManager.addIpBan(new Ban(ip, player.getName(), "AutoEject", expires, kickMessage)); - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", expires, kickMessage)); - player.kickPlayer(kickMessage); - break; - } - case STRIKE_THREE: - { - String[] ipAddressParts = ip.split("\\."); - - BanManager.addIpBan(new Ban(ip, player.getName(), "AutoEject", null, kickMessage)); - BanManager.addIpBan(new Ban(ipAddressParts[0] + "." + ipAddressParts[1] + ".*.*", player.getName(), "AutoEject", null, kickMessage)); - BanManager.addUuidBan(new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", null, kickMessage)); - - Utilities.bcastMsg(ChatColor.RED + player.getName() + " has been banned."); - - player.kickPlayer(kickMessage); - break; - } - } - } - - public static Date parseDateOffset(String time) - { - Pattern timePattern = Pattern.compile( - "(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" - + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE); - Matcher m = timePattern.matcher(time); - int years = 0; - int months = 0; - int weeks = 0; - int days = 0; - int hours = 0; - int minutes = 0; - int seconds = 0; - boolean found = false; - while (m.find()) - { - if (m.group() == null || m.group().isEmpty()) - { - continue; - } - for (int i = 0; i < m.groupCount(); i++) - { - if (m.group(i) != null && !m.group(i).isEmpty()) - { - found = true; - break; - } - } - if (found) - { - if (m.group(1) != null && !m.group(1).isEmpty()) - { - years = Integer.parseInt(m.group(1)); - } - if (m.group(2) != null && !m.group(2).isEmpty()) - { - months = Integer.parseInt(m.group(2)); - } - if (m.group(3) != null && !m.group(3).isEmpty()) - { - weeks = Integer.parseInt(m.group(3)); - } - if (m.group(4) != null && !m.group(4).isEmpty()) - { - days = Integer.parseInt(m.group(4)); - } - if (m.group(5) != null && !m.group(5).isEmpty()) - { - hours = Integer.parseInt(m.group(5)); - } - if (m.group(6) != null && !m.group(6).isEmpty()) - { - minutes = Integer.parseInt(m.group(6)); - } - if (m.group(7) != null && !m.group(7).isEmpty()) - { - seconds = Integer.parseInt(m.group(7)); - } - break; - } - } - if (!found) - { - return null; - } - - Calendar c = new GregorianCalendar(); - - if (years > 0) - { - c.add(Calendar.YEAR, years); - } - if (months > 0) - { - c.add(Calendar.MONTH, months); - } - if (weeks > 0) - { - c.add(Calendar.WEEK_OF_YEAR, weeks); - } - if (days > 0) - { - c.add(Calendar.DAY_OF_MONTH, days); - } - if (hours > 0) - { - c.add(Calendar.HOUR_OF_DAY, hours); - } - if (minutes > 0) - { - c.add(Calendar.MINUTE, minutes); - } - if (seconds > 0) - { - c.add(Calendar.SECOND, seconds); - } - - return c.getTime(); - } - - public static String playerListToNames(Set players) - { - List names = new ArrayList(); - for (OfflinePlayer player : players) - { - names.add(player.getName()); - } - return StringUtils.join(names, ", "); - } - - @SuppressWarnings("unchecked") - public static Map getSavedFlags() - { - Map flags = null; - - File input = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILENAME); - if (input.exists()) - { - try - { - FileInputStream fis = new FileInputStream(input); - ObjectInputStream ois = new ObjectInputStream(fis); - flags = (HashMap) ois.readObject(); - ois.close(); - fis.close(); - } - catch (Exception ex) - { - Log.severe(ex); - } - } - - return flags; - } - - public static boolean getSavedFlag(String flag) throws Exception - { - Boolean flagValue = null; - - Map flags = Utilities.getSavedFlags(); - - if (flags != null) - { - if (flags.containsKey(flag)) - { - flagValue = flags.get(flag); - } - } - - if (flagValue != null) - { - return flagValue.booleanValue(); - } - else - { - throw new Exception(); - } - } - - public static void setSavedFlag(String flag, boolean value) - { - Map flags = Utilities.getSavedFlags(); - - if (flags == null) - { - flags = new HashMap(); - } - - flags.put(flag, value); - - try - { - final FileOutputStream fos = new FileOutputStream(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.SAVED_FLAGS_FILENAME)); - final ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(flags); - oos.close(); - fos.close(); - } - catch (Exception ex) - { - Log.severe(ex); - } - } - - public static void createBackups(String file) - { - createBackups(file, false); - } - - public static void createBackups(String file, boolean onlyWeekly) - { - final String save = file.split("\\.")[0]; - final Configuration config = new Configuration(TotalFreedomMod.plugin, "backup/backup.yml", false); - config.load(); - - // Weekly - if (!config.isInt(save + ".weekly")) - { - performBackup(file, "weekly"); - config.set(save + ".weekly", Utilities.getUnixTime()); - } - else - { - int lastBackupWeekly = config.getInt(save + ".weekly"); - - if (lastBackupWeekly + 3600 * 24 * 7 < Utilities.getUnixTime()) - { - performBackup(file, "weekly"); - config.set(save + ".weekly", Utilities.getUnixTime()); - } - } - - if (onlyWeekly) - { - config.save(); - return; - } - - // Daily - if (!config.isInt(save + ".daily")) - { - performBackup(file, "daily"); - config.set(save + ".daily", Utilities.getUnixTime()); - } - else - { - int lastBackupDaily = config.getInt(save + ".daily"); - - if (lastBackupDaily + 3600 * 24 < Utilities.getUnixTime()) - { - performBackup(file, "daily"); - config.set(save + ".daily", Utilities.getUnixTime()); - } - } - - config.save(); - } - - private static void performBackup(String file, String type) - { - Log.info("Backing up " + file + " to " + file + "." + type + ".bak"); - final File backupFolder = new File(TotalFreedomMod.plugin.getDataFolder(), "backup"); - - if (!backupFolder.exists()) - { - backupFolder.mkdirs(); - } - - final File oldYaml = new File(TotalFreedomMod.plugin.getDataFolder(), file); - final File newYaml = new File(backupFolder, file + "." + type + ".bak"); - FileUtil.copy(oldYaml, newYaml); - } - - public static String dateToString(Date date) - { - return new SimpleDateFormat(DATE_STORAGE_FORMAT, Locale.ENGLISH).format(date); - } - - public static Date stringToDate(String dateString) - { - try - { - return new SimpleDateFormat(DATE_STORAGE_FORMAT, Locale.ENGLISH).parse(dateString); - } - catch (ParseException pex) - { - return new Date(0L); - } - } - - @SuppressWarnings("unchecked") - public static boolean isFromHostConsole(String senderName) - { - return ConfigurationEntry.HOST_SENDER_NAMES.getList().contains(senderName.toLowerCase()); - } - - public static List removeDuplicates(List oldList) - { - List newList = new ArrayList(); - for (String entry : oldList) - { - if (!newList.contains(entry)) - { - newList.add(entry); - } - } - return newList; - } - - public static boolean fuzzyIpMatch(String a, String b, int octets) - { - boolean match = true; - - String[] aParts = a.split("\\."); - String[] bParts = b.split("\\."); - - if (aParts.length != 4 || bParts.length != 4) - { - return false; - } - - if (octets > 4) - { - octets = 4; - } - else if (octets < 1) - { - octets = 1; - } - - for (int i = 0; i < octets && i < 4; i++) - { - if (aParts[i].equals("*") || bParts[i].equals("*")) - { - continue; - } - - if (!aParts[i].equals(bParts[i])) - { - match = false; - break; - } - } - - 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; - - Block centerBlock = center.getBlock(); - for (int xOffset = -radius; xOffset <= radius; xOffset++) - { - for (int yOffset = -radius; yOffset <= radius; yOffset++) - { - for (int zOffset = -radius; zOffset <= radius; zOffset++) - { - Block block = centerBlock.getRelative(xOffset, yOffset, zOffset); - - if (block.getType().equals(fromMaterial)) - { - if (block.getLocation().distanceSquared(center) < (radius * radius)) - { - block.setType(toMaterial); - affected++; - } - } - } - } - } - - return affected; - } - - public static void downloadFile(String url, File output) throws java.lang.Exception - { - downloadFile(url, output, false); - } - - public static void downloadFile(String url, File output, boolean verbose) throws java.lang.Exception - { - final URL website = new URL(url); - ReadableByteChannel rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(output); - fos.getChannel().transferFrom(rbc, 0, 1 << 24); - fos.close(); - - if (verbose) - { - Log.info("Downloaded " + url + " to " + output + "."); - } - } - - public static void adminChatMessage(CommandSender sender, String message, boolean senderIsConsole) - { - String name = sender.getName() + " " + PlayerRank.fromSender(sender).getPrefix() + ChatColor.WHITE; - Log.info("[ADMIN] " + name + ": " + message); - String adminChatMessage = "[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + name + ": " + ChatColor.AQUA + message; - - for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) - { - if (AdminList.isSuperAdmin(player)) - { - player.sendMessage(adminChatMessage); - } - } - - DiscordBridge.transmitAdminMessage(adminChatMessage.replaceAll("([`_~*])", "\\\\$1")); - } - - //getField: Borrowed from WorldEdit - @SuppressWarnings("unchecked") - public static T getField(Object from, String name) - { - Class checkClass = from.getClass(); - do - { - try - { - Field field = checkClass.getDeclaredField(name); - field.setAccessible(true); - return (T) field.get(from); - - } - catch (NoSuchFieldException ex) - { - } - catch (IllegalAccessException ex) - { - } - } - while (checkClass.getSuperclass() != Object.class - && ((checkClass = checkClass.getSuperclass()) != null)); - - return null; - } - - public static ChatColor randomChatColor() - { - return CHAT_COLOR_POOL.get(RANDOM.nextInt(CHAT_COLOR_POOL.size())); - } - - public static String colorize(String string) - { - return ChatColor.translateAlternateColorCodes('&', string); - } - - public static long getUnixTime() - { - return System.currentTimeMillis() / 1000L; - } - - public static Date getUnixDate(long unix) - { - return new Date(unix * 1000); - } - - public static long getUnixTime(Date date) - { - if (date == null) - { - return 0; - } - - return date.getTime() / 1000L; - } - - public static String getNmsVersion() - { - String packageName = Bukkit.getServer().getClass().getPackage().getName(); - return packageName.substring(packageName.lastIndexOf('.') + 1); - - } - - public static void reportAction(org.bukkit.entity.Player reporter, org.bukkit.entity.Player reported, String report) - { - for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) - { - if (AdminList.isSuperAdmin(player)) - { - playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + " has reported " + reported.getName() + " for " + report); - } - } - } - - public static class TFM_EntityWiper - { - private static final List> WIPEABLES = new ArrayList>(); - - static - { - WIPEABLES.add(EnderCrystal.class); - WIPEABLES.add(EnderSignal.class); - WIPEABLES.add(ExperienceOrb.class); - WIPEABLES.add(Projectile.class); - WIPEABLES.add(FallingBlock.class); - WIPEABLES.add(Firework.class); - WIPEABLES.add(Item.class); - } - - private TFM_EntityWiper() - { - throw new AssertionError(); - } - - private static boolean canWipe(Entity entity, boolean wipeExplosives, boolean wipeVehicles) - { - if (wipeExplosives) - { - if (Explosive.class.isAssignableFrom(entity.getClass())) - { - return true; - } - } - - if (wipeVehicles) - { - if (Boat.class.isAssignableFrom(entity.getClass())) - { - return true; - } - else if (Minecart.class.isAssignableFrom(entity.getClass())) - { - return true; - } - } - - Iterator> it = WIPEABLES.iterator(); - while (it.hasNext()) - { - if (it.next().isAssignableFrom(entity.getClass())) - { - return true; - } - } - - return false; - } - - public static int wipeEntities(boolean wipeExplosives, boolean wipeVehicles) - { - int removed = 0; - - Iterator worlds = Bukkit.getWorlds().iterator(); - while (worlds.hasNext()) - { - Iterator entities = worlds.next().getEntities().iterator(); - while (entities.hasNext()) - { - Entity entity = entities.next(); - if (canWipe(entity, wipeExplosives, wipeVehicles)) - { - entity.remove(); - removed++; - } - } - } - - return removed; - } - } - - public enum EjectMethod - { - STRIKE_ONE, STRIKE_TWO, STRIKE_THREE - } - - public static class MethodTimer - { - private long lastStart; - private long total = 0; - - public MethodTimer() - { - } - - public void start() - { - this.lastStart = System.currentTimeMillis(); - } - - public void update() - { - this.total += (System.currentTimeMillis() - this.lastStart); - } - - public long getTotal() - { - return this.total; - } - - public void printTotalToLog(String timerName) - { - Log.info("DEBUG: " + timerName + " used " + this.getTotal() + " ms."); - } - } +import me.StevenLawson.TotalFreedomMod.Log; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import me.StevenLawson.TotalFreedomMod.admin.AdminList; +import me.StevenLawson.TotalFreedomMod.ban.Ban; +import me.StevenLawson.TotalFreedomMod.ban.BanManager; +import me.StevenLawson.TotalFreedomMod.config.Configuration; +import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; +import me.StevenLawson.TotalFreedomMod.discord.bridge.DiscordBridge; +import me.StevenLawson.TotalFreedomMod.manager.UUIDManager; +import me.StevenLawson.TotalFreedomMod.player.Player; +import me.StevenLawson.TotalFreedomMod.player.PlayerData; +import me.StevenLawson.TotalFreedomMod.player.PlayerList; +import me.StevenLawson.TotalFreedomMod.player.PlayerRank; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.SkullType; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Skull; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Creature; +import org.bukkit.entity.EnderCrystal; +import org.bukkit.entity.EnderSignal; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.Explosive; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Firework; +import org.bukkit.entity.Item; +import org.bukkit.entity.Minecart; +import org.bukkit.entity.Projectile; +import org.bukkit.plugin.Plugin; +import org.bukkit.util.FileUtil; + +public class Utilities { + + public static final Map mobtypes = new HashMap(); + // See https://github.com/TotalFreedom/License - None of the listed names may be removed. + public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", + "DarthSalmon", "AcidicCyanide", "Wild1145", "WickedGamingUK", "G6_", "videogamesm12", + "maniaplay", "evanbt"); + public static final Map CHAT_COLOR_NAMES = new HashMap(); + public static final List CHAT_COLOR_POOL = Arrays.asList( + ChatColor.DARK_BLUE, + ChatColor.DARK_GREEN, + ChatColor.DARK_AQUA, + ChatColor.DARK_RED, + ChatColor.DARK_PURPLE, + ChatColor.GOLD, + ChatColor.BLUE, + ChatColor.GREEN, + ChatColor.AQUA, + ChatColor.RED, + ChatColor.LIGHT_PURPLE, + ChatColor.YELLOW); + private static final Map ejectTracker = new HashMap(); + private static final Random RANDOM = new Random(); + public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z"; + + static { + for (EntityType type : EntityType.values()) { + try { + if (DeprecationUtil.getName_EntityType(type) != null) { + if (Creature.class.isAssignableFrom(type.getEntityClass())) { + mobtypes.put(DeprecationUtil.getName_EntityType(type).toLowerCase(), type); + } + } + } catch (Exception ex) { + } + } + + for (ChatColor chatColor : CHAT_COLOR_POOL) { + CHAT_COLOR_NAMES.put(chatColor.name().toLowerCase().replace("_", ""), chatColor); + } + } + + private Utilities() { + throw new AssertionError(); + } + + public static void bcastMsg(String message, ChatColor color, boolean transmitToDiscord) { + Log.info(message, true); + + for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { + player.sendMessage((color == null ? "" : color) + message); + } + + if (transmitToDiscord) { + DiscordBridge.transmitMessage(message.replaceAll("([`_~*])", "\\\\$1")); + } + } + + public static void bcastMsg(String message, ChatColor color) { + bcastMsg(message, color, true); + } + + public static void bcastMsg(String message, boolean transmitToDiscord) { + bcastMsg(message, null, transmitToDiscord); + } + + public static void bcastMsg(String message) { + Utilities.bcastMsg(message, null); + } + + // Still in use by listeners + public static void playerMsg(CommandSender sender, String message, ChatColor color) { + sender.sendMessage(color + message); + } + + // Still in use by listeners + public static void playerMsg(CommandSender sender, String message) { + Utilities.playerMsg(sender, message, ChatColor.GRAY); + } + + public static void setFlying(org.bukkit.entity.Player player, boolean flying) { + player.setAllowFlight(true); + player.setFlying(flying); + } + + public static void adminAction(String adminName, String action, boolean isRed) { + Utilities.bcastMsg(adminName + " - " + action, (isRed ? ChatColor.RED : ChatColor.AQUA)); + } + + public static String getIp(OfflinePlayer player) { + if (player.isOnline()) { + return player.getPlayer().getAddress().getAddress().getHostAddress().trim(); + } + + final Player entry = PlayerList.getEntry(UUIDManager.getUniqueId(player)); + + return (entry == null ? null : entry.getIps().get(0)); + } + + public static boolean isUniqueId(String uuid) { + try { + UUID.fromString(uuid); + return true; + } catch (IllegalArgumentException ex) { + return false; + } + } + + public static String formatLocation(Location location) { + return String.format("%s: (%d, %d, %d)", + location.getWorld().getName(), + Math.round(location.getX()), + Math.round(location.getY()), + Math.round(location.getZ())); + } + + public static String formatPlayer(OfflinePlayer player) { + return player.getName() + " (" + UUIDManager.getUniqueId(player) + ")"; + } + + /** + * Escapes an IP-address to a config-friendly version. + * + *

    Example: + *

    +	 * IpUtils.toEscapedString("192.168.1.192"); // 192_168_1_192
    +	 * 

    + * + * @param ip The IP-address to escape. + * @return The config-friendly IP address. + * @see #fromEscapedString(String) + */ + public static String toEscapedString( + String ip) // BukkitLib @ https://github.com/Pravian/BukkitLib + { + return ip.trim().replaceAll("\\.", "_"); + } + + /** + * Un-escapes a config-friendly Ipv4-address. + * + *

    Example: + *

    +	 * IpUtils.fromEscapedString("192_168_1_192"); // 192.168.1.192
    +	 * 

    + * + * @param escapedIp The IP-address to un-escape. + * @return The config-friendly IP address. + * @see #toEscapedString(String) + */ + public static String fromEscapedString( + String escapedIp) // BukkitLib @ https://github.com/Pravian/BukkitLib + { + return escapedIp.trim().replaceAll("_", "\\."); + } + + public static void gotoWorld(org.bukkit.entity.Player player, String targetWorld) { + if (player == null) { + return; + } + + if (player.getWorld().getName().equalsIgnoreCase(targetWorld)) { + playerMsg(player, "Going to main world.", ChatColor.GRAY); + player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation()); + return; + } + + for (World world : Bukkit.getWorlds()) { + if (world.getName().equalsIgnoreCase(targetWorld)) { + playerMsg(player, "Going to world: " + targetWorld, ChatColor.GRAY); + player.teleport(world.getSpawnLocation()); + return; + } + } + + playerMsg(player, "World " + targetWorld + " not found.", ChatColor.GRAY); + } + + public static String decolorize(String string) { + return string.replaceAll("\\u00A7(?=[0-9a-fk-or])", "&"); + } + + public static void buildHistory(Location location, int length, PlayerData playerdata) { + 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++) { + final Block block = center.getRelative(xOffset, yOffset, zOffset); + playerdata.insertHistoryBlock(block.getLocation(), block.getType()); + } + } + } + } + + public static void generateCube(Location location, int length, Material material) { + 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++) { + final Block block = center.getRelative(xOffset, yOffset, zOffset); + if (block.getType() != material) { + block.setType(material); + } + } + } + } + } + + public static void generateHollowCube(Location location, int length, Material material) { + 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++) { + // Hollow + if (Math.abs(xOffset) != length && Math.abs(yOffset) != length + && Math.abs(zOffset) != length) { + continue; + } + + final Block block = center.getRelative(xOffset, yOffset, zOffset); + + if (material != Material.SKULL) { + // Glowstone light + if (material != Material.GLASS && xOffset == 0 && yOffset == 2 + && zOffset == 0) { + block.setType(Material.GLOWSTONE); + continue; + } + + block.setType(material); + } else // Darth mode + { + if (Math.abs(xOffset) == length && Math.abs(yOffset) == length + && Math.abs(zOffset) == length) { + block.setType(Material.GLOWSTONE); + continue; + } + + block.setType(Material.SKULL); + final Skull skull = (Skull) block.getState(); + skull.setSkullType(SkullType.PLAYER); + skull.setOwner("Prozza"); + skull.update(); + } + } + } + } + } + + public static void setWorldTime(World world, long ticks) { + long time = world.getTime(); + time -= time % 24000; + world.setTime(time + 24000 + ticks); + } + + public static void createDefaultConfiguration(final String configFileName) { + final File targetFile = new File(TotalFreedomMod.plugin.getDataFolder(), configFileName); + + if (targetFile.exists()) { + return; + } + + Log.info("Installing default configuration file template: " + targetFile.getPath()); + + try { + final InputStream configFileStream = TotalFreedomMod.plugin.getResource(configFileName); + FileUtils.copyInputStreamToFile(configFileStream, targetFile); + configFileStream.close(); + } catch (IOException ex) { + Log.severe(ex); + } + } + + public static boolean deleteFolder(final File file) { + if (file.exists() && file.isDirectory()) { + return FileUtils.deleteQuietly(file); + } + 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) { + Log.info("Removing core dump file: " + dump.getName()); + dump.delete(); + } + } + + public static EntityType getEntityType(String mobname) throws Exception { + mobname = mobname.toLowerCase().trim(); + + if (!Utilities.mobtypes.containsKey(mobname)) { + throw new Exception(); + } + + return Utilities.mobtypes.get(mobname); + } + + /** + * Write the specified InputStream to a file. + * + * @param in The InputStream from which to read. + * @param file The File to write to. + * @throws IOException + */ + public static void copy(InputStream in, File file) + throws IOException // BukkitLib @ https://github.com/Pravian/BukkitLib + { + if (!file.exists()) { + file.getParentFile().mkdirs(); + } + + final OutputStream out = new FileOutputStream(file); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } + out.close(); + in.close(); + } + + /** + * Returns a file at located at the Plugins Data folder. + * + * @param plugin The plugin to use + * @param name The name of the file. + * @return The requested file. + */ + public static File getPluginFile(Plugin plugin, + String name) // BukkitLib @ https://github.com/Pravian/BukkitLib + { + return new File(plugin.getDataFolder(), name); + } + + public static void autoEject(org.bukkit.entity.Player player, String kickMessage) { + EjectMethod method = EjectMethod.STRIKE_ONE; + final String ip = Utilities.getIp(player); + + if (!Utilities.ejectTracker.containsKey(ip)) { + Utilities.ejectTracker.put(ip, 0); + } + + int kicks = Utilities.ejectTracker.get(ip); + kicks += 1; + + Utilities.ejectTracker.put(ip, kicks); + + if (kicks <= 1) { + method = EjectMethod.STRIKE_ONE; + } else if (kicks == 2) { + method = EjectMethod.STRIKE_TWO; + } else if (kicks >= 3) { + method = EjectMethod.STRIKE_THREE; + } + + Log.info("AutoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + + method); + + player.setOp(false); + player.setGameMode(GameMode.SURVIVAL); + player.getInventory().clear(); + + switch (method) { + case STRIKE_ONE: { + final Calendar cal = new GregorianCalendar(); + cal.add(Calendar.MINUTE, 1); + final Date expires = cal.getTime(); + + Utilities.bcastMsg( + ChatColor.RED + player.getName() + " has been banned for 1 minute."); + + BanManager.addIpBan( + new Ban(ip, player.getName(), "AutoEject", expires, kickMessage)); + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", expires, + kickMessage)); + player.kickPlayer(kickMessage); + + break; + } + case STRIKE_TWO: { + final Calendar c = new GregorianCalendar(); + c.add(Calendar.MINUTE, 3); + final Date expires = c.getTime(); + + Utilities.bcastMsg( + ChatColor.RED + player.getName() + " has been banned for 3 minutes."); + + BanManager.addIpBan( + new Ban(ip, player.getName(), "AutoEject", expires, kickMessage)); + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", expires, + kickMessage)); + player.kickPlayer(kickMessage); + break; + } + case STRIKE_THREE: { + String[] ipAddressParts = ip.split("\\."); + + BanManager.addIpBan(new Ban(ip, player.getName(), "AutoEject", null, kickMessage)); + BanManager.addIpBan( + new Ban(ipAddressParts[0] + "." + ipAddressParts[1] + ".*.*", player.getName(), + "AutoEject", null, kickMessage)); + BanManager.addUuidBan( + new Ban(UUIDManager.getUniqueId(player), player.getName(), "AutoEject", null, + kickMessage)); + + Utilities.bcastMsg(ChatColor.RED + player.getName() + " has been banned."); + + player.kickPlayer(kickMessage); + break; + } + } + } + + public static Date parseDateOffset(String time) { + Pattern timePattern = Pattern.compile( + "(?:([0-9]+)\\s*y[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*mo[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*w[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*d[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*h[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*m[a-z]*[,\\s]*)?" + + "(?:([0-9]+)\\s*(?:s[a-z]*)?)?", Pattern.CASE_INSENSITIVE); + Matcher m = timePattern.matcher(time); + int years = 0; + int months = 0; + int weeks = 0; + int days = 0; + int hours = 0; + int minutes = 0; + int seconds = 0; + boolean found = false; + while (m.find()) { + if (m.group() == null || m.group().isEmpty()) { + continue; + } + for (int i = 0; i < m.groupCount(); i++) { + if (m.group(i) != null && !m.group(i).isEmpty()) { + found = true; + break; + } + } + if (found) { + if (m.group(1) != null && !m.group(1).isEmpty()) { + years = Integer.parseInt(m.group(1)); + } + if (m.group(2) != null && !m.group(2).isEmpty()) { + months = Integer.parseInt(m.group(2)); + } + if (m.group(3) != null && !m.group(3).isEmpty()) { + weeks = Integer.parseInt(m.group(3)); + } + if (m.group(4) != null && !m.group(4).isEmpty()) { + days = Integer.parseInt(m.group(4)); + } + if (m.group(5) != null && !m.group(5).isEmpty()) { + hours = Integer.parseInt(m.group(5)); + } + if (m.group(6) != null && !m.group(6).isEmpty()) { + minutes = Integer.parseInt(m.group(6)); + } + if (m.group(7) != null && !m.group(7).isEmpty()) { + seconds = Integer.parseInt(m.group(7)); + } + break; + } + } + if (!found) { + return null; + } + + Calendar c = new GregorianCalendar(); + + if (years > 0) { + c.add(Calendar.YEAR, years); + } + if (months > 0) { + c.add(Calendar.MONTH, months); + } + if (weeks > 0) { + c.add(Calendar.WEEK_OF_YEAR, weeks); + } + if (days > 0) { + c.add(Calendar.DAY_OF_MONTH, days); + } + if (hours > 0) { + c.add(Calendar.HOUR_OF_DAY, hours); + } + if (minutes > 0) { + c.add(Calendar.MINUTE, minutes); + } + if (seconds > 0) { + c.add(Calendar.SECOND, seconds); + } + + return c.getTime(); + } + + public static String playerListToNames(Set players) { + List names = new ArrayList(); + for (OfflinePlayer player : players) { + names.add(player.getName()); + } + return StringUtils.join(names, ", "); + } + + @SuppressWarnings("unchecked") + public static Map getSavedFlags() { + Map flags = null; + + File input = new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.SAVED_FLAGS_FILENAME); + if (input.exists()) { + try { + FileInputStream fis = new FileInputStream(input); + ObjectInputStream ois = new ObjectInputStream(fis); + flags = (HashMap) ois.readObject(); + ois.close(); + fis.close(); + } catch (Exception ex) { + Log.severe(ex); + } + } + + return flags; + } + + public static boolean getSavedFlag(String flag) throws Exception { + Boolean flagValue = null; + + Map flags = Utilities.getSavedFlags(); + + if (flags != null) { + if (flags.containsKey(flag)) { + flagValue = flags.get(flag); + } + } + + if (flagValue != null) { + return flagValue.booleanValue(); + } else { + throw new Exception(); + } + } + + public static void setSavedFlag(String flag, boolean value) { + Map flags = Utilities.getSavedFlags(); + + if (flags == null) { + flags = new HashMap(); + } + + flags.put(flag, value); + + try { + final FileOutputStream fos = new FileOutputStream( + new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.SAVED_FLAGS_FILENAME)); + final ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(flags); + oos.close(); + fos.close(); + } catch (Exception ex) { + Log.severe(ex); + } + } + + public static void createBackups(String file) { + createBackups(file, false); + } + + public static void createBackups(String file, boolean onlyWeekly) { + final String save = file.split("\\.")[0]; + final Configuration config = new Configuration(TotalFreedomMod.plugin, "backup/backup.yml", + false); + config.load(); + + // Weekly + if (!config.isInt(save + ".weekly")) { + performBackup(file, "weekly"); + config.set(save + ".weekly", Utilities.getUnixTime()); + } else { + int lastBackupWeekly = config.getInt(save + ".weekly"); + + if (lastBackupWeekly + 3600 * 24 * 7 < Utilities.getUnixTime()) { + performBackup(file, "weekly"); + config.set(save + ".weekly", Utilities.getUnixTime()); + } + } + + if (onlyWeekly) { + config.save(); + return; + } + + // Daily + if (!config.isInt(save + ".daily")) { + performBackup(file, "daily"); + config.set(save + ".daily", Utilities.getUnixTime()); + } else { + int lastBackupDaily = config.getInt(save + ".daily"); + + if (lastBackupDaily + 3600 * 24 < Utilities.getUnixTime()) { + performBackup(file, "daily"); + config.set(save + ".daily", Utilities.getUnixTime()); + } + } + + config.save(); + } + + private static void performBackup(String file, String type) { + Log.info("Backing up " + file + " to " + file + "." + type + ".bak"); + final File backupFolder = new File(TotalFreedomMod.plugin.getDataFolder(), "backup"); + + if (!backupFolder.exists()) { + backupFolder.mkdirs(); + } + + final File oldYaml = new File(TotalFreedomMod.plugin.getDataFolder(), file); + final File newYaml = new File(backupFolder, file + "." + type + ".bak"); + FileUtil.copy(oldYaml, newYaml); + } + + public static String dateToString(Date date) { + return new SimpleDateFormat(DATE_STORAGE_FORMAT, Locale.ENGLISH).format(date); + } + + public static Date stringToDate(String dateString) { + try { + return new SimpleDateFormat(DATE_STORAGE_FORMAT, Locale.ENGLISH).parse(dateString); + } catch (ParseException pex) { + return new Date(0L); + } + } + + @SuppressWarnings("unchecked") + public static boolean isFromHostConsole(String senderName) { + return ConfigurationEntry.HOST_SENDER_NAMES.getList().contains(senderName.toLowerCase()); + } + + public static List removeDuplicates(List oldList) { + List newList = new ArrayList(); + for (String entry : oldList) { + if (!newList.contains(entry)) { + newList.add(entry); + } + } + return newList; + } + + public static boolean fuzzyIpMatch(String a, String b, int octets) { + boolean match = true; + + String[] aParts = a.split("\\."); + String[] bParts = b.split("\\."); + + if (aParts.length != 4 || bParts.length != 4) { + return false; + } + + if (octets > 4) { + octets = 4; + } else if (octets < 1) { + octets = 1; + } + + for (int i = 0; i < octets && i < 4; i++) { + if (aParts[i].equals("*") || bParts[i].equals("*")) { + continue; + } + + if (!aParts[i].equals(bParts[i])) { + match = false; + break; + } + } + + 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; + + Block centerBlock = center.getBlock(); + for (int xOffset = -radius; xOffset <= radius; xOffset++) { + for (int yOffset = -radius; yOffset <= radius; yOffset++) { + for (int zOffset = -radius; zOffset <= radius; zOffset++) { + Block block = centerBlock.getRelative(xOffset, yOffset, zOffset); + + if (block.getType().equals(fromMaterial)) { + if (block.getLocation().distanceSquared(center) < (radius * radius)) { + block.setType(toMaterial); + affected++; + } + } + } + } + } + + return affected; + } + + public static void downloadFile(String url, File output) throws java.lang.Exception { + downloadFile(url, output, false); + } + + public static void downloadFile(String url, File output, boolean verbose) + throws java.lang.Exception { + final URL website = new URL(url); + ReadableByteChannel rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(output); + fos.getChannel().transferFrom(rbc, 0, 1 << 24); + fos.close(); + + if (verbose) { + Log.info("Downloaded " + url + " to " + output + "."); + } + } + + public static void adminChatMessage(CommandSender sender, String message, + boolean senderIsConsole) { + String name = + sender.getName() + " " + PlayerRank.fromSender(sender).getPrefix() + ChatColor.WHITE; + Log.info("[ADMIN] " + name + ": " + message); + String adminChatMessage = + "[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + name + + ": " + ChatColor.AQUA + message; + + for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { + if (AdminList.isSuperAdmin(player)) { + player.sendMessage(adminChatMessage); + } + } + + DiscordBridge.transmitAdminMessage(adminChatMessage.replaceAll("([`_~*])", "\\\\$1")); + } + + //getField: Borrowed from WorldEdit + @SuppressWarnings("unchecked") + public static T getField(Object from, String name) { + Class checkClass = from.getClass(); + do { + try { + Field field = checkClass.getDeclaredField(name); + field.setAccessible(true); + return (T) field.get(from); + + } catch (NoSuchFieldException ex) { + } catch (IllegalAccessException ex) { + } + } + while (checkClass.getSuperclass() != Object.class + && ((checkClass = checkClass.getSuperclass()) != null)); + + return null; + } + + public static ChatColor randomChatColor() { + return CHAT_COLOR_POOL.get(RANDOM.nextInt(CHAT_COLOR_POOL.size())); + } + + public static TextComponent fromBaseComponents(BaseComponent[] components) { + TextComponent newComponent = new TextComponent(""); + + for (BaseComponent component : components) { + newComponent.addExtra(component); + } + + return newComponent; + } + + public static String colorize(String string) { + return ChatColor.translateAlternateColorCodes('&', string); + } + + public static long getUnixTime() { + return System.currentTimeMillis() / 1000L; + } + + public static Date getUnixDate(long unix) { + return new Date(unix * 1000); + } + + public static long getUnixTime(Date date) { + if (date == null) { + return 0; + } + + return date.getTime() / 1000L; + } + + public static String getNmsVersion() { + String packageName = Bukkit.getServer().getClass().getPackage().getName(); + return packageName.substring(packageName.lastIndexOf('.') + 1); + + } + + public static void reportAction(org.bukkit.entity.Player reporter, + org.bukkit.entity.Player reported, String report) { + for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) { + if (AdminList.isSuperAdmin(player)) { + playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + + " has reported " + reported.getName() + " for " + report); + } + } + } + + public enum EjectMethod { + STRIKE_ONE, STRIKE_TWO, STRIKE_THREE + } + + public static class TFM_EntityWiper { + + private static final List> WIPEABLES = new ArrayList>(); + + static { + WIPEABLES.add(EnderCrystal.class); + WIPEABLES.add(EnderSignal.class); + WIPEABLES.add(ExperienceOrb.class); + WIPEABLES.add(Projectile.class); + WIPEABLES.add(FallingBlock.class); + WIPEABLES.add(Firework.class); + WIPEABLES.add(Item.class); + } + + private TFM_EntityWiper() { + throw new AssertionError(); + } + + private static boolean canWipe(Entity entity, boolean wipeExplosives, + boolean wipeVehicles) { + if (wipeExplosives) { + if (Explosive.class.isAssignableFrom(entity.getClass())) { + return true; + } + } + + if (wipeVehicles) { + if (Boat.class.isAssignableFrom(entity.getClass())) { + return true; + } else if (Minecart.class.isAssignableFrom(entity.getClass())) { + return true; + } + } + + Iterator> it = WIPEABLES.iterator(); + while (it.hasNext()) { + if (it.next().isAssignableFrom(entity.getClass())) { + return true; + } + } + + return false; + } + + public static int wipeEntities(boolean wipeExplosives, boolean wipeVehicles) { + int removed = 0; + + Iterator worlds = Bukkit.getWorlds().iterator(); + while (worlds.hasNext()) { + Iterator entities = worlds.next().getEntities().iterator(); + while (entities.hasNext()) { + Entity entity = entities.next(); + if (canWipe(entity, wipeExplosives, wipeVehicles)) { + entity.remove(); + removed++; + } + } + } + + return removed; + } + } + + public static class MethodTimer { + + private long lastStart; + private long total = 0; + + public MethodTimer() { + } + + public void start() { + this.lastStart = System.currentTimeMillis(); + } + + public void update() { + this.total += (System.currentTimeMillis() - this.lastStart); + } + + public long getTotal() { + return this.total; + } + + public void printTotalToLog(String timerName) { + Log.info("DEBUG: " + timerName + " used " + this.getTotal() + " ms."); + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/AdminWorld.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/AdminWorld.java index 28bd233..8af32c2 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/AdminWorld.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/AdminWorld.java @@ -1,12 +1,24 @@ package me.StevenLawson.TotalFreedomMod.world; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.admin.AdminList; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.gamerule.GameRuleHandler; import org.apache.commons.lang3.StringUtils; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.command.CommandSender; @@ -14,334 +26,280 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.scheduler.BukkitRunnable; -import java.util.*; -import java.util.Map.Entry; +public final class AdminWorld extends CustomWorld { -public final class AdminWorld extends 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 = ConfigurationEntry.FLATLANDS_GENERATE_PARAMS.getString(); - private static final String WORLD_NAME = "adminworld"; - // - private final Map teleportCooldown = new HashMap(); - private final Map accessCache = new HashMap(); - // - private Long cacheLastCleared = null; - private final Map guestList = new HashMap(); // Guest, Supervisor - private WeatherMode weatherMode = WeatherMode.OFF; - private TimeOfDay timeOfDay = TimeOfDay.INHERIT; + 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 = ConfigurationEntry.FLATLANDS_GENERATE_PARAMS.getString(); + private static final String WORLD_NAME = "adminworld"; + // + private final Map teleportCooldown = new HashMap(); + private final Map accessCache = new HashMap(); + private final Map guestList = new HashMap(); // Guest, Supervisor + // + private Long cacheLastCleared = null; + private WeatherMode weatherMode = WeatherMode.OFF; + private TimeOfDay timeOfDay = TimeOfDay.INHERIT; - private AdminWorld() - { - } + private AdminWorld() { + } - @Override - public void sendToWorld(Player player) - { - if (!canAccessWorld(player)) - { - return; - } + public static AdminWorld getInstance() { + return AdminWorldHolder.INSTANCE; + } - super.sendToWorld(player); - } + @Override + public void sendToWorld(Player player) { + if (!canAccessWorld(player)) { + return; + } - @Override - protected World generateWorld() - { - WorldCreator worldCreator = new WorldCreator(WORLD_NAME); - worldCreator.generateStructures(false); - worldCreator.type(WorldType.NORMAL); - worldCreator.environment(World.Environment.NORMAL); - worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS)); + super.sendToWorld(player); + } - World world = Bukkit.getServer().createWorld(worldCreator); + @Override + protected World generateWorld() { + WorldCreator worldCreator = new WorldCreator(WORLD_NAME); + worldCreator.generateStructures(false); + worldCreator.type(WorldType.NORMAL); + worldCreator.environment(World.Environment.NORMAL); + worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS)); - world.setSpawnFlags(false, false); - world.setSpawnLocation(0, 50, 0); + World world = Bukkit.getServer().createWorld(worldCreator); - Block welcomeSignBlock = world.getBlockAt(0, 50, 0); - welcomeSignBlock.setType(Material.SIGN_POST); - org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign) welcomeSignBlock.getState(); + world.setSpawnFlags(false, false); + world.setSpawnLocation(0, 50, 0); - org.bukkit.material.Sign signData = (org.bukkit.material.Sign) welcomeSign.getData(); - signData.setFacingDirection(BlockFace.NORTH); + Block welcomeSignBlock = world.getBlockAt(0, 50, 0); + welcomeSignBlock.setType(Material.SIGN_POST); + org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign) welcomeSignBlock.getState(); - welcomeSign.setLine(0, ChatColor.GREEN + "AdminWorld"); - welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---"); - welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point"); - welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---"); - welcomeSign.update(); + org.bukkit.material.Sign signData = (org.bukkit.material.Sign) welcomeSign.getData(); + signData.setFacingDirection(BlockFace.NORTH); - GameRuleHandler.commitGameRules(); + welcomeSign.setLine(0, ChatColor.GREEN + "AdminWorld"); + welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---"); + welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point"); + welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---"); + welcomeSign.update(); - return world; - } + GameRuleHandler.commitGameRules(); - public boolean addGuest(Player guest, Player supervisor) - { - if (guest == supervisor || AdminList.isSuperAdmin(guest)) - { - return false; - } + return world; + } - if (AdminList.isSuperAdmin(supervisor)) - { - guestList.put(guest, supervisor); - wipeAccessCache(); - return true; - } + public boolean addGuest(Player guest, Player supervisor) { + if (guest == supervisor || AdminList.isSuperAdmin(guest)) { + return false; + } - return false; - } + if (AdminList.isSuperAdmin(supervisor)) { + guestList.put(guest, supervisor); + wipeAccessCache(); + return true; + } - public Player removeGuest(Player guest) - { - final Player player = guestList.remove(guest); - wipeAccessCache(); - return player; - } + return false; + } - public Player removeGuest(String partialName) - { - partialName = partialName.toLowerCase(); - final Iterator it = guestList.keySet().iterator(); + public Player removeGuest(Player guest) { + final Player player = guestList.remove(guest); + wipeAccessCache(); + return player; + } - while (it.hasNext()) - { - final Player player = it.next(); - if (player.getName().toLowerCase().contains(partialName)) - { - removeGuest(player); - return player; - } - } + public Player removeGuest(String partialName) { + partialName = partialName.toLowerCase(); + final Iterator it = guestList.keySet().iterator(); - return null; - } + while (it.hasNext()) { + final Player player = it.next(); + if (player.getName().toLowerCase().contains(partialName)) { + removeGuest(player); + return player; + } + } - public String guestListToString() - { - final List output = new ArrayList(); - final Iterator> it = guestList.entrySet().iterator(); - while (it.hasNext()) - { - final Entry entry = it.next(); - final Player player = entry.getKey(); - final Player supervisor = entry.getValue(); - output.add(player.getName() + " (Supervisor: " + supervisor.getName() + ")"); - } - return StringUtils.join(output, ", "); - } + return null; + } - public void purgeGuestList() - { - guestList.clear(); - wipeAccessCache(); - } + public String guestListToString() { + final List output = new ArrayList(); + final Iterator> it = guestList.entrySet().iterator(); + while (it.hasNext()) { + final Entry entry = it.next(); + final Player player = entry.getKey(); + final Player supervisor = entry.getValue(); + output.add(player.getName() + " (Supervisor: " + supervisor.getName() + ")"); + } + return StringUtils.join(output, ", "); + } - public boolean validateMovement(PlayerMoveEvent event) - { - World world; - try - { - world = getWorld(); - } - catch (Exception ex) - { - return true; - } + public void purgeGuestList() { + guestList.clear(); + wipeAccessCache(); + } - if (world != null && event.getTo().getWorld() == world) - { - final Player player = event.getPlayer(); - if (!canAccessWorld(player)) - { - Long lastTP = teleportCooldown.get(player); - long currentTimeMillis = System.currentTimeMillis(); - if (lastTP == null || lastTP.longValue() + TP_COOLDOWN_TIME <= currentTimeMillis) - { - teleportCooldown.put(player, currentTimeMillis); - Log.info(player.getName() + " attempted to access the AdminWorld."); - new BukkitRunnable() - { - @Override - public void run() - { - player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation()); - } - }.runTaskLater(TotalFreedomMod.plugin, 1L); - } - event.setCancelled(true); - return false; - } - } + public boolean validateMovement(PlayerMoveEvent event) { + World world; + try { + world = getWorld(); + } catch (Exception ex) { + return true; + } - return true; - } + if (world != null && event.getTo().getWorld() == world) { + final Player player = event.getPlayer(); + if (!canAccessWorld(player)) { + Long lastTP = teleportCooldown.get(player); + long currentTimeMillis = System.currentTimeMillis(); + if (lastTP == null || lastTP.longValue() + TP_COOLDOWN_TIME <= currentTimeMillis) { + teleportCooldown.put(player, currentTimeMillis); + Log.info(player.getName() + " attempted to access the AdminWorld."); + new BukkitRunnable() { + @Override + public void run() { + player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation()); + } + }.runTaskLater(TotalFreedomMod.plugin, 1L); + } + event.setCancelled(true); + return false; + } + } - public void wipeAccessCache() - { - cacheLastCleared = System.currentTimeMillis(); - accessCache.clear(); - } + return true; + } - public boolean canAccessWorld(final Player player) - { - long currentTimeMillis = System.currentTimeMillis(); - if (cacheLastCleared == null || cacheLastCleared.longValue() + CACHE_CLEAR_FREQUENCY <= currentTimeMillis) - { - cacheLastCleared = currentTimeMillis; - accessCache.clear(); - } + public void wipeAccessCache() { + cacheLastCleared = System.currentTimeMillis(); + accessCache.clear(); + } - Boolean cached = accessCache.get(player); - if (cached == null) - { - boolean canAccess = AdminList.isSuperAdmin(player); - if (!canAccess) - { - Player supervisor = guestList.get(player); - canAccess = supervisor != null && supervisor.isOnline() && AdminList.isSuperAdmin(supervisor); - if (!canAccess) - { - guestList.remove(player); - } - } - cached = canAccess; - accessCache.put(player, cached); - } - return cached; - } + public boolean canAccessWorld(final Player player) { + long currentTimeMillis = System.currentTimeMillis(); + if (cacheLastCleared == null + || cacheLastCleared.longValue() + CACHE_CLEAR_FREQUENCY <= currentTimeMillis) { + cacheLastCleared = currentTimeMillis; + accessCache.clear(); + } - public enum WeatherMode - { - OFF("off"), - RAIN("rain"), - STORM("storm,thunderstorm"); - // - private final List aliases; + Boolean cached = accessCache.get(player); + if (cached == null) { + boolean canAccess = AdminList.isSuperAdmin(player); + if (!canAccess) { + Player supervisor = guestList.get(player); + canAccess = supervisor != null && supervisor.isOnline() && AdminList.isSuperAdmin( + supervisor); + if (!canAccess) { + guestList.remove(player); + } + } + cached = canAccess; + accessCache.put(player, cached); + } + return cached; + } - WeatherMode(String aliases) - { - this.aliases = Arrays.asList(StringUtils.split(aliases, ",")); - } + public WeatherMode getWeatherMode() { + return weatherMode; + } - private void setWorldToWeather(World world) - { - world.setStorm(this == RAIN || this == STORM); - world.setWeatherDuration(this == RAIN || this == STORM ? 20 * 60 * 5 : 0); + public void setWeatherMode(final WeatherMode weatherMode) { + this.weatherMode = weatherMode; - world.setThundering(this == STORM); - world.setThunderDuration(this == STORM ? 20 * 60 * 5 : 0); - } + try { + weatherMode.setWorldToWeather(getWorld()); + } catch (Exception ex) { + } + } - public static WeatherMode getByAlias(String needle) - { - needle = needle.toLowerCase(); - for (WeatherMode mode : values()) - { - if (mode.aliases.contains(needle)) - { - return mode; - } - } - return null; - } - } + public TimeOfDay getTimeOfDay() { + return timeOfDay; + } - public enum TimeOfDay - { - INHERIT(), - SUNRISE("sunrise,morning", 0), - NOON("noon,midday,day", 6000), - SUNSET("sunset,evening", 12000), - MIDNIGHT("midnight,night", 18000); - // - private final int timeTicks; - private final List aliases; + public void setTimeOfDay(final TimeOfDay timeOfDay) { + this.timeOfDay = timeOfDay; - TimeOfDay() - { - this.timeTicks = 0; - this.aliases = null; - } + try { + timeOfDay.setWorldToTime(getWorld()); + } catch (Exception ex) { + } + } - TimeOfDay(String aliases, int timeTicks) - { - this.timeTicks = timeTicks; - this.aliases = Arrays.asList(StringUtils.split(aliases, ",")); - } + public enum WeatherMode { + OFF("off"), + RAIN("rain"), + STORM("storm,thunderstorm"); + // + private final List aliases; - public int getTimeTicks() - { - return timeTicks; - } + WeatherMode(String aliases) { + this.aliases = Arrays.asList(StringUtils.split(aliases, ",")); + } - public void setWorldToTime(World world) - { - long time = world.getTime(); - time -= time % 24000; - world.setTime(time + 24000 + getTimeTicks()); - } + public static WeatherMode getByAlias(String needle) { + needle = needle.toLowerCase(); + for (WeatherMode mode : values()) { + if (mode.aliases.contains(needle)) { + return mode; + } + } + return null; + } - public static TimeOfDay getByAlias(String needle) - { - needle = needle.toLowerCase(); - for (TimeOfDay time : values()) - { - if (time.aliases != null && time.aliases.contains(needle)) - { - return time; - } - } - return null; - } - } + private void setWorldToWeather(World world) { + world.setStorm(this == RAIN || this == STORM); + world.setWeatherDuration(this == RAIN || this == STORM ? 20 * 60 * 5 : 0); - public WeatherMode getWeatherMode() - { - return weatherMode; - } + world.setThundering(this == STORM); + world.setThunderDuration(this == STORM ? 20 * 60 * 5 : 0); + } + } - public void setWeatherMode(final WeatherMode weatherMode) - { - this.weatherMode = weatherMode; + public enum TimeOfDay { + INHERIT(), + SUNRISE("sunrise,morning", 0), + NOON("noon,midday,day", 6000), + SUNSET("sunset,evening", 12000), + MIDNIGHT("midnight,night", 18000); + // + private final int timeTicks; + private final List aliases; - try - { - weatherMode.setWorldToWeather(getWorld()); - } - catch (Exception ex) - { - } - } + TimeOfDay() { + this.timeTicks = 0; + this.aliases = null; + } - public TimeOfDay getTimeOfDay() - { - return timeOfDay; - } + TimeOfDay(String aliases, int timeTicks) { + this.timeTicks = timeTicks; + this.aliases = Arrays.asList(StringUtils.split(aliases, ",")); + } - public void setTimeOfDay(final TimeOfDay timeOfDay) - { - this.timeOfDay = timeOfDay; + public static TimeOfDay getByAlias(String needle) { + needle = needle.toLowerCase(); + for (TimeOfDay time : values()) { + if (time.aliases != null && time.aliases.contains(needle)) { + return time; + } + } + return null; + } - try - { - timeOfDay.setWorldToTime(getWorld()); - } - catch (Exception ex) - { - } - } + public int getTimeTicks() { + return timeTicks; + } - public static AdminWorld getInstance() - { - return AdminWorldHolder.INSTANCE; - } + public void setWorldToTime(World world) { + long time = world.getTime(); + time -= time % 24000; + world.setTime(time + 24000 + getTimeTicks()); + } + } - private static class AdminWorldHolder { - private static final AdminWorld INSTANCE = new AdminWorld(); - } + private static class AdminWorldHolder { + + private static final AdminWorld INSTANCE = new AdminWorld(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomBlockPopulator.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomBlockPopulator.java index 3e13d28..2fd5274 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomBlockPopulator.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomBlockPopulator.java @@ -23,39 +23,31 @@ import org.bukkit.World; import org.bukkit.generator.BlockPopulator; @SuppressWarnings("deprecation") -public class CleanroomBlockPopulator extends BlockPopulator -{ +public class CleanroomBlockPopulator extends BlockPopulator { - byte[] layerDataValues; + byte[] layerDataValues; - protected CleanroomBlockPopulator(byte[] layerDataValues) - { - this.layerDataValues = layerDataValues; - } + protected CleanroomBlockPopulator(byte[] layerDataValues) { + this.layerDataValues = layerDataValues; + } - @Override - public void populate(World world, Random random, Chunk chunk) - { - if (layerDataValues != null) - { - int x = chunk.getX() << 4; - int z = chunk.getZ() << 4; + @Override + public void populate(World world, Random random, Chunk chunk) { + if (layerDataValues != null) { + int x = chunk.getX() << 4; + int z = chunk.getZ() << 4; - for (int y = 0; y < layerDataValues.length; y++) - { - byte dataValue = layerDataValues[y]; - if (dataValue == 0) - { - continue; - } - for (int xx = 0; xx < 16; xx++) - { - for (int zz = 0; zz < 16; zz++) - { - world.getBlockAt(x + xx, y, z + zz).setData(dataValue); - } - } - } - } - } + for (int y = 0; y < layerDataValues.length; y++) { + byte dataValue = layerDataValues[y]; + if (dataValue == 0) { + continue; + } + for (int xx = 0; xx < 16; xx++) { + for (int zz = 0; zz < 16; zz++) { + world.getBlockAt(x + xx, y, z + zz).setData(dataValue); + } + } + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomChunkGenerator.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomChunkGenerator.java index 4ba388e..ee7b569 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomChunkGenerator.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CleanroomChunkGenerator.java @@ -18,6 +18,7 @@ package me.StevenLawson.TotalFreedomMod.world; import static java.lang.System.arraycopy; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -31,206 +32,181 @@ import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.ChunkGenerator; @SuppressWarnings("deprecation") -public class CleanroomChunkGenerator extends ChunkGenerator -{ - private static final Logger log = Bukkit.getLogger(); - private short[] layer; - private byte[] layerDataValues; +public class CleanroomChunkGenerator extends ChunkGenerator { - public CleanroomChunkGenerator() - { - this("64,stone"); - } + private static final Logger log = Bukkit.getLogger(); + private short[] layer; + private byte[] layerDataValues; - public CleanroomChunkGenerator(String id) - { - if (id != null) - { - try - { - int y = 0; + public CleanroomChunkGenerator() { + this("64,stone"); + } - layer = new short[128]; // Default to 128, will be resized later if required - layerDataValues = null; + public CleanroomChunkGenerator(String id) { + if (id != null) { + try { + int y = 0; - if ((id.length() > 0) && (id.charAt(0) == '.')) // Is the first character a '.'? If so, skip bedrock generation. - { - id = id.substring(1); // Skip bedrock then and remove the . - } - else // Guess not, bedrock at layer0 it is then. - { - layer[y++] = (short) Material.BEDROCK.getId(); - } + layer = new short[128]; // Default to 128, will be resized later if required + layerDataValues = null; - if (id.length() > 0) - { - String[] tokens = id.split("[,]"); + if ((id.length() > 0) && (id.charAt(0) + == '.')) // Is the first character a '.'? If so, skip bedrock generation. + { + id = id.substring(1); // Skip bedrock then and remove the . + } else // Guess not, bedrock at layer0 it is then. + { + layer[y++] = (short) Material.BEDROCK.getId(); + } - if ((tokens.length % 2) != 0) - { - throw new Exception(); - } + if (id.length() > 0) { + String[] tokens = id.split("[,]"); - for (int i = 0; i < tokens.length; i += 2) - { - int height = Integer.parseInt(tokens[i]); - if (height <= 0) - { - log.warning("[CleanroomGenerator] Invalid height '" + tokens[i] + "'. Using 64 instead."); - height = 64; - } + if ((tokens.length % 2) != 0) { + throw new Exception(); + } - String[] materialTokens = tokens[i + 1].split("[:]", 2); - byte dataValue = 0; - if (materialTokens.length == 2) - { - try - { - // Lets try to read the data value - dataValue = Byte.parseByte(materialTokens[1]); - } - catch (Exception e) - { - log.warning("[CleanroomGenerator] Invalid Data Value '" + materialTokens[1] + "'. Defaulting to 0."); - dataValue = 0; - } - } - Material mat = Material.matchMaterial(materialTokens[0]); - if (mat == null) - { - try - { - // Mabe it's an integer? - mat = Material.getMaterial(Integer.parseInt(materialTokens[0])); - } - catch (Exception e) - { - // Well, I guess it wasn't an integer after all... Awkward... - } + for (int i = 0; i < tokens.length; i += 2) { + int height = Integer.parseInt(tokens[i]); + if (height <= 0) { + log.warning("[CleanroomGenerator] Invalid height '" + tokens[i] + + "'. Using 64 instead."); + height = 64; + } - if (mat == null) - { - log.warning("[CleanroomGenerator] Invalid Block ID '" + materialTokens[0] + "'. Defaulting to stone."); - mat = Material.STONE; - } - } + String[] materialTokens = tokens[i + 1].split("[:]", 2); + byte dataValue = 0; + if (materialTokens.length == 2) { + try { + // Lets try to read the data value + dataValue = Byte.parseByte(materialTokens[1]); + } catch (Exception e) { + log.warning( + "[CleanroomGenerator] Invalid Data Value '" + materialTokens[1] + + "'. Defaulting to 0."); + dataValue = 0; + } + } + Material mat = Material.matchMaterial(materialTokens[0]); + if (mat == null) { + try { + // Mabe it's an integer? + mat = Material.getMaterial(Integer.parseInt(materialTokens[0])); + } catch (Exception e) { + // Well, I guess it wasn't an integer after all... Awkward... + } - if (!mat.isBlock()) - { - log.warning("[CleanroomGenerator] Error, '" + materialTokens[0] + "' is not a block. Defaulting to stone."); - mat = Material.STONE; - } + if (mat == null) { + log.warning( + "[CleanroomGenerator] Invalid Block ID '" + materialTokens[0] + + "'. Defaulting to stone."); + mat = Material.STONE; + } + } - if (y + height > layer.length) - { - short[] newLayer = new short[Math.max(y + height, layer.length * 2)]; - arraycopy(layer, 0, newLayer, 0, y); - layer = newLayer; - if (layerDataValues != null) - { - byte[] newLayerDataValues = new byte[Math.max(y + height, layerDataValues.length * 2)]; - arraycopy(layerDataValues, 0, newLayerDataValues, 0, y); - layerDataValues = newLayerDataValues; - } - } + if (!mat.isBlock()) { + log.warning("[CleanroomGenerator] Error, '" + materialTokens[0] + + "' is not a block. Defaulting to stone."); + mat = Material.STONE; + } - Arrays.fill(layer, y, y + height, (short) mat.getId()); - if (dataValue != 0) - { - if (layerDataValues == null) - { - layerDataValues = new byte[layer.length]; - } - Arrays.fill(layerDataValues, y, y + height, dataValue); - } - y += height; - } - } + if (y + height > layer.length) { + short[] newLayer = new short[Math.max(y + height, layer.length * 2)]; + arraycopy(layer, 0, newLayer, 0, y); + layer = newLayer; + if (layerDataValues != null) { + byte[] newLayerDataValues = new byte[Math.max(y + height, + layerDataValues.length * 2)]; + arraycopy(layerDataValues, 0, newLayerDataValues, 0, y); + layerDataValues = newLayerDataValues; + } + } - // Trim to size - if (layer.length > y) - { - short[] newLayer = new short[y]; - arraycopy(layer, 0, newLayer, 0, y); - layer = newLayer; - } - if (layerDataValues != null && layerDataValues.length > y) - { - byte[] newLayerDataValues = new byte[y]; - arraycopy(layerDataValues, 0, newLayerDataValues, 0, y); - layerDataValues = newLayerDataValues; - } - } - catch (Exception e) - { - log.severe("[CleanroomGenerator] Error parsing CleanroomGenerator ID '" + id + "'. using defaults '64,1': " + e); - e.printStackTrace(); - layerDataValues = null; - layer = new short[65]; - layer[0] = (short) Material.BEDROCK.getId(); - Arrays.fill(layer, 1, 65, (short) Material.STONE.getId()); - } - } - else - { - layerDataValues = null; - layer = new short[65]; - layer[0] = (short) Material.BEDROCK.getId(); - Arrays.fill(layer, 1, 65, (short) Material.STONE.getId()); - } - } + Arrays.fill(layer, y, y + height, (short) mat.getId()); + if (dataValue != 0) { + if (layerDataValues == null) { + layerDataValues = new byte[layer.length]; + } + Arrays.fill(layerDataValues, y, y + height, dataValue); + } + y += height; + } + } - @Override - public short[][] generateExtBlockSections(World world, Random random, int x, int z, BiomeGrid biomes) - { - int maxHeight = world.getMaxHeight(); - if (layer.length > maxHeight) - { - log.warning("[CleanroomGenerator] Error, chunk height " + layer.length + " is greater than the world max height (" + maxHeight + "). Trimming to world max height."); - short[] newLayer = new short[maxHeight]; - arraycopy(layer, 0, newLayer, 0, maxHeight); - layer = newLayer; - } - short[][] result = new short[maxHeight / 16][]; // 16x16x16 chunks - for (int i = 0; i < layer.length; i += 16) - { - result[i >> 4] = new short[4096]; - for (int y = 0; y < Math.min(16, layer.length - i); y++) - { - Arrays.fill(result[i >> 4], y * 16 * 16, (y + 1) * 16 * 16, layer[i + y]); - } - } + // Trim to size + if (layer.length > y) { + short[] newLayer = new short[y]; + arraycopy(layer, 0, newLayer, 0, y); + layer = newLayer; + } + if (layerDataValues != null && layerDataValues.length > y) { + byte[] newLayerDataValues = new byte[y]; + arraycopy(layerDataValues, 0, newLayerDataValues, 0, y); + layerDataValues = newLayerDataValues; + } + } catch (Exception e) { + log.severe("[CleanroomGenerator] Error parsing CleanroomGenerator ID '" + id + + "'. using defaults '64,1': " + e); + e.printStackTrace(); + layerDataValues = null; + layer = new short[65]; + layer[0] = (short) Material.BEDROCK.getId(); + Arrays.fill(layer, 1, 65, (short) Material.STONE.getId()); + } + } else { + layerDataValues = null; + layer = new short[65]; + layer[0] = (short) Material.BEDROCK.getId(); + Arrays.fill(layer, 1, 65, (short) Material.STONE.getId()); + } + } - return result; - } + @Override + public short[][] generateExtBlockSections(World world, Random random, int x, int z, + BiomeGrid biomes) { + int maxHeight = world.getMaxHeight(); + if (layer.length > maxHeight) { + log.warning("[CleanroomGenerator] Error, chunk height " + layer.length + + " is greater than the world max height (" + maxHeight + + "). Trimming to world max height."); + short[] newLayer = new short[maxHeight]; + arraycopy(layer, 0, newLayer, 0, maxHeight); + layer = newLayer; + } + short[][] result = new short[maxHeight / 16][]; // 16x16x16 chunks + for (int i = 0; i < layer.length; i += 16) { + result[i >> 4] = new short[4096]; + for (int y = 0; y < Math.min(16, layer.length - i); y++) { + Arrays.fill(result[i >> 4], y * 16 * 16, (y + 1) * 16 * 16, layer[i + y]); + } + } - @Override - public List getDefaultPopulators(World world) - { - if (layerDataValues != null) - { - return Arrays.asList(new CleanroomBlockPopulator(layerDataValues)); - } - else - { - // This is the default, but just in case default populators change to stock minecraft populators by default... - return new ArrayList(); - } - } + return result; + } - @Override - public Location getFixedSpawnLocation(World world, Random random) - { - if (!world.isChunkLoaded(0, 0)) - { - world.loadChunk(0, 0); - } + @Override + public List getDefaultPopulators(World world) { + if (layerDataValues != null) { + return Arrays.asList(new CleanroomBlockPopulator(layerDataValues)); + } else { + // This is the default, but just in case default populators change to stock minecraft populators by default... + return new ArrayList(); + } + } - if ((world.getHighestBlockYAt(0, 0) <= 0) && (world.getBlockAt(0, 0, 0).getType() == Material.AIR)) // SPACE! - { - return new Location(world, 0, 64, 0); // Lets allow people to drop a little before hitting the void then shall we? - } + @Override + public Location getFixedSpawnLocation(World world, Random random) { + if (!world.isChunkLoaded(0, 0)) { + world.loadChunk(0, 0); + } - return new Location(world, 0, world.getHighestBlockYAt(0, 0), 0); - } + if ((world.getHighestBlockYAt(0, 0) <= 0) && (world.getBlockAt(0, 0, 0).getType() + == Material.AIR)) // SPACE! + { + return new Location(world, 0, 64, + 0); // Lets allow people to drop a little before hitting the void then shall we? + } + + return new Location(world, 0, world.getHighestBlockYAt(0, 0), 0); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CustomWorld.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CustomWorld.java index 749473e..70a56f1 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/CustomWorld.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/CustomWorld.java @@ -4,36 +4,29 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; -public abstract class CustomWorld -{ - private World world; +public abstract class CustomWorld { - protected abstract World generateWorld(); + private World world; - public void sendToWorld(Player player) - { - try - { - player.teleport(getWorld().getSpawnLocation()); - } - catch (Exception ex) - { - player.sendMessage(ex.getMessage()); - } - } + protected abstract World generateWorld(); - public final World getWorld() throws Exception - { - if (world == null || !Bukkit.getWorlds().contains(world)) - { - world = generateWorld(); - } + public void sendToWorld(Player player) { + try { + player.teleport(getWorld().getSpawnLocation()); + } catch (Exception ex) { + player.sendMessage(ex.getMessage()); + } + } - if (world == null) - { - throw new Exception("World not loaded."); - } + public final World getWorld() throws Exception { + if (world == null || !Bukkit.getWorlds().contains(world)) { + world = generateWorld(); + } - return world; - } + if (world == null) { + throw new Exception("World not loaded."); + } + + return world; + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/FlatlandsWorld.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/FlatlandsWorld.java index ac83a9b..3c54eac 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/FlatlandsWorld.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/FlatlandsWorld.java @@ -1,96 +1,89 @@ package me.StevenLawson.TotalFreedomMod.world; +import java.io.File; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; import me.StevenLawson.TotalFreedomMod.gamerule.GameRuleHandler; import me.StevenLawson.TotalFreedomMod.util.Utilities; import org.apache.commons.io.FileUtils; -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import java.io.File; +public class FlatlandsWorld extends CustomWorld { -public class FlatlandsWorld extends CustomWorld -{ - private static final String GENERATION_PARAMETERS = ConfigurationEntry.FLATLANDS_GENERATE_PARAMS.getString(); - private static final String WORLD_NAME = "flatlands"; + private static final String GENERATION_PARAMETERS = ConfigurationEntry.FLATLANDS_GENERATE_PARAMS.getString(); + private static final String WORLD_NAME = "flatlands"; - private FlatlandsWorld() - { - } + private FlatlandsWorld() { + } - @Override - protected World generateWorld() - { - if (!ConfigurationEntry.FLATLANDS_GENERATE.getBoolean()) - { - return null; - } + public static void wipeFlatlandsIfFlagged() { + boolean doFlatlandsWipe = false; + try { + doFlatlandsWipe = Utilities.getSavedFlag("do_wipe_flatlands"); + } catch (Exception ex) { + } - wipeFlatlandsIfFlagged(); + if (doFlatlandsWipe) { + if (Bukkit.getServer().getWorld("flatlands") == null) { + Log.info("Wiping flatlands."); + Utilities.setSavedFlag("do_wipe_flatlands", false); + FileUtils.deleteQuietly(new File("./flatlands")); + } else { + Log.severe("Can't wipe flatlands, it is already loaded."); + } + } + } - WorldCreator worldCreator = new WorldCreator(WORLD_NAME); - worldCreator.generateStructures(false); - worldCreator.type(WorldType.NORMAL); - worldCreator.environment(World.Environment.NORMAL); - worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS)); + public static FlatlandsWorld getInstance() { + return FlatlandsWorldHolder.INSTANCE; + } - World world = Bukkit.getServer().createWorld(worldCreator); + @Override + protected World generateWorld() { + if (!ConfigurationEntry.FLATLANDS_GENERATE.getBoolean()) { + return null; + } - world.setSpawnFlags(false, false); - world.setSpawnLocation(0, 50, 0); + wipeFlatlandsIfFlagged(); - Block welcomeSignBlock = world.getBlockAt(0, 50, 0); - welcomeSignBlock.setType(Material.SIGN_POST); - org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign) welcomeSignBlock.getState(); + WorldCreator worldCreator = new WorldCreator(WORLD_NAME); + worldCreator.generateStructures(false); + worldCreator.type(WorldType.NORMAL); + worldCreator.environment(World.Environment.NORMAL); + worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS)); - org.bukkit.material.Sign signData = (org.bukkit.material.Sign) welcomeSign.getData(); - signData.setFacingDirection(BlockFace.NORTH); + World world = Bukkit.getServer().createWorld(worldCreator); - welcomeSign.setLine(0, ChatColor.GREEN + "Flatlands"); - welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---"); - welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point"); - welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---"); - welcomeSign.update(); + world.setSpawnFlags(false, false); + world.setSpawnLocation(0, 50, 0); - GameRuleHandler.commitGameRules(); + Block welcomeSignBlock = world.getBlockAt(0, 50, 0); + welcomeSignBlock.setType(Material.SIGN_POST); + org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign) welcomeSignBlock.getState(); - return world; - } + org.bukkit.material.Sign signData = (org.bukkit.material.Sign) welcomeSign.getData(); + signData.setFacingDirection(BlockFace.NORTH); - public static void wipeFlatlandsIfFlagged() - { - boolean doFlatlandsWipe = false; - try - { - doFlatlandsWipe = Utilities.getSavedFlag("do_wipe_flatlands"); - } - catch (Exception ex) - { - } + welcomeSign.setLine(0, ChatColor.GREEN + "Flatlands"); + welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---"); + welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point"); + welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---"); + welcomeSign.update(); - if (doFlatlandsWipe) - { - if (Bukkit.getServer().getWorld("flatlands") == null) - { - Log.info("Wiping flatlands."); - Utilities.setSavedFlag("do_wipe_flatlands", false); - FileUtils.deleteQuietly(new File("./flatlands")); - } - else - { - Log.severe("Can't wipe flatlands, it is already loaded."); - } - } - } + GameRuleHandler.commitGameRules(); - public static FlatlandsWorld getInstance() - { - return FlatlandsWorldHolder.INSTANCE; - } + return world; + } - private static class FlatlandsWorldHolder { - private static final FlatlandsWorld INSTANCE = new FlatlandsWorld(); - } + private static class FlatlandsWorldHolder { + + private static final FlatlandsWorld INSTANCE = new FlatlandsWorld(); + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/ProtectedArea.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/ProtectedArea.java index c13dac2..2ce50d8 100644 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/ProtectedArea.java +++ b/src/main/java/me/StevenLawson/TotalFreedomMod/world/ProtectedArea.java @@ -1,5 +1,16 @@ package me.StevenLawson.TotalFreedomMod.world; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import me.StevenLawson.TotalFreedomMod.Log; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.config.ConfigurationEntry; @@ -8,319 +19,268 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.Vector; -import java.io.*; -import java.util.*; +public class ProtectedArea { -public class ProtectedArea -{ - public static final double MAX_RADIUS = 50.0; - private static final Map PROTECTED_AREAS = new HashMap(); + public static final double MAX_RADIUS = 50.0; + private static final Map PROTECTED_AREAS = new HashMap(); - private ProtectedArea() - { - throw new AssertionError(); - } + private ProtectedArea() { + throw new AssertionError(); + } - public static boolean isInProtectedArea(final Location modifyLocation) - { - boolean doSave = false; - boolean inProtectedArea = false; + public static boolean isInProtectedArea(final Location modifyLocation) { + boolean doSave = false; + boolean inProtectedArea = false; - final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet().iterator(); + final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet() + .iterator(); - while (it.hasNext()) - { - final SerializableProtectedRegion region = it.next().getValue(); + while (it.hasNext()) { + final SerializableProtectedRegion region = it.next().getValue(); - Location regionCenter = null; - try - { - regionCenter = region.getLocation(); - } - catch (SerializableProtectedRegion.CantFindWorldException ex) - { - it.remove(); - doSave = true; - continue; - } + Location regionCenter = null; + try { + regionCenter = region.getLocation(); + } catch (SerializableProtectedRegion.CantFindWorldException ex) { + it.remove(); + doSave = true; + continue; + } - if (regionCenter != null) - { - if (modifyLocation.getWorld() == regionCenter.getWorld()) - { - final double regionRadius = region.getRadius(); - if (modifyLocation.distanceSquared(regionCenter) <= (regionRadius * regionRadius)) - { - inProtectedArea = true; - break; - } - } - } - } + if (regionCenter != null) { + if (modifyLocation.getWorld() == regionCenter.getWorld()) { + final double regionRadius = region.getRadius(); + if (modifyLocation.distanceSquared(regionCenter) <= (regionRadius + * regionRadius)) { + inProtectedArea = true; + break; + } + } + } + } - if (doSave) - { - save(); - } + if (doSave) { + save(); + } - return inProtectedArea; - } + return inProtectedArea; + } - public static boolean isInProtectedArea(final Vector min, final Vector max, final String worldName) - { - boolean doSave = false; - boolean inProtectedArea = false; + public static boolean isInProtectedArea(final Vector min, final Vector max, + final String worldName) { + boolean doSave = false; + boolean inProtectedArea = false; - final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet().iterator(); + final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet() + .iterator(); - while (it.hasNext()) - { - final SerializableProtectedRegion region = it.next().getValue(); + while (it.hasNext()) { + final SerializableProtectedRegion region = it.next().getValue(); - Location regionCenter = null; - try - { - regionCenter = region.getLocation(); - } - catch (SerializableProtectedRegion.CantFindWorldException ex) - { - it.remove(); - doSave = true; - continue; - } + Location regionCenter = null; + try { + regionCenter = region.getLocation(); + } catch (SerializableProtectedRegion.CantFindWorldException ex) { + it.remove(); + doSave = true; + continue; + } - if (regionCenter != null) - { - if (worldName.equals(regionCenter.getWorld().getName())) - { - if (cubeIntersectsSphere(min, max, regionCenter.toVector(), region.getRadius())) - { - inProtectedArea = true; - break; - } - } - } - } + if (regionCenter != null) { + if (worldName.equals(regionCenter.getWorld().getName())) { + if (cubeIntersectsSphere(min, max, regionCenter.toVector(), + region.getRadius())) { + inProtectedArea = true; + break; + } + } + } + } - if (doSave) - { - save(); - } + if (doSave) { + save(); + } - return inProtectedArea; - } + return inProtectedArea; + } - private static boolean cubeIntersectsSphere(Vector min, Vector max, Vector sphere, double radius) - { - double d = square(radius); + private static boolean cubeIntersectsSphere(Vector min, Vector max, Vector sphere, + double radius) { + double d = square(radius); - if (sphere.getX() < min.getX()) - { - d -= square(sphere.getX() - min.getX()); - } - else if (sphere.getX() > max.getX()) - { - d -= square(sphere.getX() - max.getX()); - } - if (sphere.getY() < min.getY()) - { - d -= square(sphere.getY() - min.getY()); - } - else if (sphere.getY() > max.getY()) - { - d -= square(sphere.getY() - max.getY()); - } - if (sphere.getZ() < min.getZ()) - { - d -= square(sphere.getZ() - min.getZ()); - } - else if (sphere.getZ() > max.getZ()) - { - d -= square(sphere.getZ() - max.getZ()); - } + if (sphere.getX() < min.getX()) { + d -= square(sphere.getX() - min.getX()); + } else if (sphere.getX() > max.getX()) { + d -= square(sphere.getX() - max.getX()); + } + if (sphere.getY() < min.getY()) { + d -= square(sphere.getY() - min.getY()); + } else if (sphere.getY() > max.getY()) { + d -= square(sphere.getY() - max.getY()); + } + if (sphere.getZ() < min.getZ()) { + d -= square(sphere.getZ() - min.getZ()); + } else if (sphere.getZ() > max.getZ()) { + d -= square(sphere.getZ() - max.getZ()); + } - return d > 0; - } + return d > 0; + } - private static double square(double v) - { - return v * v; - } + private static double square(double v) { + return v * v; + } - public static void addProtectedArea(String label, Location location, double radius) - { - ProtectedArea.PROTECTED_AREAS.put(label.toLowerCase(), new SerializableProtectedRegion(location, radius)); - save(); - } + public static void addProtectedArea(String label, Location location, double radius) { + ProtectedArea.PROTECTED_AREAS.put(label.toLowerCase(), + new SerializableProtectedRegion(location, radius)); + save(); + } - public static void removeProtectedArea(String label) - { - ProtectedArea.PROTECTED_AREAS.remove(label.toLowerCase()); - save(); - } + public static void removeProtectedArea(String label) { + ProtectedArea.PROTECTED_AREAS.remove(label.toLowerCase()); + save(); + } - public static void clearProtectedAreas() - { - clearProtectedAreas(true); - } + public static void clearProtectedAreas() { + clearProtectedAreas(true); + } - public static void clearProtectedAreas(boolean createSpawnpointProtectedAreas) - { - ProtectedArea.PROTECTED_AREAS.clear(); + public static void clearProtectedAreas(boolean createSpawnpointProtectedAreas) { + ProtectedArea.PROTECTED_AREAS.clear(); - if (createSpawnpointProtectedAreas) - { - autoAddSpawnpoints(); - } + if (createSpawnpointProtectedAreas) { + autoAddSpawnpoints(); + } - save(); - } + save(); + } - public static void cleanProtectedAreas() - { - boolean doSave = false; + public static void cleanProtectedAreas() { + boolean doSave = false; - final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet().iterator(); + final Iterator> it = ProtectedArea.PROTECTED_AREAS.entrySet() + .iterator(); - while (it.hasNext()) - { - try - { - it.next().getValue().getLocation(); - } - catch (SerializableProtectedRegion.CantFindWorldException ex) - { - it.remove(); - doSave = true; - } - } + while (it.hasNext()) { + try { + it.next().getValue().getLocation(); + } catch (SerializableProtectedRegion.CantFindWorldException ex) { + it.remove(); + doSave = true; + } + } - if (doSave) - { - save(); - } - } + if (doSave) { + save(); + } + } - public static Set getProtectedAreaLabels() - { - return ProtectedArea.PROTECTED_AREAS.keySet(); - } + public static Set getProtectedAreaLabels() { + return ProtectedArea.PROTECTED_AREAS.keySet(); + } - public static void save() - { - try - { - FileOutputStream fos = new FileOutputStream(new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PROTECTED_AREA_FILENAME)); - ObjectOutputStream oos = new ObjectOutputStream(fos); - oos.writeObject(ProtectedArea.PROTECTED_AREAS); - oos.close(); - fos.close(); - } - catch (Exception ex) - { - Log.severe(ex); - } - } + public static void save() { + try { + FileOutputStream fos = new FileOutputStream( + new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.PROTECTED_AREA_FILENAME)); + ObjectOutputStream oos = new ObjectOutputStream(fos); + oos.writeObject(ProtectedArea.PROTECTED_AREAS); + oos.close(); + fos.close(); + } catch (Exception ex) { + Log.severe(ex); + } + } - @SuppressWarnings("unchecked") - public static void load() - { - if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) - { - return; - } + @SuppressWarnings("unchecked") + public static void load() { + if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { + return; + } - File input = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.PROTECTED_AREA_FILENAME); - try - { - if (input.exists()) - { - FileInputStream fis = new FileInputStream(input); - ObjectInputStream ois = new ObjectInputStream(fis); - ProtectedArea.PROTECTED_AREAS.clear(); - ProtectedArea.PROTECTED_AREAS.putAll((HashMap) ois.readObject()); - ois.close(); - fis.close(); - } - } - catch (Exception ex) - { - input.delete(); - Log.severe(ex); - } + File input = new File(TotalFreedomMod.plugin.getDataFolder(), + TotalFreedomMod.PROTECTED_AREA_FILENAME); + try { + if (input.exists()) { + FileInputStream fis = new FileInputStream(input); + ObjectInputStream ois = new ObjectInputStream(fis); + ProtectedArea.PROTECTED_AREAS.clear(); + ProtectedArea.PROTECTED_AREAS.putAll( + (HashMap) ois.readObject()); + ois.close(); + fis.close(); + } + } catch (Exception ex) { + input.delete(); + Log.severe(ex); + } - cleanProtectedAreas(); - } + cleanProtectedAreas(); + } - public static void autoAddSpawnpoints() - { - if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) - { - return; - } + public static void autoAddSpawnpoints() { + if (!ConfigurationEntry.PROTECTAREA_ENABLED.getBoolean()) { + return; + } - if (ConfigurationEntry.PROTECTAREA_SPAWNPOINTS.getBoolean()) - { - for (World world : Bukkit.getWorlds()) - { - ProtectedArea.addProtectedArea("spawn_" + world.getName(), world.getSpawnLocation(), ConfigurationEntry.PROTECTAREA_RADIUS.getDouble()); - } - } - } + if (ConfigurationEntry.PROTECTAREA_SPAWNPOINTS.getBoolean()) { + for (World world : Bukkit.getWorlds()) { + ProtectedArea.addProtectedArea("spawn_" + world.getName(), world.getSpawnLocation(), + ConfigurationEntry.PROTECTAREA_RADIUS.getDouble()); + } + } + } - public static class SerializableProtectedRegion implements Serializable - { - private final double x, y, z; - private final double radius; - private final String worldName; - private final UUID worldUUID; - private transient Location location = null; + public static class SerializableProtectedRegion implements Serializable { - public SerializableProtectedRegion(final Location location, final double radius) - { - this.x = location.getX(); - this.y = location.getY(); - this.z = location.getZ(); - this.radius = radius; - this.worldName = location.getWorld().getName(); - this.worldUUID = location.getWorld().getUID(); - this.location = location; - } + private final double x, y, z; + private final double radius; + private final String worldName; + private final UUID worldUUID; + private transient Location location = null; - public Location getLocation() throws CantFindWorldException - { - if (this.location == null) - { - World world = Bukkit.getWorld(this.worldUUID); + public SerializableProtectedRegion(final Location location, final double radius) { + this.x = location.getX(); + this.y = location.getY(); + this.z = location.getZ(); + this.radius = radius; + this.worldName = location.getWorld().getName(); + this.worldUUID = location.getWorld().getUID(); + this.location = location; + } - if (world == null) - { - world = Bukkit.getWorld(this.worldName); - } + public Location getLocation() throws CantFindWorldException { + if (this.location == null) { + World world = Bukkit.getWorld(this.worldUUID); - if (world == null) - { - throw new CantFindWorldException("Can't find world " + this.worldName + ", UUID: " + this.worldUUID.toString()); - } + if (world == null) { + world = Bukkit.getWorld(this.worldName); + } - location = new Location(world, x, y, z); - } - return this.location; - } + if (world == null) { + throw new CantFindWorldException( + "Can't find world " + this.worldName + ", UUID: " + + this.worldUUID.toString()); + } - public double getRadius() - { - return radius; - } + location = new Location(world, x, y, z); + } + return this.location; + } - public static class CantFindWorldException extends Exception - { - private static final long serialVersionUID = 1L; + public double getRadius() { + return radius; + } - public CantFindWorldException(String string) - { - super(string); - } - } - } + public static class CantFindWorldException extends Exception { + + private static final long serialVersionUID = 1L; + + public CantFindWorldException(String string) { + super(string); + } + } + } } diff --git a/src/main/java/me/StevenLawson/TotalFreedomMod/world/RollbackManager.java b/src/main/java/me/StevenLawson/TotalFreedomMod/world/RollbackManager.java deleted file mode 100644 index 48fb097..0000000 --- a/src/main/java/me/StevenLawson/TotalFreedomMod/world/RollbackManager.java +++ /dev/null @@ -1,316 +0,0 @@ -package me.StevenLawson.TotalFreedomMod.world; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; - -import me.StevenLawson.TotalFreedomMod.Log; -import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; -import me.StevenLawson.TotalFreedomMod.util.DeprecationUtil; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -public class RollbackManager -{ - private static final Map> PLAYER_HISTORY = new HashMap>(); - private static final List REMOVE_ROLLBACK_HISTORY = new ArrayList(); - - private RollbackManager() - { - throw new AssertionError(); - } - - public static void blockPlace(org.bukkit.event.block.BlockPlaceEvent event) - { - storeEntry(event.getPlayer(), new RollbackEntry(event.getPlayer().getName(), event.getBlock(), EntryType.BLOCK_PLACE)); - } - - public static void blockBreak(org.bukkit.event.block.BlockBreakEvent event) - { - storeEntry(event.getPlayer(), new RollbackEntry(event.getPlayer().getName(), event.getBlock(), EntryType.BLOCK_BREAK)); - } - - private static void storeEntry(Player player, RollbackEntry entry) - { - List playerEntryList = getEntriesByPlayer(player.getName()); - - if (playerEntryList != null) - { - playerEntryList.add(0, entry); - } - } - - // May return null - public static String findPlayer(String partial) - { - partial = partial.toLowerCase(); - - for (String player : PLAYER_HISTORY.keySet()) - { - if (player.toLowerCase().equals(partial)) - { - return player; - } - } - - for (String player : PLAYER_HISTORY.keySet()) - { - if (player.toLowerCase().contains(partial)) - { - return player; - } - } - - return null; - } - - public static int purgeEntries() - { - Iterator> it = PLAYER_HISTORY.values().iterator(); - while (it.hasNext()) - { - List playerEntryList = it.next(); - if (playerEntryList != null) - { - playerEntryList.clear(); - } - } - return PLAYER_HISTORY.size(); - } - - public static int purgeEntries(String playerName) - { - List playerEntryList = getEntriesByPlayer(playerName); - - if (playerEntryList == null) - { - return 0; - } - - int count = playerEntryList.size(); - playerEntryList.clear(); - return count; - - } - - public static boolean canRollback(String playerName) - { - return PLAYER_HISTORY.containsKey(playerName.toLowerCase()) && !PLAYER_HISTORY.get(playerName.toLowerCase()).isEmpty(); - } - - public static boolean canUndoRollback(String playerName) - { - return REMOVE_ROLLBACK_HISTORY.contains(playerName.toLowerCase()); - } - - public static int rollback(final String playerName) - { - final List entries = getEntriesByPlayer(playerName); - if (entries == null) - { - return 0; - } - - int count = entries.size(); - for (RollbackEntry entry : entries) - { - if (entry != null) - { - entry.restore(); - } - } - - if (!REMOVE_ROLLBACK_HISTORY.contains(playerName.toLowerCase())) - { - REMOVE_ROLLBACK_HISTORY.add(playerName.toLowerCase()); - } - - new BukkitRunnable() - { - @Override - public void run() - { - if (REMOVE_ROLLBACK_HISTORY.contains(playerName.toLowerCase())) - { - REMOVE_ROLLBACK_HISTORY.remove(playerName.toLowerCase()); - purgeEntries(playerName); - } - } - }.runTaskLater(TotalFreedomMod.plugin, 40L * 20L); - return count; - } - - public static int undoRollback(String playerName) - { - final List entries = getEntriesByPlayer(playerName); - - if (entries == null) - { - return 0; - } - - final int count = entries.size(); - - final ListIterator it = entries.listIterator(count); - while (it.hasPrevious()) - { - RollbackEntry entry = it.previous(); - if (entry != null) - { - entry.redo(); - } - } - - REMOVE_ROLLBACK_HISTORY.remove(playerName.toLowerCase()); - - return count; - } - - public static List getEntriesAtLocation(final Location location) - { - final int testX = location.getBlockX(); - final short testY = (short) location.getBlockY(); - final int testZ = location.getBlockZ(); - final String testWorldName = location.getWorld().getName(); - - List entries = new ArrayList(); - for (String playername : PLAYER_HISTORY.keySet()) - { - for (RollbackEntry entry : PLAYER_HISTORY.get(playername.toLowerCase())) - { - if (testX == entry.x && testY == entry.y && testZ == entry.z && testWorldName.equals(entry.worldName)) - { - entries.add(0, entry); - } - } - } - - return entries; - } - - private static List getEntriesByPlayer(String playerName) - { - playerName = playerName.toLowerCase(); - List playerEntryList = PLAYER_HISTORY.get(playerName.toLowerCase()); - if (playerEntryList == null) - { - playerEntryList = new ArrayList(); - PLAYER_HISTORY.put(playerName.toLowerCase(), playerEntryList); - } - return playerEntryList; - } - - public enum EntryType - { - BLOCK_PLACE("placed"), - BLOCK_BREAK("broke"); - private final String action; - - EntryType(String action) - { - this.action = action; - } - - @Override - public String toString() - { - return this.action; - } - } - - public static class RollbackEntry - { - // Use of primitives to decrease overhead - public final String author; - public final String worldName; - public final int x; - public final short y; - public final int z; - public final byte data; - public final Material blockMaterial; - private final boolean isBreak; - - private RollbackEntry(String author, Block block, EntryType entryType) - { - final Location location = block.getLocation(); - - this.x = location.getBlockX(); - this.y = (short) location.getBlockY(); - this.z = location.getBlockZ(); - this.worldName = location.getWorld().getName(); - this.author = author; - - if (entryType == EntryType.BLOCK_BREAK) - { - this.blockMaterial = block.getType(); - this.data = DeprecationUtil.getData_Block(block); - this.isBreak = true; - } - else - { - this.blockMaterial = block.getType(); - this.data = DeprecationUtil.getData_Block(block); - this.isBreak = false; - } - } - - public Location getLocation() - { - try - { - return new Location(Bukkit.getWorld(worldName), x, (int) y, z); - } - catch (Exception ex) - { - Log.warning("Could not get location of rollback entry at (" + worldName + ":" + x + "," + y + "," + x + ")!"); - } - return null; - } - - public Material getMaterial() - { - return blockMaterial; - } - - public EntryType getType() - { - return (isBreak ? EntryType.BLOCK_BREAK : EntryType.BLOCK_PLACE); - } - - public void restore() - { - final Block block = Bukkit.getWorld(worldName).getBlockAt(x, y, z); - if (isBreak) - { - block.setType(getMaterial()); - DeprecationUtil.setData_Block(block, data); - } - else - { - block.setType(Material.AIR); - } - } - - public void redo() - { - final Block block = Bukkit.getWorld(worldName).getBlockAt(x, y, z); - - if (isBreak) - { - block.setType(Material.AIR); - } - else - { - block.setType(getMaterial()); - DeprecationUtil.setData_Block(block, data); - } - } - } -} diff --git a/src/main/java/me/husky/Database.java b/src/main/java/me/husky/Database.java index 311022b..cb39c48 100644 --- a/src/main/java/me/husky/Database.java +++ b/src/main/java/me/husky/Database.java @@ -4,53 +4,50 @@ import java.sql.Connection; import org.bukkit.plugin.Plugin; /** - * Abstract Database class, serves as a base for any connection method (MySQL, - * SQLite, etc.) + * Abstract Database class, serves as a base for any connection method (MySQL, SQLite, etc.) * * @author -_Husky_- * @author tips48 */ -public abstract class Database -{ +public abstract class Database { - /** - * Plugin instance, use for plugin.getDataFolder() and plugin.getLogger() - */ - protected Plugin plugin; + /** + * Plugin instance, use for plugin.getDataFolder() and plugin.getLogger() + */ + protected Plugin plugin; - /** - * Creates a new Database - * - * @param plugin Plugin instance - */ - protected Database(Plugin plugin) - { - this.plugin = plugin; - } + /** + * Creates a new Database + * + * @param plugin Plugin instance + */ + protected Database(Plugin plugin) { + this.plugin = plugin; + } - /** - * Opens a connection with the database - * - * @return Connection opened - */ - public abstract Connection openConnection(); + /** + * Opens a connection with the database + * + * @return Connection opened + */ + public abstract Connection openConnection(); - /** - * Checks if a connection is open with the database - * - * @return true if a connection is open - */ - public abstract boolean checkConnection(); + /** + * Checks if a connection is open with the database + * + * @return true if a connection is open + */ + public abstract boolean checkConnection(); - /** - * Gets the connection with the database - * - * @return Connection with the database, null if none - */ - public abstract Connection getConnection(); + /** + * Gets the connection with the database + * + * @return Connection with the database, null if none + */ + public abstract Connection getConnection(); - /** - * Closes the connection with the database - */ - public abstract void closeConnection(); + /** + * Closes the connection with the database + */ + public abstract void closeConnection(); } diff --git a/src/main/java/me/husky/mysql/MySQL.java b/src/main/java/me/husky/mysql/MySQL.java index b798801..7445914 100644 --- a/src/main/java/me/husky/mysql/MySQL.java +++ b/src/main/java/me/husky/mysql/MySQL.java @@ -15,154 +15,126 @@ import org.bukkit.plugin.Plugin; * @author -_Husky_- * @author tips48 */ -public class MySQL extends Database -{ +public class MySQL extends Database { - private final String user; - private final String database; - private final String password; - private final String port; - private final String hostname; + private final String user; + private final String database; + private final String password; + private final String port; + private final String hostname; - private Connection connection; + private Connection connection; - /** - * Creates a new MySQL instance - * - * @param plugin Plugin instance - * @param hostname Name of the host - * @param port Port number - * @param database Database name - * @param username Username - * @param password Password - */ - public MySQL(Plugin plugin, String hostname, String port, String database, String username, String password) - { - super(plugin); - this.hostname = hostname; - this.port = port; - this.database = database; - this.user = username; - this.password = password; - this.connection = null; - } + /** + * Creates a new MySQL instance + * + * @param plugin Plugin instance + * @param hostname Name of the host + * @param port Port number + * @param database Database name + * @param username Username + * @param password Password + */ + public MySQL(Plugin plugin, String hostname, String port, String database, String username, + String password) { + super(plugin); + this.hostname = hostname; + this.port = port; + this.database = database; + this.user = username; + this.password = password; + this.connection = null; + } - @Override - public Connection openConnection() - { - try - { - Class.forName("com.mysql.jdbc.Driver"); - connection = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); - } - catch (SQLException e) - { - plugin.getLogger().log(Level.SEVERE, "Could not connect to MySQL server! because: " + e.getMessage()); - } - catch (ClassNotFoundException e) - { - plugin.getLogger().log(Level.SEVERE, "JDBC Driver not found!"); - } - return connection; - } + @Override + public Connection openConnection() { + try { + Class.forName("com.mysql.jdbc.Driver"); + connection = DriverManager.getConnection( + "jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, + this.password); + } catch (SQLException e) { + plugin.getLogger() + .log(Level.SEVERE, "Could not connect to MySQL server! because: " + e.getMessage()); + } catch (ClassNotFoundException e) { + plugin.getLogger().log(Level.SEVERE, "JDBC Driver not found!"); + } + return connection; + } - @Override - public boolean checkConnection() - { - return connection != null; - } + @Override + public boolean checkConnection() { + return connection != null; + } - @Override - public Connection getConnection() - { - return connection; - } + @Override + public Connection getConnection() { + return connection; + } - @Override - public void closeConnection() - { - if (connection != null) - { - try - { - connection.close(); - } - catch (SQLException e) - { - plugin.getLogger().log(Level.SEVERE, "Error closing the MySQL Connection!"); - e.printStackTrace(); - } - } - } + @Override + public void closeConnection() { + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + plugin.getLogger().log(Level.SEVERE, "Error closing the MySQL Connection!"); + e.printStackTrace(); + } + } + } - public ResultSet querySQL(String query) - { - Connection c = null; + public ResultSet querySQL(String query) { + Connection c = null; - if (checkConnection()) - { - c = getConnection(); - } - else - { - c = openConnection(); - } + if (checkConnection()) { + c = getConnection(); + } else { + c = openConnection(); + } - Statement s = null; + Statement s = null; - try - { - s = c.createStatement(); - } - catch (SQLException e1) - { - e1.printStackTrace(); - } + try { + s = c.createStatement(); + } catch (SQLException e1) { + e1.printStackTrace(); + } - ResultSet ret = null; + ResultSet ret = null; - try - { - ret = s.executeQuery(query); - } - catch (SQLException e) - { - e.printStackTrace(); - } + try { + ret = s.executeQuery(query); + } catch (SQLException e) { + e.printStackTrace(); + } - closeConnection(); + closeConnection(); - return ret; - } + return ret; + } - public void updateSQL(String update) - { + public void updateSQL(String update) { - Connection c = null; + Connection c = null; - if (checkConnection()) - { - c = getConnection(); - } - else - { - c = openConnection(); - } + if (checkConnection()) { + c = getConnection(); + } else { + c = openConnection(); + } - Statement s = null; + Statement s = null; - try - { - s = c.createStatement(); - s.executeUpdate(update); - } - catch (SQLException e1) - { - e1.printStackTrace(); - } + try { + s = c.createStatement(); + s.executeUpdate(update); + } catch (SQLException e1) { + e1.printStackTrace(); + } - closeConnection(); + closeConnection(); - } + } } diff --git a/src/main/java/me/husky/sqlite/SQLite.java b/src/main/java/me/husky/sqlite/SQLite.java index 7d7c6fa..81bb85b 100644 --- a/src/main/java/me/husky/sqlite/SQLite.java +++ b/src/main/java/me/husky/sqlite/SQLite.java @@ -14,92 +14,72 @@ import org.bukkit.plugin.Plugin; * * @author tips48 */ -public class SQLite extends Database -{ +public class SQLite extends Database { - private final String dbLocation; + private final String dbLocation; - private Connection connection; + private Connection connection; - /** - * Creates a new SQLite instance - * - * @param plugin Plugin instance - * @param dbLocation Location of the Database (Must end in .db) - */ - public SQLite(Plugin plugin, String dbLocation) - { - super(plugin); - this.dbLocation = dbLocation; - this.connection = null; - } + /** + * Creates a new SQLite instance + * + * @param plugin Plugin instance + * @param dbLocation Location of the Database (Must end in .db) + */ + public SQLite(Plugin plugin, String dbLocation) { + super(plugin); + this.dbLocation = dbLocation; + this.connection = null; + } - @Override - public Connection openConnection() - { - File file = new File(dbLocation); - if (!(file.exists())) - { - try - { - file.createNewFile(); - } - catch (IOException e) - { - plugin.getLogger().log(Level.SEVERE, "Unable to create database!"); - } - } - try - { - Class.forName("org.sqlite.JDBC"); - connection = DriverManager.getConnection("jdbc:sqlite:" + plugin.getDataFolder().toPath() + "/" + dbLocation); - } - catch (SQLException e) - { - plugin.getLogger().log(Level.SEVERE, "Could not connect to SQLite server! because: " + e.getMessage()); - } - catch (ClassNotFoundException e) - { - plugin.getLogger().log(Level.SEVERE, "JDBC Driver not found!"); - } - return connection; - } + @Override + public Connection openConnection() { + File file = new File(dbLocation); + if (!(file.exists())) { + try { + file.createNewFile(); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, "Unable to create database!"); + } + } + try { + Class.forName("org.sqlite.JDBC"); + connection = DriverManager.getConnection( + "jdbc:sqlite:" + plugin.getDataFolder().toPath() + "/" + dbLocation); + } catch (SQLException e) { + plugin.getLogger().log(Level.SEVERE, + "Could not connect to SQLite server! because: " + e.getMessage()); + } catch (ClassNotFoundException e) { + plugin.getLogger().log(Level.SEVERE, "JDBC Driver not found!"); + } + return connection; + } - @Override - public boolean checkConnection() - { - try - { - return connection != null && !connection.isClosed(); - } - catch (SQLException e) - { - e.printStackTrace(); - return false; - } - } + @Override + public boolean checkConnection() { + try { + return connection != null && !connection.isClosed(); + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + } - @Override - public Connection getConnection() - { - return connection; - } + @Override + public Connection getConnection() { + return connection; + } - @Override - public void closeConnection() - { - if (connection != null) - { - try - { - connection.close(); - } - catch (SQLException e) - { - plugin.getLogger().log(Level.SEVERE, "Error closing the SQLite Connection!"); - e.printStackTrace(); - } - } - } + @Override + public void closeConnection() { + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + plugin.getLogger().log(Level.SEVERE, "Error closing the SQLite Connection!"); + e.printStackTrace(); + } + } + } } diff --git a/src/main/resources/permban.yml b/src/main/resources/permban.yml index 3853cec..ae17613 100644 --- a/src/main/resources/permban.yml +++ b/src/main/resources/permban.yml @@ -3,8 +3,8 @@ # badplayer1: - - 123.123.123.123 - - 321.321.321.321 + - 123.123.123.123 + - 321.321.321.321 badplayer2: - - 111.111.111.111 -badplayer3: [] + - 111.111.111.111 +badplayer3: [ ] diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 394ebe9..564edac 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,8 +2,8 @@ name: TotalFreedomMod main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod version: 4.3 description: Plugin for the Total Freedom server. -softdepend: [BukkitTelnet, WorldEdit, Essentials] -authors: [Madgeek1450, Prozza, business-goose, Luna] +softdepend: [ BukkitTelnet, WorldEdit, Essentials ] +authors: [ Madgeek1450, Prozza, business-goose, Luna ] commands: setl: @@ -21,7 +21,7 @@ commands: jumppads: description: 'Manage jumppads' usage: '/ | strength >' - aliases: [launchpads, jp] + aliases: [ launchpads, jp ] qop: description: 'Quick Op - op someone based on a partial name.' usage: '/ ' @@ -140,7 +140,7 @@ commands: localspawn: description: 'Teleport to the spawn point for the current world.' usage: '/' - aliases: [worldspawn, gotospawn] + aliases: [ worldspawn, gotospawn ] tag: description: 'Sets yourself a prefix' usage: '/ | off | clear | clearall>' @@ -181,8 +181,8 @@ commands: usage: 'access' aliases: 'ov' uuid: - description: 'Provides uuid tools' - usage: '/ ' + description: 'Calculate yourself or someone else''s UUID' + usage: '/ ' logs: description: 'Register your connection with the TFM logviewer.' usage: '/ [off]' @@ -233,7 +233,7 @@ commands: blockcmd: description: 'Block all commands for a specific player.' usage: '/ >' - aliases: [blockcommands, blockcommand] + aliases: [ blockcommands, blockcommand ] tfbanlist: description: 'Shows all banned player names. Superadmins may optionally use ''purge'' to clear the list.' usage: '/ [purge]' @@ -276,7 +276,7 @@ commands: updatetfm: description: 'For developers only - update TFM.' usage: '/' - aliases: [tfmupdate, update, compiletfm, tfmcompile, build, buildtfm, tfmbuild] + aliases: [ tfmupdate, update, compiletfm, tfmcompile, build, buildtfm, tfmbuild ] lockup: description: 'Block target''s minecraft input. This is evil, and I never should have wrote it.' usage: '/ on | off>>' @@ -287,10 +287,6 @@ commands: description: 'Mutes a player with brute force.' usage: '/ [ [-s] | list | purge | all]' aliases: 'mute' - rollback: - description: 'Issues a rollback on a player' - usage: '/ <[partialname] | undo [partialname] purge [partialname] | purgeall>' - aliases: 'rb' nickclean: description: 'Essentials Interface Command - Remove distracting things from nicknames of all players on server.' usage: '/' @@ -335,6 +331,10 @@ commands: description: 'Who am I? Who are you? What am I doing here?' usage: '/' resetplayer: - aliases: ["resetplayerdata"] + aliases: [ "resetplayerdata" ] description: 'Reset a player''s data.' - usage: '/command ' \ No newline at end of file + usage: '/ ' + vanish: + aliases: [ 'v', 'uv', 'unvanish' ] + description: 'Hide yourself from other players.' + usage: '/ [-s]' \ No newline at end of file diff --git a/src/main/resources/superadmin.yml b/src/main/resources/superadmin.yml index 0dff25e..b03fa74 100644 --- a/src/main/resources/superadmin.yml +++ b/src/main/resources/superadmin.yml @@ -12,9 +12,9 @@ admins: is_senior_admin: true is_telnet_admin: true ips: - - 123.456.789.012 + - 123.456.789.012 console_aliases: - - example + - example last_login: Thu, 1 Jan 1970 00:00:00 +0000 custom_login_message: the &5example&b! # 1156a81a-23fb-435e-9aff-fe9c2ea7e82d: