diff --git a/src/main/java/com/comphenix/protocol/CommandProtocol.java b/src/main/java/com/comphenix/protocol/CommandProtocol.java index 2de1aaf3e..f14745d1a 100644 --- a/src/main/java/com/comphenix/protocol/CommandProtocol.java +++ b/src/main/java/com/comphenix/protocol/CommandProtocol.java @@ -16,6 +16,19 @@ */ package com.comphenix.protocol; +import com.comphenix.protocol.error.DetailedErrorReporter; +import com.comphenix.protocol.error.ErrorReporter; +import com.comphenix.protocol.events.PacketListener; +import com.comphenix.protocol.timing.TimedListenerManager; +import com.comphenix.protocol.timing.TimingReportGenerator; +import com.comphenix.protocol.updater.Updater; +import com.comphenix.protocol.updater.Updater.UpdateType; +import com.comphenix.protocol.utility.Closer; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginDescriptionFile; + import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -27,20 +40,6 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Level; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginDescriptionFile; - -import com.comphenix.protocol.error.DetailedErrorReporter; -import com.comphenix.protocol.error.ErrorReporter; -import com.comphenix.protocol.events.PacketListener; -import com.comphenix.protocol.timing.TimedListenerManager; -import com.comphenix.protocol.timing.TimingReportGenerator; -import com.comphenix.protocol.updater.Updater; -import com.comphenix.protocol.updater.Updater.UpdateType; -import com.comphenix.protocol.utility.Closer; - /** * Handles the "protocol" administration command. * @@ -243,7 +242,8 @@ private void dump(CommandSender sender) { pw.println("ProtocolLib Version: " + plugin.toString()); pw.println("Bukkit Version: " + plugin.getServer().getBukkitVersion()); pw.println("Server Version: " + plugin.getServer().getVersion()); - pw.println("Java Version: " + System.getProperty("java.version")); + pw.println("Java Version: " + System.getProperty("java.version", "N/A") + " - " + System.getProperty("java.vm.vendor", "N/A") + " (" + System.getProperty("java.vendor.version", "N/A") + ")"); + pw.println("Operating System: " + System.getProperty("os.name", "N/A")); pw.println(); ProtocolManager manager = ProtocolLibrary.getProtocolManager(); diff --git a/src/main/java/com/comphenix/protocol/ProtocolLib.java b/src/main/java/com/comphenix/protocol/ProtocolLib.java index 6909c160e..2302e6f57 100644 --- a/src/main/java/com/comphenix/protocol/ProtocolLib.java +++ b/src/main/java/com/comphenix/protocol/ProtocolLib.java @@ -16,12 +16,7 @@ package com.comphenix.protocol; import com.comphenix.protocol.async.AsyncFilterManager; -import com.comphenix.protocol.error.BasicErrorReporter; -import com.comphenix.protocol.error.DelegatedErrorReporter; -import com.comphenix.protocol.error.DetailedErrorReporter; -import com.comphenix.protocol.error.ErrorReporter; -import com.comphenix.protocol.error.Report; -import com.comphenix.protocol.error.ReportType; +import com.comphenix.protocol.error.*; import com.comphenix.protocol.injector.InternalManager; import com.comphenix.protocol.injector.PacketFilterManager; import com.comphenix.protocol.metrics.Statistics; @@ -31,14 +26,22 @@ import com.comphenix.protocol.scheduler.Task; import com.comphenix.protocol.updater.Updater; import com.comphenix.protocol.updater.Updater.UpdateType; -import com.comphenix.protocol.utility.*; +import com.comphenix.protocol.utility.ByteBuddyFactory; +import com.comphenix.protocol.utility.ChatExtensions; +import com.comphenix.protocol.utility.MinecraftVersion; +import com.comphenix.protocol.utility.Util; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; +import org.bukkit.Server; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.PluginCommand; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; import java.util.HashSet; -import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Handler; @@ -48,13 +51,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.bukkit.Server; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.PluginCommand; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; - /** * The main entry point for ProtocolLib. * @@ -118,6 +114,7 @@ public class ProtocolLib extends JavaPlugin { // Whether disabling field resetting is needed private boolean skipDisable; + private boolean loadingFailed = false; @Override public void onLoad() { @@ -169,7 +166,11 @@ public void onLoad() { this.checkConflictingVersions(); // Handle unexpected Minecraft versions - MinecraftVersion version = this.verifyMinecraftVersion(); + MinecraftVersion version = this.verifyMinecraftVersion(); // returns the current version or null if a version mismatch was detected + if(version == null) { + loadingFailed = true; + return; + } // Set updater - this will not perform any update automatically this.updater = Updater.create(this, 0, this.getFile(), UpdateType.NO_DOWNLOAD, true); @@ -192,7 +193,7 @@ public void onLoad() { } catch (Exception e) { reporter.reportDetailed(this, Report.newBuilder(REPORT_PLUGIN_LOAD_ERROR).error(e).callerParam(protocolManager)); - this.disablePlugin(); + loadingFailed = true; } } @@ -311,6 +312,11 @@ public void close() throws SecurityException { @Override public void onEnable() { + if(loadingFailed) { + this.getLogger().log(Level.SEVERE, "Loading of ProtocolLib failed (see log above). ProtocolLib will be disabled."); + this.disablePlugin(); + return; + } try { Server server = this.getServer(); PluginManager manager = server.getPluginManager(); @@ -385,8 +391,6 @@ private void checkForIncompatibility(PluginManager manager) { } } - // Plugin authors: Notify me to remove these - // Used to check Minecraft version private MinecraftVersion verifyMinecraftVersion() { MinecraftVersion minimum = new MinecraftVersion(ProtocolLibrary.MINIMUM_MINECRAFT_VERSION); @@ -395,14 +399,29 @@ private MinecraftVersion verifyMinecraftVersion() { try { MinecraftVersion current = new MinecraftVersion(this.getServer()); - // Skip certain versions - if (!config.getIgnoreVersionCheck().equals(current.getVersion())) { - // We'll just warn the user for now - if (current.compareTo(minimum) < 0) { - logger.warning("Version " + current + " is lower than the minimum " + minimum); + + String line = "============================================================"; + // We'll just warn the user for now + if (current.compareTo(minimum) < 0) { + logger.warning(line + "\nThis version of ProtocolLib has only been tested with Minecraft " + minimum.getVersion() + " or newer.\n" + line); + } + if (current.compareTo(maximum) > 0) { + boolean ignore = config.getIgnoreVersionCheck().equals(current.getVersion()); + Level level = ignore ? Level.WARNING : Level.SEVERE; + logger.log(level, line); + logger.log(level, ""); + logger.log(level, "This version of ProtocolLib (" + getDescription().getVersion() + ") has not been tested with Minecraft " + current.getVersion() + " and is likely not work as expected."); + if(ignore) { + logger.log(level, "As you configured ProtocolLib to ignore this, ProtocolLib will attempt to continue initialization. Proceed with caution!"); + } else { + logger.log(level, "ProtocolLib will be **DISABLED** now. If you want to ignore this error, set \"ignore version check: '" + current.getVersion() + "'\" in 'plugins/ProtocolLib/config.yml' and restart the server. Proceed with caution and expect errors!"); } - if (current.compareTo(maximum) > 0) { - logger.warning("Version " + current + " has not yet been tested! Proceed with caution."); + logger.log(level, "Check https://github.com/dmulloy2/ProtocolLib/releases for new releases of ProtocolLib and https://ci.dmulloy2.net/job/ProtocolLib/ for the latest development builds, which might support minecraft " + current.getVersion()); + logger.log(level, ""); + logger.log(level, line); + + if(!ignore) { + return null; } }