minecraft-source/src/net/minecraft/world/level/block/DropperBlock.java

72 lines
2.5 KiB
Java

package net.minecraft.world.level.block;
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
import net.minecraft.world.Container;
import net.minecraft.core.BlockSource;
import net.minecraft.world.level.block.entity.HopperBlockEntity;
import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.DispenserBlockEntity;
import net.minecraft.core.BlockSourceImpl;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.DropperBlockEntity;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.item.ItemStack;
import net.minecraft.core.dispenser.DispenseItemBehavior;
public class DropperBlock extends DispenserBlock {
private static final DispenseItemBehavior DISPENSE_BEHAVIOUR;
public DropperBlock(final Properties c) {
super(c);
}
@Override
protected DispenseItemBehavior getDispenseMethod(final ItemStack bek) {
return DropperBlock.DISPENSE_BEHAVIOUR;
}
@Override
public BlockEntity newBlockEntity(final BlockGetter bjd) {
return new DropperBlockEntity();
}
@Override
protected void dispenseFrom(final Level bjt, final BlockPos fk) {
final BlockSourceImpl fm4 = new BlockSourceImpl(bjt, fk);
final DispenserBlockEntity bwr5 = fm4.<DispenserBlockEntity>getEntity();
final int integer6 = bwr5.getRandomSlot();
if (integer6 < 0) {
bjt.levelEvent(1001, fk, 0);
return;
}
final ItemStack bek7 = bwr5.getItem(integer6);
if (bek7.isEmpty()) {
return;
}
final Direction fp8 = bjt.getBlockState(fk).<Direction>getValue((Property<Direction>)DropperBlock.FACING);
final Container ajb9 = HopperBlockEntity.getContainerAt(bjt, fk.relative(fp8));
ItemStack bek8;
if (ajb9 == null) {
bek8 = DropperBlock.DISPENSE_BEHAVIOUR.dispense(fm4, bek7);
}
else {
bek8 = HopperBlockEntity.addItem(bwr5, ajb9, bek7.copy().split(1), fp8.getOpposite());
if (bek8.isEmpty()) {
bek8 = bek7.copy();
bek8.shrink(1);
}
else {
bek8 = bek7.copy();
}
}
bwr5.setItem(integer6, bek8);
}
static {
DISPENSE_BEHAVIOUR = new DefaultDispenseItemBehavior();
}
}