mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-28 19:39:17 +00:00
ClassInstanceMultiMap belongs to Minecraft vanilla entity storage. And is unused, since replaced by spottedleaf's entity storage (rewrite chunk system). However these patches might be useful for vanilla entity storage if is used.
58 lines
2.7 KiB
Diff
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();
|
|
}
|
|
|