72 lines
2.5 KiB
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();
|
|
}
|
|
}
|