Spaces:
Build error
Build error
package net.minecraft.world.item; | |
import javax.annotation.Nullable; | |
import net.minecraft.advancements.CriteriaTriggers; | |
import net.minecraft.core.BlockPos; | |
import net.minecraft.core.Direction; | |
import net.minecraft.core.particles.ParticleTypes; | |
import net.minecraft.server.level.ServerPlayer; | |
import net.minecraft.sounds.SoundEvent; | |
import net.minecraft.sounds.SoundEvents; | |
import net.minecraft.sounds.SoundSource; | |
import net.minecraft.stats.Stats; | |
import net.minecraft.tags.FluidTags; | |
import net.minecraft.world.InteractionHand; | |
import net.minecraft.world.InteractionResult; | |
import net.minecraft.world.entity.player.Player; | |
import net.minecraft.world.level.ClipContext; | |
import net.minecraft.world.level.Level; | |
import net.minecraft.world.level.LevelAccessor; | |
import net.minecraft.world.level.block.Block; | |
import net.minecraft.world.level.block.BucketPickup; | |
import net.minecraft.world.level.block.LiquidBlockContainer; | |
import net.minecraft.world.level.block.state.BlockState; | |
import net.minecraft.world.level.gameevent.GameEvent; | |
import net.minecraft.world.level.material.FlowingFluid; | |
import net.minecraft.world.level.material.Fluid; | |
import net.minecraft.world.level.material.Fluids; | |
import net.minecraft.world.phys.BlockHitResult; | |
import net.minecraft.world.phys.HitResult; | |
public class BucketItem extends Item implements DispensibleContainerItem { | |
private final Fluid content; | |
public BucketItem(Fluid p_40689_, Item.Properties p_40690_) { | |
super(p_40690_); | |
this.content = p_40689_; | |
} | |
public InteractionResult use(Level p_40703_, Player p_40704_, InteractionHand p_40705_) { | |
ItemStack itemstack = p_40704_.getItemInHand(p_40705_); | |
BlockHitResult blockhitresult = getPlayerPOVHitResult(p_40703_, p_40704_, this.content == Fluids.EMPTY ? ClipContext.Fluid.SOURCE_ONLY : ClipContext.Fluid.NONE); | |
if (blockhitresult.getType() == HitResult.Type.MISS) { | |
return InteractionResult.PASS; | |
} else if (blockhitresult.getType() != HitResult.Type.BLOCK) { | |
return InteractionResult.PASS; | |
} else { | |
BlockPos blockpos = blockhitresult.getBlockPos(); | |
Direction direction = blockhitresult.getDirection(); | |
BlockPos blockpos1 = blockpos.relative(direction); | |
if (!p_40703_.mayInteract(p_40704_, blockpos) || !p_40704_.mayUseItemAt(blockpos1, direction, itemstack)) { | |
return InteractionResult.FAIL; | |
} else if (this.content == Fluids.EMPTY) { | |
BlockState blockstate1 = p_40703_.getBlockState(blockpos); | |
if (blockstate1.getBlock() instanceof BucketPickup bucketpickup) { | |
ItemStack itemstack3 = bucketpickup.pickupBlock(p_40704_, p_40703_, blockpos, blockstate1); | |
if (!itemstack3.isEmpty()) { | |
p_40704_.awardStat(Stats.ITEM_USED.get(this)); | |
bucketpickup.getPickupSound().ifPresent(p_150709_ -> p_40704_.playSound(p_150709_, 1.0F, 1.0F)); | |
p_40703_.gameEvent(p_40704_, GameEvent.FLUID_PICKUP, blockpos); | |
ItemStack itemstack2 = ItemUtils.createFilledResult(itemstack, p_40704_, itemstack3); | |
if (!p_40703_.isClientSide) { | |
CriteriaTriggers.FILLED_BUCKET.trigger((ServerPlayer)p_40704_, itemstack3); | |
} | |
return InteractionResult.SUCCESS.heldItemTransformedTo(itemstack2); | |
} | |
} | |
return InteractionResult.FAIL; | |
} else { | |
BlockState blockstate = p_40703_.getBlockState(blockpos); | |
BlockPos blockpos2 = blockstate.getBlock() instanceof LiquidBlockContainer && this.content == Fluids.WATER ? blockpos : blockpos1; | |
if (this.emptyContents(p_40704_, p_40703_, blockpos2, blockhitresult)) { | |
this.checkExtraContent(p_40704_, p_40703_, itemstack, blockpos2); | |
if (p_40704_ instanceof ServerPlayer) { | |
CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)p_40704_, blockpos2, itemstack); | |
} | |
p_40704_.awardStat(Stats.ITEM_USED.get(this)); | |
ItemStack itemstack1 = ItemUtils.createFilledResult(itemstack, p_40704_, getEmptySuccessItem(itemstack, p_40704_)); | |
return InteractionResult.SUCCESS.heldItemTransformedTo(itemstack1); | |
} else { | |
return InteractionResult.FAIL; | |
} | |
} | |
} | |
} | |
public static ItemStack getEmptySuccessItem(ItemStack p_40700_, Player p_40701_) { | |
return !p_40701_.hasInfiniteMaterials() ? new ItemStack(Items.BUCKET) : p_40700_; | |
} | |
public void checkExtraContent( { Player p_150711_, Level p_150712_, ItemStack p_150713_, BlockPos p_150714_) | |
} | |
public boolean emptyContents( { Player p_150716_, Level p_150717_, BlockPos p_150718_, BlockHitResult p_150719_) | |
if (!(this.content instanceof FlowingFluid flowingfluid)) { | |
return false; | |
} else { | |
Block $$7; | |
boolean $$8; | |
BlockState blockstate; | |
boolean flag2; | |
label82: { | |
blockstate = p_150717_.getBlockState(p_150718_); | |
$$7 = blockstate.getBlock(); | |
$$8 = blockstate.canBeReplaced(this.content); | |
label70: | |
if (!blockstate.isAir() && !$$8) { | |
if ($$7 instanceof LiquidBlockContainer liquidblockcontainer | |
&& liquidblockcontainer.canPlaceLiquid(p_150716_, p_150717_, p_150718_, blockstate, this.content)) { | |
break label70; | |
} | |
flag2 = false; | |
break label82; | |
} | |
flag2 = true; | |
} | |
boolean flag1 = flag2; | |
if (!flag1) { | |
return p_150719_ != null && this.emptyContents(p_150716_, p_150717_, p_150719_.getBlockPos().relative(p_150719_.getDirection()), null); | |
} else if (p_150717_.dimensionType().ultraWarm() && this.content.is(FluidTags.WATER)) { | |
int l = p_150718_.getX(); | |
int i = p_150718_.getY(); | |
int j = p_150718_.getZ(); | |
p_150717_.playSound( | |
p_150716_, | |
p_150718_, | |
SoundEvents.FIRE_EXTINGUISH, | |
SoundSource.BLOCKS, | |
0.5F, | |
2.6F + (p_150717_.random.nextFloat() - p_150717_.random.nextFloat()) * 0.8F | |
); | |
for (int k = 0; k < 8; k++) { | |
p_150717_.addParticle(ParticleTypes.LARGE_SMOKE, (double)l + Math.random(), (double)i + Math.random(), (double)j + Math.random(), 0.0, 0.0, 0.0); | |
} | |
return true; | |
} else { | |
if ($$7 instanceof LiquidBlockContainer liquidblockcontainer1 && this.content == Fluids.WATER) { | |
liquidblockcontainer1.placeLiquid(p_150717_, p_150718_, blockstate, flowingfluid.getSource(false)); | |
this.playEmptySound(p_150716_, p_150717_, p_150718_); | |
return true; | |
} | |
if (!p_150717_.isClientSide && $$8 && !blockstate.liquid()) { | |
p_150717_.destroyBlock(p_150718_, true); | |
} | |
if (!p_150717_.setBlock(p_150718_, this.content.defaultFluidState().createLegacyBlock(), 11) && !blockstate.getFluidState().isSource()) { | |
return false; | |
} else { | |
this.playEmptySound(p_150716_, p_150717_, p_150718_); | |
return true; | |
} | |
} | |
} | |
} | |
protected void playEmptySound( { Player p_40696_, LevelAccessor p_40697_, BlockPos p_40698_) | |
SoundEvent soundevent = this.content.is(FluidTags.LAVA) ? SoundEvents.BUCKET_EMPTY_LAVA : SoundEvents.BUCKET_EMPTY; | |
p_40697_.playSound(p_40696_, p_40698_, soundevent, SoundSource.BLOCKS, 1.0F, 1.0F); | |
p_40697_.gameEvent(p_40696_, GameEvent.FLUID_PLACE, p_40698_); | |
} | |
} |