Skip to content

Do not attempt to enable ProtocoLib on untested versions #2719

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions src/main/java/com/comphenix/protocol/CommandProtocol.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.
*
Expand Down Expand Up @@ -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();
Expand Down
71 changes: 45 additions & 26 deletions src/main/java/com/comphenix/protocol/ProtocolLib.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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.
*
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}
}

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}
}

Expand Down