From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Sat, 8 Feb 2025 05:32:30 +0100 Subject: [PATCH] Cache supporting block check diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java index 80ad278eac81aac72d6ec7737287ad018eff7c54..9bc978ca290ca772b0367e89b69fe16b502b0cd2 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -1083,12 +1083,36 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.mainSupportingBlockPos.isPresent() && this.mainSupportingBlockPos.get().equals(pos); } + // Leaf start - Cache supporting block check + private boolean canSkipSupportingBlockSearch = false; + private BlockState cachedSupportingBlockState = null; + // Leaf end - Cache supporting block check + protected void checkSupportingBlock(boolean onGround, @Nullable Vec3 movement) { + // Leaf start - Cache supporting block check + // Skip full check if no movement and cache is valid + if (movement == null || (movement.x == 0 && movement.z == 0 && movement.y == 0)) { + if (canSkipSupportingBlockSearch) { + return; + } + } else { + // Invalidate cache on movement + canSkipSupportingBlockSearch = false; + cachedSupportingBlockState = null; + } + // Leaf end - Cache supporting block check if (onGround) { AABB boundingBox = this.getBoundingBox(); AABB aabb = new AABB(boundingBox.minX, boundingBox.minY - 1.0E-6, boundingBox.minZ, boundingBox.maxX, boundingBox.minY, boundingBox.maxZ); Optional optional = this.level.findSupportingBlock(this, aabb); if (optional.isPresent() || this.onGroundNoBlocks) { + // Leaf start - Cache supporting block check + if (optional.isPresent()) { // Cache the block state if found + BlockPos pos = optional.get(); + cachedSupportingBlockState = this.level.getBlockState(pos); + canSkipSupportingBlockSearch = true; + } + // Leaf end - Cache supporting block check this.mainSupportingBlockPos = optional; } else if (movement != null) { AABB aabb1 = aabb.move(-movement.x, 0.0, -movement.z); @@ -1105,6 +1129,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } + + // Leaf start - Cache supporting block check + // Helper method to get cached supporting block state + @Nullable + public BlockState getCachedSupportingBlock() { + return canSkipSupportingBlockSearch ? cachedSupportingBlockState : null; + } + // Leaf end - Cache supporting block check + public boolean onGround() { return this.onGround; }