mojira.dev
MC-108149

NBT tags storing block positions or entity UUIDs are not written and read correctly in structures

The bug

NBT tags of entities and tile entities which refer to block positions or entity UUIDs are not treated specially. This causes entities to spawn at the old position where they were saved or entities to refer to other entities which do not exist anymore because new UUIDs were assigned.

NBT tag detecting

The problem is that currently not every NBT tag has its own data parameter and the data parameter does not contain information about what it actually stores. Because of that these tags need to be hardcoded.

If at some point every tag has its own data parameter, it could contain information like:

  • UUID of self

  • UUID of other

  • Position of self

  • ...
    and then there could be a single method which removes tags with "Position of self" and save "Position of other" as relative coordinates.

Possible structure file representation

See this reddit discussion

Affected tags (last updated for 16w39c)

Entities

  • Entity (class)

    • Pos

  • EntityLiving (class)

    • Leash

      • X, Y, Z

      • UUIDMost

      • UUIDLeast

  • horse

    • OwnerUUID

  • llama

    • OwnerUUID

  • EntityTameable (class)

    • OwnerUUID

  • zombie_pigman

    • HurtBy

  • shulker

    • APX, APY, APZ

  • vex

    • BoundX, BoundY, BoundZ

  • EntityThrowable (class), EntityArrow (class), EntityFireball (class), (EntityFishHook (class))

    • xTile, yTile, zTile

  • area_effect_cloud

    • OwnerUUIDMost, OwnerUUIDLeast

  • ender_crystal

    • BeamTarget

      • X, Y, Z

  • item_frame, painting

    • TileX, TileY, TileZ

  • shulker_bullet

    • Owner

      • L, M

      • X, Y, Z

    • Target

      • L, M

      • X, Y, Z

Tile Entities

  • TileEntity (class)

    • x, y, z

  • end_gateway

    • ExitPortal

      • X, Y, Z

Nested data

Entities

  • Entity (class)

    • Passengers

  • spawner_minecart

    • SpawnData

    • SpawnPotentials

      • Entity

  • falling_block

    • TileEntityData

  • item

    • Item

  • potion

    • Potion

  • donkey, llama, mule

    • Items

  • Horse types

    • SaddleItem

  • llama

    • DecorItem

  • horse

    • ArmorItem

  • item_frame

    • Item

  • chest_minecart, hopper_minecart

    • Items

  • fireworks_rocket

    • FireworksItem

  • EntityLiving (class), armor_stand

    • ArmorItems

    • HandItems

  • villager

    • Inventory

    • Recipes

      • List entry:

        • buy

        • buyB

        • sell

Tile entities

  • mob_spawner

    • SpawnData

    • SpawnPotentials

      • Entity

  • brewing_stand, furnace, shulker_box, hopper, dropper, chest

    • Items

  • jukebox

    • RecordItem

  • beacon

    • PaymentItem

Items

  • Block item creating tile entity

    • BlockEntityTag

  • Items spawning entities

    • EntityTag

Commands (?)

Entities
  • commandblock_minecart

    • Command

Tile entities
  • command_block

    • Command

  • sign

    • Text1, Text2, Text3, Text4

Items
  • written_book

    • pages

Linked issues

Attachments

Comments 18

[Mod] redstonehelper

Great compilation. Do you have a list of tickets we should link to this one?

Confirmed for 16w44a

{Team:""} tag also doesn't work, at least for Villagers.

That tag doesn't exist when the entity gets loaded; it's only used for the initial spawn, and then removed.

8 more comments

Can conform for 1.13-pre3

No idea if this is still being worked on, but can confirm for 1.16 (full release).

Can confirm on 21w18a, demonstrated here with a spider jockey. The spider loses the Passengers tag, so the skeleton doesn't spawn.

 

[media]

@@unknown, this report is only about block positions and entity UUIDs not being written and read correctly, the (outdated) list in the description only mentions cases where the UUID would have to be adjusted.
For passengers not being loaded, see MC-103452.

Affects 1.21 Pre-Release 3:

[media]

marcono1234

(Unassigned)

Confirmed

Platform

Low

Structures

NBT, UUID, block-entity, entity, position

Minecraft 1.10.2, Minecraft 16w39c, Minecraft 16w44a, Minecraft 1.11.2, Minecraft 1.12, ..., 1.15.2, 1.16.2, 1.16.3, 1.16.5, 21w18a

Retrieved