Class BlockEntity
- Direct Known Subclasses:
BannerBlockEntity
,BeaconBlockEntity
,BedBlockEntity
,BeehiveBlockEntity
,BellBlockEntity
,CampfireBlockEntity
,CommandBlockBlockEntity
,ComparatorBlockEntity
,ConduitBlockEntity
,DaylightDetectorBlockEntity
,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 cti
intermediary net/minecraft/class_2586
named net/minecraft/block/entity/BlockEntity
-
Field Summary
Modifier and TypeFieldDescriptionprivate BlockState
private static final org.slf4j.Logger
protected final BlockPos
protected boolean
private final BlockEntityType<?>
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
boolean
Returns whether the block item should require the player to have operator permissions to copy the block entity data on placement.static @Nullable BlockEntity
createFromNbt
(BlockPos pos, BlockState state, NbtCompound nbt) Returns the new block entity loaded fromnbt
, ornull
if it fails.final NbtCompound
Returns the block entity's NBT data.final NbtCompound
Returns the block entity's NBT data with block entity type ID.final NbtCompound
Returns 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.boolean
hasWorld()
boolean
void
Marks this block entity as dirty and that it needs to be saved.protected static void
markDirty
(World world, BlockPos pos, BlockState state) void
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)
.void
populateCrashReport
(CrashReportSection crashReportSection) static BlockPos
posFromNbt
(NbtCompound nbt) Returns the block position fromnbt
.void
readNbt
(NbtCompound nbt) Reads data fromnbt
.void
setCachedState
(BlockState state) Deprecated.void
setStackNbt
(ItemStack stack) Setsstack
'snet.minecraft.item.BlockItem#BLOCK_ENTITY_TAG_KEY
NBT value to the block entity's NBT data.void
Sets 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, ornull
to not send the packet.private void
Writes tonbt
the block entity type ID under theid
key, and the block's position underx
,y
, andz
keys.private void
writeIdToNbt
(NbtCompound nbt) Writes the block entity type ID tonbt
under theid
key.static void
writeIdToNbt
(NbtCompound nbt, BlockEntityType<?> type) Writes the ID oftype
tonbt
under theid
key.protected void
writeNbt
(NbtCompound nbt) Writes data tonbt
.
-
Field Details
-
LOGGER
private static final org.slf4j.Logger LOGGER- Mappings:
Namespace Name Mixin selector official b
Lcti;b:Lorg/slf4j/Logger;
intermediary field_11868
Lnet/minecraft/class_2586;field_11868:Lorg/slf4j/Logger;
named LOGGER
Lnet/minecraft/block/entity/BlockEntity;LOGGER:Lorg/slf4j/Logger;
-
type
- Mappings:
Namespace Name Mixin selector official c
Lcti;c:Lctk;
intermediary field_11864
Lnet/minecraft/class_2586;field_11864:Lnet/minecraft/class_2591;
named type
Lnet/minecraft/block/entity/BlockEntity;type:Lnet/minecraft/block/entity/BlockEntityType;
-
world
- Mappings:
Namespace Name Mixin selector official n
Lcti;n:Lcgx;
intermediary field_11863
Lnet/minecraft/class_2586;field_11863:Lnet/minecraft/class_1937;
named world
Lnet/minecraft/block/entity/BlockEntity;world:Lnet/minecraft/world/World;
-
pos
- Mappings:
Namespace Name Mixin selector official o
Lcti;o:Lgt;
intermediary field_11867
Lnet/minecraft/class_2586;field_11867:Lnet/minecraft/class_2338;
named pos
Lnet/minecraft/block/entity/BlockEntity;pos:Lnet/minecraft/util/math/BlockPos;
-
removed
protected boolean removed- Mappings:
Namespace Name Mixin selector official p
Lcti;p:Z
intermediary field_11865
Lnet/minecraft/class_2586;field_11865:Z
named removed
Lnet/minecraft/block/entity/BlockEntity;removed:Z
-
cachedState
- Mappings:
Namespace Name Mixin selector official d
Lcti;d:Lcvo;
intermediary field_11866
Lnet/minecraft/class_2586;field_11866:Lnet/minecraft/class_2680;
named cachedState
Lnet/minecraft/block/entity/BlockEntity;cachedState:Lnet/minecraft/block/BlockState;
-
-
Constructor Details
-
BlockEntity
- Mappings:
Namespace Name Mixin selector official <init>
Lcti;<init>(Lctk;Lgt;Lcvo;)V
intermediary <init>
Lnet/minecraft/class_2586;<init>(Lnet/minecraft/class_2591;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V
named <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
, andz
keys to store the position. This is incompatible withinvalid @link
net.minecraft.nbt.NbtHelper#romBlockPos
- Returns:
- the block position from
nbt
- Mappings:
Namespace Name Mixin selector official c
Lcti;c(Lpj;)Lgt;
intermediary method_38239
Lnet/minecraft/class_2586;method_38239(Lnet/minecraft/class_2487;)Lnet/minecraft/class_2338;
named posFromNbt
Lnet/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
null
during world generation.- Returns:
- the world the block entity belongs to
- Mappings:
Namespace Name Mixin selector official k
Lcti;k()Lcgx;
intermediary method_10997
Lnet/minecraft/class_2586;method_10997()Lnet/minecraft/class_1937;
named getWorld
Lnet/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 a
Lcti;a(Lcgx;)V
intermediary method_31662
Lnet/minecraft/class_2586;method_31662(Lnet/minecraft/class_1937;)V
named setWorld
Lnet/minecraft/block/entity/BlockEntity;setWorld(Lnet/minecraft/world/World;)V
-
hasWorld
public boolean hasWorld()- Mappings:
Namespace Name Mixin selector official l
Lcti;l()Z
intermediary method_11002
Lnet/minecraft/class_2586;method_11002()Z
named hasWorld
Lnet/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.
nbt
might 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 a
Lcti;a(Lpj;)V
intermediary method_11014
Lnet/minecraft/class_2586;method_11014(Lnet/minecraft/class_2487;)V
named readNbt
Lnet/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 b
Lcti;b(Lpj;)V
intermediary method_11007
Lnet/minecraft/class_2586;method_11007(Lnet/minecraft/class_2487;)V
named writeNbt
Lnet/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 m
Lcti;m()Lpj;
intermediary method_38242
Lnet/minecraft/class_2586;method_38242()Lnet/minecraft/class_2487;
named createNbtWithIdentifyingData
Lnet/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 n
Lcti;n()Lpj;
intermediary method_38243
Lnet/minecraft/class_2586;method_38243()Lnet/minecraft/class_2487;
named createNbtWithId
Lnet/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 newNbtCompound
and returns the compound.- Returns:
- the block entity's NBT data
- See Also:
- Mappings:
Namespace Name Mixin selector official o
Lcti;o()Lpj;
intermediary method_38244
Lnet/minecraft/class_2586;method_38244()Lnet/minecraft/class_2487;
named createNbt
Lnet/minecraft/block/entity/BlockEntity;createNbt()Lnet/minecraft/nbt/NbtCompound;
-
writeIdToNbt
Writes the block entity type ID tonbt
under theid
key.- Throws:
RuntimeException
- if the block entity type is not registered in the registry- Mappings:
Namespace Name Mixin selector official d
Lcti;d(Lpj;)V
intermediary method_38241
Lnet/minecraft/class_2586;method_38241(Lnet/minecraft/class_2487;)V
named writeIdToNbt
Lnet/minecraft/block/entity/BlockEntity;writeIdToNbt(Lnet/minecraft/nbt/NbtCompound;)V
-
writeIdToNbt
Writes the ID oftype
tonbt
under theid
key.- Mappings:
Namespace Name Mixin selector official a
Lcti;a(Lpj;Lctk;)V
intermediary method_38238
Lnet/minecraft/class_2586;method_38238(Lnet/minecraft/class_2487;Lnet/minecraft/class_2591;)V
named writeIdToNbt
Lnet/minecraft/block/entity/BlockEntity;writeIdToNbt(Lnet/minecraft/nbt/NbtCompound;Lnet/minecraft/block/entity/BlockEntityType;)V
-
setStackNbt
Setsstack
'snet.minecraft.item.BlockItem#BLOCK_ENTITY_TAG_KEY
NBT value to the block entity's NBT data.- Mappings:
Namespace Name Mixin selector official e
Lcti;e(Lcax;)V
intermediary method_38240
Lnet/minecraft/class_2586;method_38240(Lnet/minecraft/class_1799;)V
named setStackNbt
Lnet/minecraft/block/entity/BlockEntity;setStackNbt(Lnet/minecraft/item/ItemStack;)V
-
writeIdentifyingData
Writes tonbt
the block entity type ID under theid
key, and the block's position underx
,y
, andz
keys.- Throws:
RuntimeException
- if the block entity type is not registered in the registry- Mappings:
Namespace Name Mixin selector official e
Lcti;e(Lpj;)V
intermediary method_10999
Lnet/minecraft/class_2586;method_10999(Lnet/minecraft/class_2487;)V
named writeIdentifyingData
Lnet/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
, ornull
if it fails.This is used during chunk loading. This can fail if
nbt
has 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
, ornull
if it fails - Mappings:
Namespace Name Mixin selector official a
Lcti;a(Lgt;Lcvo;Lpj;)Lcti;
intermediary method_11005
Lnet/minecraft/class_2586;method_11005(Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;Lnet/minecraft/class_2487;)Lnet/minecraft/class_2586;
named createFromNbt
Lnet/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 e
Lcti;e()V
intermediary method_5431
Lnet/minecraft/class_2586;method_5431()V
named markDirty
Lnet/minecraft/block/entity/BlockEntity;markDirty()V
-
markDirty
- Mappings:
Namespace Name Mixin selector official a
Lcti;a(Lcgx;Lgt;Lcvo;)V
intermediary method_31663
Lnet/minecraft/class_2586;method_31663(Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_2680;)V
named markDirty
Lnet/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 p
Lcti;p()Lgt;
intermediary method_11016
Lnet/minecraft/class_2586;method_11016()Lnet/minecraft/class_2338;
named getPos
Lnet/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 q
Lcti;q()Lcvo;
intermediary method_11010
Lnet/minecraft/class_2586;method_11010()Lnet/minecraft/class_2680;
named getCachedState
Lnet/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, ornull
to not send the packet.If the data returned by
initial chunk data
is 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
null
to not send the packet - See Also:
- Mappings:
Namespace Name Mixin selector official h
Lcti;h()Ltc;
intermediary method_38235
Lnet/minecraft/class_2586;method_38235()Lnet/minecraft/class_2596;
named toUpdatePacket
Lnet/minecraft/block/entity/BlockEntity;toUpdatePacket()Lnet/minecraft/network/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 aa_
Lcti;aa_()Lpj;
intermediary method_16887
Lnet/minecraft/class_2586;method_16887()Lnet/minecraft/class_2487;
named toInitialChunkDataNbt
Lnet/minecraft/block/entity/BlockEntity;toInitialChunkDataNbt()Lnet/minecraft/nbt/NbtCompound;
-
isRemoved
public boolean isRemoved()- Mappings:
Namespace Name Mixin selector official r
Lcti;r()Z
intermediary method_11015
Lnet/minecraft/class_2586;method_11015()Z
named isRemoved
Lnet/minecraft/block/entity/BlockEntity;isRemoved()Z
-
markRemoved
public void markRemoved()- Mappings:
Namespace Name Mixin selector official ab_
Lcti;ab_()V
intermediary method_11012
Lnet/minecraft/class_2586;method_11012()V
named markRemoved
Lnet/minecraft/block/entity/BlockEntity;markRemoved()V
-
cancelRemoval
public void cancelRemoval()- Mappings:
Namespace Name Mixin selector official s
Lcti;s()V
intermediary method_10996
Lnet/minecraft/class_2586;method_10996()V
named cancelRemoval
Lnet/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_
Lcti;a_(II)Z
intermediary method_11004
Lnet/minecraft/class_2586;method_11004(II)Z
named onSyncedBlockEvent
Lnet/minecraft/block/entity/BlockEntity;onSyncedBlockEvent(II)Z
-
populateCrashReport
- Mappings:
Namespace Name Mixin selector official a
Lcti;a(Lr;)V
intermediary method_11003
Lnet/minecraft/class_2586;method_11003(Lnet/minecraft/class_129;)V
named populateCrashReport
Lnet/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 u
Lcti;u()Z
intermediary method_11011
Lnet/minecraft/class_2586;method_11011()Z
named copyItemDataRequiresOperator
Lnet/minecraft/block/entity/BlockEntity;copyItemDataRequiresOperator()Z
-
getType
- Mappings:
Namespace Name Mixin selector official v
Lcti;v()Lctk;
intermediary method_11017
Lnet/minecraft/class_2586;method_11017()Lnet/minecraft/class_2591;
named getType
Lnet/minecraft/block/entity/BlockEntity;getType()Lnet/minecraft/block/entity/BlockEntityType;
-
setCachedState
Deprecated.- Mappings:
Namespace Name Mixin selector official b
Lcti;b(Lcvo;)V
intermediary method_31664
Lnet/minecraft/class_2586;method_31664(Lnet/minecraft/class_2680;)V
named setCachedState
Lnet/minecraft/block/entity/BlockEntity;setCachedState(Lnet/minecraft/block/BlockState;)V
-