mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-31 04:46:38 +00:00
Drop patch that causes performance regression
Originally vanilla logic is to use stream, and Mojang switched it to Guava's Collections2 since 1.21.4. It is much faster than using stream or manually adding to a new ArrayList. Manually adding to a new ArrayList requires allocating a new object array. However, the Collections2 lazy handles filter condition on iteration, so much better.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
);
|
||||
Reference in New Issue
Block a user