mirror of
https://github.com/filoghost/ChestCommands.git
synced 2025-02-21 14:01:21 +01:00
Handle unexpected exceptions better at startup
This commit is contained in:
parent
4a5c06398f
commit
36bb378e69
@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands;
|
package me.filoghost.chestcommands;
|
||||||
|
|
||||||
|
import me.filoghost.chestcommands.util.Utils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
@ -28,29 +29,42 @@ public abstract class BaseJavaPlugin extends JavaPlugin {
|
|||||||
try {
|
try {
|
||||||
onCheckedEnable();
|
onCheckedEnable();
|
||||||
} catch (PluginEnableException e) {
|
} catch (PluginEnableException e) {
|
||||||
criticalShutdown(e.getMessage());
|
criticalShutdown(e.getMessage(), null);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
criticalShutdown(null, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void onCheckedEnable() throws PluginEnableException;
|
protected abstract void onCheckedEnable() throws PluginEnableException;
|
||||||
|
|
||||||
|
|
||||||
private void criticalShutdown(String errorMessage) {
|
private void criticalShutdown(String errorMessage, Throwable throwable) {
|
||||||
Bukkit.getConsoleSender().sendMessage(getFatalErrorPrefix() + " " + errorMessage);
|
Bukkit.getConsoleSender().sendMessage(getErrorMessage(errorMessage, throwable));
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(this, () -> {
|
Bukkit.getScheduler().runTaskLater(this, () -> {
|
||||||
Bukkit.getConsoleSender().sendMessage(getPostStartupMessage(errorMessage));
|
Bukkit.getConsoleSender().sendMessage(
|
||||||
|
getFatalErrorPrefix() + "Fatal error while enabling the plugin. Check previous logs for more information.");
|
||||||
}, 10);
|
}, 10);
|
||||||
|
|
||||||
setEnabled(false);
|
setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getPostStartupMessage(String errorMessage) {
|
protected String getErrorMessage(String errorMessage, Throwable throwable) {
|
||||||
List<String> output = new ArrayList<>();
|
List<String> output = new ArrayList<>();
|
||||||
|
|
||||||
output.add(getFatalErrorPrefix());
|
if (throwable != null) {
|
||||||
|
output.add(getFatalErrorPrefix() + "Fatal unexpected error while enabling plugin:");
|
||||||
|
} else {
|
||||||
|
output.add(getFatalErrorPrefix() + "Fatal error while enabling plugin:");
|
||||||
|
}
|
||||||
|
if (throwable != null) {
|
||||||
|
output.add(" ");
|
||||||
|
output.add(Utils.getStackTraceString(throwable));
|
||||||
|
}
|
||||||
output.add(" ");
|
output.add(" ");
|
||||||
output.add(errorMessage);
|
if (errorMessage != null) {
|
||||||
|
output.add(errorMessage);
|
||||||
|
}
|
||||||
output.add("The plugin has been disabled.");
|
output.add("The plugin has been disabled.");
|
||||||
output.add(" ");
|
output.add(" ");
|
||||||
|
|
||||||
@ -58,7 +72,7 @@ public abstract class BaseJavaPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getFatalErrorPrefix() {
|
private String getFatalErrorPrefix() {
|
||||||
return ChatColor.DARK_RED + "[" + getDescription().getName() + "] " + ChatColor.RED + "Fatal error while enabling plugin:";
|
return ChatColor.DARK_RED + "[" + getDescription().getName() + "] " + ChatColor.RED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,13 +20,12 @@ import me.filoghost.chestcommands.config.framework.exception.ConfigSyntaxExcepti
|
|||||||
import me.filoghost.chestcommands.legacy.UpgradeExecutorException;
|
import me.filoghost.chestcommands.legacy.UpgradeExecutorException;
|
||||||
import me.filoghost.chestcommands.legacy.upgrade.UpgradeTaskException;
|
import me.filoghost.chestcommands.legacy.upgrade.UpgradeTaskException;
|
||||||
import me.filoghost.chestcommands.parsing.ParseException;
|
import me.filoghost.chestcommands.parsing.ParseException;
|
||||||
|
import me.filoghost.chestcommands.util.Utils;
|
||||||
import me.filoghost.chestcommands.util.logging.ErrorCollector;
|
import me.filoghost.chestcommands.util.logging.ErrorCollector;
|
||||||
import me.filoghost.chestcommands.util.logging.ErrorInfo;
|
import me.filoghost.chestcommands.util.logging.ErrorInfo;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -77,7 +76,7 @@ public class PrintableErrorCollector extends ErrorCollector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printError(StringBuilder output, ErrorPrintInfo error) {
|
private static void printError(StringBuilder output, ErrorPrintInfo error) {
|
||||||
output.append(ChatColor.YELLOW).append(error.getIndex()).append(") ");
|
output.append(ChatColor.YELLOW).append(error.getIndex()).append(") ");
|
||||||
output.append(ChatColor.WHITE).append(MessagePartJoiner.join(error.getMessage()));
|
output.append(ChatColor.WHITE).append(MessagePartJoiner.join(error.getMessage()));
|
||||||
|
|
||||||
@ -90,17 +89,11 @@ public class PrintableErrorCollector extends ErrorCollector {
|
|||||||
if (error.getCause() != null) {
|
if (error.getCause() != null) {
|
||||||
output.append(ChatColor.DARK_GRAY);
|
output.append(ChatColor.DARK_GRAY);
|
||||||
output.append("--------[ Exception details ]--------\n");
|
output.append("--------[ Exception details ]--------\n");
|
||||||
output.append(getStackTraceString(error.getCause()));
|
output.append(Utils.getStackTraceString(error.getCause()));
|
||||||
output.append("-------------------------------------\n");
|
output.append("-------------------------------------\n");
|
||||||
}
|
}
|
||||||
output.append(" \n");
|
output.append(" \n");
|
||||||
output.append(ChatColor.RESET);
|
output.append(ChatColor.RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getStackTraceString(Throwable throwable) {
|
|
||||||
StringWriter stringWriter = new StringWriter();
|
|
||||||
throwable.printStackTrace(new PrintWriter(stringWriter));
|
|
||||||
return stringWriter.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
*/
|
*/
|
||||||
package me.filoghost.chestcommands.util;
|
package me.filoghost.chestcommands.util;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
|
||||||
public static boolean isClassLoaded(String name) {
|
public static boolean isClassLoaded(String name) {
|
||||||
@ -40,4 +43,10 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getStackTraceString(Throwable throwable) {
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
throwable.printStackTrace(new PrintWriter(stringWriter));
|
||||||
|
return stringWriter.toString();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user