Class BlockEntity

java.lang.Object
net.minecraft.block.entity.BlockEntity
Direct Known Subclasses:
BannerBlockEntity, BeaconBlockEntity, BedBlockEntity, BeehiveBlockEntity, BellBlockEntity, CampfireBlockEntity, ChiseledBookshelfBlockEntity, CommandBlockBlockEntity, ComparatorBlockEntity, ConduitBlockEntity, DaylightDetectorBlockEntity, EnchantingTableBlockEntity, EnderChestBlockEntity, EndPortalBlockEntity, JigsawBlockEntity, JukeboxBlockEntity, LecternBlockEntity, LockableContainerBlockEntity, MobSpawnerBlockEntity, PistonBlockEntity, SculkCatalystBlockEntity, SculkSensorBlockEntity, SculkShriekerBlockEntity, SignBlockEntity, SkullBlockEntity, StructureBlockBlockEntity

public abstract class BlockEntity extends Object
A block entity is an object holding extra data about a block in a world. Blocks hold their data using pre-defined, finite sets of 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 cwl
intermediary net/minecraft/class_2586
named net/minecraft/block/entity/BlockEntity
  • Field Details

    • LOGGER

      private static final Logger LOGGER
      Mappings:
      Namespace Name Mixin selector
      official b Lcwl;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

      private final BlockEntityType<?> type
      Mappings:
      Namespace Name Mixin selector
      official c Lcwl;c:Lcwn;
      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

      @Nullable protected @Nullable World world
      Mappings:
      Namespace Name Mixin selector
      official n Lcwl;n:Lcjw;
      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

      protected final BlockPos pos
      Mappings:
      Namespace Name Mixin selector
      official o Lcwl;o:Lgp;
      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 Lcwl;p:Z
      intermediary field_11865 Lnet/minecraft/class_2586;field_11865:Z
      named removed Lnet/minecraft/block/entity/BlockEntity;removed:Z
    • cachedState

      private BlockState cachedState
      Mappings:
      Namespace Name Mixin selector
      official d Lcwl;d:Lcyt;
      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

      public BlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state)
      Mappings:
      Namespace Name Mixin selector
      official <init> Lcwl;<init>(Lcwn;Lgp;Lcyt;)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

      public static BlockPos posFromNbt(NbtCompound nbt)
      Returns the block position from nbt.

      The passed NBT should use lowercase x, y, and z keys to store the position. This is incompatible with NbtHelper.fromBlockPos(net.minecraft.util.math.BlockPos) that use uppercase keys.

      Returns:
      the block position from nbt
      Mappings:
      Namespace Name Mixin selector
      official c Lcwl;c(Lqp;)Lgp;
      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

      @Nullable public @Nullable World 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 Lcwl;k()Lcjw;
      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

      public void setWorld(World world)
      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 Lcwl;a(Lcjw;)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 Lcwl;l()Z
      intermediary method_11002 Lnet/minecraft/class_2586;method_11002()Z
      named hasWorld Lnet/minecraft/block/entity/BlockEntity;hasWorld()Z
    • readNbt

      public void readNbt(NbtCompound nbt)
      Reads data from nbt. 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 Lcwl;a(Lqp;)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

      protected void writeNbt(NbtCompound nbt)
      Writes data to nbt. 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 Lcwl;b(Lqp;)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

      public final NbtCompound 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 Lcwl;m()Lqp;
      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

      public final 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 Lcwl;n()Lqp;
      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

      public final NbtCompound createNbt()
      Returns the block entity's NBT data.

      Internally, this calls writeNbt(net.minecraft.nbt.NbtCompound) with a new NbtCompound and returns the compound.

      Returns:
      the block entity's NBT data
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official o Lcwl;o()Lqp;
      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

      private void writeIdToNbt(NbtCompound nbt)
      Writes the block entity type ID to nbt under the id key.
      Throws:
      RuntimeException - if the block entity type is not registered in the registry
      Mappings:
      Namespace Name Mixin selector
      official d Lcwl;d(Lqp;)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

      public static void writeIdToNbt(NbtCompound nbt, BlockEntityType<?> type)
      Writes the ID of type to nbt under the id key.
      Mappings:
      Namespace Name Mixin selector
      official a Lcwl;a(Lqp;Lcwn;)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

      public void setStackNbt(ItemStack stack)
      Sets stack's net.minecraft.item.BlockItem#BLOCK_ENTITY_TAG_KEY NBT value to the block entity's NBT data.
      Mappings:
      Namespace Name Mixin selector
      official e Lcwl;e(Lcdt;)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

      private void writeIdentifyingData(NbtCompound nbt)
      Writes to nbt the block entity type ID under the id key, and the block's position under x, y, and z keys.
      Throws:
      RuntimeException - if the block entity type is not registered in the registry
      Mappings:
      Namespace Name Mixin selector
      official e Lcwl;e(Lqp;)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 from nbt, or null if it fails.

      This is used during chunk loading. This can fail if nbt has an improper or unregistered id, or if readNbt(net.minecraft.nbt.NbtCompound) throws an exception; in these cases, this logs an error and returns null.

      Returns:
      the new block entity loaded from nbt, or null if it fails
      Mappings:
      Namespace Name Mixin selector
      official a Lcwl;a(Lgp;Lcyt;Lqp;)Lcwl;
      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 Lcwl;e()V
      intermediary method_5431 Lnet/minecraft/class_2586;method_5431()V
      named markDirty Lnet/minecraft/block/entity/BlockEntity;markDirty()V
    • markDirty

      protected static void markDirty(World world, BlockPos pos, BlockState state)
      Mappings:
      Namespace Name Mixin selector
      official a Lcwl;a(Lcjw;Lgp;Lcyt;)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

      public BlockPos getPos()
      Returns the block entity's position.
      Returns:
      the block entity's position
      Mappings:
      Namespace Name Mixin selector
      official p Lcwl;p()Lgp;
      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

      public BlockState 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 Lcwl;q()Lcyt;
      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, or null 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 to readNbt(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 Lcwl;h()Luh;
      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

      public NbtCompound 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 default BlockEntityUpdateS2CPacket.

      "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 ad_ Lcwl;ad_()Lqp;
      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 Lcwl;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 ae_ Lcwl;ae_()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 Lcwl;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)
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official a_ Lcwl;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

      public void populateCrashReport(CrashReportSection crashReportSection)
      Mappings:
      Namespace Name Mixin selector
      official a Lcwl;a(Lo;)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 Lcwl;u()Z
      intermediary method_11011 Lnet/minecraft/class_2586;method_11011()Z
      named copyItemDataRequiresOperator Lnet/minecraft/block/entity/BlockEntity;copyItemDataRequiresOperator()Z
    • getType

      public BlockEntityType<?> getType()
      Mappings:
      Namespace Name Mixin selector
      official v Lcwl;v()Lcwn;
      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 public void setCachedState(BlockState state)
      Deprecated.
      Mappings:
      Namespace Name Mixin selector
      official b Lcwl;b(Lcyt;)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