From cf5eecc1e1f0df43864536b5d54deec79e9b7b1e Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 22 Dec 2014 15:13:29 -0600 Subject: [PATCH] Prevent tile entity and entity based crashes --- ...event-tile-entity-and-entity-crashes.patch | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Spigot-Server-Patches/0043-Prevent-tile-entity-and-entity-crashes.patch diff --git a/Spigot-Server-Patches/0043-Prevent-tile-entity-and-entity-crashes.patch b/Spigot-Server-Patches/0043-Prevent-tile-entity-and-entity-crashes.patch new file mode 100644 index 0000000000..d865f76910 --- /dev/null +++ b/Spigot-Server-Patches/0043-Prevent-tile-entity-and-entity-crashes.patch @@ -0,0 +1,69 @@ +From 96e887420c3cb34ed76db944b598de11af1d4f7b Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 3 Jul 2013 08:29:26 -0400 +Subject: [PATCH] Prevent tile entity and entity crashes + + +diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java +index 76cdc7e..d976515 100644 +--- a/src/main/java/net/minecraft/server/TileEntity.java ++++ b/src/main/java/net/minecraft/server/TileEntity.java +@@ -194,7 +194,13 @@ public abstract class TileEntity { + public void a(CrashReportSystemDetails crashreportsystemdetails) { + crashreportsystemdetails.a("Name", (Callable) (new CrashReportTileEntityName(this))); + if (this.world != null) { +- CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.w(), this.u()); ++ // PaperSpigot start - Prevent tile entity and entity crashes ++ Block block = this.w(); ++ if ( block != null ) ++ { ++ CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.w(), this.u()); ++ } ++ // PaperSpigot end + crashreportsystemdetails.a("Actual block type", (Callable) (new CrashReportTileEntityType(this))); + crashreportsystemdetails.a("Actual block data value", (Callable) (new CrashReportTileEntityData(this))); + } +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 7f1adda..1763c70 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -1409,10 +1409,13 @@ public abstract class World implements IBlockAccess { + this.g(entity); + SpigotTimings.tickEntityTimer.stopTiming(); // Spigot + } catch (Throwable throwable1) { +- crashreport = CrashReport.a(throwable1, "Ticking entity"); +- crashreportsystemdetails = crashreport.a("Entity being ticked"); +- entity.appendEntityCrashDetails(crashreportsystemdetails); +- throw new ReportedException(crashreport); ++ // PaperSpigot start - Prevent tile entity and entity crashes ++ SpigotTimings.tickEntityTimer.stopTiming(); ++ System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ); ++ throwable1.printStackTrace(); ++ entity.dead = true; ++ continue; ++ // PaperSpigot end + } + } + +@@ -1468,11 +1471,13 @@ public abstract class World implements IBlockAccess { + tileentity.tickTimer.startTiming(); // Spigot + ((IUpdatePlayerListBox) tileentity).c(); + } catch (Throwable throwable2) { +- CrashReport crashreport1 = CrashReport.a(throwable2, "Ticking block entity"); +- CrashReportSystemDetails crashreportsystemdetails1 = crashreport1.a("Block entity being ticked"); +- +- tileentity.a(crashreportsystemdetails1); +- throw new ReportedException(crashreport1); ++ // PaperSpigot start - Prevent tile entity and entity crashes ++ tileentity.tickTimer.stopTiming(); ++ System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ()); ++ throwable2.printStackTrace(); ++ iterator.remove(); ++ continue; ++ // PaperSpigot end + } + // Spigot start + finally { +-- +1.9.5.msysgit.0 +