Data Types: Difference between revisions

From wiki.vg
Jump to navigation Jump to search
imported>Drainedsoul
(Minecraft actually uses UTF-16)
imported>Fenhl
(Fenhl moved page Data Types to Data types over redirect: case)
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
All data sent over the network is [http://en.wikipedia.org/wiki/Endianness#Big-endian big-endian], that is the bytes are sent from most significant byte to least significant byte. The majority of everyday computers are little-endian, therefore it may be necessary to change the endianness before sending data over the network.
#REDIRECT [[Data types]]
 
Other than 'String' and 'Metadata', which are decoded with a custom function, these data formats are identical to those provided by the Java classes [http://download.oracle.com/javase/1.4.2/docs/api/java/io/DataInputStream.html DataInputStream] and [http://download.oracle.com/javase/1.4.2/docs/api/java/io/DataOutputStream.html DataOutputStream].
 
{| class="wikitable"
|- class="row0"
| class="col0" |
! class="col1" | Size
! class="col2" | Range
! class="col3" | Notes
|- class="row1"
! class="col0 centeralign" | bool
| class="col1 centeralign" | 1
| class="col2" | 0 or 1
| class="col3" | Value can be either true (0x01) or false (0x00)
|- class="row2"
! class="col0 centeralign" | byte
| class="col1 centeralign" | 1
| class="col2" | -128 to 127
| class="col3" | Signed, two's complement
|- class="row3"
! class="col0 centeralign" | short
| class="col1 centeralign" | 2
| class="col2" | -32768 to 32767
| class="col3" | Signed, two's complement
|- class="row4"
! class="col0 centeralign" | int
| class="col1 centeralign" | 4
| class="col2" | -2147483648 to 2147483647
| class="col3" | Signed, two's complement
|- class="row5"
! class="col0 centeralign" | long
| class="col1 centeralign" | 8
| class="col2" | -9223372036854775808 to 9223372036854775807
| class="col3" | Signed, two's complement
|- class="row6"
! class="col0 centeralign" | float
| class="col1 centeralign" | 4
| class="col2" |
See [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 this]
| class="col3" | Single-precision 32-bit IEEE 754 floating point
|- class="row7"
! class="col0 centeralign" | double
| class="col1 centeralign" | 8
| class="col2" |
See [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 this]
| class="col3" | Double-precision 64-bit IEEE 754 floating point
|- class="row8"
! class="col0 centeralign" | string
| class="col1 centeralign" | ≥ 2 <br />≤ 240
| class="col2" | N/A
| class="col3" | [http://en.wikipedia.org/wiki/UTF-16 UTF-16] big-endian string prefixed by a short containing the length of the string in [http://en.wikipedia.org/wiki/Code_unit code units] (as a UTF-16 code unit is 2 bytes, multiply the length by two to get the length in bytes). UTF-16 is a variable-width encoding so each [http://en.wikipedia.org/wiki/Code_point code point] may be 1 or 2 code units.  Accordingly the specified length (in code units) does not necessarily map onto the logical length of the string (in code points).
|- class="row9"
! class="col0 centeralign" | metadata
| class="col1 centeralign" | Varies
| class="col2" | See [[Entities#Entity_Metadata_Format|this]]
| class="Col3" |
|}
 
Some data may be stored as an "absolute integer", which is a more precise kind of integer, and a less precise kind of double.  The conversion from double to absolute integer is like so:
 
abs_int = (int)double * 32;
 
And back again:
 
double = (double)abs_int / 32;
 
[[Category:Protocol Details]]
[[Category:Minecraft Modern]]

Latest revision as of 07:39, 7 December 2015

Redirect to: