From 96497ccc98d403461c564fd9f55e9c0988755836 Mon Sep 17 00:00:00 2001 From: Niklas Widmann Date: Fri, 17 Oct 2025 11:35:53 +0200 Subject: [PATCH] create lazy supplier for cures to fix early holder access crashes --- .../mixin/common/MobEffectInstanceMixin.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/modules/entity/src/main/java/io/github/fabricators_of_create/porting_lib/entity/mixin/common/MobEffectInstanceMixin.java b/modules/entity/src/main/java/io/github/fabricators_of_create/porting_lib/entity/mixin/common/MobEffectInstanceMixin.java index 1787a1cd..9995917c 100644 --- a/modules/entity/src/main/java/io/github/fabricators_of_create/porting_lib/entity/mixin/common/MobEffectInstanceMixin.java +++ b/modules/entity/src/main/java/io/github/fabricators_of_create/porting_lib/entity/mixin/common/MobEffectInstanceMixin.java @@ -1,5 +1,7 @@ package io.github.fabricators_of_create.porting_lib.entity.mixin.common; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import com.google.common.collect.Sets; import com.llamalad7.mixinextras.injector.ModifyReturnValue; @@ -30,25 +32,17 @@ public class MobEffectInstanceMixin implements MobEffectInstanceInjection { private Holder effect; @Unique - private final Set porting_lib$cures = Sets.newIdentityHashSet(); + private final Supplier> porting_lib$cures = Suppliers.memoize(() -> { + var set = Sets.newIdentityHashSet(); + this.effect.value().fillEffectCures(set, MixinHelper.cast(this)); + return set; + }); /** * {@return the {@link EffectCure}s which can cure the {@link MobEffect} held by this {@link MobEffectInstance}} */ public Set getCures() { - return porting_lib$cures; - } - - @Inject(method = "(Lnet/minecraft/core/Holder;IIZZZLnet/minecraft/world/effect/MobEffectInstance;)V", at = @At("TAIL")) - private void addEffects(Holder holder, int duration, int amplifier, boolean ambient, boolean visible, boolean showIcon, MobEffectInstance hiddenEffect, CallbackInfo ci) { - this.effect.value().fillEffectCures(this.porting_lib$cures, MixinHelper.cast(this)); - } - - @Inject(method = "(Lnet/minecraft/core/Holder;Lnet/minecraft/world/effect/MobEffectInstance$Details;)V", at = @At("TAIL")) - private void loadEffects(Holder effect, MobEffectInstance.Details details, CallbackInfo ci) { - Set cures = getCures(); - cures.clear(); - ((MobEffectInstance$DetailsInjection) (Object) details).port_lib$getCures().ifPresent(cures::addAll); + return porting_lib$cures.get(); } @ModifyReturnValue(method = "asDetails", at = @At("RETURN"))