mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-30 14:41:27 -04:00
Implement @roblabla's changes
This commit is contained in:
parent
3121c0fdcc
commit
17e78c11f6
@ -321,19 +321,16 @@ var packets = {
|
|||||||
{ name: "location", type: "position" },
|
{ name: "location", type: "position" },
|
||||||
{ name: "destroyStage", type: "byte" }
|
{ name: "destroyStage", type: "byte" }
|
||||||
]},
|
]},
|
||||||
map_chunk_bulk: {id: 0x26, fields: [ /* TODO: This is probably wrong */
|
map_chunk_bulk: {id: 0x26, fields: [
|
||||||
{ name: "skyLightSent", type: "bool" },
|
{ name: "skyLightSent", type: "bool" },
|
||||||
{ name: "chunkColumnCount", type: "count", typeArgs: { type: "varint", countFor: "meta" } },
|
{ name: "chunkColumnCount", type: "count", typeArgs: { type: "varint", countFor: "meta" } },
|
||||||
{ name: "dataLength", type: "count", typeArgs: { type: "int", countFor: "chunkData" } },
|
{ name: "meta", type: "array", typeArgs: { count: "chunkColumnCount", type: "container", typeArgs: { fields: [
|
||||||
{ name: "chunkData", type: "buffer", typeArgs: { count: "dataLength" } },
|
|
||||||
{ name: "meta", type: "array", typeArgs: { count: "chunkColumnCount",
|
|
||||||
type: "container", typeArgs: { fields: [
|
|
||||||
{ name: "x", type: "int" },
|
{ name: "x", type: "int" },
|
||||||
{ name: "z", type: "int" },
|
{ name: "z", type: "int" },
|
||||||
{ name: "bitMap", type: "ushort" },
|
{ name: "bitMap", type: "ushort" },
|
||||||
{ name: "addBitMap", type: "ushort" }
|
]}}},
|
||||||
] } } }
|
{ name: "data", type: "restBuffer" }
|
||||||
]},
|
]}
|
||||||
explosion: {id: 0x27, fields: [
|
explosion: {id: 0x27, fields: [
|
||||||
{ name: "x", type: "float" },
|
{ name: "x", type: "float" },
|
||||||
{ name: "y", type: "float" },
|
{ name: "y", type: "float" },
|
||||||
@ -428,10 +425,31 @@ var packets = {
|
|||||||
{ name: "text3", type: "string" },
|
{ name: "text3", type: "string" },
|
||||||
{ name: "text4", type: "string" }
|
{ name: "text4", type: "string" }
|
||||||
]},
|
]},
|
||||||
map: {id: 0x34, fields: [ /* TODO: No clue how to do this */
|
map: {id: 0x34, fields: [
|
||||||
{ name: "itemDamage", type: "varint" },
|
{ name: "itemDamage", type: "varint" },
|
||||||
{ name: "dataLength", type: "count", typeArgs: { type: "short", countFor: "data" } },
|
{ name: "scale", type: "byte" },
|
||||||
{ name: "data", type: "buffer", typeArgs: { count: "dataLength" } },
|
{ name: "iconLength", type: "count", typeArgs: { type: "varint", countFor: "icons" } },
|
||||||
|
{ name: "icons", type: "array", typeArgs: { count: "iconLength", type: "container", typeArgs: { fields: [
|
||||||
|
{ name: "directionAndType", type: "byte" }, // Yeah... that will do
|
||||||
|
{ name: "x", type: "byte" },
|
||||||
|
{ name: "y", type: "byte" }
|
||||||
|
]}}},
|
||||||
|
{ name: "columns", type: "byte" },
|
||||||
|
{ name: "rows", type: "byte", condition: function(field_values) {
|
||||||
|
return field_values["columns"] !== 0;
|
||||||
|
}},
|
||||||
|
{ name: "x", type: "byte", condition: function(field_values) {
|
||||||
|
return field_values["columns"] !== 0;
|
||||||
|
}},
|
||||||
|
{ name: "y", type: "byte", condition: function(field_values) {
|
||||||
|
return field_values["columns"] !== 0;
|
||||||
|
}},
|
||||||
|
{ name: "dataLength", type: "count", typeArgs: { countFor: "data", type: "varint" }, condition: function(field_values) {
|
||||||
|
return field_values["columns"] !== 0;
|
||||||
|
}},
|
||||||
|
{ name: "data", type: "buffer", typeArgs: { count: "dataLength" }, condition: function(field_values) {
|
||||||
|
return field_values["columns"] !== 0;
|
||||||
|
}},
|
||||||
]},
|
]},
|
||||||
tile_entity_data:{id: 0x35, fields: [
|
tile_entity_data:{id: 0x35, fields: [
|
||||||
{ name: "location", type: "position" },
|
{ name: "location", type: "position" },
|
||||||
@ -451,10 +469,40 @@ var packets = {
|
|||||||
]}
|
]}
|
||||||
}}
|
}}
|
||||||
]},
|
]},
|
||||||
player_info: {id: 0x38, fields: [ /* TODO: Again, no clue */
|
player_info: {id: 0x38, fields: [
|
||||||
{ name: "playerName", type: "string" },
|
{ name: "action", type: "varint" },
|
||||||
{ name: "online", type: "bool" },
|
{ name: "length", type: "count", typeArgs: { type: "varint", countFor: "data" }},
|
||||||
{ name: "ping", type: "short" }
|
{ name: "data", type: "array", typeArgs: { count: "length", type: "container", typeArgs: { fields: [
|
||||||
|
{ name: "UUID", type: "uuid" },
|
||||||
|
{ name: "name", type: "string", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0;
|
||||||
|
}},
|
||||||
|
{ name: "propertiesLength", type: "count", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0;
|
||||||
|
}, typeArgs: { countFor: "properties", type: "varint" }},
|
||||||
|
{ name: "properties", type: "array", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0;
|
||||||
|
}, typeArgs: { count: propertiesLength, type: "container", typeArgs: { fields: [
|
||||||
|
{ name: "name", type: "string" }
|
||||||
|
{ name: "value", type: "string" },
|
||||||
|
{ name: "isSigned", type: "bool" },
|
||||||
|
{ name: "signature", type: "string", condition: function(field_values) {
|
||||||
|
return field_values["isSigned"];
|
||||||
|
}}
|
||||||
|
]}},
|
||||||
|
{ name: "gamemode", type: "varint", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0 || field_values["action"] === 1;
|
||||||
|
}},
|
||||||
|
{ name: "ping", type: "varint", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0 || field_values["action"] === 2;
|
||||||
|
}},
|
||||||
|
{ name: "hasDisplayName", type: "bool", condition: function(field_values) {
|
||||||
|
return field_values["action"] === 0 || field_values["action"] === 3;
|
||||||
|
}},
|
||||||
|
{ name: "displayName", type: "string", condition: function(field_values) {
|
||||||
|
return field_values["hasDisplayName"]; // Returns false if there is no value "hasDisplayName"
|
||||||
|
}}
|
||||||
|
]}}}
|
||||||
]},
|
]},
|
||||||
abilities: {id: 0x39, fields: [
|
abilities: {id: 0x39, fields: [
|
||||||
{ name: "flags", type: "byte" },
|
{ name: "flags", type: "byte" },
|
||||||
@ -573,7 +621,7 @@ var packets = {
|
|||||||
return field_values['action'] == 0 || field_values['action'] == 1;
|
return field_values['action'] == 0 || field_values['action'] == 1;
|
||||||
} },
|
} },
|
||||||
{ name: "fadeIn", type: "int", condition: function(field_values) {
|
{ name: "fadeIn", type: "int", condition: function(field_values) {
|
||||||
return field_values['action'] == 0 || field_values['action'] == 1;
|
return field_values['action'] == 2;
|
||||||
} },
|
} },
|
||||||
{ name: "stay", type: "int", condition: function(field_values) {
|
{ name: "stay", type: "int", condition: function(field_values) {
|
||||||
return field_values['action'] == 2;
|
return field_values['action'] == 2;
|
||||||
@ -595,7 +643,7 @@ var packets = {
|
|||||||
]},
|
]},
|
||||||
update_entity_nbt: { id: 0x49, fields: [
|
update_entity_nbt: { id: 0x49, fields: [
|
||||||
{ name: "entityId", type: "varint" },
|
{ name: "entityId", type: "varint" },
|
||||||
{ name: "tag", type: "string"} /* TODO: Should be of type "NBT Tag" */
|
{ name: "tag", type: "restBuffer"}
|
||||||
]}
|
]}
|
||||||
},
|
},
|
||||||
toServer: {
|
toServer: {
|
||||||
@ -786,6 +834,7 @@ var types = {
|
|||||||
'container': [readContainer, writeContainer, sizeOfContainer],
|
'container': [readContainer, writeContainer, sizeOfContainer],
|
||||||
'array': [readArray, writeArray, sizeOfArray],
|
'array': [readArray, writeArray, sizeOfArray],
|
||||||
'buffer': [readBuffer, writeBuffer, sizeOfBuffer],
|
'buffer': [readBuffer, writeBuffer, sizeOfBuffer],
|
||||||
|
'restBuffer': [readRestBuffer, writeRestBuffer, sizeOfRestBuffer],
|
||||||
'count': [readCount, writeCount, sizeOfCount],
|
'count': [readCount, writeCount, sizeOfCount],
|
||||||
// TODO : remove type-specific, replace with generic containers and arrays.
|
// TODO : remove type-specific, replace with generic containers and arrays.
|
||||||
'slot': [readSlot, writeSlot, sizeOfSlot],
|
'slot': [readSlot, writeSlot, sizeOfSlot],
|
||||||
@ -1213,6 +1262,16 @@ function sizeOfBuffer(value) {
|
|||||||
return value.length;
|
return value.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function readRestBuffer(buffer, offset, typeArgs, rootNode) {
|
||||||
|
return {
|
||||||
|
value: buffer.slice(offset),
|
||||||
|
size: buffer.length - offset
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var writeRestBuffer = writeBuffer;
|
||||||
|
var sizeOfRestBuffer = sizeOfBuffer;
|
||||||
|
|
||||||
function readArray(buffer, offset, typeArgs, rootNode) {
|
function readArray(buffer, offset, typeArgs, rootNode) {
|
||||||
var results = {
|
var results = {
|
||||||
value: [],
|
value: [],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user