diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_cap_retrieval/LivingEntityMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_cap_retrieval/LivingEntityMixin.java new file mode 100644 index 00000000..60935b4f --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_cap_retrieval/LivingEntityMixin.java @@ -0,0 +1,24 @@ +package org.embeddedt.modernfix.forge.mixin.perf.forge_cap_retrieval; + +import net.minecraft.core.Direction; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import javax.annotation.Nullable; + +@Mixin(LivingEntity.class) +public class LivingEntityMixin { + /** + * @author embeddedt (issue noted by XFactHD) + * @reason check capability equality before checking that entity is alive, the latter requires a lot more + * indirection + */ + @Redirect(method = "getCapability", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isAlive()Z")) + private boolean checkAliveAfterCap(LivingEntity entity, Capability capability, @Nullable Direction facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && entity.isAlive(); + } +}