mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-25 09:59:15 +00:00
Improve BlockEntity ticking isRemoved check
Co-Authored-By: kidofcubes <40485669+kidofcubes@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
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 23446968f9b42f904da189fb6bc3a6fe15c01fe7..919ad58aef8f3c9705cb67f209e22760ec50ab1d 100644
|
||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
@@ -1013,15 +1013,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
|
||||
@@ -1031,6 +1045,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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user