9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2026-01-04 15:41:40 +00:00
Files
Leaf/leaf-server/minecraft-patches/features/0216-Improve-BlockEntity-ticking-isRemoved-check.patch
Dreeam 9a4efaa230 Drop patch that causes performance regression
Originally vanilla logic is to use stream, and Mojang switched it to Guava's Collections2
since 1.21.4. It is much faster than using stream or manually adding to a new ArrayList.
Manually adding to a new ArrayList requires allocating a new object array. However, the Collections2
lazy handles filter condition on iteration, so much better.
2025-08-04 19:25:56 +08:00

58 lines
2.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: kidofcubes <kidofcubes@gmail.com>
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 7538f9c84e8463502f4fa1b4a84a4ac84a11e87d..514a918fff9bf60293fbfa6def4a2f9fead30825 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -1023,15 +1023,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
@@ -1041,6 +1055,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();
}