package net.minecraft.world.level.block; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.world.MenuProvider; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; public abstract class BaseEntityBlock extends Block implements EntityBlock { protected BaseEntityBlock(BlockBehaviour.Properties properties) { super(properties); } @Override protected abstract MapCodec codec(); @Override protected RenderShape getRenderShape(BlockState state) { return RenderShape.INVISIBLE; } @Override protected boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) { super.triggerEvent(state, level, pos, id, param); BlockEntity blockEntity = level.getBlockEntity(pos); return blockEntity == null ? false : blockEntity.triggerEvent(id, param); } @Nullable @Override protected MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { BlockEntity blockEntity = level.getBlockEntity(pos); return blockEntity instanceof MenuProvider ? (MenuProvider)blockEntity : null; } @Nullable protected static BlockEntityTicker createTickerHelper( BlockEntityType serverType, BlockEntityType clientType, BlockEntityTicker ticker ) { return clientType == serverType ? ticker : null; } }