mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-04 02:01:44 +01:00
276afaa2ea
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: c2d72c82 SPIGOT-3102: Add EXPLOSION SpawnReason CraftBukkit Changes:fca41573
SPIGOT-5136: EntityPortalEvent getting called on interdimensional entity teleports604c8bf0
SPIGOT-3102: Add EXPLOSION SpawnReason375969a6
Re-add chunk GC for plugin chunk loads58151368
SPIGOT-5123: Snapshot tile entities can end up with a non-null world491c8482
SPIGOT-5130: PersistentDataContainer not removing values on TileEntities Spigot Changes: d05d3c1f Rebuild patches
68 lines
3.6 KiB
Diff
68 lines
3.6 KiB
Diff
From 0dbbc4d55f0d3ef9913bafb08a34bc1f608a6f97 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Tue, 1 Mar 2016 23:52:34 -0600
|
|
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 22a8ea916a..e1db243165 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
|
@@ -193,7 +193,12 @@ public abstract class TileEntity implements KeyedObject { // Paper
|
|
return IRegistry.BLOCK_ENTITY_TYPE.getKey(this.q()) + " // " + this.getClass().getCanonicalName();
|
|
});
|
|
if (this.world != null) {
|
|
- CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.getBlock());
|
|
+ // Paper start - Prevent TileEntity and Entity crashes
|
|
+ IBlockData block = this.getBlock();
|
|
+ if (block != null) {
|
|
+ CrashReportSystemDetails.a(crashreportsystemdetails, this.position, block);
|
|
+ }
|
|
+ // Paper end
|
|
CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.world.getType(this.position));
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index bdb69afab6..1915dd9145 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -714,11 +714,13 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
|
|
|
|
gameprofilerfiller.exit();
|
|
} catch (Throwable throwable) {
|
|
- CrashReport crashreport = CrashReport.a(throwable, "Ticking block entity");
|
|
- CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Block entity being ticked");
|
|
-
|
|
- tileentity.a(crashreportsystemdetails);
|
|
- throw new ReportedException(crashreport);
|
|
+ // Paper start - Prevent tile entity and entity crashes
|
|
+ System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ());
|
|
+ throwable.printStackTrace();
|
|
+ tilesThisCycle--;
|
|
+ this.tileEntityListTick.remove(tileTickPosition--);
|
|
+ continue;
|
|
+ // Paper end
|
|
}
|
|
// Spigot start
|
|
finally {
|
|
@@ -787,11 +789,12 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
|
|
// Spigot end
|
|
consumer.accept(entity);
|
|
} catch (Throwable throwable) {
|
|
- CrashReport crashreport = CrashReport.a(throwable, "Ticking entity");
|
|
- CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity being ticked");
|
|
-
|
|
- entity.appendEntityCrashDetails(crashreportsystemdetails);
|
|
- throw new ReportedException(crashreport);
|
|
+ // Paper start - Prevent tile entity and entity crashes
|
|
+ System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ);
|
|
+ throwable.printStackTrace();
|
|
+ entity.dead = true;
|
|
+ return;
|
|
+ // Paper end
|
|
} finally {
|
|
entity.tickTimer.stopTiming();
|
|
timings.tickEntities.stopTiming();
|
|
--
|
|
2.22.0
|
|
|