From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: ishland Date: Wed, 27 Jan 2021 23:35:30 +0800 Subject: [PATCH] Suspected plugins report Added "Suspected Plugins" to Watchdog, crash reports and exception messages diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java index 9b7a51890c667601b195ff15b2bf0d6c76c7f19f..d7dd6208d1fc47dd95badecaaee0ed98292a5f7f 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java @@ -87,6 +87,8 @@ public class CrashReport { if (this.h != null && this.h.length > 0) { stringbuilder.append("-- Head --\n"); stringbuilder.append("Thread: ").append(Thread.currentThread().getName()).append("\n"); + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(this.h, stringbuilder::append); // Yatopia - detailed report + stringbuilder.append("\n"); // Yatopia stringbuilder.append("Stacktrace:\n"); StackTraceElement[] astacktraceelement = this.h; int i = astacktraceelement.length; diff --git a/src/main/java/net/minecraft/network/NetworkManager.java b/src/main/java/net/minecraft/network/NetworkManager.java index f46488155d8bd07719a282e4a1027562973dbef6..db2df0f83efa013187529eabfbbeff257012cc76 100644 --- a/src/main/java/net/minecraft/network/NetworkManager.java +++ b/src/main/java/net/minecraft/network/NetworkManager.java @@ -423,6 +423,11 @@ public class NetworkManager extends SimpleChannelInboundHandler> { channelfuture.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); // Paper start } catch (Exception e) { + // Yatopia - detailed report + LOGGER.error("Encountered unexpected exception sending packets"); + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(e, LOGGER::error); + LOGGER.error(org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW); + // Yatopia end LOGGER.error("NetworkException: " + player, e); close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage()));; packet.onPacketDispatchFinish(player, null); @@ -462,6 +467,11 @@ public class NetworkManager extends SimpleChannelInboundHandler> { channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); // Paper start } catch (Exception e) { + // Yatopia start - detailed report + LOGGER.error("Encountered unexpected exception sending packets"); + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(e, LOGGER::error); + LOGGER.error(org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW); + // Yatopia end LOGGER.error("NetworkException: " + player, e); close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage()));; packet.onPacketDispatchFinish(player, null); @@ -497,6 +507,11 @@ public class NetworkManager extends SimpleChannelInboundHandler> { channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); // Paper start } catch (Exception e) { + // Yatopia start - detailed report + LOGGER.error("Encountered unexpected exception sending packets"); + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(e, LOGGER::error); + LOGGER.error(org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW); + // Yatopia end LOGGER.error("NetworkException: " + player, e); close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage()));; packet.onPacketDispatchFinish(player, null); diff --git a/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java b/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java index 71a000edfab27c9965d1929af78582821d5af97a..5c5ac70b4dae5d51303ab974261055aaefb5aec2 100644 --- a/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java +++ b/src/main/java/net/minecraft/network/protocol/PlayerConnectionUtils.java @@ -57,6 +57,11 @@ public class PlayerConnectionUtils { // Paper start catch (Exception e) { NetworkManager networkmanager = t0.a(); + // Yatopia start - detailed report + LOGGER.error("Encountered unexpected exception sending packets"); + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(e, LOGGER::error); + LOGGER.error(org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW); + // Yatopia end if (networkmanager.getPlayer() != null) { LOGGER.error("Error whilst processing packet {} for {}[{}]", packet, networkmanager.getPlayer().getName(), networkmanager.getSocketAddress(), e); } else { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 0f7fec04ac5c46dec5947be337499f4f93df39f0..89ddf0b9ac4a7aef44d15b5797ec54715a012260 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1158,7 +1158,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant task.getOwner().getLogger().log(Level.SEVERE, _msg)); + task.getOwner().getLogger().log(Level.SEVERE, org.yatopiamc.yatopia.api.internal.StackTraceUtils.EXCEPTION_DETAILS_BELOW, throwable); + // Yatopia end } org.bukkit.Bukkit.getServer().getPluginManager().callEvent( new ServerExceptionEvent(new ServerSchedulerException(msg, throwable, task))); @@ -493,6 +497,7 @@ public class CraftScheduler implements BukkitScheduler { // We don't need to parse pending // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } + lastSyncTask = null; // Yatopia - detailed report final long period = task.getPeriod(); // State consistency if (period > 0) { task.setNextRun(currentTick + period); @@ -646,4 +651,10 @@ public class CraftScheduler implements BukkitScheduler { }; } // Paper end + // Yatopia start - detailed report + private volatile CraftTask lastSyncTask = null; + public CraftTask getLastSyncTask() { + return lastSyncTask; + } + // Yatopia end } diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java index 1b92b3d2c696fa4ef86a2d2a58eeb447bb3d2739..d29bdfc2288189e43e2ddbfae1b794c6c9a27333 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -134,6 +134,15 @@ public class WatchdogThread extends Thread log.log(Level.SEVERE, "Handling packet for connection: " + packetListener); } } + // Yatopia start - detailed report - Scheduler + if (Bukkit.getScheduler() instanceof org.bukkit.craftbukkit.scheduler.CraftScheduler) { + final org.bukkit.craftbukkit.scheduler.CraftScheduler scheduler = (org.bukkit.craftbukkit.scheduler.CraftScheduler) Bukkit.getScheduler(); + final org.bukkit.craftbukkit.scheduler.CraftTask lastSyncTask = scheduler.getLastSyncTask(); + if (lastSyncTask != null) { + log.log(Level.SEVERE, "Running task " + lastSyncTask.getTaskId() + " for '" + lastSyncTask.getOwner().getDescription().getFullName() + "', TaskClass: " + lastSyncTask.getTaskClass()); + } + } else log.log(Level.SEVERE, "Unofficial scheduler, unable to get task information"); + // Yatopia end } // Tuinity end - log detailed tick information @@ -265,6 +274,10 @@ public class WatchdogThread extends Thread log.log( Level.SEVERE, "\t\tLocked on:" + monitor.getLockedStackFrame() ); } } + // Yatopia start - dump plugins info + org.yatopiamc.yatopia.api.internal.StackTraceUtils.print(thread.getStackTrace(), msg -> log.log(Level.SEVERE, msg)); + log.log(Level.SEVERE, ""); + // Yatopia end log.log( Level.SEVERE, "\tStack:" ); // for ( StackTraceElement stack : thread.getStackTrace() )