Reimplement plugin incompatibility check, tweak some commands

This commit is contained in:
Dan Mulloy 2015-04-11 16:47:07 -04:00
parent 0ed76d7228
commit 0cc182f93d
4 changed files with 54 additions and 22 deletions

View File

@ -66,6 +66,7 @@ abstract class CommandBase implements CommandExecutor {
reporter.reportWarning(this, Report.newBuilder(REPORT_UNEXPECTED_COMMAND).messageParam(this)); reporter.reportWarning(this, Report.newBuilder(REPORT_UNEXPECTED_COMMAND).messageParam(this));
return false; return false;
} }
if (permission != null && !sender.hasPermission(permission)) { if (permission != null && !sender.hasPermission(permission)) {
sender.sendMessage(ChatColor.RED + "You haven't got permission to run this command."); sender.sendMessage(ChatColor.RED + "You haven't got permission to run this command.");
return true; return true;
@ -75,13 +76,12 @@ abstract class CommandBase implements CommandExecutor {
if (args != null && args.length >= minimumArgumentCount) { if (args != null && args.length >= minimumArgumentCount) {
return handleCommand(sender, args); return handleCommand(sender, args);
} else { } else {
sender.sendMessage(ChatColor.RED + "Insufficient commands. You need at least " + minimumArgumentCount); sender.sendMessage(ChatColor.RED + "Insufficient arguments. You need at least " + minimumArgumentCount);
return false; return false;
} }
} catch (Throwable ex) {
} catch (Exception e) {
reporter.reportDetailed(this, reporter.reportDetailed(this,
Report.newBuilder(REPORT_COMMAND_ERROR).error(e).messageParam(name).callerParam(sender, label, args) Report.newBuilder(REPORT_COMMAND_ERROR).error(ex).messageParam(name).callerParam(sender, label, args)
); );
return true; return true;
} }

View File

@ -23,6 +23,7 @@ import java.io.IOException;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import com.comphenix.protocol.error.ErrorReporter; import com.comphenix.protocol.error.ErrorReporter;
import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.events.PacketListener;
@ -60,6 +61,8 @@ class CommandProtocol extends CommandBase {
toggleTimings(sender, args); toggleTimings(sender, args);
else if (subCommand.equalsIgnoreCase("listeners")) else if (subCommand.equalsIgnoreCase("listeners"))
printListeners(sender); printListeners(sender);
else if (subCommand.equalsIgnoreCase("version"))
printVersion(sender);
else else
return false; return false;
return true; return true;
@ -69,13 +72,14 @@ class CommandProtocol extends CommandBase {
private void printListeners(final CommandSender sender) { private void printListeners(final CommandSender sender) {
ProtocolManager manager = ProtocolLibrary.getProtocolManager(); ProtocolManager manager = ProtocolLibrary.getProtocolManager();
for (PacketListener listener : manager.getPacketListeners()) {
sender.sendMessage(ChatColor.GOLD + "Packet listeners:"); sender.sendMessage(ChatColor.GOLD + "Packet listeners:");
for (PacketListener listener : manager.getPacketListeners()) {
sender.sendMessage(ChatColor.GOLD + " " + listener); sender.sendMessage(ChatColor.GOLD + " " + listener);
} }
// Along with every asynchronous listener // Along with every asynchronous listener
for (PacketListener listener : manager.getAsynchronousManager().getAsyncHandlers()) {
sender.sendMessage(ChatColor.GOLD + "Asynchronous listeners:"); sender.sendMessage(ChatColor.GOLD + "Asynchronous listeners:");
for (PacketListener listener : manager.getAsynchronousManager().getAsyncHandlers()) {
sender.sendMessage(ChatColor.GOLD + " " + listener); sender.sendMessage(ChatColor.GOLD + " " + listener);
} }
} }
@ -123,12 +127,19 @@ class CommandProtocol extends CommandBase {
// Print to a text file // Print to a text file
generator.saveTo(destination, manager); generator.saveTo(destination, manager);
manager.clear(); manager.clear();
} catch (IOException e) { } catch (IOException e) {
reporter.reportMinimal(plugin, "saveTimings()", e); reporter.reportMinimal(plugin, "saveTimings()", e);
} }
} }
private void printVersion(CommandSender sender) {
PluginDescriptionFile desc = plugin.getDescription();
sender.sendMessage(ChatColor.GREEN + desc.getName() + ChatColor.WHITE + " v" + ChatColor.GREEN + desc.getVersion());
sender.sendMessage("Authors: " + ChatColor.GREEN + "dmulloy2 " + ChatColor.WHITE + " and " + ChatColor.GREEN + "Comphenix");
sender.sendMessage("Issues: " + ChatColor.GREEN + "https://github.com/dmulloy2/ProtocolLib/issues");
}
/** /**
* Prevent further automatic updates until the next delay. * Prevent further automatic updates until the next delay.
*/ */

