soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
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_;
}
@Override
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_;
}
@Override
public void checkExtraContent(@Nullable Player p_150711_, Level p_150712_, ItemStack p_150713_, BlockPos p_150714_) {
}
@Override
public boolean emptyContents(@Nullable Player p_150716_, Level p_150717_, BlockPos p_150718_, @Nullable 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(@Nullable 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_);
}
}