minecraft-source/src/net/minecraft/world/item/ShovelItem.java

72 lines
3.6 KiB
Java

package net.minecraft.world.item;
import net.minecraft.world.level.block.state.AbstractStateHolder;
import com.google.common.collect.Maps;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.level.block.CampfireBlock;
import net.minecraft.sounds.SoundSource;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import java.util.Map;
import net.minecraft.world.level.block.Block;
import java.util.Set;
public class ShovelItem extends DiggerItem {
private static final Set<Block> DIGGABLES;
protected static final Map<Block, BlockState> FLATTENABLES;
public ShovelItem(final Tier bfp, final float float2, final float float3, final Properties a) {
super(float2, float3, bfp, ShovelItem.DIGGABLES, a);
}
@Override
public boolean canDestroySpecial(final BlockState byg) {
final Block bpe3 = byg.getBlock();
return bpe3 == Blocks.SNOW || bpe3 == Blocks.SNOW_BLOCK;
}
@Override
public InteractionResult useOn(final UseOnContext bfw) {
final Level bjt3 = bfw.getLevel();
final BlockPos fk4 = bfw.getClickedPos();
final BlockState byg5 = bjt3.getBlockState(fk4);
if (bfw.getClickedFace() == Direction.DOWN) {
return InteractionResult.PASS;
}
final Player ayg2 = bfw.getPlayer();
final BlockState byg6 = ShovelItem.FLATTENABLES.get(byg5.getBlock());
BlockState byg7 = null;
if (byg6 != null && bjt3.getBlockState(fk4.above()).isAir()) {
bjt3.playSound(ayg2, fk4, SoundEvents.SHOVEL_FLATTEN, SoundSource.BLOCKS, 1.0f, 1.0f);
byg7 = byg6;
}
else if (byg5.getBlock() instanceof CampfireBlock && byg5.<Boolean>getValue((Property<Boolean>)CampfireBlock.LIT)) {
bjt3.levelEvent(null, 1009, fk4, 0);
byg7 = ((AbstractStateHolder<O, BlockState>)byg5).<Comparable, Boolean>setValue((Property<Comparable>)CampfireBlock.LIT, false);
}
if (byg7 != null) {
if (!bjt3.isClientSide) {
bjt3.setBlock(fk4, byg7, 11);
if (ayg2 != null) {
bfw.getItemInHand().<Player>hurtAndBreak(1, ayg2, ayg -> ayg.broadcastBreakEvent(bfw.getHand()));
}
}
return InteractionResult.SUCCESS;
}
return InteractionResult.PASS;
}
static {
DIGGABLES = Sets.<Block>newHashSet(Blocks.CLAY, Blocks.DIRT, Blocks.COARSE_DIRT, Blocks.PODZOL, Blocks.FARMLAND, Blocks.GRASS_BLOCK, Blocks.GRAVEL, Blocks.MYCELIUM, Blocks.SAND, Blocks.RED_SAND, Blocks.SNOW_BLOCK, Blocks.SNOW, Blocks.SOUL_SAND, Blocks.GRASS_PATH, Blocks.WHITE_CONCRETE_POWDER, Blocks.ORANGE_CONCRETE_POWDER, Blocks.MAGENTA_CONCRETE_POWDER, Blocks.LIGHT_BLUE_CONCRETE_POWDER, Blocks.YELLOW_CONCRETE_POWDER, Blocks.LIME_CONCRETE_POWDER, Blocks.PINK_CONCRETE_POWDER, Blocks.GRAY_CONCRETE_POWDER, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Blocks.CYAN_CONCRETE_POWDER, Blocks.PURPLE_CONCRETE_POWDER, Blocks.BLUE_CONCRETE_POWDER, Blocks.BROWN_CONCRETE_POWDER, Blocks.GREEN_CONCRETE_POWDER, Blocks.RED_CONCRETE_POWDER, Blocks.BLACK_CONCRETE_POWDER);
FLATTENABLES = Maps.newHashMap(ImmutableMap.<Block, BlockState>of(Blocks.GRASS_BLOCK, Blocks.GRASS_PATH.defaultBlockState()));
}
}