View File

@ -30,6 +30,7 @@ import java.util.regex.Pattern;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -371,6 +372,9 @@ public class ProtocolLibrary extends JavaPlugin {
return; return;
} }
// Check for incompatible plugins
checkForIncompatibility(manager);
// Initialize background compiler // Initialize background compiler
if (backgroundCompiler == null && config.isBackgroundCompilerEnabled()) { if (backgroundCompiler == null && config.isBackgroundCompilerEnabled()) {
backgroundCompiler = new BackgroundCompiler(getClassLoader(), reporter); backgroundCompiler = new BackgroundCompiler(getClassLoader(), reporter);
@ -392,7 +396,6 @@ public class ProtocolLibrary extends JavaPlugin {
// Worker that ensures that async packets are eventually sent // Worker that ensures that async packets are eventually sent
// It also performs the update check. // It also performs the update check.
createPacketTask(server); createPacketTask(server);
} catch (OutOfMemoryError e) { } catch (OutOfMemoryError e) {
throw e; throw e;
} catch (ThreadDeath e) { } catch (ThreadDeath e) {
@ -419,6 +422,26 @@ public class ProtocolLibrary extends JavaPlugin {
} }
} }
private void checkForIncompatibility(PluginManager manager) {
// Plugin authors: Notify me to remove these
String[] incompatible = { };
for (String plugin : incompatible) {
if (manager.getPlugin(plugin) != null) {
// Check for versions, etc.
logger.severe("Detected incompatible plugin: " + plugin);
}
}
// Special case for TagAPI and iTag
if (manager.getPlugin("TagAPI") != null) {
Plugin iTag = manager.getPlugin("iTag");
if (iTag == null || iTag.getDescription().getVersion().startsWith("1.0")) {
logger.severe("Detected incompatible plugin: TagAPI");
}
}
}
// Used to check Minecraft version // Used to check Minecraft version
private MinecraftVersion verifyMinecraftVersion() { private MinecraftVersion verifyMinecraftVersion() {
MinecraftVersion minimum = new MinecraftVersion(MINIMUM_MINECRAFT_VERSION); MinecraftVersion minimum = new MinecraftVersion(MINIMUM_MINECRAFT_VERSION);
@ -435,8 +458,8 @@ public class ProtocolLibrary extends JavaPlugin {
if (current.compareTo(maximum) > 0) if (current.compareTo(maximum) > 0)
logger.warning("Version " + current + " has not yet been tested! Proceed with caution."); logger.warning("Version " + current + " has not yet been tested! Proceed with caution.");
} }
return current;
return current;
} catch (Exception e) { } catch (Exception e) {
reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_PARSE_MINECRAFT_VERSION).error(e).messageParam(maximum)); reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_PARSE_MINECRAFT_VERSION).error(e).messageParam(maximum));
@ -460,7 +483,6 @@ public class ProtocolLibrary extends JavaPlugin {
for (File candidate : pluginFolder.listFiles()) { for (File candidate : pluginFolder.listFiles()) {
if (candidate.isFile() && !candidate.equals(loadedFile)) { if (candidate.isFile() && !candidate.equals(loadedFile)) {
Matcher match = ourPlugin.matcher(candidate.getName()); Matcher match = ourPlugin.matcher(candidate.getName());
if (match.matches()) { if (match.matches()) {
MinecraftVersion version = new MinecraftVersion(match.group(1)); MinecraftVersion version = new MinecraftVersion(match.group(1));
@ -473,7 +495,6 @@ public class ProtocolLibrary extends JavaPlugin {
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_DETECT_CONFLICTING_PLUGINS).error(e)); reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_DETECT_CONFLICTING_PLUGINS).error(e));
} }
@ -498,11 +519,11 @@ public class ProtocolLibrary extends JavaPlugin {
PluginCommand command = getCommand(name); PluginCommand command = getCommand(name);
// Try to load the command // Try to load the command
if (command != null) if (command != null) {
command.setExecutor(executor); command.setExecutor(executor);
else } else {
throw new RuntimeException("plugin.yml might be corrupt."); throw new RuntimeException("plugin.yml might be corrupt.");
}
} catch (RuntimeException e) { } catch (RuntimeException e) {
reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_REGISTER_COMMAND).messageParam(name, e.getMessage()).error(e)); reporter.reportWarning(this, Report.newBuilder(REPORT_CANNOT_REGISTER_COMMAND).messageParam(name, e.getMessage()).error(e));
} }

View File

@ -10,7 +10,7 @@ database: false
commands: commands:
protocol: protocol:
description: Performs administrative tasks regarding ProtocolLib. description: Performs administrative tasks regarding ProtocolLib.
usage: /<command> config|check|update usage: /<command> config|timings|listeners|version
permission: protocol.admin permission: protocol.admin
permission-message: You don't have <permission> permission-message: You don't have <permission>
packet: packet: