Create-Design-n-Decor/src/main/java/com/mangomilk/design_decor/blocks/OrnateGrateBlock.java

68 linhas
2,9 KiB
Java

package com.mangomilk.design_decor.blocks;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.GlassBlock;
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
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.FluidState;
import net.minecraft.world.level.material.Fluids;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Objects;
@SuppressWarnings({"unused","deprecation"})
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class OrnateGrateBlock extends GlassBlock implements SimpleWaterloggedBlock, IWrenchable {
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
public OrnateGrateBlock(Properties p_49795_) {
super(p_49795_.isSuffocating(OrnateGrateBlock::never).noOcclusion().isViewBlocking(OrnateGrateBlock::allow));
this.registerDefaultState(this.stateDefinition.any().setValue(WATERLOGGED, Boolean.FALSE));
}
@Override
@Nullable
public BlockState getStateForPlacement(BlockPlaceContext p_51454_) {
FluidState fluidstate = p_51454_.getLevel().getFluidState(p_51454_.getClickedPos());
boolean flag = fluidstate.getType() == Fluids.WATER;
return Objects.requireNonNull(super.getStateForPlacement(p_51454_)).setValue(WATERLOGGED, flag);
}
@Override
public BlockState updateShape(BlockState p_51461_, Direction p_51462_, BlockState p_51463_, LevelAccessor p_51464_, BlockPos p_51465_, BlockPos p_51466_) {
if (p_51461_.getValue(WATERLOGGED)) {
p_51464_.scheduleTick(p_51465_, Fluids.WATER, Fluids.WATER.getTickDelay(p_51464_));
}
return super.updateShape(p_51461_, p_51462_, p_51463_, p_51464_, p_51465_, p_51466_);
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> p_51468_) {
p_51468_.add(WATERLOGGED);
}
@Override
public FluidState getFluidState(BlockState p_51475_) {
return p_51475_.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(p_51475_);
}
private static boolean never(BlockState p_235436_0_, BlockGetter p_235436_1_, BlockPos p_235436_2_) {
return false;
}
private static boolean allow(BlockState p_235436_0_, BlockGetter p_235436_1_, BlockPos p_235436_2_) {
return true;
}
}