geforkt von Mirrors/Paper
233814297b
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.
69 Zeilen
3.7 KiB
Diff
69 Zeilen
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
|
|
|