papermc/Spigot-Server-Patches/0035-Prevent-tile-entity-and-entity-crashes.patch
Zach Brown 233814297b Remove the spigot TileEntity/Entity capping feature
It appears to cause visual glitching issues with certain TNT entities
fired from cannons. TileEntity tick capping has already been removed
for some time, Entity tick capping removal is new to this patch.
2015-05-30 01:39:20 -05:00

68 lines
3.7 KiB
Diff

From 920f92b1b9e44d02502394da6ffe1062fcadf453 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 8 Mar 2015 04:37:23 -0500
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 1971941..d258604 100644
--- a/src/main/java/net/minecraft/server/TileEntity.java
+++ b/src/main/java/net/minecraft/server/TileEntity.java
@@ -163,7 +163,12 @@ public abstract class TileEntity {
}
});
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", new Callable() {
public String a() throws Exception {
int i = Block.getId(TileEntity.this.world.getType(TileEntity.this.position).getBlock());
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 530e60f..51e59c0 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
}
}
@@ -1465,11 +1468,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 {
--
2.4.1.windows.1