Make sure to remove correct TE during TE tick
See Hydra, March 29th 2021.
This commit is contained in:
parent
f7b4abb259
commit
857852c28a
1 changed files with 45 additions and 0 deletions
|
@ -0,0 +1,45 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Mon, 29 Mar 2021 09:07:25 +0200
|
||||
Subject: [PATCH] Make sure to remove correct TE during TE tick
|
||||
|
||||
This looks like it can cause premature TE removal.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java
|
||||
index 78dcba08d6d796d5d97c8304bf1f1e7d1e650d5d..6581fe0d93a5c2e7b444a44c01726e02d4a28e63 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/World.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/World.java
|
||||
@@ -895,7 +895,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
//this.tileEntityList.remove(tileentity); // Paper - remove unused list
|
||||
// Paper - prevent double chunk lookups
|
||||
Chunk chunk; if ((chunk = this.getChunkIfLoaded(tileentity.getPosition())) != null) { // inlined contents of this.isLoaded(BlockPosition). Reuse the returned chunk instead of looking it up again
|
||||
- chunk.removeTileEntity(tileentity.getPosition());
|
||||
+ chunk.removeTileEntity(tileentity.getPosition(), tileentity); // Paper - remove correct TE
|
||||
}
|
||||
// Paper end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/chunk/Chunk.java b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
||||
index 34a9f7b2f998f77b1279516cd09397ab6c2ac1cc..b9e0a17b66e69a02c216c50614bfac4599a42d16 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java
|
||||
@@ -819,10 +819,18 @@ public class Chunk implements IChunkAccess {
|
||||
|
||||
@Override
|
||||
public void removeTileEntity(BlockPosition blockposition) {
|
||||
+ // Paper start - remove correct TE
|
||||
+ removeTileEntity(blockposition, null);
|
||||
+ }
|
||||
+ public void removeTileEntity(BlockPosition blockposition, TileEntity match) {
|
||||
+ // Paper end
|
||||
if (this.loaded || this.world.s_()) {
|
||||
- TileEntity tileentity = (TileEntity) this.tileEntities.remove(blockposition);
|
||||
+ // Paper start
|
||||
+ TileEntity tileentity = (TileEntity) this.tileEntities.get(blockposition);
|
||||
|
||||
- if (tileentity != null) {
|
||||
+ if (tileentity != null && (match == null || match == tileentity)) {
|
||||
+ this.tileEntities.remove(tileentity);
|
||||
+ // Paper end
|
||||
tileentity.al_();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue