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

64 lines
4.0 KiB
Java

package net.minecraft.world.item;
import net.minecraft.world.level.block.state.AbstractStateHolder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.entity.player.Player;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.level.block.RotatedPillarBlock;
import net.minecraft.sounds.SoundSource;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.level.material.Material;
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 AxeItem extends DiggerItem {
private static final Set<Block> DIGGABLES;
protected static final Map<Block, Block> STRIPABLES;
protected AxeItem(final Tier bfp, final float float2, final float float3, final Properties a) {
super(float2, float3, bfp, AxeItem.DIGGABLES, a);
}
@Override
public float getDestroySpeed(final ItemStack bek, final BlockState byg) {
final Material cok4 = byg.getMaterial();
if (cok4 == Material.WOOD || cok4 == Material.PLANT || cok4 == Material.REPLACEABLE_PLANT || cok4 == Material.BAMBOO) {
return this.speed;
}
return super.getDestroySpeed(bek, byg);
}
@Override
public InteractionResult useOn(final UseOnContext bfw) {
final Level bjt3 = bfw.getLevel();
final BlockPos fk4 = bfw.getClickedPos();
final BlockState byg5 = bjt3.getBlockState(fk4);
final Block bpe6 = AxeItem.STRIPABLES.get(byg5.getBlock());
if (bpe6 != null) {
final Player ayg2 = bfw.getPlayer();
bjt3.playSound(ayg2, fk4, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0f, 1.0f);
if (!bjt3.isClientSide) {
bjt3.setBlock(fk4, ((AbstractStateHolder<O, BlockState>)bpe6.defaultBlockState()).<Direction.Axis, Comparable>setValue(RotatedPillarBlock.AXIS, (Comparable)byg5.<V>getValue((Property<V>)RotatedPillarBlock.AXIS)), 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.OAK_PLANKS, Blocks.SPRUCE_PLANKS, Blocks.BIRCH_PLANKS, Blocks.JUNGLE_PLANKS, Blocks.ACACIA_PLANKS, Blocks.DARK_OAK_PLANKS, Blocks.BOOKSHELF, Blocks.OAK_WOOD, Blocks.SPRUCE_WOOD, Blocks.BIRCH_WOOD, Blocks.JUNGLE_WOOD, Blocks.ACACIA_WOOD, Blocks.DARK_OAK_WOOD, Blocks.OAK_LOG, Blocks.SPRUCE_LOG, Blocks.BIRCH_LOG, Blocks.JUNGLE_LOG, Blocks.ACACIA_LOG, Blocks.DARK_OAK_LOG, Blocks.CHEST, Blocks.PUMPKIN, Blocks.CARVED_PUMPKIN, Blocks.JACK_O_LANTERN, Blocks.MELON, Blocks.LADDER, Blocks.SCAFFOLDING, Blocks.OAK_BUTTON, Blocks.SPRUCE_BUTTON, Blocks.BIRCH_BUTTON, Blocks.JUNGLE_BUTTON, Blocks.DARK_OAK_BUTTON, Blocks.ACACIA_BUTTON, Blocks.OAK_PRESSURE_PLATE, Blocks.SPRUCE_PRESSURE_PLATE, Blocks.BIRCH_PRESSURE_PLATE, Blocks.JUNGLE_PRESSURE_PLATE, Blocks.DARK_OAK_PRESSURE_PLATE, Blocks.ACACIA_PRESSURE_PLATE);
STRIPABLES = new ImmutableMap.Builder<Block, Block>().put(Blocks.OAK_WOOD, Blocks.STRIPPED_OAK_WOOD).put(Blocks.OAK_LOG, Blocks.STRIPPED_OAK_LOG).put(Blocks.DARK_OAK_WOOD, Blocks.STRIPPED_DARK_OAK_WOOD).put(Blocks.DARK_OAK_LOG, Blocks.STRIPPED_DARK_OAK_LOG).put(Blocks.ACACIA_WOOD, Blocks.STRIPPED_ACACIA_WOOD).put(Blocks.ACACIA_LOG, Blocks.STRIPPED_ACACIA_LOG).put(Blocks.BIRCH_WOOD, Blocks.STRIPPED_BIRCH_WOOD).put(Blocks.BIRCH_LOG, Blocks.STRIPPED_BIRCH_LOG).put(Blocks.JUNGLE_WOOD, Blocks.STRIPPED_JUNGLE_WOOD).put(Blocks.JUNGLE_LOG, Blocks.STRIPPED_JUNGLE_LOG).put(Blocks.SPRUCE_WOOD, Blocks.STRIPPED_SPRUCE_WOOD).put(Blocks.SPRUCE_LOG, Blocks.STRIPPED_SPRUCE_LOG).build();
}
}