package eu.midnightdust.motschen.rocks.block; import com.mojang.serialization.MapCodec; import eu.midnightdust.motschen.rocks.block.blockentity.BlockEntityInit; import eu.midnightdust.motschen.rocks.block.blockentity.NetherGeyserBlockEntity; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.item.ItemPlacementContext; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.World; import net.minecraft.world.WorldView; import org.jetbrains.annotations.Nullable; import java.util.Objects; public class NetherGeyser extends BlockWithEntity implements BlockEntityProvider { private static final VoxelShape SHAPE; public static final BooleanProperty ACTIVE = BooleanProperty.of("active"); public NetherGeyser() { super(AbstractBlock.Settings.copy(Blocks.STONE).strength(10).noCollision().dynamicBounds().nonOpaque().sounds(BlockSoundGroup.STONE)); this.setDefaultState(this.stateManager.getDefaultState().with(ACTIVE, false)); } @Override protected MapCodec getCodec() { return null; } @Override public BlockRenderType getRenderType(BlockState state) { return BlockRenderType.MODEL; } @Override public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { return new NetherGeyserBlockEntity(pos, state); } @Nullable public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { return validateTicker(type, BlockEntityInit.NETHER_GEYSER_BE, NetherGeyserBlockEntity::tick); } @Override public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) { return Objects.requireNonNull(super.getPlacementState(itemPlacementContext)) .with(ACTIVE, false); } @Override protected void appendProperties(StateManager.Builder builder) { builder.add(ACTIVE); } @Override public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { return SHAPE; } static { SHAPE = createCuboidShape(5, 0, 5, 11, 1, 11); } public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { return world.getBlockState(pos.down()).isSideSolidFullSquare(world,pos,Direction.UP); } }