Spaces:
Build error
Build error
package net.minecraft.world.item; | |
import com.google.common.collect.ImmutableMap.Builder; | |
import java.util.Map; | |
import java.util.Optional; | |
import javax.annotation.Nullable; | |
import net.minecraft.advancements.CriteriaTriggers; | |
import net.minecraft.core.BlockPos; | |
import net.minecraft.server.level.ServerPlayer; | |
import net.minecraft.sounds.SoundEvents; | |
import net.minecraft.sounds.SoundSource; | |
import net.minecraft.tags.BlockTags; | |
import net.minecraft.world.InteractionHand; | |
import net.minecraft.world.InteractionResult; | |
import net.minecraft.world.entity.LivingEntity; | |
import net.minecraft.world.entity.player.Player; | |
import net.minecraft.world.item.context.UseOnContext; | |
import net.minecraft.world.level.Level; | |
import net.minecraft.world.level.block.Block; | |
import net.minecraft.world.level.block.Blocks; | |
import net.minecraft.world.level.block.RotatedPillarBlock; | |
import net.minecraft.world.level.block.WeatheringCopper; | |
import net.minecraft.world.level.block.state.BlockState; | |
import net.minecraft.world.level.gameevent.GameEvent; | |
public class AxeItem extends DiggerItem { | |
protected static final Map<Block, Block> STRIPPABLES = new 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.PALE_OAK_WOOD, Blocks.STRIPPED_PALE_OAK_WOOD) | |
.put(Blocks.PALE_OAK_LOG, Blocks.STRIPPED_PALE_OAK_LOG) | |
.put(Blocks.ACACIA_WOOD, Blocks.STRIPPED_ACACIA_WOOD) | |
.put(Blocks.ACACIA_LOG, Blocks.STRIPPED_ACACIA_LOG) | |
.put(Blocks.CHERRY_WOOD, Blocks.STRIPPED_CHERRY_WOOD) | |
.put(Blocks.CHERRY_LOG, Blocks.STRIPPED_CHERRY_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) | |
.put(Blocks.WARPED_STEM, Blocks.STRIPPED_WARPED_STEM) | |
.put(Blocks.WARPED_HYPHAE, Blocks.STRIPPED_WARPED_HYPHAE) | |
.put(Blocks.CRIMSON_STEM, Blocks.STRIPPED_CRIMSON_STEM) | |
.put(Blocks.CRIMSON_HYPHAE, Blocks.STRIPPED_CRIMSON_HYPHAE) | |
.put(Blocks.MANGROVE_WOOD, Blocks.STRIPPED_MANGROVE_WOOD) | |
.put(Blocks.MANGROVE_LOG, Blocks.STRIPPED_MANGROVE_LOG) | |
.put(Blocks.BAMBOO_BLOCK, Blocks.STRIPPED_BAMBOO_BLOCK) | |
.build(); | |
public AxeItem(ToolMaterial p_365403_, float p_363626_, float p_361899_, Item.Properties p_40524_) { | |
super(p_365403_, BlockTags.MINEABLE_WITH_AXE, p_363626_, p_361899_, p_40524_); | |
} | |
public InteractionResult useOn(UseOnContext p_40529_) { | |
Level level = p_40529_.getLevel(); | |
BlockPos blockpos = p_40529_.getClickedPos(); | |
Player player = p_40529_.getPlayer(); | |
if (playerHasShieldUseIntent(p_40529_)) { | |
return InteractionResult.PASS; | |
} else { | |
Optional<BlockState> optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); | |
if (optional.isEmpty()) { | |
return InteractionResult.PASS; | |
} else { | |
ItemStack itemstack = p_40529_.getItemInHand(); | |
if (player instanceof ServerPlayer) { | |
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger((ServerPlayer)player, blockpos, itemstack); | |
} | |
level.setBlock(blockpos, optional.get(), 11); | |
level.gameEvent(GameEvent.BLOCK_CHANGE, blockpos, GameEvent.Context.of(player, optional.get())); | |
if (player != null) { | |
itemstack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(p_40529_.getHand())); | |
} | |
return InteractionResult.SUCCESS; | |
} | |
} | |
} | |
private static boolean playerHasShieldUseIntent(UseOnContext p_343474_) { | |
Player player = p_343474_.getPlayer(); | |
return p_343474_.getHand().equals(InteractionHand.MAIN_HAND) && player.getOffhandItem().is(Items.SHIELD) && !player.isSecondaryUseActive(); | |
} | |
private Optional<BlockState> evaluateNewBlockState(Level p_312809_, BlockPos p_313114_, { Player p_312029_, BlockState p_311198_) | |
Optional<BlockState> optional = this.getStripped(p_311198_); | |
if (optional.isPresent()) { | |
p_312809_.playSound(p_312029_, p_313114_, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1.0F, 1.0F); | |
return optional; | |
} else { | |
Optional<BlockState> optional1 = WeatheringCopper.getPrevious(p_311198_); | |
if (optional1.isPresent()) { | |
p_312809_.playSound(p_312029_, p_313114_, SoundEvents.AXE_SCRAPE, SoundSource.BLOCKS, 1.0F, 1.0F); | |
p_312809_.levelEvent(p_312029_, 3005, p_313114_, 0); | |
return optional1; | |
} else { | |
Optional<BlockState> optional2 = Optional.ofNullable(HoneycombItem.WAX_OFF_BY_BLOCK.get().get(p_311198_.getBlock())) | |
.map(p_150694_ -> p_150694_.withPropertiesOf(p_311198_)); | |
if (optional2.isPresent()) { | |
p_312809_.playSound(p_312029_, p_313114_, SoundEvents.AXE_WAX_OFF, SoundSource.BLOCKS, 1.0F, 1.0F); | |
p_312809_.levelEvent(p_312029_, 3004, p_313114_, 0); | |
return optional2; | |
} else { | |
return Optional.empty(); | |
} | |
} | |
} | |
} | |
private Optional<BlockState> getStripped(BlockState p_150691_) { | |
return Optional.ofNullable(STRIPPABLES.get(p_150691_.getBlock())) | |
.map(p_359378_ -> p_359378_.defaultBlockState().setValue(RotatedPillarBlock.AXIS, p_150691_.getValue(RotatedPillarBlock.AXIS))); | |
} | |
} |