Class BlockEntity
- Direct Known Subclasses:
BannerBlockEntity,BeaconBlockEntity,BedBlockEntity,BeehiveBlockEntity,BellBlockEntity,BrushableBlockEntity,CampfireBlockEntity,ChiseledBookshelfBlockEntity,CommandBlockBlockEntity,ComparatorBlockEntity,ConduitBlockEntity,DaylightDetectorBlockEntity,DecoratedPotBlockEntity,EnchantingTableBlockEntity,EnderChestBlockEntity,EndPortalBlockEntity,JigsawBlockEntity,JukeboxBlockEntity,LecternBlockEntity,LockableContainerBlockEntity,MobSpawnerBlockEntity,PistonBlockEntity,SculkCatalystBlockEntity,SculkSensorBlockEntity,SculkShriekerBlockEntity,SignBlockEntity,SkullBlockEntity,StructureBlockBlockEntity
BlockState;
however, some blocks need to hold data that cannot be pre-defined, such as
inventories of chests, texts of signs, or pattern combinations of banners.
Block entities can hold these data.
Block entities have two other important additions to normal blocks: they can define custom rendering behaviors, and they can tick on every server tick instead of randomly. Some block entities only use these without any extra data.
Block entities are bound to a world and there is one instance of BlockEntity per the block position, unlike Block
or BlockState which are reused. Block entities are created using BlockEntityType, a type of block entities. In most cases, block entities do not
have to be constructed manually except in BlockEntityProvider.createBlockEntity(net.minecraft.util.math.BlockPos, net.minecraft.block.BlockState).
To get the block entity at a certain position, use World.getBlockEntity(net.minecraft.util.math.BlockPos).
Note that the block entity returned can be, in rare cases, different from the
one associated with the block at that position. For this reason the return value
should not be cast unsafely.
Block entities, like entities, use NBT for the storage of data. The data is
loaded to the instance's fields in readNbt(net.minecraft.nbt.NbtCompound) and written to NBT in
writeNbt(net.minecraft.nbt.NbtCompound). When a data that needs to be saved has changed, always make sure
to call markDirty().
See BlockEntityProvider and BlockEntityType
for information on creating a block with block entities.
Block entity's data, unlike block states, are not automatically synced. Block
entities declare when and which data to sync. In general, block entities need to
sync states observable from the clients without specific interaction (such as opening
a container). toUpdatePacket() and toInitialChunkDataNbt() control
which data is sent to the client. To sync the block entity to the client, call
serverWorld.getChunkManager().markForUpdate(this.getPos());.
- Mappings:
Namespace Name official czkintermediary net/minecraft/class_2586named net/minecraft/block/entity/BlockEntity
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate BlockStateprivate static final Loggerprotected final BlockPosprotected booleanprivate final BlockEntityType<?> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidbooleanReturns whether the block item should require the player to have operator permissions to copy the block entity data on placement.static @Nullable BlockEntitycreateFromNbt(BlockPos pos, BlockState state, NbtCompound nbt) Returns the new block entity loaded fromnbt, ornullif it fails.final NbtCompoundReturns the block entity's NBT data.final NbtCompoundReturns the block entity's NBT data with block entity type ID.final NbtCompoundReturns the block entity's NBT data with identifying data.Returns the cached block state at the block entity's position.getPos()Returns the block entity's position.getType()getWorld()Returns the world the block entity belongs to.booleanhasWorld()booleanvoidMarks this block entity as dirty and that it needs to be saved.protected static voidmarkDirty(World world, BlockPos pos, BlockState state) voidbooleanonSyncedBlockEvent(int type, int data) If this block entity's block extendsBlockWithEntity, this is called insideAbstractBlock.onSyncedBlockEvent(net.minecraft.block.BlockState, net.minecraft.world.World, net.minecraft.util.math.BlockPos, int, int).voidpopulateCrashReport(CrashReportSection crashReportSection) static BlockPosposFromNbt(NbtCompound nbt) Returns the block position fromnbt.voidreadNbt(NbtCompound nbt) Reads data fromnbt.voidsetCachedState(BlockState state) Deprecated.voidsetStackNbt(ItemStack stack) Setsstack'snet.minecraft.item.BlockItem#BLOCK_ENTITY_TAG_KEYNBT value to the block entity's NBT data.voidSets the world the block entity belongs to.Returns the serialized state of this block entity that is observable by clients.Returns the packet to send to nearby players when the block entity's observable state changes, ornullto not send the packet.private voidWrites tonbtthe block entity type ID under theidkey, and the block's position underx,y, andzkeys.private voidwriteIdToNbt(NbtCompound nbt) Writes the block entity type ID tonbtunder theidkey.static voidwriteIdToNbt(NbtCompound nbt, BlockEntityType<?> type) Writes the ID oftypetonbtunder theidkey.protected voidwriteNbt(NbtCompound nbt) Writes data tonbt.
-
Field Details
-
LOGGER
- Mappings:
Namespace Name Mixin selector official cLczk;c:Lorg/slf4j/Logger;intermediary field_11868Lnet/minecraft/class_2586;field_11868:Lorg/slf4j/Logger;named LOGGERLnet/minecraft/block/entity/BlockEntity;LOGGER:Lorg/slf4j/Logger;
-
type
- Mappings:
Namespace Name Mixin selector official dLczk;d:Lczm;intermediary field_11864Lnet/minecraft/class_2586;field_11864:Lnet/minecraft/class_2591;named typeLnet/minecraft/block/entity/BlockEntity;type:Lnet/minecraft/block/entity/BlockEntityType;
-
world
- Mappings:
Namespace Name Mixin selector official oLczk;o:Lcmk;intermediary field_11863Lnet/minecraft/class_2586;field_11863:Lnet/minecraft/class_1937;named worldLnet/minecraft/block/entity/BlockEntity;world:Lnet/minecraft/world/World;
-
pos
- Mappings:
Namespace Name Mixin selector official pLczk;p:Lgu;intermediary field_11867Lnet/minecraft/class_2586;field_11867:Lnet/minecraft/class_2338;named posLnet/minecraft/block/entity/BlockEntity;pos:Lnet/minecraft/util/math/BlockPos;
-
removed
protected boolean removed- Mappings:
Namespace Name Mixin selector official qLczk;q:Zintermediary field_11865Lnet/minecraft/class_2586;field_11865:Znamed removedLnet/minecraft/block/entity/BlockEntity;removed:Z
-
cachedState
- Mappings:
Namespace Name Mixin selector official eLczk;e:Ldby;intermediary field_11866Lnet/minecraft/class_2586;field_11866:Lnet/minecraft/class_2680;named cachedStateLnet/minecraft/block/entity/BlockEntity;cachedState:Lnet/minecraft/block/BlockState;
-
-
Constructor Details
-
BlockEntity
- Mappings:
Namespace Name Mixin selector official <init>Lczk;<init>(Lczm;Lgu;Ldby;)Vintermediary <init>Lnet/minecraft/class_2586;<init>(Lnet/minecraft/class_2591;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Vnamed <init>Lnet/minecraft/block/entity/BlockEntity;<init>(Lnet/minecraft/block/entity/BlockEntityType;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V
-
-
Method Details
-
posFromNbt
Returns the block position fromnbt.The passed NBT should use lowercase
x,y, andzkeys to store the position. This is incompatible withNbtHelper.fromBlockPos(net.minecraft.util.math.BlockPos)that use uppercase keys.- Returns:
- the block position from
nbt - Mappings:
Namespace Name Mixin selector official cLczk;c(Lqr;)Lgu;intermediary method_38239Lnet/minecraft/class_2586;method_38239(Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338;named posFromNbtLnet/minecraft/block/entity/BlockEntity;posFromNbt(Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/util/math/BlockPos;
-
getWorld
Returns the world the block entity belongs to.This can return
nullduring world generation.- Returns:
- the world the block entity belongs to
- Mappings:
Namespace Name Mixin selector official kLczk;k()Lcmk;intermediary method_10997Lnet/minecraft/class_2586;method_10997()Lnet/minecraft/class_1937;named getWorldLnet/minecraft/block/entity/BlockEntity;getWorld()Lnet/minecraft/world/World;
-
setWorld
Sets the world the block entity belongs to.This should not be called manually; however, this can be overridden to initialize fields dependent on the world.
- Mappings:
Namespace Name Mixin selector official aLczk;a(Lcmk;)Vintermediary method_31662Lnet/minecraft/class_2586;method_31662(Lnet/minecraft/class_1937;)Vnamed setWorldLnet/minecraft/block/entity/BlockEntity;setWorld(Lnet/minecraft/world/World;)V
-
hasWorld
public boolean hasWorld()- Mappings:
Namespace Name Mixin selector official lLczk;l()Zintermediary method_11002Lnet/minecraft/class_2586;method_11002()Znamed hasWorldLnet/minecraft/block/entity/BlockEntity;hasWorld()Z
-
readNbt
Reads data fromnbt. Subclasses should override this if they store a persistent data.NBT is a storage format; therefore, a data from NBT is loaded to a block entity instance's fields, which are used for other operations instead of the NBT. The data is written back to NBT when saving the block entity.
nbtmight not have all expected keys, or might have a key whose value does not meet the requirement (such as the type or the range). This method should fall back to a reasonable default value instead of throwing an exception.- See Also:
- Mappings:
Namespace Name Mixin selector official aLczk;a(Lqr;)Vintermediary method_11014Lnet/minecraft/class_2586;method_11014(Lnet/minecraft/class_2487;)Vnamed readNbtLnet/minecraft/block/entity/BlockEntity;readNbt(Lnet/minecraft/nbt/NbtCompound;)V
-
writeNbt
Writes data tonbt. Subclasses should override this if they store a persistent data.NBT is a storage format; therefore, a data from NBT is loaded to a block entity instance's fields, which are used for other operations instead of the NBT. The data is written back to NBT when saving the block entity.
- See Also:
- Mappings:
Namespace Name Mixin selector official bLczk;b(Lqr;)Vintermediary method_11007Lnet/minecraft/class_2586;method_11007(Lnet/minecraft/class_2487;)Vnamed writeNbtLnet/minecraft/block/entity/BlockEntity;writeNbt(Lnet/minecraft/nbt/NbtCompound;)V
-
createNbtWithIdentifyingData
Returns the block entity's NBT data with identifying data.In addition to data written at
writeNbt(net.minecraft.nbt.NbtCompound), this also writes the block entity type ID and the position of the block entity.- Returns:
- the block entity's NBT data with identifying data
- See Also:
- Mappings:
Namespace Name Mixin selector official mLczk;m()Lqr;intermediary method_38242Lnet/minecraft/class_2586;method_38242()Lnet/minecraft/class_2487;named createNbtWithIdentifyingDataLnet/minecraft/block/entity/BlockEntity;createNbtWithIdentifyingData()Lnet/minecraft/nbt/NbtCompound;
-
createNbtWithId
Returns the block entity's NBT data with block entity type ID.In addition to data written at
writeNbt(net.minecraft.nbt.NbtCompound), this also writes the block entity type ID.- Returns:
- the block entity's NBT data with block entity type ID
- See Also:
- Mappings:
Namespace Name Mixin selector official nLczk;n()Lqr;intermediary method_38243Lnet/minecraft/class_2586;method_38243()Lnet/minecraft/class_2487;named createNbtWithIdLnet/minecraft/block/entity/BlockEntity;createNbtWithId()Lnet/minecraft/nbt/NbtCompound;
-
createNbt
Returns the block entity's NBT data.Internally, this calls
writeNbt(net.minecraft.nbt.NbtCompound)with a newNbtCompoundand returns the compound.- Returns:
- the block entity's NBT data
- See Also:
- Mappings:
Namespace Name Mixin selector official oLczk;o()Lqr;intermediary method_38244Lnet/minecraft/class_2586;method_38244()Lnet/minecraft/class_2487;named createNbtLnet/minecraft/block/entity/BlockEntity;createNbt()Lnet/minecraft/nbt/NbtCompound;
-
writeIdToNbt
Writes the block entity type ID tonbtunder theidkey.- Throws:
RuntimeException- if the block entity type is not registered in the registry- Mappings:
Namespace Name Mixin selector official dLczk;d(Lqr;)Vintermediary method_38241Lnet/minecraft/class_2586;method_38241(Lnet/minecraft/class_2487;)Vnamed writeIdToNbtLnet/minecraft/block/entity/BlockEntity;writeIdToNbt(Lnet/minecraft/nbt/NbtCompound;)V
-
writeIdToNbt
Writes the ID oftypetonbtunder theidkey.- Mappings:
Namespace Name Mixin selector official aLczk;a(Lqr;Lczm;)Vintermediary method_38238Lnet/minecraft/class_2586;method_38238(Lnet/minecraft/class_2487;Lnet/minecraft/class_2591;)Vnamed writeIdToNbtLnet/minecraft/block/entity/BlockEntity;writeIdToNbt(Lnet/minecraft/nbt/NbtCompound;Lnet/minecraft/block/entity/BlockEntityType;)V
-
setStackNbt
Setsstack'snet.minecraft.item.BlockItem#BLOCK_ENTITY_TAG_KEYNBT value to the block entity's NBT data.- Mappings:
Namespace Name Mixin selector official eLczk;e(Lcfx;)Vintermediary method_38240Lnet/minecraft/class_2586;method_38240(Lnet/minecraft/class_1799;)Vnamed setStackNbtLnet/minecraft/block/entity/BlockEntity;setStackNbt(Lnet/minecraft/item/ItemStack;)V
-
writeIdentifyingData
Writes tonbtthe block entity type ID under theidkey, and the block's position underx,y, andzkeys.- Throws:
RuntimeException- if the block entity type is not registered in the registry- Mappings:
Namespace Name Mixin selector official eLczk;e(Lqr;)Vintermediary method_10999Lnet/minecraft/class_2586;method_10999(Lnet/minecraft/class_2487;)Vnamed writeIdentifyingDataLnet/minecraft/block/entity/BlockEntity;writeIdentifyingData(Lnet/minecraft/nbt/NbtCompound;)V
-
createFromNbt
@Nullable public static @Nullable BlockEntity createFromNbt(BlockPos pos, BlockState state, NbtCompound nbt) Returns the new block entity loaded fromnbt, ornullif it fails.This is used during chunk loading. This can fail if
nbthas an improper or unregisteredid, or ifreadNbt(net.minecraft.nbt.NbtCompound)throws an exception; in these cases, this logs an error and returnsnull.- Returns:
- the new block entity loaded from
nbt, ornullif it fails - Mappings:
Namespace Name Mixin selector official aLczk;a(Lgu;Ldby;Lqr;)Lczk;intermediary method_11005Lnet/minecraft/class_2586;method_11005(Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586;named createFromNbtLnet/minecraft/block/entity/BlockEntity;createFromNbt(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/nbt/NbtCompound;)Lnet/minecraft/block/entity/BlockEntity;
-
markDirty
public void markDirty()Marks this block entity as dirty and that it needs to be saved. This also triggers comparator update.This must be called when something changed in a way that affects the saved NBT; otherwise, the game might not save the block entity.
- Mappings:
Namespace Name Mixin selector official eLczk;e()Vintermediary method_5431Lnet/minecraft/class_2586;method_5431()Vnamed markDirtyLnet/minecraft/block/entity/BlockEntity;markDirty()V
-
markDirty
- Mappings:
Namespace Name Mixin selector official aLczk;a(Lcmk;Lgu;Ldby;)Vintermediary method_31663Lnet/minecraft/class_2586;method_31663(Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)Vnamed markDirtyLnet/minecraft/block/entity/BlockEntity;markDirty(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V
-
getPos
Returns the block entity's position.- Returns:
- the block entity's position
- Mappings:
Namespace Name Mixin selector official pLczk;p()Lgu;intermediary method_11016Lnet/minecraft/class_2586;method_11016()Lnet/minecraft/class_2338;named getPosLnet/minecraft/block/entity/BlockEntity;getPos()Lnet/minecraft/util/math/BlockPos;
-
getCachedState
Returns the cached block state at the block entity's position.This is faster than calling
World.getBlockState(net.minecraft.util.math.BlockPos).- Returns:
- the cached block state at the block entity's position
- Mappings:
Namespace Name Mixin selector official qLczk;q()Ldby;intermediary method_11010Lnet/minecraft/class_2586;method_11010()Lnet/minecraft/class_2680;named getCachedStateLnet/minecraft/block/entity/BlockEntity;getCachedState()Lnet/minecraft/block/BlockState;
-
toUpdatePacket
Returns the packet to send to nearby players when the block entity's observable state changes, ornullto not send the packet.If the data returned by
initial chunk datais suitable for updates, the following shortcut can be used to create an update packet:BlockEntityUpdateS2CPacket.create(this). The NBT will be passed toreadNbt(net.minecraft.nbt.NbtCompound)on the client."Observable state" is a state that clients can observe without specific interaction. For example,
CampfireBlockEntity's cooked items are observable states, but chests' inventories are not observable states, since the player must first open that chest before they can see the contents.To sync block entity data using this method, use
serverWorld.getChunkManager().markForUpdate(this.getPos());.- Returns:
- the packet to send to nearby players when the block entity's observable
state changes, or
nullto not send the packet - See Also:
- Mappings:
Namespace Name Mixin selector official hLczk;h()Luo;intermediary method_38235Lnet/minecraft/class_2586;method_38235()Lnet/minecraft/class_2596;named toUpdatePacketLnet/minecraft/block/entity/BlockEntity;toUpdatePacket()Lnet/minecraft/network/packet/Packet;
-
toInitialChunkDataNbt
Returns the serialized state of this block entity that is observable by clients.This is sent alongside the initial chunk data, as well as when the block entity implements
toUpdatePacket()and decides to use the defaultBlockEntityUpdateS2CPacket."Observable state" is a state that clients can observe without specific interaction. For example,
CampfireBlockEntity's cooked items are observable states, but chests' inventories are not observable states, since the player must first open that chest before they can see the contents.To send all NBT data of this block entity saved to disk, return
createNbt().- Returns:
- the serialized state of this block entity that is observable by clients
- See Also:
- Mappings:
Namespace Name Mixin selector official ao_Lczk;ao_()Lqr;intermediary method_16887Lnet/minecraft/class_2586;method_16887()Lnet/minecraft/class_2487;named toInitialChunkDataNbtLnet/minecraft/block/entity/BlockEntity;toInitialChunkDataNbt()Lnet/minecraft/nbt/NbtCompound;
-
isRemoved
public boolean isRemoved()- Mappings:
Namespace Name Mixin selector official rLczk;r()Zintermediary method_11015Lnet/minecraft/class_2586;method_11015()Znamed isRemovedLnet/minecraft/block/entity/BlockEntity;isRemoved()Z
-
markRemoved
public void markRemoved()- Mappings:
Namespace Name Mixin selector official ap_Lczk;ap_()Vintermediary method_11012Lnet/minecraft/class_2586;method_11012()Vnamed markRemovedLnet/minecraft/block/entity/BlockEntity;markRemoved()V
-
cancelRemoval
public void cancelRemoval()- Mappings:
Namespace Name Mixin selector official sLczk;s()Vintermediary method_10996Lnet/minecraft/class_2586;method_10996()Vnamed cancelRemovalLnet/minecraft/block/entity/BlockEntity;cancelRemoval()V
-
onSyncedBlockEvent
public boolean onSyncedBlockEvent(int type, int data) If this block entity's block extendsBlockWithEntity, this is called insideAbstractBlock.onSyncedBlockEvent(net.minecraft.block.BlockState, net.minecraft.world.World, net.minecraft.util.math.BlockPos, int, int).- See Also:
- Mappings:
Namespace Name Mixin selector official a_Lczk;a_(II)Zintermediary method_11004Lnet/minecraft/class_2586;method_11004(II)Znamed onSyncedBlockEventLnet/minecraft/block/entity/BlockEntity;onSyncedBlockEvent(II)Z
-
populateCrashReport
- Mappings:
Namespace Name Mixin selector official aLczk;a(Lp;)Vintermediary method_11003Lnet/minecraft/class_2586;method_11003(Lnet/minecraft/class_129;)Vnamed populateCrashReportLnet/minecraft/block/entity/BlockEntity;populateCrashReport(Lnet/minecraft/util/crash/CrashReportSection;)V
-
copyItemDataRequiresOperator
public boolean copyItemDataRequiresOperator()Returns whether the block item should require the player to have operator permissions to copy the block entity data on placement.Block entities that can execute commands should override this to return
true.- Returns:
- whether the block item should require the player to have operator permissions to copy the block entity data on placement
- See Also:
- Mappings:
Namespace Name Mixin selector official tLczk;t()Zintermediary method_11011Lnet/minecraft/class_2586;method_11011()Znamed copyItemDataRequiresOperatorLnet/minecraft/block/entity/BlockEntity;copyItemDataRequiresOperator()Z
-
getType
- Mappings:
Namespace Name Mixin selector official uLczk;u()Lczm;intermediary method_11017Lnet/minecraft/class_2586;method_11017()Lnet/minecraft/class_2591;named getTypeLnet/minecraft/block/entity/BlockEntity;getType()Lnet/minecraft/block/entity/BlockEntityType;
-
setCachedState
Deprecated.- Mappings:
Namespace Name Mixin selector official bLczk;b(Ldby;)Vintermediary method_31664Lnet/minecraft/class_2586;method_31664(Lnet/minecraft/class_2680;)Vnamed setCachedStateLnet/minecraft/block/entity/BlockEntity;setCachedState(Lnet/minecraft/block/BlockState;)V
-