package net.radsteve.islanders.mixin; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.block.entity.HopperBlockEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Direction; import net.radsteve.islanders.SpecialItem; 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.CallbackInfo; @Mixin(HopperBlockEntity.class) public class HopperBlockEntityMixin { @Inject(method = "onEntityCollided", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/HopperBlockEntity;insertAndExtract(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/block/entity/HopperBlockEntity;Ljava/util/function/BooleanSupplier;)Z"), cancellable = true) private static void islanders$onEntityCollided(CallbackInfo ci, @Local ItemEntity entity) { if (SpecialItem.Companion.find(entity.getStack()) != null) { ci.cancel(); } } @WrapMethod(method = "canInsert") private static boolean islanders$canInsert(Inventory inventory, ItemStack stack, int slot, Direction side, Operation original) { return original.call(inventory, stack, slot, side) && SpecialItem.Companion.find(stack) == null; } }