Mojira Archive
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