diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml index b37e8838..ce5b0bae 100644 --- a/nbproject/build-impl.xml +++ b/nbproject/build-impl.xml @@ -134,9 +134,7 @@ is divided into following sections: - - - + @@ -229,7 +227,6 @@ is divided into following sections: Must set src.dir - Must set test.src.dir Must set build.dir Must set dist.dir Must set build.classes.dir @@ -403,11 +400,7 @@ is divided into following sections: - - - - - + @@ -432,11 +425,7 @@ is divided into following sections: - - - - - + @@ -544,11 +533,7 @@ is divided into following sections: - - - - - + @@ -1231,13 +1216,11 @@ is divided into following sections: - + - - - - + + @@ -1251,10 +1234,8 @@ is divided into following sections: Must select some files in the IDE or set javac.includes - - - - + + @@ -1397,4 +1378,4 @@ is divided into following sections: - + \ No newline at end of file diff --git a/nbproject/project.properties b/nbproject/project.properties index 276473c3..08662639 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -82,4 +82,3 @@ run.test.classpath=\ ${build.test.classes.dir} source.encoding=UTF-8 src.dir=src -test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml index 1f0261bf..b1406fe3 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -7,9 +7,7 @@ - - - + diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_health.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_health.java new file mode 100644 index 00000000..c7ac02dd --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_health.java @@ -0,0 +1,56 @@ +package me.StevenLawson.TotalFreedomMod.Commands; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Map; +import me.StevenLawson.TotalFreedomMod.TFM_Log; +import me.StevenLawson.TotalFreedomMod.TFM_TickMeter; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import org.apache.commons.lang.exception.ExceptionUtils; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + + +@CommandPermissions(level = ADMIN_LEVEL.SUPER, source = SOURCE_TYPE_ALLOWED.BOTH, ignore_permissions = false) +public class Command_health extends TFM_Command +{ + @Override + public boolean run(final CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + Runnable task; + task = new Runnable() // async + { + @Override + public void run() + { + try + { + TFM_TickMeter meter = new TFM_TickMeter(plugin); + meter.startTicking(); + Thread.sleep(1000); // ticks per second + meter.stopTicking(); + + Runtime runtime = Runtime.getRuntime(); + int mb = 1048576; // 1024 * 1024 + + float usedMem = runtime.totalMemory() - runtime.freeMemory(); + + TFM_Util.playerMsg(sender, "Reserved Memory: " + runtime.totalMemory() / mb + "mb"); + TFM_Util.playerMsg(sender, "Used Memory: " + new DecimalFormat("#").format(usedMem / mb) + "mb (" + new DecimalFormat("#").format(usedMem/runtime.totalMemory()*100) + "%)"); + TFM_Util.playerMsg(sender, "Max Memory: " + runtime.maxMemory() / mb + "mb"); + TFM_Util.playerMsg(sender, "Ticks per second: " + (meter.getTicks() == 20 ? ChatColor.GREEN : ChatColor.RED) + meter.getTicks()); + } + catch (Exception iex) + { + TFM_Log.warning("Exception in TFM_TickMeter: Thread was interupted in sleeping process."); + TFM_Log.warning(ExceptionUtils.getStackTrace(iex)); + } + } + }; + new Thread(task, "TickMeter").start(); + return true; + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_lastcmd.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_lastcmd.java new file mode 100644 index 00000000..819a68c0 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_lastcmd.java @@ -0,0 +1,46 @@ +package me.StevenLawson.TotalFreedomMod.Commands; + +import me.StevenLawson.TotalFreedomMod.TFM_UserInfo; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = ADMIN_LEVEL.SUPER, source = SOURCE_TYPE_ALLOWED.BOTH, ignore_permissions = false) +public class Command_lastcmd extends TFM_Command +{ + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (args.length == 0) + { + return false; + } + + Player p; + try + { + p = getPlayer(args[0]); + } + catch (CantFindPlayerException ex) + { + sender.sendMessage(ex.getMessage()); + return true; + } + + TFM_UserInfo playerdata = TFM_UserInfo.getPlayerData(p); + + if (playerdata != null) + { + String last_command = playerdata.getLastCommand(); + if (last_command.isEmpty()) + { + last_command = "(none)"; + } + TFM_Util.playerMsg(sender, p.getName() + " - Last Command: " + last_command, ChatColor.GRAY); + } + + return true; + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfupdate.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfupdate.java new file mode 100644 index 00000000..e3af55e4 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_tfupdate.java @@ -0,0 +1,67 @@ +package me.StevenLawson.TotalFreedomMod.Commands; + +import java.io.File; +import me.StevenLawson.TotalFreedomMod.TFM_Log; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = ADMIN_LEVEL.SENIOR, source = SOURCE_TYPE_ALLOWED.ONLY_CONSOLE, block_host_console = true, ignore_permissions = false) +public class Command_tfupdate extends TFM_Command +{ + public static final String[] FILES = + { + "http://s3.madgeekonline.com/totalfreedom/BukkitHttpd.jar", + "http://s3.madgeekonline.com/totalfreedom/BukkitTelnet.jar", + "http://s3.madgeekonline.com/totalfreedom/Essentials.jar", + "http://s3.madgeekonline.com/totalfreedom/EssentialsSpawn.jar", + "http://s3.madgeekonline.com/totalfreedom/TotalFreedomMod.jar", + "http://s3.madgeekonline.com/totalfreedom/craftbukkit.jar", + "http://s3.madgeekonline.com/totalfreedom/worldedit.jar" + }; + + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (!sender.getName().equalsIgnoreCase("madgeek1450")) + { + sender.sendMessage(TotalFreedomMod.MSG_NO_PERMS); + return true; + } + + for (final String url : FILES) + { + server.getScheduler().runTaskAsynchronously(plugin, new Runnable() + { + @Override + public void run() + { + try + { + TFM_Log.info("Downloading: " + url); + + File file = new File("./updates/" + url.substring(url.lastIndexOf("/") + 1)); + if (file.exists()) + { + file.delete(); + } + if (!file.getParentFile().exists()) + { + file.getParentFile().mkdirs(); + } + + TFM_Util.downloadFile(url, file, true); + } + catch (Exception ex) + { + TFM_Log.severe(ex); + } + } + }); + } + + return true; + } +} diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index f3cef5a9..22c6d82f 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -472,6 +472,8 @@ public class TFM_PlayerListener implements Listener TFM_Log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", p.getName(), ChatColor.stripColor(p.getDisplayName()), command), true); } + playerdata.setLastCommand(command); + command = command.toLowerCase().trim(); boolean block_command = false; diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_TickMeter.java b/src/me/StevenLawson/TotalFreedomMod/TFM_TickMeter.java new file mode 100644 index 00000000..c5c23135 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_TickMeter.java @@ -0,0 +1,40 @@ +package me.StevenLawson.TotalFreedomMod; + +public class TFM_TickMeter +{ + + int ticks; + int taskId; + final TotalFreedomMod plugin; + + public TFM_TickMeter(TotalFreedomMod plugin) + { + this.plugin = plugin; + } + + public int startTicking() + { + int tId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() + { + @Override + public void run() + { + ticks += 1; + } + }, 1L, 1L); // ticks (20 in 1 second) + + taskId = tId; + return tId; + } + + public void stopTicking() + { + plugin.getServer().getScheduler().cancelTask(taskId); + } + + public int getTicks() + { + return ticks; + } + +} diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java b/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java index 499c0913..a54e0e99 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java @@ -48,6 +48,7 @@ public class TFM_UserInfo private boolean in_adminchat = false; private boolean all_commands_blocked = false; private Boolean superadmin_id_verified = null; + private String last_command = ""; public TFM_UserInfo(Player player) { @@ -453,4 +454,14 @@ public class TFM_UserInfo { this.superadmin_id_verified = superadmin_id_verified; } + + public String getLastCommand() + { + return last_command; + } + + public void setLastCommand(String last_command) + { + this.last_command = last_command; + } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index 110181ca..bf1d27c0 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -937,13 +937,23 @@ public class TFM_Util return affected; } - public static void downloadFile(String url, File output_file) throws Exception + public static void downloadFile(String url, File output_file) throws java.lang.Exception + { + downloadFile(url, output_file, false); + } + + public static void downloadFile(String url, File output_file, boolean verbose) throws java.lang.Exception { URL website = new URL(url); ReadableByteChannel rbc = Channels.newChannel(website.openStream()); FileOutputStream fos = new FileOutputStream(output_file); fos.getChannel().transferFrom(rbc, 0, 1 << 24); fos.close(); + + if (verbose) + { + TFM_Log.info("Downloaded " + url + " to " + output_file.toString() + "."); + } } public static void adminChatMessage(CommandSender sender, String message, boolean senderIsConsole) diff --git a/src/plugin.yml b/src/plugin.yml index 7ed449f5..2a7a4e95 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -101,6 +101,9 @@ commands: landmine: description: Set a landmine trap. usage: / + lastcmd: + description: Superadmin command - Show the last command that someone used. + usage: / lavadmg: description: Superadmin command - Enable/disable lava damage. usage: / @@ -189,7 +192,7 @@ commands: usage: / [radius (default=50)] [player] saconfig: description: Senior Command - Manage superadmins. - usage: / > + usage: / > say: description: Broadcasts the given message as the console, includes sender name. usage: / @@ -230,6 +233,9 @@ commands: tfipbanlist: description: Shows all banned IPs. Superadmins may optionally use 'purge' to clear the list. usage: / [purge] + tfupdate: + description: Madgeek command - Update server files. + usave: / tossmob: description: Throw a mob in the direction you are facing when you left click with a stick. usage: /