From 089bb1fc840a250b804e167bfafa77125c21fc04 Mon Sep 17 00:00:00 2001 From: Paint_Ninja Date: Thu, 18 Apr 2024 20:33:15 +0100 Subject: [PATCH] Optimise capabilities a tad, backport of #9886 (#9911) --- .../world/entity/LivingEntity.java.patch | 2 +- .../entity/animal/horse/AbstractHorse.java.patch | 2 +- .../world/entity/player/Player.java.patch | 2 +- .../vehicle/AbstractMinecartContainer.java.patch | 2 +- .../world/entity/vehicle/ChestBoat.java.patch | 2 +- .../entity/AbstractFurnaceBlockEntity.java.patch | 15 +++++++-------- .../entity/BaseContainerBlockEntity.java.patch | 2 +- .../entity/BrewingStandBlockEntity.java.patch | 15 +++++++-------- .../block/entity/ChestBlockEntity.java.patch | 6 +++--- .../ChiseledBookShelfBlockEntity.java.patch | 2 +- .../common/capabilities/CapabilityDispatcher.java | 15 +++++++-------- .../minecraftforge/common/util/LazyOptional.java | 2 +- .../minecraftforge/event/ForgeEventFactory.java | 2 +- 13 files changed, 33 insertions(+), 36 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch index 0e3745c9d3..c963687ea3 100644 --- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch @@ -731,7 +731,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) { -+ if (this.m_6084_() && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) { ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && this.m_6084_()) { + if (facing == null) return handlers[2].cast(); + else if (facing.m_122434_().m_122478_()) return handlers[0].cast(); + else if (facing.m_122434_().m_122479_()) return handlers[1].cast(); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch index bbcf25cee7..cb715900c5 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch @@ -38,7 +38,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.core.Direction facing) { -+ if (this.m_6084_() && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && itemHandler != null) ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && itemHandler != null && this.m_6084_()) + return itemHandler.cast(); + return super.getCapability(capability, facing); + } diff --git a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch index 8111ee9fcb..c9b0c8c81c 100644 --- a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch @@ -452,7 +452,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) { -+ if (this.m_6084_() && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) { ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && this.m_6084_()) { + if (facing == null) return playerJoinedHandler.cast(); + else if (facing.m_122434_().m_122478_()) return playerMainHandler.cast(); + else if (facing.m_122434_().m_122479_()) return playerEquipmentHandler.cast(); diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java.patch index 7217e80531..0c313a2b10 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java.patch @@ -19,7 +19,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.core.Direction facing) { -+ if (this.m_6084_() && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && this.m_6084_()) + return itemHandler.cast(); + return super.getCapability(capability, facing); + } diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch index aed87bec80..2b41a523fb 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch @@ -9,7 +9,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.core.Direction facing) { -+ if (this.m_6084_() && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && this.m_6084_()) + return itemHandler.cast(); + return super.getCapability(capability, facing); + } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch index ae2f00630d..d62fe28afa 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch @@ -153,7 +153,7 @@ } } -@@ -494,5 +_,34 @@ +@@ -494,5 +_,33 @@ p_58342_.m_36491_(itemstack); } @@ -164,13 +164,12 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) { -+ if (!this.f_58859_ && facing != null && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) { -+ if (facing == Direction.UP) -+ return handlers[0].cast(); -+ else if (facing == Direction.DOWN) -+ return handlers[1].cast(); -+ else -+ return handlers[2].cast(); ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && facing != null && !this.f_58859_) { ++ return switch (facing) { ++ case UP -> handlers[0].cast(); ++ case DOWN -> handlers[1].cast(); ++ default -> handlers[2].cast(); ++ }; + } + return super.getCapability(capability, facing); + } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch index a13d9d4a89..058df078b1 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java.patch @@ -11,7 +11,7 @@ + } + + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability cap, @org.jetbrains.annotations.Nullable net.minecraft.core.Direction side) { -+ if (!this.f_58859_ && cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) ++ if (cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && !this.f_58859_) + return itemHandler.cast(); + return super.getCapability(cap, side); + } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch index 996cfe8503..8eca2d7ade 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch @@ -51,7 +51,7 @@ } } -@@ -255,5 +_,34 @@ +@@ -255,5 +_,33 @@ protected AbstractContainerMenu m_6555_(int p_58990_, Inventory p_58991_) { return new BrewingStandMenu(p_58990_, p_58991_, this, this.f_58971_); @@ -62,13 +62,12 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable Direction facing) { -+ if (!this.f_58859_ && facing != null && capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) { -+ if (facing == Direction.UP) -+ return handlers[0].cast(); -+ else if (facing == Direction.DOWN) -+ return handlers[1].cast(); -+ else -+ return handlers[2].cast(); ++ if (capability == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && facing != null && !this.f_58859_) { ++ return switch (facing) { ++ case UP -> handlers[0].cast(); ++ case DOWN -> handlers[1].cast(); ++ default -> handlers[2].cast(); ++ }; + } + return super.getCapability(capability, facing); + } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch index b42737779e..61db310985 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ChestBlockEntity.java.patch @@ -17,7 +17,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability cap, Direction side) { -+ if (!this.f_58859_ && cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) { ++ if (cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && !this.f_58859_) { + if (this.chestHandler == null) + this.chestHandler = net.minecraftforge.common.util.LazyOptional.of(this::createHandler); + return this.chestHandler.cast(); @@ -27,10 +27,10 @@ + + private net.minecraftforge.items.IItemHandlerModifiable createHandler() { + BlockState state = this.m_58900_(); -+ if (!(state.m_60734_() instanceof ChestBlock)) { ++ if (!(state.m_60734_() instanceof ChestBlock chestBlock)) { + return new net.minecraftforge.items.wrapper.InvWrapper(this); + } -+ Container inv = ChestBlock.m_51511_((ChestBlock) state.m_60734_(), state, m_58904_(), m_58899_(), true); ++ Container inv = ChestBlock.m_51511_(chestBlock, state, m_58904_(), m_58899_(), true); + return new net.minecraftforge.items.wrapper.InvWrapper(inv == null ? this : inv); + } + diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch index 1ffb8b57f2..9b75883644 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java.patch @@ -12,7 +12,7 @@ + + @Override + public net.minecraftforge.common.util.LazyOptional getCapability(net.minecraftforge.common.capabilities.Capability cap, @org.jetbrains.annotations.Nullable net.minecraft.core.Direction side) { -+ if (!this.f_58859_ && cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER) ++ if (cap == net.minecraftforge.common.capabilities.ForgeCapabilities.ITEM_HANDLER && !this.f_58859_) + return itemHandler.cast(); + return super.getCapability(cap, side); + } diff --git a/src/main/java/net/minecraftforge/common/capabilities/CapabilityDispatcher.java b/src/main/java/net/minecraftforge/common/capabilities/CapabilityDispatcher.java index 5587ed365e..35cadc5701 100644 --- a/src/main/java/net/minecraftforge/common/capabilities/CapabilityDispatcher.java +++ b/src/main/java/net/minecraftforge/common/capabilities/CapabilityDispatcher.java @@ -7,12 +7,11 @@ package net.minecraftforge.common.capabilities; import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; -import com.google.common.collect.Lists; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.nbt.Tag; import net.minecraft.nbt.CompoundTag; @@ -36,9 +35,9 @@ import org.jetbrains.annotations.Nullable; @MethodsReturnNonnullByDefault public final class CapabilityDispatcher implements INBTSerializable, ICapabilityProvider { - private ICapabilityProvider[] caps; - private INBTSerializable[] writers; - private String[] names; + private final ICapabilityProvider[] caps; + private final INBTSerializable[] writers; + private final String[] names; private final List listeners; public CapabilityDispatcher(Map list, List listeners) @@ -49,9 +48,9 @@ public final class CapabilityDispatcher implements INBTSerializable @SuppressWarnings("unchecked") public CapabilityDispatcher(Map list, List listeners, @Nullable ICapabilityProvider parent) { - List lstCaps = Lists.newArrayList(); - List> lstWriters = Lists.newArrayList(); - List lstNames = Lists.newArrayList(); + List lstCaps = new ArrayList<>(); + List> lstWriters = new ArrayList<>(); + List lstNames = new ArrayList<>(); this.listeners = listeners; if (parent != null) // Parents go first! diff --git a/src/main/java/net/minecraftforge/common/util/LazyOptional.java b/src/main/java/net/minecraftforge/common/util/LazyOptional.java index 9c322904a0..f3549eba47 100644 --- a/src/main/java/net/minecraftforge/common/util/LazyOptional.java +++ b/src/main/java/net/minecraftforge/common/util/LazyOptional.java @@ -48,7 +48,7 @@ public class LazyOptional { // non-null and contains non-null value -> resolved // non-null and contains null -> resolved, but supplier returned null (contract violation) private Mutable resolved; - private Set>> listeners = new HashSet<>(); + private final Set>> listeners = new HashSet<>(); private boolean isValid = true; private static final @NotNull LazyOptional EMPTY = new LazyOptional<>(null); diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index de47ee886e..a06023b495 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -621,7 +621,7 @@ public class ForgeEventFactory private static CapabilityDispatcher gatherCapabilities(AttachCapabilitiesEvent event, @Nullable ICapabilityProvider parent) { MinecraftForge.EVENT_BUS.post(event); - return event.getCapabilities().size() > 0 || parent != null ? new CapabilityDispatcher(event.getCapabilities(), event.getListeners(), parent) : null; + return !event.getCapabilities().isEmpty() || parent != null ? new CapabilityDispatcher(event.getCapabilities(), event.getListeners(), parent) : null; } public static boolean fireSleepingLocationCheck(LivingEntity player, BlockPos sleepingLocation)