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 504aaa8fe43092442c3426c96d41dacb03371578..2e5d4b8fc6a0ec6692eac63bce13b3f32d3f3e76 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -1104,12 +1104,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); @@ -1126,6 +1150,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; }