package com.minelittlepony.unicopia.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.minelittlepony.unicopia.diet.DietView; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.world.World; @Mixin(ItemStack.class) abstract class MixinItemStack { @Inject(method = "use", at = @At("HEAD"), cancellable = true) private void onUse(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable> info) { ItemStack self = (ItemStack)(Object)this; TypedActionResult result = ((DietView.Holder)self.getItem()).getDiets(self).startUsing(self, world, user, hand); if (result.getResult() != ActionResult.PASS) { info.setReturnValue(result); } } @Inject(method = "finishUsing", at = @At("HEAD")) private void onFinishUsing(World world, LivingEntity user, CallbackInfoReturnable info) { ItemStack self = (ItemStack)(Object)this; ((DietView.Holder)self.getItem()).getDiets(self).finishUsing(self, world, user); } }