Cheap perf

- Replace SmartBlockEntity#behaviours with a Reference2ObjectArrayMap
  for faster iteration and because BehaviorTypes are unique by reference
- SmartBlockEntityTicker#tick improvements
  - Client: 9% of all -> 7% of all
  - Server: 12% of all -> 10% of all
This commit is contained in:
Jozufozu 2024-12-06 15:05:08 -08:00
parent 9631eebe1b
commit 4c5688a055

View file

@ -2,7 +2,6 @@ package com.simibubi.create.foundation.blockEntity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@ -17,6 +16,7 @@ import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour
import com.simibubi.create.foundation.utility.IInteractionChecker;
import com.simibubi.create.api.schematic.nbt.IPartialSafeNBT;
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap;
import net.createmod.ponder.api.VirtualBlockEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
@ -31,7 +31,7 @@ import net.minecraftforge.common.capabilities.ForgeCapabilities;
public abstract class SmartBlockEntity extends CachedRenderBBBlockEntity
implements IPartialSafeNBT, IInteractionChecker, ISpecialBlockEntityItemRequirement, VirtualBlockEntity {
private final Map<BehaviourType<?>, BlockEntityBehaviour> behaviours = new HashMap<>();
private final Map<BehaviourType<?>, BlockEntityBehaviour> behaviours = new Reference2ObjectArrayMap<>();
private boolean initialized = false;
private boolean firstNbtRead = true;
protected int lazyTickRate;