Block Entities
Cos’è una Block Entity?
Un blocco normale in Minecraft (come la pietra o il legno) è “stupido”: non sa chi l’ha piazzato, non contiene oggetti e non fa nulla di attivo. Una Block Entity (o Tile Entity) è ciò che rende un blocco “intelligente”. Esempi vanilla:
- Chest (contiene inventario)
- Furnace (ha stato di cottura)
- Sign (contiene testo)
[!WARNING] Le Block Entities pesano sulla CPU. Non usarle se puoi ottenere lo stesso risultato con i BlockStates!
Creare una Block Entity in Fabric
Per aggiungere una Block Entity, hai bisogno di 3 cose:
- La classe della BlockEntity (
MyBlockEntity) - Il tipo di BlockEntity registrato (
MY_BLOCK_ENTITY_TYPE) - Il blocco che usa la BlockEntity (deve implementare
BlockEntityProvider)
1. La Classe BlockEntity
```java public class DemoBlockEntity extends BlockEntity { private int number = 7;
public DemoBlockEntity(BlockPos pos, BlockState state) {
super(ModBlockEntities.DEMO_BLOCK_ENTITY, pos, state);
}
// Per salvare i dati quando il mondo viene chiuso
@Override
public void writeNbt(NbtCompound nbt) {
nbt.putInt("number", number);
super.writeNbt(nbt);
}
// Per caricare i dati
@Override
public void readNbt(NbtCompound nbt) {
super.readNbt(nbt);
number = nbt.getInt("number");
}
} ```
2. Registrazione
In ModBlockEntities.java:
```java
public class ModBlockEntities {
public static BlockEntityType
public static void registerBlockEntities() {
DEMO_BLOCK_ENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE,
new Identifier("tutorial", "demo_block_entity"),
FabricBlockEntityTypeBuilder.create(DemoBlockEntity::new, ModBlocks.DEMO_BLOCK).build()
);
}
} ```
3. Implementare nel Blocco
Nella classe del tuo blocco:
```java public class DemoBlock extends Block implements BlockEntityProvider { // … costruttore …
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new DemoBlockEntity(pos, state);
}
} ```