106 lines
4.9 KiB
Java
106 lines
4.9 KiB
Java
package net.minecraft.world.item;
|
|
|
|
import net.minecraft.world.level.block.state.properties.Property;
|
|
import net.minecraft.core.Direction;
|
|
import net.minecraft.core.BlockSource;
|
|
import net.minecraft.core.dispenser.DefaultDispenseItemBehavior;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.level.block.state.properties.RailShape;
|
|
import net.minecraft.world.level.block.BaseRailBlock;
|
|
import net.minecraft.tags.BlockTags;
|
|
import net.minecraft.world.InteractionResult;
|
|
import net.minecraft.world.level.ItemLike;
|
|
import net.minecraft.world.level.block.DispenserBlock;
|
|
import net.minecraft.world.entity.vehicle.AbstractMinecart;
|
|
import net.minecraft.core.dispenser.DispenseItemBehavior;
|
|
|
|
public class MinecartItem extends Item {
|
|
private static final DispenseItemBehavior DISPENSE_ITEM_BEHAVIOR;
|
|
private final AbstractMinecart.Type type;
|
|
|
|
public MinecartItem(final AbstractMinecart.Type a, final Properties a) {
|
|
super(a);
|
|
this.type = a;
|
|
DispenserBlock.registerBehavior(this, MinecartItem.DISPENSE_ITEM_BEHAVIOR);
|
|
}
|
|
|
|
@Override
|
|
public InteractionResult useOn(final UseOnContext bfw) {
|
|
final Level bjt3 = bfw.getLevel();
|
|
final BlockPos fk4 = bfw.getClickedPos();
|
|
final BlockState byg5 = bjt3.getBlockState(fk4);
|
|
if (!byg5.is(BlockTags.RAILS)) {
|
|
return InteractionResult.FAIL;
|
|
}
|
|
final ItemStack bek6 = bfw.getItemInHand();
|
|
if (!bjt3.isClientSide) {
|
|
final RailShape bzk7 = (byg5.getBlock() instanceof BaseRailBlock) ? byg5.<RailShape>getValue(((BaseRailBlock)byg5.getBlock()).getShapeProperty()) : RailShape.NORTH_SOUTH;
|
|
double double8 = 0.0;
|
|
if (bzk7.isAscending()) {
|
|
double8 = 0.5;
|
|
}
|
|
final AbstractMinecart azu10 = AbstractMinecart.createMinecart(bjt3, fk4.getX() + 0.5, fk4.getY() + 0.0625 + double8, fk4.getZ() + 0.5, this.type);
|
|
if (bek6.hasCustomHoverName()) {
|
|
azu10.setCustomName(bek6.getHoverName());
|
|
}
|
|
bjt3.addFreshEntity(azu10);
|
|
}
|
|
bek6.shrink(1);
|
|
return InteractionResult.SUCCESS;
|
|
}
|
|
|
|
static {
|
|
DISPENSE_ITEM_BEHAVIOR = new DefaultDispenseItemBehavior() {
|
|
private final DefaultDispenseItemBehavior defaultDispenseItemBehavior = new DefaultDispenseItemBehavior();
|
|
|
|
public ItemStack execute(final BlockSource fl, final ItemStack bek) {
|
|
final Direction fp4 = fl.getBlockState().<Direction>getValue((Property<Direction>)DispenserBlock.FACING);
|
|
final Level bjt5 = fl.getLevel();
|
|
final double double6 = fl.x() + fp4.getStepX() * 1.125;
|
|
final double double7 = Math.floor(fl.y()) + fp4.getStepY();
|
|
final double double8 = fl.z() + fp4.getStepZ() * 1.125;
|
|
final BlockPos fk12 = fl.getPos().relative(fp4);
|
|
final BlockState byg13 = bjt5.getBlockState(fk12);
|
|
final RailShape bzk14 = (byg13.getBlock() instanceof BaseRailBlock) ? byg13.<RailShape>getValue(((BaseRailBlock)byg13.getBlock()).getShapeProperty()) : RailShape.NORTH_SOUTH;
|
|
double double9;
|
|
if (byg13.is(BlockTags.RAILS)) {
|
|
if (bzk14.isAscending()) {
|
|
double9 = 0.6;
|
|
}
|
|
else {
|
|
double9 = 0.1;
|
|
}
|
|
}
|
|
else {
|
|
if (!byg13.isAir() || !bjt5.getBlockState(fk12.below()).is(BlockTags.RAILS)) {
|
|
return this.defaultDispenseItemBehavior.dispense(fl, bek);
|
|
}
|
|
final BlockState byg14 = bjt5.getBlockState(fk12.below());
|
|
final RailShape bzk15 = (byg14.getBlock() instanceof BaseRailBlock) ? byg14.<RailShape>getValue(((BaseRailBlock)byg14.getBlock()).getShapeProperty()) : RailShape.NORTH_SOUTH;
|
|
if (fp4 == Direction.DOWN || !bzk15.isAscending()) {
|
|
double9 = -0.9;
|
|
}
|
|
else {
|
|
double9 = -0.4;
|
|
}
|
|
}
|
|
final AbstractMinecart azu17 = AbstractMinecart.createMinecart(bjt5, double6, double7 + double9, double8, ((MinecartItem)bek.getItem()).type);
|
|
if (bek.hasCustomHoverName()) {
|
|
azu17.setCustomName(bek.getHoverName());
|
|
}
|
|
bjt5.addFreshEntity(azu17);
|
|
bek.shrink(1);
|
|
return bek;
|
|
}
|
|
|
|
@Override
|
|
protected void playSound(final BlockSource fl) {
|
|
fl.getLevel().levelEvent(1000, fl.getPos(), 0);
|
|
}
|
|
};
|
|
}
|
|
}
|