Implement hopper check
This commit is contained in:
parent
7f3072128f
commit
ff0f7cc18d
|
@ -4,6 +4,7 @@ import io.izzel.arclight.common.bridge.core.entity.EntityBridge;
|
|||
import io.izzel.arclight.common.bridge.core.inventory.IInventoryBridge;
|
||||
import io.izzel.arclight.common.bridge.core.tileentity.TileEntityBridge;
|
||||
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
|
||||
import io.izzel.arclight.common.mod.util.DistValidate;
|
||||
import io.izzel.arclight.mixin.Eject;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -31,10 +32,12 @@ import org.spongepowered.asm.mixin.Mixin;
|
|||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
@Mixin(HopperBlockEntity.class)
|
||||
public abstract class HopperBlockEntityMixin extends LockableBlockEntityMixin {
|
||||
|
@ -42,11 +45,21 @@ public abstract class HopperBlockEntityMixin extends LockableBlockEntityMixin {
|
|||
// @formatter:off
|
||||
@Shadow private NonNullList<ItemStack> items;
|
||||
@Shadow public abstract void setItem(int index, ItemStack stack);
|
||||
@Shadow private static boolean tryMoveItems(Level p_155579_, BlockPos p_155580_, BlockState p_155581_, HopperBlockEntity p_155582_, BooleanSupplier p_155583_) { return false; }
|
||||
// @formatter:on
|
||||
|
||||
public List<HumanEntity> transaction = new ArrayList<>();
|
||||
private int maxStack = MAX_STACK;
|
||||
|
||||
@Redirect(method = "pushItemsTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/HopperBlockEntity;tryMoveItems(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/entity/HopperBlockEntity;Ljava/util/function/BooleanSupplier;)Z"))
|
||||
private static boolean arclight$hopperCheck(Level level, BlockPos pos, BlockState state, HopperBlockEntity hopper, BooleanSupplier flag) {
|
||||
var result = tryMoveItems(level, pos, state, hopper, flag);
|
||||
if (!result && DistValidate.isValid(level) && ((WorldBridge) level).bridge$spigotConfig().hopperCheck > 1) {
|
||||
hopper.setCooldown(((WorldBridge) level).bridge$spigotConfig().hopperCheck);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Eject(method = "ejectItems", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/HopperBlockEntity;addItem(Lnet/minecraft/world/Container;Lnet/minecraft/world/Container;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/core/Direction;)Lnet/minecraft/world/item/ItemStack;"))
|
||||
private static ItemStack arclight$moveItem(Container source, Container destination, ItemStack stack, Direction direction, CallbackInfoReturnable<Boolean> cir, Level level, BlockPos p_155564_, BlockState p_155565_, HopperBlockEntity entity) {
|
||||
CraftItemStack original = CraftItemStack.asCraftMirror(stack);
|
||||
|
|
Loading…
Reference in New Issue
Block a user