Spaces:
Build error
Build error
File size: 8,314 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
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_);
}
} |