diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/CommandProtocol.java b/ProtocolLib/src/main/java/com/comphenix/protocol/CommandProtocol.java index 89505c7d..96399015 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/CommandProtocol.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/CommandProtocol.java @@ -2,16 +2,16 @@ * ProtocolLib - Bukkit server library that allows access to the Minecraft protocol. * Copyright (C) 2012 Kristian S. Stangeland * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 2 of + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with this program; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + * You should have received a copy of the GNU General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA */ @@ -33,7 +33,7 @@ import com.comphenix.protocol.timing.TimingReportGenerator; /** * Handles the "protocol" administration command. - * + * * @author Kristian */ class CommandProtocol extends CommandBase { @@ -41,7 +41,7 @@ class CommandProtocol extends CommandBase { * Name of this command. */ public static final String NAME = "protocol"; - + private Plugin plugin; private Updater updater; private ProtocolConfig config; @@ -52,18 +52,18 @@ class CommandProtocol extends CommandBase { this.updater = updater; this.config = config; } - + @Override protected boolean handleCommand(CommandSender sender, String[] args) { String subCommand = args[0]; - + // Only return TRUE if we executed the correct command if (subCommand.equalsIgnoreCase("config") || subCommand.equalsIgnoreCase("reload")) reloadConfiguration(sender); else if (subCommand.equalsIgnoreCase("check")) checkVersion(sender); - else if (subCommand.equalsIgnoreCase("update")) - updateVersion(sender); + // else if (subCommand.equalsIgnoreCase("update")) + // updateVersion(sender); else if (subCommand.equalsIgnoreCase("timings")) toggleTimings(sender, args); else if (subCommand.equalsIgnoreCase("listeners")) @@ -72,19 +72,19 @@ class CommandProtocol extends CommandBase { return false; return true; } - + public void checkVersion(final CommandSender sender) { performUpdate(sender, UpdateType.NO_DOWNLOAD); } - + public void updateVersion(final CommandSender sender) { performUpdate(sender, UpdateType.DEFAULT); } - + // Display every listener on the server private void printListeners(final CommandSender sender, String[] args) { ProtocolManager manager = ProtocolLibrary.getProtocolManager(); - + for (PacketListener listener : manager.getPacketListeners()) { sender.sendMessage(ChatColor.GOLD + "Packet listeners:"); sender.sendMessage(ChatColor.GOLD + " " + listener); @@ -95,19 +95,19 @@ class CommandProtocol extends CommandBase { sender.sendMessage(ChatColor.GOLD + " " + listener); } } - + private void performUpdate(final CommandSender sender, UpdateType type) { if (updater.isChecking()) { sender.sendMessage(ChatColor.RED + "Already checking for an update."); return; } - + // Perform on an async thread Runnable notify = new Runnable() { @Override public void run() { sender.sendMessage(ChatColor.YELLOW + "[ProtocolLib] " + updater.getResult()); - + updater.removeListener(this); updateFinished(); } @@ -115,15 +115,15 @@ class CommandProtocol extends CommandBase { updater.start(type); updater.addListener(notify); } - + private void toggleTimings(CommandSender sender, String[] args) { TimedListenerManager manager = TimedListenerManager.getInstance(); boolean state = !manager.isTiming(); // toggle - + // Parse the boolean parameter if (args.length == 2) { Boolean parsed = parseBoolean(toQueue(args, 2), "start"); - + if (parsed != null) { state = parsed; } else { @@ -134,7 +134,7 @@ class CommandProtocol extends CommandBase { sender.sendMessage(ChatColor.RED + "Too many parameters."); return; } - + // Now change the state if (state) { if (manager.startTiming()) @@ -150,21 +150,21 @@ class CommandProtocol extends CommandBase { } } } - + private void saveTimings(TimedListenerManager manager) { try { File destination = new File(plugin.getDataFolder(), "Timings - " + System.currentTimeMillis() + ".txt"); TimingReportGenerator generator = new TimingReportGenerator(); - + // Print to a text file generator.saveTo(destination, manager); manager.clear(); - + } catch (IOException e) { reporter.reportMinimal(plugin, "saveTimings()", e); } } - + /** * Prevent further automatic updates until the next delay. */ @@ -174,7 +174,7 @@ class CommandProtocol extends CommandBase { config.setAutoLastTime(currentTime); config.saveAll(); } - + public void reloadConfiguration(CommandSender sender) { plugin.reloadConfig(); sender.sendMessage(ChatColor.YELLOW + "Reloaded configuration!"); diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolLibrary.java b/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolLibrary.java index 6e349f1f..64abbc00 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolLibrary.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/ProtocolLibrary.java @@ -2,16 +2,16 @@ * ProtocolLib - Bukkit server library that allows access to the Minecraft protocol. * Copyright (C) 2012 Kristian S. Stangeland * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 2 of + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with this program; - * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + * You should have received a copy of the GNU General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA */ @@ -46,9 +46,6 @@ import com.comphenix.protocol.injector.InternalManager; import com.comphenix.protocol.injector.PacketFilterManager; import com.comphenix.protocol.injector.PacketFilterManager.PlayerInjectHooks; import com.comphenix.protocol.metrics.Statistics; -import com.comphenix.protocol.metrics.Updater; -import com.comphenix.protocol.metrics.Updater.UpdateResult; -import com.comphenix.protocol.metrics.Updater.UpdateType; import com.comphenix.protocol.reflect.compiler.BackgroundCompiler; import com.comphenix.protocol.utility.ChatExtensions; import com.comphenix.protocol.utility.EnhancerFactory; @@ -60,7 +57,7 @@ import com.google.common.util.concurrent.ListeningScheduledExecutorService; /** * The main entry point for ProtocolLib. - * + * * @author Kristian */ public class ProtocolLibrary extends JavaPlugin { @@ -68,117 +65,117 @@ public class ProtocolLibrary extends JavaPlugin { public static final ReportType REPORT_CANNOT_LOAD_CONFIG = new ReportType("Cannot load configuration"); public static final ReportType REPORT_CANNOT_DELETE_CONFIG = new ReportType("Cannot delete old ProtocolLib configuration."); public static final ReportType REPORT_CANNOT_PARSE_INJECTION_METHOD = new ReportType("Cannot parse injection method. Using default."); - + public static final ReportType REPORT_PLUGIN_LOAD_ERROR = new ReportType("Cannot load ProtocolLib."); public static final ReportType REPORT_PLUGIN_ENABLE_ERROR = new ReportType("Cannot enable ProtocolLib."); - + public static final ReportType REPORT_METRICS_IO_ERROR = new ReportType("Unable to enable metrics due to network problems."); public static final ReportType REPORT_METRICS_GENERIC_ERROR = new ReportType("Unable to enable metrics due to network problems."); - + public static final ReportType REPORT_CANNOT_PARSE_MINECRAFT_VERSION = new ReportType("Unable to retrieve current Minecraft version. Assuming %s"); public static final ReportType REPORT_CANNOT_DETECT_CONFLICTING_PLUGINS = new ReportType("Unable to detect conflicting plugin versions."); public static final ReportType REPORT_CANNOT_REGISTER_COMMAND = new ReportType("Cannot register command %s: %s"); - + public static final ReportType REPORT_CANNOT_CREATE_TIMEOUT_TASK = new ReportType("Unable to create packet timeout task."); public static final ReportType REPORT_CANNOT_UPDATE_PLUGIN = new ReportType("Cannot perform automatic updates."); - + /** * The minimum version ProtocolLib has been tested with. */ public static final String MINIMUM_MINECRAFT_VERSION = "1.0.0"; - + /** * The maximum version ProtocolLib has been tested with, */ - public static final String MAXIMUM_MINECRAFT_VERSION = "1.7.4"; - + public static final String MAXIMUM_MINECRAFT_VERSION = "1.7.10"; + /** * The date (with ISO 8601 or YYYY-MM-DD) when the most recent version was released. */ public static final String MINECRAFT_LAST_RELEASE_DATE = "2013-12-10"; - + // Update information - static final String BUKKIT_DEV_SLUG = "protocollib"; - static final int BUKKIT_DEV_ID = 45564; - +// static final String BUKKIT_DEV_SLUG = "protocollib"; +// static final int BUKKIT_DEV_ID = 45564; + // Different commands private enum ProtocolCommand { FILTER, PACKET, PROTOCOL } - + /** * The number of milliseconds per second. */ static final long MILLI_PER_SECOND = 1000; - + private static final String PERMISSION_INFO = "protocol.info"; - + // There should only be one protocol manager, so we'll make it static private static InternalManager protocolManager; - + // Error reporter private static ErrorReporter reporter = new BasicErrorReporter(); - + // Strongly typed configuration private static ProtocolConfig config; - - // Metrics and statistisc - private Statistics statistisc; + + // Metrics and statistics + private Statistics statistics; // Executors private static ListeningScheduledExecutorService executorAsync; private static ListeningScheduledExecutorService executorSync; - + // Structure compiler private BackgroundCompiler backgroundCompiler; - - // Used to clean up server packets that have expired. But mostly required to simulate + + // Used to clean up server packets that have expired. But mostly required to simulate // recieving client packets. private int packetTask = -1; private int tickCounter = 0; private static final int ASYNC_MANAGER_DELAY = 1; - + // Used to unhook players after a delay private DelayedSingleTask unhookTask; - + // Settings/options private int configExpectedMod = -1; - - // Updater - private Updater updater; - private static boolean UPDATES_DISABLED; - - // Logger - private Logger logger; - private Handler redirectHandler; - + + // Updater +// private Updater updater; +// private static boolean UPDATES_DISABLED; + + // Logger + private Logger logger; + private Handler redirectHandler; + // Commands private CommandProtocol commandProtocol; private CommandPacket commandPacket; private CommandFilter commandFilter; - + // Whether or not disable is not needed private boolean skipDisable; - + @Override public void onLoad() { // Load configuration logger = getLoggerSafely(); Application.registerPrimaryThread(); - + // Initialize enhancer factory EnhancerFactory.getInstance().setClassLoader(getClassLoader()); - + // Initialize executors executorAsync = BukkitExecutors.newAsynchronous(this); executorSync = BukkitExecutors.newSynchronous(this); - + // Add global parameters DetailedErrorReporter detailedReporter = new DetailedErrorReporter(this); reporter = getFilteredReporter(detailedReporter); - + try { config = new ProtocolConfig(this); } catch (Exception e) { @@ -191,7 +188,7 @@ public class ProtocolLibrary extends JavaPlugin { reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_DELETE_CONFIG)); } } - + // Print the state of the debug mode if (config.isDebug()) { logger.warning("Debug mode is enabled!"); @@ -201,17 +198,18 @@ public class ProtocolLibrary extends JavaPlugin { detailedReporter.setDetailedReporting(true); logger.warning("Detailed error reporting enabled!"); } - + try { // Check for other versions checkConflictingVersions(); - + // Handle unexpected Minecraft versions MinecraftVersion version = verifyMinecraftVersion(); - + + // TODO: Redo the update mechanism for Spigot? // Set updater - this will not perform any update automatically - updater = new Updater(this, BUKKIT_DEV_ID, getFile(), UpdateType.NO_DOWNLOAD, true); - +// updater = new Updater(this, BUKKIT_DEV_ID, getFile(), UpdateType.NO_DOWNLOAD, true); + unhookTask = new DelayedSingleTask(this); protocolManager = PacketFilterManager.newBuilder(). classLoader(getClassLoader()). @@ -220,11 +218,11 @@ public class ProtocolLibrary extends JavaPlugin { minecraftVersion(version). unhookTask(unhookTask). reporter(reporter). - build(); - + build(); + // Setup error reporter detailedReporter.addGlobalParameter("manager", protocolManager); - + // Update injection hook try { PlayerInjectHooks hook = config.getInjectionMethod(); @@ -237,11 +235,11 @@ public class ProtocolLibrary extends JavaPlugin { } catch (IllegalArgumentException e) { reporter.reportWarning(config, Report.newBuilder(REPORT_CANNOT_PARSE_INJECTION_METHOD).error(e)); } - + // Send logging information to player listeners too initializeCommands(); setupBroadcastUsers(PERMISSION_INFO); - + } catch (OutOfMemoryError e) { throw e; } catch (ThreadDeath e) { @@ -260,9 +258,9 @@ public class ProtocolLibrary extends JavaPlugin { for (ProtocolCommand command : ProtocolCommand.values()) { try { switch (command) { - case PROTOCOL: - commandProtocol = new CommandProtocol(reporter, this, updater, config); break; - case FILTER: + case PROTOCOL: + commandProtocol = new CommandProtocol(reporter, this, null, config); break; + case FILTER: commandFilter = new CommandFilter(reporter, this, config); break; case PACKET: commandPacket = new CommandPacket(reporter, this, logger, commandFilter, protocolManager); break; @@ -277,32 +275,32 @@ public class ProtocolLibrary extends JavaPlugin { } } } - + /** * Retrieve a error reporter that may be filtered by the configuration. * @return The new default error reporter. */ private ErrorReporter getFilteredReporter(ErrorReporter reporter) { - return new DelegatedErrorReporter(reporter) { + return new DelegatedErrorReporter(reporter) { private int lastModCount = -1; private Set reports = Sets.newHashSet(); - + @Override protected Report filterReport(Object sender, Report report, boolean detailed) { try { String canonicalName = ReportType.getReportName(sender, report.getType()); String reportName = Iterables.getLast(Splitter.on("#").split(canonicalName)).toUpperCase(); - + if (config != null && config.getModificationCount() != lastModCount) { // Update our cached set again reports = Sets.newHashSet(config.getSuppressedReports()); lastModCount = config.getModificationCount(); } - + // Cancel reports either on the full canonical name, or just the report name if (reports.contains(canonicalName) || reports.contains(reportName)) return null; - + } catch (Exception e) { // Only report this with a minor message logger.warning("Error filtering reports: " + e.toString()); @@ -312,26 +310,26 @@ public class ProtocolLibrary extends JavaPlugin { } }; } - + private boolean deleteConfig() { return config.getFile().delete(); } - + @Override public void reloadConfig() { super.reloadConfig(); - + // Reload configuration if (config != null) { config.reloadConfig(); } } - + private void setupBroadcastUsers(final String permission) { // Guard against multiple calls if (redirectHandler != null) return; - + // Broadcast information to every user too redirectHandler = new Handler() { @Override @@ -341,12 +339,12 @@ public class ProtocolLibrary extends JavaPlugin { commandPacket.broadcastMessageSilently(record.getMessage(), permission); } } - + @Override public void flush() { // Not needed. } - + @Override public void close() throws SecurityException { // Do nothing. @@ -355,24 +353,24 @@ public class ProtocolLibrary extends JavaPlugin { logger.addHandler(redirectHandler); } - + @Override public void onEnable() { try { Server server = getServer(); PluginManager manager = server.getPluginManager(); - + // Don't do anything else! if (manager == null) return; // Silly plugin reloaders! if (protocolManager == null) { Logger directLogging = Logger.getLogger("Minecraft"); - String[] message = new String[] { + String[] message = new String[] { " PROTOCOLLIB DOES NOT SUPPORT PLUGIN RELOADERS. ", " PLEASE USE THE BUILT-IN RELOAD COMMAND. ", }; - + // Print as severe for (String line : ChatExtensions.toFlowerBox(message, "*", 3, 1)) { directLogging.severe(line); @@ -380,29 +378,29 @@ public class ProtocolLibrary extends JavaPlugin { disablePlugin(); return; } - + // Initialize background compiler if (backgroundCompiler == null && config.isBackgroundCompilerEnabled()) { backgroundCompiler = new BackgroundCompiler(getClassLoader(), reporter); BackgroundCompiler.setInstance(backgroundCompiler); - + logger.info("Started structure compiler thread."); } else { logger.info("Structure compiler thread has been disabled."); } - + // Set up command handlers registerCommand(CommandProtocol.NAME, commandProtocol); registerCommand(CommandPacket.NAME, commandPacket); registerCommand(CommandFilter.NAME, commandFilter); - + // Player login and logout events protocolManager.registerEvents(manager, this); - + // Worker that ensures that async packets are eventually sent // It also performs the update check. createPacketTask(server); - + } catch (OutOfMemoryError e) { throw e; } catch (ThreadDeath e) { @@ -412,28 +410,28 @@ public class ProtocolLibrary extends JavaPlugin { disablePlugin(); return; } - + // Try to enable statistics try { if (config.isMetricsEnabled()) { - statistisc = new Statistics(this); + statistics = new Statistics(this); } } catch (OutOfMemoryError e) { throw e; } catch (ThreadDeath e) { throw e; } catch (IOException e) { - reporter.reportDetailed(this, Report.newBuilder(REPORT_METRICS_IO_ERROR).error(e).callerParam(statistisc)); + reporter.reportDetailed(this, Report.newBuilder(REPORT_METRICS_IO_ERROR).error(e).callerParam(statistics)); } catch (Throwable e) { - reporter.reportDetailed(this, Report.newBuilder(REPORT_METRICS_GENERIC_ERROR).error(e).callerParam(statistisc)); + reporter.reportDetailed(this, Report.newBuilder(REPORT_METRICS_GENERIC_ERROR).error(e).callerParam(statistics)); } } - + // Used to check Minecraft version private MinecraftVersion verifyMinecraftVersion() { MinecraftVersion minimum = new MinecraftVersion(MINIMUM_MINECRAFT_VERSION); MinecraftVersion maximum = new MinecraftVersion(MAXIMUM_MINECRAFT_VERSION); - + try { MinecraftVersion current = new MinecraftVersion(getServer()); @@ -448,9 +446,9 @@ public class ProtocolLibrary extends JavaPlugin { return current; } catch (Exception e) { - reporter.reportWarning(this, + reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_PARSE_MINECRAFT_VERSION).error(e).messageParam(maximum)); - + // Unknown version - just assume it is the latest return maximum; } @@ -463,15 +461,15 @@ public class ProtocolLibrary extends JavaPlugin { // Skip the file that contains this current instance however File loadedFile = getFile(); - + try { // Scan the plugin folder for newer versions of ProtocolLib File pluginFolder = new File("plugins/"); - + for (File candidate : pluginFolder.listFiles()) { if (candidate.isFile() && !candidate.equals(loadedFile)) { Matcher match = ourPlugin.matcher(candidate.getName()); - + if (match.matches()) { MinecraftVersion version = new MinecraftVersion(match.group(1)); @@ -488,73 +486,73 @@ public class ProtocolLibrary extends JavaPlugin { } catch (Exception e) { reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_DETECT_CONFLICTING_PLUGINS).error(e)); } - + // See if the newest version is actually higher if (newestVersion != null && currentVersion.compareTo(newestVersion) < 0) { // We don't need to set internal classes or instances to NULL - that would break the other loaded plugin skipDisable = true; - + throw new IllegalStateException( - String.format("Detected a newer version of ProtocolLib (%s) in plugin folder than the current (%s). Disabling.", + String.format("Detected a newer version of ProtocolLib (%s) in plugin folder than the current (%s). Disabling.", newestVersion.getVersion(), currentVersion.getVersion()) ); } } - + private void registerCommand(String name, CommandExecutor executor) { try { // Ignore these - they must have printed an error already - if (executor == null) + if (executor == null) return; - + PluginCommand command = getCommand(name); - + // Try to load the command if (command != null) command.setExecutor(executor); else throw new RuntimeException("plugin.yml might be corrupt."); - + } catch (RuntimeException e) { - reporter.reportWarning(this, + reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_REGISTER_COMMAND).messageParam(name, e.getMessage()).error(e) ); } } - + /** * Disable the current plugin. */ private void disablePlugin() { getServer().getPluginManager().disablePlugin(this); } - + private void createPacketTask(Server server) { try { if (packetTask >= 0) throw new IllegalStateException("Packet task has already been created"); - + // Attempt to create task packetTask = server.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() { @Override public void run() { AsyncFilterManager manager = (AsyncFilterManager) protocolManager.getAsynchronousManager(); - + // We KNOW we're on the main thread at the moment manager.sendProcessedPackets(tickCounter++, true); - - // House keeping - updateConfiguration(); - - // Check for updates too - if (!UPDATES_DISABLED && (tickCounter % 20) == 0) { - checkUpdates(); - } - } - }, ASYNC_MANAGER_DELAY, ASYNC_MANAGER_DELAY); - - } catch (OutOfMemoryError e) { - throw e; + + // House keeping + updateConfiguration(); + + // Check for updates too +// if (!UPDATES_DISABLED && (tickCounter % 20) == 0) { +// checkUpdates(); +// } + } + }, ASYNC_MANAGER_DELAY, ASYNC_MANAGER_DELAY); + + } catch (OutOfMemoryError e) { + throw e; } catch (ThreadDeath e) { throw e; } catch (Throwable e) { @@ -563,89 +561,89 @@ public class ProtocolLibrary extends JavaPlugin { } } } - + private void updateConfiguration() { if (config != null && config.getModificationCount() != configExpectedMod) { configExpectedMod = config.getModificationCount(); - + // Update the debug flag protocolManager.setDebug(config.isDebug()); } } - - private void checkUpdates() { - // Ignore milliseconds - it's pointless - long currentTime = System.currentTimeMillis() / MILLI_PER_SECOND; - - try { - long updateTime = config.getAutoLastTime() + config.getAutoDelay(); - // Should we update? - if (currentTime > updateTime && !updater.isChecking()) { - // Initiate the update as if it came from the console - if (config.isAutoDownload()) - commandProtocol.updateVersion(getServer().getConsoleSender()); - else if (config.isAutoNotify()) - commandProtocol.checkVersion(getServer().getConsoleSender()); - else - commandProtocol.updateFinished(); - } - } catch (Exception e) { - reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_UPDATE_PLUGIN).error(e)); - UPDATES_DISABLED = true; - } - } - +// private void checkUpdates() { +// // Ignore milliseconds - it's pointless +// long currentTime = System.currentTimeMillis() / MILLI_PER_SECOND; +// +// try { +// long updateTime = config.getAutoLastTime() + config.getAutoDelay(); +// +// // Should we update? +// if (currentTime > updateTime && !updater.isChecking()) { +// // Initiate the update as if it came from the console +// if (config.isAutoDownload()) +// commandProtocol.updateVersion(getServer().getConsoleSender()); +// else if (config.isAutoNotify()) +// commandProtocol.checkVersion(getServer().getConsoleSender()); +// else +// commandProtocol.updateFinished(); +// } +// } catch (Exception e) { +// reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_UPDATE_PLUGIN).error(e)); +// UPDATES_DISABLED = true; +// } +// } + @Override public void onDisable() { if (skipDisable) { return; } - + // Bukkit will shut down tasks on our executors // ... - + // Disable compiler if (backgroundCompiler != null) { backgroundCompiler.shutdownAll(); backgroundCompiler = null; BackgroundCompiler.setInstance(null); } - + // Clean up if (packetTask >= 0) { getServer().getScheduler().cancelTask(packetTask); packetTask = -1; } - + // And redirect handler too if (redirectHandler != null) { logger.removeHandler(redirectHandler); } - if (protocolManager != null) + if (protocolManager != null) protocolManager.close(); else return; // Plugin reloaders! - - if (unhookTask != null) + + if (unhookTask != null) unhookTask.close(); protocolManager = null; - statistisc = null; + statistics = null; // To clean up global parameters reporter = new BasicErrorReporter(); - + // Leaky ClassLoader begone! - if (updater == null || updater.getResult() != UpdateResult.SUCCESS) { - CleanupStaticMembers cleanup = new CleanupStaticMembers(getClassLoader(), reporter); - cleanup.resetAll(); - } +// if (updater == null || updater.getResult() != UpdateResult.SUCCESS) { +// CleanupStaticMembers cleanup = new CleanupStaticMembers(getClassLoader(), reporter); +// cleanup.resetAll(); +// } } - + // Get the Bukkit logger first, before we try to create our own private Logger getLoggerSafely() { Logger log = null; - + try { log = getLogger(); } catch (OutOfMemoryError e) { @@ -661,7 +659,7 @@ public class ProtocolLibrary extends JavaPlugin { log = Logger.getLogger("Minecraft"); return log; } - + /** * Retrieve the current error reporter. *

@@ -671,7 +669,7 @@ public class ProtocolLibrary extends JavaPlugin { public static ErrorReporter getErrorReporter() { return reporter; } - + /** * Retrieve the current strongly typed configuration. * @return The configuration, or NULL if ProtocolLib hasn't loaded yet. @@ -679,7 +677,7 @@ public class ProtocolLibrary extends JavaPlugin { public static ProtocolConfig getConfiguration() { return config; } - + /** * Retrieves the packet protocol manager. * @return Packet protocol manager, or NULL if it has been disabled. @@ -687,7 +685,7 @@ public class ProtocolLibrary extends JavaPlugin { public static ProtocolManager getProtocolManager() { return protocolManager; } - + /** * Retrieve the metrics instance used to measure users of this library. *

@@ -696,9 +694,9 @@ public class ProtocolLibrary extends JavaPlugin { * @return Metrics instance container. */ public Statistics getStatistics() { - return statistisc; + return statistics; } - + /** * Retrieve an executor service for performing asynchronous tasks on the behalf of ProtocolLib. *

@@ -708,7 +706,7 @@ public class ProtocolLibrary extends JavaPlugin { public static ListeningScheduledExecutorService getExecutorAsync() { return executorAsync; } - + /** * Retrieve an executor service for performing synchronous tasks (main thread) on the behalf of ProtocolLib. *