Code/net/minecraft/world/level/block/BarrierBlock.java

101 lines
3.9 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.world.level.block;
import com.mojang.serialization.MapCodec;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.ScheduledTickAccess;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
public class BarrierBlock extends Block implements SimpleWaterloggedBlock {
public static final MapCodec<BarrierBlock> CODEC = simpleCodec(BarrierBlock::new);
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
@Override
public MapCodec<BarrierBlock> codec() {
return CODEC;
}
protected BarrierBlock(BlockBehaviour.Properties p_49092_) {
super(p_49092_);
this.registerDefaultState(this.defaultBlockState().setValue(WATERLOGGED, false));
}
@Override
protected boolean propagatesSkylightDown(BlockState p_49100_) {
return p_49100_.getFluidState().isEmpty();
}
@Override
protected RenderShape getRenderShape(BlockState p_49098_) {
return RenderShape.INVISIBLE;
}
@Override
protected float getShadeBrightness(BlockState p_49094_, BlockGetter p_49095_, BlockPos p_49096_) {
return 1.0F;
}
@Override
protected BlockState updateShape(
BlockState p_298183_,
LevelReader p_368824_,
ScheduledTickAccess p_364556_,
BlockPos p_297885_,
Direction p_298685_,
BlockPos p_299701_,
BlockState p_298648_,
RandomSource p_365489_
) {
if (p_298183_.getValue(WATERLOGGED)) {
p_364556_.scheduleTick(p_297885_, Fluids.WATER, Fluids.WATER.getTickDelay(p_368824_));
}
return super.updateShape(p_298183_, p_368824_, p_364556_, p_297885_, p_298685_, p_299701_, p_298648_, p_365489_);
}
@Override
protected FluidState getFluidState(BlockState p_301306_) {
return p_301306_.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(p_301306_);
}
@Nullable
@Override
public BlockState getStateForPlacement(BlockPlaceContext p_298919_) {
return this.defaultBlockState().setValue(WATERLOGGED, p_298919_.getLevel().getFluidState(p_298919_.getClickedPos()).getType() == Fluids.WATER);
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> p_297868_) {
p_297868_.add(WATERLOGGED);
}
@Override
public ItemStack pickupBlock(@Nullable LivingEntity p_394107_, LevelAccessor p_299225_, BlockPos p_298270_, BlockState p_298275_) {
return p_394107_ instanceof Player player && player.isCreative()
? SimpleWaterloggedBlock.super.pickupBlock(p_394107_, p_299225_, p_298270_, p_298275_)
: ItemStack.EMPTY;
}
@Override
public boolean canPlaceLiquid(@Nullable LivingEntity p_396046_, BlockGetter p_299765_, BlockPos p_297382_, BlockState p_299344_, Fluid p_299153_) {
return p_396046_ instanceof Player player && player.isCreative()
? SimpleWaterloggedBlock.super.canPlaceLiquid(p_396046_, p_299765_, p_297382_, p_299344_, p_299153_)
: false;
}
}