Difference between revisions of "Object Data"

From wiki.vg
Jump to navigation Jump to search
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
== Object Data ==
+
This article documents the '''Data''' field in the [[Protocol#Spawn Object|Spawn Object]] packet. The field is of type Int, and the meaning of its contents depend on the [[Entities#Objects|type of object]] being spawned, as defined in the Type field of the same packet, and is documented below.
  
In the "Spawn Object/Vehicle" packet, additional metadata about the spawned entity may be provided.  The length and contents of this extra data depend on the type of object being spawnedNo matter what, the server must send at least one integer to the client, although 0 is a valid value.  If a number other than zero is provided (for all entities), the following data is appended to the end of the object data (as of [[Protocol version numbers|15w31a, protocol 49]] this data is always required):
+
In some cases, the data field has no meaning, but is only used to indicate presence of velocityIn others, it (and velocity) is always ignored.
  
{| class="wikitable"
+
== Item (id 2) ==
|- class="row0"
 
! class="col0" | Field Name
 
! class="col1" | Field Type
 
! class="col2" | Example
 
! class="col3" | Notes
 
|- class="row2"
 
| class="col0 centeralign" | Speed X
 
| class="col1 centeralign" | short
 
| class="col2 centeralign" | <code>0</code>
 
| class="col3" | The speed of the object
 
|- class="row2"
 
| class="col0 centeralign" | Speed Y
 
| class="col1 centeralign" | short
 
| class="col2 centeralign" | <code>0</code>
 
| class="col3" | The speed of the object
 
|- class="row2"
 
| class="col0 centeralign" | Speed Z
 
| class="col1 centeralign" | short
 
| class="col2 centeralign" | <code>0</code>
 
| class="col3" | The speed of the object
 
|}
 
 
 
== Meaning of int field ==
 
  
 +
The int value is ignored, but should be set to <code>1</code> to indicate that velocity is present.
  
=== Minecarts (id 10)===
+
== Minecarts (id 10) ==
  
 
The int value itself specifies the minecart's functionality:
 
The int value itself specifies the minecart's functionality:
  
 
{| class="wikitable"
 
{| class="wikitable"
|- class="row0"
+
|-
! class="col0" | Value
+
! Value
! class="col1" | Minecart functionality
+
! Minecart functionality
|- class="row1"
+
|-
| class="col0 centeralign" | 0
+
| 0
| class="col1 centeralign" | Empty (ride-able) minecart
+
| Empty (ride-able) minecart
|- class="row2"
+
|-
| class="col0 centeralign" | 1
+
| 1
| class="col1 centeralign" | Chest minecart
+
| Chest minecart
|- class="row3"
+
|-
| class="col0 centeralign" | 2
+
| 2
| class="col1 centeralign" | Furnace (powered) minecart
+
| Furnace (powered) minecart
|- class="row4"
+
|-
| class="col0 centeralign" | 3
+
| 3
| class="col1 centeralign" | TNT minecart
+
| TNT minecart
|- class="row5"
+
|-
| class="col0 centeralign" | 4
+
| 4
| class="col1 centeralign" | Spawner minecart
+
| Spawner minecart
|- class="row6"
+
|-
| class="col0 centeralign" | 5
+
| 5
| class="col1 centeralign" | Hopper minecart
+
| Hopper minecart
|- class="row7"
+
|-
| class="col0 centeralign" | 6
+
| 6
| class="col1 centeralign" | Command Block minecart
+
| Command Block minecart
|}
+
|}
  
=== Item Frame (id 71) ===
+
== Item Frame (id 71) ==
  
 
{| class="wikitable"
 
{| class="wikitable"
|- class="row0"
+
|-
! class="col0" | Field Name
+
! Value
! class="col1" | Field Type
+
! Orientation
! class="col2" | Example
+
|-
! class="col3" | Notes
+
| 0
|- class="row1"
+
| Down
| class="col0 centeralign" | Orientation
+
|-
| class="col1 centeralign" | int
+
| 1
| class="col2 centeralign" | <code>3</code>
+
| Up
| class="col3" | 0-3: South, West, North, East
+
|-
|}
+
| 2
 +
| North
 +
|-
 +
| 3
 +
| South
 +
|-
 +
| 4
 +
| West
 +
|-
 +
| 5
 +
| East
 +
|}
 +
You have to set both Orientation and Yaw/Pitch accordingly, otherwise it will not work.
 +
 
 +
Velocity in the packet is always ignored.
  
=== Falling Block (id 70) ===
+
== Falling Block (id 70) ==
  
 
{| class="wikitable"
 
{| class="wikitable"
|- class="row0"
+
|-
! class="col0" | Field Name
+
! Field name
! class="col1" | Field Type
+
! Field type
! class="col2" | Example
+
! Example
! class="col3" | Notes
+
! Notes
|- class="row1"
+
|-
| class="col0 centeralign" | Block Type
+
| Block type
| class="col1 centeralign" | int
+
| Int
| class="col2 centeralign" | <code>12</code>
+
| <code>12</code>
| class="col3" | <code>BlockID | (Metadata << 0x10)</code>
+
| <code><nowiki>BlockID | (Metadata << 12)</nowiki></code>
|}
+
|}
  
=== Splash Potions (id 73) ===
+
Velocity in the packet is always ignored.
 +
 
 +
== Fishing Float (id 90) ==
  
 
{| class="wikitable"
 
{| class="wikitable"
|- class="row0"
+
! Field name
! class="col0" | Field Name
+
! Field type
! class="col1" | Field Type
+
! Example
! class="col2" | Example
+
! Notes
! class="col3" | Notes
+
|-
|- class="row1"
+
| Owner
| class="col0 centeralign" | Entity ID
+
| Int
| class="col1 centeralign" | int
+
|  
| class="col2 centeralign" | <code>64</code>
+
| The entity ID of the owner
| class="col3" | Potion data value
+
|}
|}
 
  
For more information on potion data values, see [http://www.minecraftwiki.net/wiki/Data_values#Potions].
+
Velocity in the packet is ignored, and instead should be inferred from the shooter's position.
 +
 
 +
{{Need Info|What's the exact algorithm for determining this?}}
 +
 
 +
== Arrow (id 60) and Spectral Arrow (id 91) ==
  
=== Fishing Float (id 90) ===
 
 
{| class="wikitable"
 
{| class="wikitable"
! Field Name !! Field Type !! Example !! Notes
+
|-
|-
+
! Field name
| Owner || int ||  || The entity ID of the owner
+
! Field type
|}
+
! Example
 +
! Notes
 +
|-
 +
| Entity ID
 +
| Int
 +
| <code>64</code>
 +
  | The entity ID of the shooter + 1 (Subtract 1 to get the actual entity ID)
 +
|}
  
 +
== Llama spit (id 68) ==
  
 +
Velocity is always used even though the data field is always 0.
  
=== Projectiles ([[Entities#Objects|Any projectile]])===
+
== Fireball (id 63), small fireball (id 64), dragon fireball (id 93), and wither skull (id 66) ==
  
This includes ghast fireballs, arrows, and fishhooks (probably more).
+
The data field stores the ID of the shooting entity, or 0 if there was no shooting entity.  Velocity is used even if data is set to 0.
  
{| class="wikitable"
+
== Shulker bullet (id 67) ==
|- class="row0"
+
 
! class="col0" | Field Name
+
Velocity is always used even though the data field is always 0.
! class="col1" | Field Type
+
 
! class="col2" | Example
+
== Potion (id 73) ==
! class="col3" | Notes
+
 
|- class="row1"
+
Velocity in the packet is always ignored.
| class="col0 centeralign" | Entity ID
+
 
| class="col1 centeralign" | int
+
== EXP bottle (id 75) ==
| class="col2 centeralign" | <code>64</code>
+
 
| class="col3" | The entity ID of the thrower
+
Velocity in the packet is always ignored.
|}
+
 
 +
[[Category:Protocol Details]]
 +
[[Category:Minecraft Modern]]

Revision as of 15:04, 6 August 2019

This article documents the Data field in the Spawn Object packet. The field is of type Int, and the meaning of its contents depend on the type of object being spawned, as defined in the Type field of the same packet, and is documented below.

In some cases, the data field has no meaning, but is only used to indicate presence of velocity. In others, it (and velocity) is always ignored.

Item (id 2)

The int value is ignored, but should be set to 1 to indicate that velocity is present.

Minecarts (id 10)

The int value itself specifies the minecart's functionality:

Value Minecart functionality
0 Empty (ride-able) minecart
1 Chest minecart
2 Furnace (powered) minecart
3 TNT minecart
4 Spawner minecart
5 Hopper minecart
6 Command Block minecart

Item Frame (id 71)

Value Orientation
0 Down
1 Up
2 North
3 South
4 West
5 East

You have to set both Orientation and Yaw/Pitch accordingly, otherwise it will not work.

Velocity in the packet is always ignored.

Falling Block (id 70)

Field name Field type Example Notes
Block type Int 12 BlockID | (Metadata << 12)

Velocity in the packet is always ignored.

Fishing Float (id 90)

Field name Field type Example Notes
Owner Int The entity ID of the owner

Velocity in the packet is ignored, and instead should be inferred from the shooter's position.

Huh.png The following information needs to be added to this page:
What's the exact algorithm for determining this?

Arrow (id 60) and Spectral Arrow (id 91)

Field name Field type Example Notes
Entity ID Int 64 The entity ID of the shooter + 1 (Subtract 1 to get the actual entity ID)

Llama spit (id 68)

Velocity is always used even though the data field is always 0.

Fireball (id 63), small fireball (id 64), dragon fireball (id 93), and wither skull (id 66)

The data field stores the ID of the shooting entity, or 0 if there was no shooting entity. Velocity is used even if data is set to 0.

Shulker bullet (id 67)

Velocity is always used even though the data field is always 0.

Potion (id 73)

Velocity in the packet is always ignored.

EXP bottle (id 75)

Velocity in the packet is always ignored.