diff --git a/src/main/java/com/github/shap_po/shappoli/mixin/integration/trinkets/LivingEntityMixin.java b/src/main/java/com/github/shap_po/shappoli/mixin/integration/trinkets/LivingEntityMixin.java index 30c8291..50eb034 100644 --- a/src/main/java/com/github/shap_po/shappoli/mixin/integration/trinkets/LivingEntityMixin.java +++ b/src/main/java/com/github/shap_po/shappoli/mixin/integration/trinkets/LivingEntityMixin.java @@ -1,6 +1,7 @@ package com.github.shap_po.shappoli.mixin.integration.trinkets; import com.github.shap_po.shappoli.integration.trinkets.power.ActionOnTrinketUpdatePower; +import com.github.shap_po.shappoli.util.InventoryUtil; import dev.emi.trinkets.api.SlotType; import dev.emi.trinkets.api.TrinketInventory; import dev.emi.trinkets.api.TrinketsApi; @@ -46,6 +47,8 @@ private void tick(CallbackInfo info) { ItemStack newStack = inventory.getStack(index); ItemStack newStackCopy = newStack.copy(); // old stack is removed when unequipped + InventoryUtil.setHolder(newStack, entity); // link the stack to the player, so it can be used in powers + if (!ItemStack.areEqual(newStack, oldStack)) { // Call unequip powers on old trinket PowerHolderComponent.withPower(entity, ActionOnTrinketUpdatePower.class, diff --git a/src/main/java/com/github/shap_po/shappoli/power/factory/action/ItemActions.java b/src/main/java/com/github/shap_po/shappoli/power/factory/action/ItemActions.java index 7720a37..73ad2ba 100644 --- a/src/main/java/com/github/shap_po/shappoli/power/factory/action/ItemActions.java +++ b/src/main/java/com/github/shap_po/shappoli/power/factory/action/ItemActions.java @@ -2,7 +2,7 @@ import com.github.shap_po.shappoli.power.ActionOnEventReceivePower; import com.github.shap_po.shappoli.power.factory.action.meta.SendEventAction; -import io.github.apace100.apoli.access.EntityLinkedItemStack; +import com.github.shap_po.shappoli.util.InventoryUtil; import io.github.apace100.apoli.power.factory.action.ActionFactory; import io.github.apace100.apoli.registry.ApoliRegistries; import net.minecraft.inventory.StackReference; @@ -14,7 +14,7 @@ public class ItemActions { public static void register() { register( SendEventAction.getFactory( - worldAndStack -> ((EntityLinkedItemStack) (Object) worldAndStack.getRight().get()).apoli$getEntity(), + worldAndStack -> InventoryUtil.getHolder(worldAndStack.getRight().get()), ActionOnEventReceivePower::receiveItemEvent ) ); diff --git a/src/main/java/com/github/shap_po/shappoli/power/factory/condition/item/HolderCondition.java b/src/main/java/com/github/shap_po/shappoli/power/factory/condition/item/HolderCondition.java index f3e665d..6691838 100644 --- a/src/main/java/com/github/shap_po/shappoli/power/factory/condition/item/HolderCondition.java +++ b/src/main/java/com/github/shap_po/shappoli/power/factory/condition/item/HolderCondition.java @@ -1,7 +1,7 @@ package com.github.shap_po.shappoli.power.factory.condition.item; import com.github.shap_po.shappoli.Shappoli; -import io.github.apace100.apoli.access.EntityLinkedItemStack; +import com.github.shap_po.shappoli.util.InventoryUtil; import io.github.apace100.apoli.data.ApoliDataTypes; import io.github.apace100.apoli.power.factory.condition.ConditionFactory; import io.github.apace100.apoli.power.factory.condition.ItemConditions; @@ -15,7 +15,7 @@ public class HolderCondition { public static boolean condition(SerializableData.Instance data, Pair worldAndStack) { - Entity holder = ((EntityLinkedItemStack) (Object) worldAndStack.getRight()).apoli$getEntity(); + Entity holder = InventoryUtil.getHolder(worldAndStack.getRight()); Predicate entityCondition = data.get("condition"); return holder != null && entityCondition != null && entityCondition.test(holder); } diff --git a/src/main/java/com/github/shap_po/shappoli/util/InventoryUtil.java b/src/main/java/com/github/shap_po/shappoli/util/InventoryUtil.java new file mode 100644 index 0000000..7d02d86 --- /dev/null +++ b/src/main/java/com/github/shap_po/shappoli/util/InventoryUtil.java @@ -0,0 +1,19 @@ +package com.github.shap_po.shappoli.util; + +import io.github.apace100.apoli.access.EntityLinkedItemStack; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; + +@SuppressWarnings({"UnusedReturnValue"}) +public class InventoryUtil { + @SuppressWarnings({"ConstantConditions"}) + public static Entity getHolder(ItemStack stack) { + return ((EntityLinkedItemStack) (Object) stack).apoli$getEntity(); + } + + @SuppressWarnings({"ConstantConditions"}) + public static ItemStack setHolder(ItemStack stack, Entity holder) { + ((EntityLinkedItemStack) (Object) stack).apoli$setEntity(holder); + return stack; + } +}