package net.minecraft.world.item; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; 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.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; public class SolidBucketItem extends BlockItem implements DispensibleContainerItem { private final SoundEvent placeSound; public SolidBucketItem(Block block, SoundEvent placeSound, Item.Properties properties) { super(block, properties); this.placeSound = placeSound; } @Override public InteractionResult useOn(UseOnContext context) { InteractionResult interactionResult = super.useOn(context); Player player = context.getPlayer(); if (interactionResult.consumesAction() && player != null) { player.setItemInHand(context.getHand(), BucketItem.getEmptySuccessItem(context.getItemInHand(), player)); } return interactionResult; } @Override protected SoundEvent getPlaceSound(BlockState state) { return this.placeSound; } @Override public boolean emptyContents(@Nullable LivingEntity entity, Level level, BlockPos pos, @Nullable BlockHitResult hitResult) { if (level.isInWorldBounds(pos) && level.isEmptyBlock(pos)) { if (!level.isClientSide) { level.setBlock(pos, this.getBlock().defaultBlockState(), 3); } level.gameEvent(entity, GameEvent.FLUID_PLACE, pos); level.playSound(entity, pos, this.placeSound, SoundSource.BLOCKS, 1.0F, 1.0F); return true; } else { return false; } } }