From 5e5d11f13b5583b1fc2d481c3eb5eec0230ca9f7 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/Prevent-tile-entity-and-entity-crashes.patch diff --git a/Spigot-Server-Patches/Prevent-tile-entity-and-entity-crashes.patch b/Spigot-Server-Patches/Prevent-tile-entity-and-entity-crashes.patch new file mode 100644 index 0000000000..c06683fa65 --- /dev/null +++ b/Spigot-Server-Patches/Prevent-tile-entity-and-entity-crashes.patch @@ -0,0 +1,69 @@ +From 0000000000000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/TileEntity.java ++++ b/src/main/java/net/minecraft/server/TileEntity.java +@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -0,0 +0,0 @@ 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 + } + } + +@@ -0,0 +0,0 @@ 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 +