spigot/CraftBukkit-Patches/0059-Prevent-NoClassDefError-crash-and-notify-on-crash.patch

70 lines
3.9 KiB
Diff
Raw Normal View History

2022-06-08 02:00:00 +10:00
From 0f095875b3f6f37c37daf0d9caba4696b533a73a Mon Sep 17 00:00:00 2001
From: David <dmck2b@gmail.com>
Date: Mon, 21 Apr 2014 12:43:08 +0100
Subject: [PATCH] Prevent NoClassDefError crash and notify on crash
2021-03-16 09:00:00 +11:00
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
2022-06-08 02:00:00 +10:00
index 60e47cf63..57f63aa83 100644
2021-03-16 09:00:00 +11:00
--- a/src/main/java/net/minecraft/world/level/World.java
+++ b/src/main/java/net/minecraft/world/level/World.java
2022-06-08 02:00:00 +10:00
@@ -151,6 +151,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
2019-04-23 12:00:00 +10:00
public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot
2016-03-01 08:33:06 +11:00
public final SpigotTimings.WorldTimingsHandler timings; // Spigot
+ public static BlockPosition lastPhysicsProblem; // Spigot
2016-03-01 08:33:06 +11:00
public CraftWorld getWorld() {
return this.world;
2022-06-08 02:00:00 +10:00
@@ -377,7 +378,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
// CraftBukkit start
if (!this.captureBlockStates) { // Don't notify clients or update physics while capturing blockstates
// Modularize client and physic updates
2020-07-07 09:40:59 +10:00
- notifyAndUpdatePhysics(blockposition, chunk, iblockdata1, iblockdata, iblockdata2, i, j);
+ // Spigot start
+ try {
2020-07-07 09:40:59 +10:00
+ notifyAndUpdatePhysics(blockposition, chunk, iblockdata1, iblockdata, iblockdata2, i, j);
+ } catch (StackOverflowError ex) {
+ lastPhysicsProblem = new BlockPosition(blockposition);
+ }
+ // Spigot end
}
// CraftBukkit end
2022-06-08 02:00:00 +10:00
diff --git a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
index 934fa443c..ca37ef601 100644
--- a/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/NeighborUpdater.java
@@ -64,6 +64,10 @@ public interface NeighborUpdater {
}
// CraftBukkit end
iblockdata.neighborChanged(world, blockposition, block, blockposition1, flag);
+ // Spigot Start
2022-06-08 02:00:00 +10:00
+ } catch (StackOverflowError ex) {
+ world.lastPhysicsProblem = new BlockPosition(blockposition);
+ // Spigot End
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Exception while updating neighbours");
CrashReportSystemDetails crashreportsystemdetails = crashreport.addCategory("Block being updated");
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
2021-03-16 09:00:00 +11:00
index 4734d4ae8..b4eeeb0d0 100644
--- a/src/main/java/org/spigotmc/WatchdogThread.java
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
@@ -74,6 +74,13 @@ public class WatchdogThread extends Thread
log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" );
log.log( Level.SEVERE, "Spigot version: " + Bukkit.getServer().getVersion() );
//
2021-03-16 09:00:00 +11:00
+ if ( net.minecraft.world.level.World.lastPhysicsProblem != null )
+ {
+ log.log( Level.SEVERE, "------------------------------" );
+ log.log( Level.SEVERE, "During the run of the server, a physics stackoverflow was supressed" );
2021-03-16 09:00:00 +11:00
+ log.log( Level.SEVERE, "near " + net.minecraft.world.level.World.lastPhysicsProblem );
+ }
+ //
log.log( Level.SEVERE, "------------------------------" );
log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Spigot!):" );
2019-04-23 12:00:00 +10:00
dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log );
--
2.25.1