From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: kidofcubes Date: Sun, 16 Feb 2025 00:51:24 +0800 Subject: [PATCH] Improve BlockEntity ticking isRemoved check Uses direct reference for isRemoved check in BlockEntity ticking, reducing cost caused by nested wrapper calls Leaf (Before): ~15104ms Leaf (After): ~628ms (-96%) This should help for massive hopper chains or hopper matrix. diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java index 8d8d909c4b9496ae6f44ba34203ee40433d37f8c..e82e55ec400c5e338502ed7ce433372a88d4acff 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java @@ -1016,15 +1016,29 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p static class RebindableTickingBlockEntityWrapper implements TickingBlockEntity { private TickingBlockEntity ticker; private BlockPos cachedPos; // Leaf - Cache tile entity position + private @Nullable BlockEntity blockEntityReference = null; // Leaf - Improve BlockEntity ticking isRemoved check RebindableTickingBlockEntityWrapper(TickingBlockEntity ticker) { this.ticker = ticker; this.cachedPos = this.ticker.getPos(); // Leaf - Cache tile entity position + // Leaf start - Improve BlockEntity ticking isRemoved check + if (ticker instanceof BoundTickingBlockEntity boundTicker) { + blockEntityReference = boundTicker.blockEntity; + } + // Leaf end - Improve BlockEntity ticking isRemoved check + } void rebind(TickingBlockEntity ticker) { this.ticker = ticker; this.cachedPos = this.ticker.getPos(); // Leaf - Cache tile entity position + // Leaf start - Improve BlockEntity ticking isRemoved check + if (ticker instanceof BoundTickingBlockEntity boundTicker) { + blockEntityReference = boundTicker.blockEntity; + } else { + blockEntityReference = null; + } + // Leaf end - Improve BlockEntity ticking isRemoved check } @Override @@ -1034,6 +1048,11 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @Override public boolean isRemoved() { + // Leaf start - Improve BlockEntity ticking isRemoved check + if (blockEntityReference != null) { + return blockEntityReference.isRemoved(); + } + // Leaf end - Improve BlockEntity ticking isRemoved check return this.ticker.isRemoved(); }