mod for the islanders smp
1package net.radsteve.islanders.mixin;
2
3import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
4import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
6import com.llamalad7.mixinextras.sugar.Local;
7import net.minecraft.block.entity.HopperBlockEntity;
8import net.minecraft.entity.ItemEntity;
9import net.minecraft.inventory.Inventory;
10import net.minecraft.item.ItemStack;
11import net.minecraft.util.math.Direction;
12import net.radsteve.islanders.SpecialItem;
13import org.spongepowered.asm.mixin.Mixin;
14import org.spongepowered.asm.mixin.injection.At;
15import org.spongepowered.asm.mixin.injection.Inject;
16import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
17
18@Mixin(HopperBlockEntity.class)
19public class HopperBlockEntityMixin {
20 @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)
21 private static void islanders$onEntityCollided(CallbackInfo ci, @Local ItemEntity entity) {
22 if (SpecialItem.Companion.find(entity.getStack()) != null) {
23 ci.cancel();
24 }
25 }
26
27 @WrapMethod(method = "canInsert")
28 private static boolean islanders$canInsert(Inventory inventory, ItemStack stack, int slot, Direction side, Operation<Boolean> original) {
29 return original.call(inventory, stack, slot, side) && SpecialItem.Companion.find(stack) == null;
30 }
31}