Jump to content

Custom Block Entity Help???


Recommended Posts

Alright, so for context, I'm a new modder and I've come back to learning java after a while. I forgot most of my java knowledge from a while back, so I re-learned it, and I felt confident enough to try minecraft modding, but I have a problem with custom block entities.

I am trying to create a custom block entity called "Altar of Essence", but I have a problem with the code, and I do not know where to even start fixing it. 

My BlockEntity class:

public class AltarOfEssenceBlockEntity extends BlockEntity implements MenuProvider {
    private final ItemStackHandler itemHandler = new ItemStackHandler(3) {
        protected void onContentsChanged(int slot) {

    private LazyOptional<IItemHandler> lazyItemHandler = LazyOptional.empty();

    public AltarOfEssenceBlockEntity(BlockPos pos, BlockState state) {
        super(p_155228_, pos, state);

    public Component getDisplayName() {
        return Component.literal("Altar of Essence");

    public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {

    public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
        if(cap == ForgeCapabilities.ITEM_HANDLER) {
            return lazyItemHandler.cast();

        return super.getCapability(cap, side);

    public void onLoad() {
        lazyItemHandler = LazyOptional.of(() -> itemHandler);

    public void invalidateCaps() {

    protected void saveAdditional(CompoundTag nbt) {
        nbt.put("inventory", itemHandler.serializeNBT());


    public void load(CompoundTag nbt) {

    public void drops() {
        SimpleContainer inventory = new SimpleContainer(itemHandler.getSlots());
        for (int i = 0; i < itemHandler.getSlots(); i++) {
            inventory.setItem(i, itemHandler.getStackInSlot(i));

        Containers.dropContents(this.level, this.worldPosition, inventory);

And my Block class:

package net.natan.natansrealmmod.block.custom;

import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BaseEntityBlock;
import net.minecraft.world.level.block.RenderShape;
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.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.network.NetworkHooks;
import org.jetbrains.annotations.Nullable;

public class AltarOfEssenceBlock extends BaseEntityBlock {

    public AltarOfEssenceBlock(Properties properties) {

    /* BLOCK ENTITY */

    public RenderShape getRenderShape(BlockState p_49232_) {
        return RenderShape.MODEL;

    public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
        if (pState.getBlock() != pNewState.getBlock()) {
            BlockEntity blockEntity = pLevel.getBlockEntity(pPos);
            if (blockEntity instanceof AltarOfEssenceBlockEntity) {
                ((AltarOfEssenceBlockEntity) blockEntity).drops();
        super.onRemove(pState, pLevel, pPos, pNewState, pIsMoving);

    public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos,
                                 Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
        if (!pLevel.isClientSide()) {
            BlockEntity entity = pLevel.getBlockEntity(pPos);
            if(entity instanceof AltarOfEssenceBlockEntity) {
                NetworkHooks.openScreen(((ServerPlayer)pPlayer), (AltarOfEssenceBlockEntity)entity, pPos);
            } else {
                throw new IllegalStateException("Our Container provider is missing!");

        return InteractionResult.sidedSuccess(pLevel.isClientSide());

    public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
        return new AltarOfEssenceBlockEntity(pos, state);

    public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
        return super.getTicker(level, state, type);

        return createTickerHelper(type, );

The problem I am facing here is that in the Block class, under the OnRemove override, use override and newBlockEntity override, AltarOfEssenceBlockEntity turns red and the error message I get is "cannot resolve symbol". What does this mean, and how can I fix it???

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...

Important Information

By using this site, you agree to our Terms of Use.