Content Guides

Block Entities

Registering Block Entities

Block entities can be registered using a BalmBlockEntityRegistrar.

public class ModBlockEntities {

    public static Holder<BlockEntityType<YourBlockEntity>> yourBlockEntity;

    public static void initialize(BalmBlockEntityRegistrar blockEntities) {
        yourBlockEntity = blockEntities.register("your_block_entity", YourBlockEntity::new, ModBlocks.yourBlock).asHolder();
    }
}

You can obtain a BalmBlockEntityRegistrar either through Balm.blockEntities(MOD_ID, ModBlockEntities::initialize) or by registering your mod as a BalmModule.

Using an Initializer

public class YourMod {

    public static void initialize() {
        Balm.blockEntities(MOD_ID, ModBlockEntities::initialize);
    }

}

Using BalmModule

public class YourMod implements BalmModule {

    @Override
    public void registerBlockEntities(BalmBlockEntityRegistrar blockEntities) {
        ModBlockEntities.initialize(blockEntities);
    }

}

Using the Block Entity

We're storing Holder<BlockEntityType<?>> instead of BlockEntityType<?> to account for delayed registration on some mod loaders.

You can resolve the block entity type using ModBlockEntities.yourBlockEntity.value().

Do not try to store BlockEntityType<?> instances in your ModBlockEntities class by using asHolder().value() in your registration code, as that is too early to access the resolved block entity type on NeoForge and Forge.Store a Holder<BlockEntityType<?>> instance instead and only resolve it once you truly need a BlockEntityType<?> instance.