From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:07:36 +0800 Subject: [PATCH] Cache blockstate cache array Cache values to reduce allocations. (See `Reduce array allocations` patch for full explanation) The JMH benchmark of this patch can be found in SunBox's `CachedEnumValuesForLoop` diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java index 331474bb33c8612283a0ec478c1ae8768180b22d..84f4d772bfe06383ca718b6a00d983e97e2e35f4 100644 --- a/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -1047,6 +1047,10 @@ public abstract class BlockBehaviour implements FeatureElement { static final class Cache { private static final Direction[] DIRECTIONS = Direction.values(); private static final int SUPPORT_TYPE_COUNT = SupportType.values().length; + // Leaf start - Cache blockstate cache array + private static final SupportType[] SUPPORT_TYPE_VALUES = SupportType.values(); + private static final Direction.Axis[] DIRECTION_AXIS_VALUES = Direction.Axis.values(); + // Leaf end - Cache blockstate cache array protected final VoxelShape collisionShape; protected boolean largeCollisionShape; private final boolean[] faceSturdy; @@ -1065,7 +1069,7 @@ public abstract class BlockBehaviour implements FeatureElement { ); } else { // Leaf start - Remove stream in BlockBehaviour cache blockstate - for (Direction.Axis axis : Direction.Axis.values()) { + for (Direction.Axis axis : DIRECTION_AXIS_VALUES) { // Leaf - Cache blockstate cache array if (this.collisionShape.min(axis) < 0.0 || this.collisionShape.max(axis) > 1.0) { this.largeCollisionShape = true; break; @@ -1075,7 +1079,7 @@ public abstract class BlockBehaviour implements FeatureElement { this.faceSturdy = new boolean[DIRECTIONS.length * SUPPORT_TYPE_COUNT]; for (Direction direction : DIRECTIONS) { - for (SupportType supportType : SupportType.values()) { + for (SupportType supportType : SUPPORT_TYPE_VALUES) { // Leaf - Cache blockstate cache array this.faceSturdy[getFaceSupportIndex(direction, supportType)] = supportType.isSupporting( state, EmptyBlockGetter.INSTANCE, BlockPos.ZERO, direction );