diff --git a/src/client.js b/src/client.js index a39fa38..85f45bd 100644 --- a/src/client.js +++ b/src/client.js @@ -10,6 +10,9 @@ var states = require("./states"); var createSerializer=require("./transforms/serializer").createSerializer; var createDeserializer=require("./transforms/serializer").createDeserializer; +var protocolSpecs = require('./protocol'); +var protocolVersions = require('./protocol/protocolVersions'); + class Client extends EventEmitter { constructor(isServer,version) { @@ -42,6 +45,30 @@ class Client extends EventEmitter }); } + set version(newVersion) { + let versionInfo; + if (typeof newVersion === 'string') { + if (newVersion === '1.9') newVersion = '15w40b'; // TODO: remove hack, should call it 15w40b instead of 1.9? no such 'release version' of 1.9 yet (ambiguous) + versionInfo = protocolVersions.versionsByMinecraftVersion[newVersion]; + } else if (typeof newVersion === 'number') { + versionInfo = protocolVersions.latestVersionsByProtocolVersionCode[newVersion]; + } + if (!versionInfo) throw new Error(`unrecognized release or protocol version: ${newVersion}, update minecraft-data?`); + + this.protocolVersion = versionInfo.version; + + // currently, datasets are indexed by major version TODO: generalize + let dataVersion = versionInfo.majorVersion; + + if (!protocolSpecs[dataVersion]) throw new Error(`no protocol specification for version: ${newVersion}`); + + this._version = dataVersion; + } + + get version() { + return this._version; + } + get state(){ return this.protocolState; } diff --git a/src/client/autoVersion.js b/src/client/autoVersion.js index 0907b69..705c71a 100644 --- a/src/client/autoVersion.js +++ b/src/client/autoVersion.js @@ -4,7 +4,6 @@ var ping = require('../ping'); var debug = require('../debug'); var states = require('../states'); var assert = require('assert'); -var minecraft_data = require('minecraft-data'); var forgeHandshake = require('./forgeHandshake'); module.exports = function(client, options) { @@ -29,14 +28,9 @@ module.exports = function(client, options) { // servers add their own name (Spigot 1.8.8, Glowstone++ 1.8.9) so we cannot use it directly, // even though it is in a format accepted by minecraft-data. Instead, translate the protocol. // TODO: pre-Netty version support (uses overlapping version numbers, so would have to check versionName) - var versionInfos = minecraft_data.postNettyVersionsByProtocolVersion[protocolVersion]; - if (!versionInfos && versionInfos.length < 1) throw new Error(`unsupported/unknown protocol version: ${protocolVersion}, update minecraft-data`); - var versionInfo = versionInfos[0]; // use newest - options.version = versionInfo.minecraftVersion; - options.protocolVersion = protocolVersion; // Reinitialize client object with new version TODO: move out of its constructor? - client.version = versionInfo.majorVersion; + client.version = protocolVersion; client.state = states.HANDSHAKING; if (response.modinfo && response.modinfo.type === 'FML') { diff --git a/src/client/setProtocol.js b/src/client/setProtocol.js index ccbf9a7..513a249 100644 --- a/src/client/setProtocol.js +++ b/src/client/setProtocol.js @@ -17,7 +17,7 @@ module.exports = function(client, options) { if (options.tagHost) taggedHost += options.tagHost; client.write('set_protocol', { - protocolVersion: options.protocolVersion, + protocolVersion: client.protocolVersion, serverHost: taggedHost, serverPort: options.port, nextState: 2 diff --git a/src/createClient.js b/src/createClient.js index 7b81300..393fa27 100644 --- a/src/createClient.js +++ b/src/createClient.js @@ -21,13 +21,8 @@ function createClient(options) { // TODO: avoid setting default version if autoVersion is enabled var optVersion = options.version || require("./version").defaultVersion; - var mcData=require("minecraft-data")(optVersion); - if (!mcData) throw new Error(`unsupported protocol version: ${optVersion}`); - var version = mcData.version; - options.majorVersion = version.majorVersion; - options.protocolVersion = version.version; - var client = new Client(false, options.majorVersion); + var client = new Client(false, optVersion); tcp_dns(client, options); if (options.forgeMods) forgeHandshake(client, options); diff --git a/src/ping.js b/src/ping.js index 42350b3..21d20a2 100644 --- a/src/ping.js +++ b/src/ping.js @@ -11,12 +11,8 @@ function ping(options, cb) { options.host = options.host || 'localhost'; options.port = options.port || 25565; var optVersion = options.version || require("./version").defaultVersion; - var mcData=require("minecraft-data")(optVersion); - var version = mcData.version; - options.majorVersion = version.majorVersion; - options.protocolVersion = version.version; - var client = new Client(false,options.majorVersion); + var client = new Client(false, optVersion); client.on('error', function(err) { cb(err); }); diff --git a/src/protocol/1.8.json b/src/protocol/1.8.json new file mode 100644 index 0000000..1685b29 --- /dev/null +++ b/src/protocol/1.8.json @@ -0,0 +1,4533 @@ +{ + "handshaking": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_set_protocol": [ + "container", + [ + { + "name": "protocolVersion", + "type": "varint" + }, + { + "name": "serverHost", + "type": "string" + }, + { + "name": "serverPort", + "type": "ushort" + }, + { + "name": "nextState", + "type": "varint" + } + ] + ], + "packet_legacy_server_list_ping": [ + "container", + [ + { + "name": "payload", + "type": "ubyte" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "set_protocol", + "254": "legacy_server_list_ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "set_protocol": "packet_set_protocol", + "legacy_server_list_ping": "packet_legacy_server_list_ping" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": {} + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": {} + } + ] + } + ] + ] + } + }, + "status": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_ping_start": [ + "container", + [] + ], + "packet_ping": [ + "container", + [ + { + "name": "time", + "type": "long" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "ping_start", + "1": "ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "ping_start": "packet_ping_start", + "ping": "packet_ping" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_server_info": [ + "container", + [ + { + "name": "response", + "type": "string" + } + ] + ], + "packet_ping": [ + "container", + [ + { + "name": "time", + "type": "long" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "server_info", + "1": "ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "server_info": "packet_server_info", + "ping": "packet_ping" + } + } + ] + } + ] + ] + } + }, + "login": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_login_start": [ + "container", + [ + { + "name": "username", + "type": "string" + } + ] + ], + "packet_encryption_begin": [ + "container", + [ + { + "name": "sharedSecret", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + }, + { + "name": "verifyToken", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "login_start", + "1": "encryption_begin" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "login_start": "packet_login_start", + "encryption_begin": "packet_encryption_begin" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_disconnect": [ + "container", + [ + { + "name": "reason", + "type": "string" + } + ] + ], + "packet_encryption_begin": [ + "container", + [ + { + "name": "serverId", + "type": "string" + }, + { + "name": "publicKey", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + }, + { + "name": "verifyToken", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet_success": [ + "container", + [ + { + "name": "uuid", + "type": "string" + }, + { + "name": "username", + "type": "string" + } + ] + ], + "packet_compress": [ + "container", + [ + { + "name": "threshold", + "type": "varint" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "disconnect", + "1": "encryption_begin", + "2": "success", + "3": "compress" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "disconnect": "packet_disconnect", + "encryption_begin": "packet_encryption_begin", + "success": "packet_success", + "compress": "packet_compress" + } + } + ] + } + ] + ] + } + }, + "play": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_keep_alive": [ + "container", + [ + { + "name": "keepAliveId", + "type": "varint" + } + ] + ], + "packet_chat": [ + "container", + [ + { + "name": "message", + "type": "string" + } + ] + ], + "packet_use_entity": [ + "container", + [ + { + "name": "target", + "type": "varint" + }, + { + "name": "mouse", + "type": "varint" + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "y", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "z", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + } + ] + ], + "packet_flying": [ + "container", + [ + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_position": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_look": [ + "container", + [ + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_position_look": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_block_dig": [ + "container", + [ + { + "name": "status", + "type": "byte" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "face", + "type": "byte" + } + ] + ], + "packet_block_place": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "direction", + "type": "byte" + }, + { + "name": "heldItem", + "type": "slot" + }, + { + "name": "cursorX", + "type": "byte" + }, + { + "name": "cursorY", + "type": "byte" + }, + { + "name": "cursorZ", + "type": "byte" + } + ] + ], + "packet_held_item_slot": [ + "container", + [ + { + "name": "slotId", + "type": "short" + } + ] + ], + "packet_arm_animation": [ + "container", + [] + ], + "packet_entity_action": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "actionId", + "type": "varint" + }, + { + "name": "jumpBoost", + "type": "varint" + } + ] + ], + "packet_steer_vehicle": [ + "container", + [ + { + "name": "sideways", + "type": "float" + }, + { + "name": "forward", + "type": "float" + }, + { + "name": "jump", + "type": "ubyte" + } + ] + ], + "packet_close_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + } + ] + ], + "packet_window_click": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "slot", + "type": "short" + }, + { + "name": "mouseButton", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "mode", + "type": "byte" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_transaction": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "accepted", + "type": "bool" + } + ] + ], + "packet_set_creative_slot": [ + "container", + [ + { + "name": "slot", + "type": "short" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_enchant_item": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "enchantment", + "type": "byte" + } + ] + ], + "packet_update_sign": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "text1", + "type": "string" + }, + { + "name": "text2", + "type": "string" + }, + { + "name": "text3", + "type": "string" + }, + { + "name": "text4", + "type": "string" + } + ] + ], + "packet_abilities": [ + "container", + [ + { + "name": "flags", + "type": "byte" + }, + { + "name": "flyingSpeed", + "type": "float" + }, + { + "name": "walkingSpeed", + "type": "float" + } + ] + ], + "packet_tab_complete": [ + "container", + [ + { + "name": "text", + "type": "string" + }, + { + "name": "block", + "type": [ + "option", + "position" + ] + } + ] + ], + "packet_settings": [ + "container", + [ + { + "name": "locale", + "type": "string" + }, + { + "name": "viewDistance", + "type": "byte" + }, + { + "name": "chatFlags", + "type": "byte" + }, + { + "name": "chatColors", + "type": "bool" + }, + { + "name": "skinParts", + "type": "ubyte" + } + ] + ], + "packet_client_command": [ + "container", + [ + { + "name": "payload", + "type": "varint" + } + ] + ], + "packet_custom_payload": [ + "container", + [ + { + "name": "channel", + "type": "string" + }, + { + "name": "data", + "type": "restBuffer" + } + ] + ], + "packet_spectate": [ + "container", + [ + { + "name": "target", + "type": "UUID" + } + ] + ], + "packet_resource_pack_receive": [ + "container", + [ + { + "name": "hash", + "type": "string" + }, + { + "name": "result", + "type": "varint" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "keep_alive", + "1": "chat", + "2": "use_entity", + "3": "flying", + "4": "position", + "5": "look", + "6": "position_look", + "7": "block_dig", + "8": "block_place", + "9": "held_item_slot", + "10": "arm_animation", + "11": "entity_action", + "12": "steer_vehicle", + "13": "close_window", + "14": "window_click", + "15": "transaction", + "16": "set_creative_slot", + "17": "enchant_item", + "18": "update_sign", + "19": "abilities", + "20": "tab_complete", + "21": "settings", + "22": "client_command", + "23": "custom_payload", + "24": "spectate", + "25": "resource_pack_receive" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "keep_alive": "packet_keep_alive", + "chat": "packet_chat", + "use_entity": "packet_use_entity", + "flying": "packet_flying", + "position": "packet_position", + "look": "packet_look", + "position_look": "packet_position_look", + "block_dig": "packet_block_dig", + "block_place": "packet_block_place", + "held_item_slot": "packet_held_item_slot", + "arm_animation": "packet_arm_animation", + "entity_action": "packet_entity_action", + "steer_vehicle": "packet_steer_vehicle", + "close_window": "packet_close_window", + "window_click": "packet_window_click", + "transaction": "packet_transaction", + "set_creative_slot": "packet_set_creative_slot", + "enchant_item": "packet_enchant_item", + "update_sign": "packet_update_sign", + "abilities": "packet_abilities", + "tab_complete": "packet_tab_complete", + "settings": "packet_settings", + "client_command": "packet_client_command", + "custom_payload": "packet_custom_payload", + "spectate": "packet_spectate", + "resource_pack_receive": "packet_resource_pack_receive" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "short", + "2": "int", + "3": "float", + "4": "string", + "5": "slot", + "6": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ] + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 127, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "bitfield", + [ + { + "name": "type", + "size": 3, + "signed": false + }, + { + "name": "key", + "size": 5, + "signed": false + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_keep_alive": [ + "container", + [ + { + "name": "keepAliveId", + "type": "varint" + } + ] + ], + "packet_login": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "gameMode", + "type": "ubyte" + }, + { + "name": "dimension", + "type": "byte" + }, + { + "name": "difficulty", + "type": "ubyte" + }, + { + "name": "maxPlayers", + "type": "ubyte" + }, + { + "name": "levelType", + "type": "string" + }, + { + "name": "reducedDebugInfo", + "type": "bool" + } + ] + ], + "packet_chat": [ + "container", + [ + { + "name": "message", + "type": "string" + }, + { + "name": "position", + "type": "byte" + } + ] + ], + "packet_update_time": [ + "container", + [ + { + "name": "age", + "type": "long" + }, + { + "name": "time", + "type": "long" + } + ] + ], + "packet_entity_equipment": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "slot", + "type": "short" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_spawn_position": [ + "container", + [ + { + "name": "location", + "type": "position" + } + ] + ], + "packet_update_health": [ + "container", + [ + { + "name": "health", + "type": "float" + }, + { + "name": "food", + "type": "varint" + }, + { + "name": "foodSaturation", + "type": "float" + } + ] + ], + "packet_respawn": [ + "container", + [ + { + "name": "dimension", + "type": "int" + }, + { + "name": "difficulty", + "type": "ubyte" + }, + { + "name": "gamemode", + "type": "ubyte" + }, + { + "name": "levelType", + "type": "string" + } + ] + ], + "packet_position": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "flags", + "type": "byte" + } + ] + ], + "packet_held_item_slot": [ + "container", + [ + { + "name": "slot", + "type": "byte" + } + ] + ], + "packet_bed": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "location", + "type": "position" + } + ] + ], + "packet_animation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "animation", + "type": "ubyte" + } + ] + ], + "packet_named_entity_spawn": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "playerUUID", + "type": "UUID" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "currentItem", + "type": "short" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_collect": [ + "container", + [ + { + "name": "collectedEntityId", + "type": "varint" + }, + { + "name": "collectorEntityId", + "type": "varint" + } + ] + ], + "packet_spawn_entity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "type", + "type": "byte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "objectData", + "type": [ + "container", + [ + { + "name": "intField", + "type": "int" + }, + { + "name": "velocityX", + "type": [ + "switch", + { + "compareTo": "intField", + "fields": { + "0": "void" + }, + "default": "short" + } + ] + }, + { + "name": "velocityY", + "type": [ + "switch", + { + "compareTo": "intField", + "fields": { + "0": "void" + }, + "default": "short" + } + ] + }, + { + "name": "velocityZ", + "type": [ + "switch", + { + "compareTo": "intField", + "fields": { + "0": "void" + }, + "default": "short" + } + ] + } + ] + ] + } + ] + ], + "packet_spawn_entity_living": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "type", + "type": "ubyte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "headPitch", + "type": "byte" + }, + { + "name": "velocityX", + "type": "short" + }, + { + "name": "velocityY", + "type": "short" + }, + { + "name": "velocityZ", + "type": "short" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_spawn_entity_painting": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "title", + "type": "string" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "direction", + "type": "ubyte" + } + ] + ], + "packet_spawn_entity_experience_orb": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "count", + "type": "short" + } + ] + ], + "packet_entity_velocity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "velocityX", + "type": "short" + }, + { + "name": "velocityY", + "type": "short" + }, + { + "name": "velocityZ", + "type": "short" + } + ] + ], + "packet_entity_destroy": [ + "container", + [ + { + "name": "entityIds", + "type": [ + "array", + { + "countType": "varint", + "type": "varint" + } + ] + } + ] + ], + "packet_entity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + } + ] + ], + "packet_rel_entity_move": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "dX", + "type": "byte" + }, + { + "name": "dY", + "type": "byte" + }, + { + "name": "dZ", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_look": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_move_look": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "dX", + "type": "byte" + }, + { + "name": "dY", + "type": "byte" + }, + { + "name": "dZ", + "type": "byte" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_teleport": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_head_rotation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "headYaw", + "type": "byte" + } + ] + ], + "packet_entity_status": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "entityStatus", + "type": "byte" + } + ] + ], + "packet_attach_entity": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "vehicleId", + "type": "int" + }, + { + "name": "leash", + "type": "bool" + } + ] + ], + "packet_entity_metadata": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_entity_effect": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "effectId", + "type": "byte" + }, + { + "name": "amplifier", + "type": "byte" + }, + { + "name": "duration", + "type": "varint" + }, + { + "name": "hideParticles", + "type": "bool" + } + ] + ], + "packet_remove_entity_effect": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "effectId", + "type": "byte" + } + ] + ], + "packet_experience": [ + "container", + [ + { + "name": "experienceBar", + "type": "float" + }, + { + "name": "level", + "type": "varint" + }, + { + "name": "totalExperience", + "type": "varint" + } + ] + ], + "packet_update_attributes": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "properties", + "type": [ + "array", + { + "countType": "int", + "type": [ + "container", + [ + { + "name": "key", + "type": "string" + }, + { + "name": "value", + "type": "double" + }, + { + "name": "modifiers", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "UUID", + "type": "UUID" + }, + { + "name": "amount", + "type": "double" + }, + { + "name": "operation", + "type": "byte" + } + ] + ] + } + ] + } + ] + ] + } + ] + } + ] + ], + "packet_map_chunk": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "groundUp", + "type": "bool" + }, + { + "name": "bitMap", + "type": "ushort" + }, + { + "name": "chunkData", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet_multi_block_change": [ + "container", + [ + { + "name": "chunkX", + "type": "int" + }, + { + "name": "chunkZ", + "type": "int" + }, + { + "name": "records", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "horizontalPos", + "type": "ubyte" + }, + { + "name": "y", + "type": "ubyte" + }, + { + "name": "blockId", + "type": "varint" + } + ] + ] + } + ] + } + ] + ], + "packet_block_change": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "type", + "type": "varint" + } + ] + ], + "packet_block_action": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "byte1", + "type": "ubyte" + }, + { + "name": "byte2", + "type": "ubyte" + }, + { + "name": "blockId", + "type": "varint" + } + ] + ], + "packet_block_break_animation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "destroyStage", + "type": "byte" + } + ] + ], + "packet_map_chunk_bulk": [ + "container", + [ + { + "name": "skyLightSent", + "type": "bool" + }, + { + "name": "meta", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "bitMap", + "type": "ushort" + } + ] + ] + } + ] + }, + { + "name": "data", + "type": "restBuffer" + } + ] + ], + "packet_explosion": [ + "container", + [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "z", + "type": "float" + }, + { + "name": "radius", + "type": "float" + }, + { + "name": "affectedBlockOffsets", + "type": [ + "array", + { + "countType": "int", + "type": [ + "container", + [ + { + "name": "x", + "type": "byte" + }, + { + "name": "y", + "type": "byte" + }, + { + "name": "z", + "type": "byte" + } + ] + ] + } + ] + }, + { + "name": "playerMotionX", + "type": "float" + }, + { + "name": "playerMotionY", + "type": "float" + }, + { + "name": "playerMotionZ", + "type": "float" + } + ] + ], + "packet_world_event": [ + "container", + [ + { + "name": "effectId", + "type": "int" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "data", + "type": "int" + }, + { + "name": "global", + "type": "bool" + } + ] + ], + "packet_named_sound_effect": [ + "container", + [ + { + "name": "soundName", + "type": "string" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "volume", + "type": "float" + }, + { + "name": "pitch", + "type": "ubyte" + } + ] + ], + "packet_world_particles": [ + "container", + [ + { + "name": "particleId", + "type": "int" + }, + { + "name": "longDistance", + "type": "bool" + }, + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "z", + "type": "float" + }, + { + "name": "offsetX", + "type": "float" + }, + { + "name": "offsetY", + "type": "float" + }, + { + "name": "offsetZ", + "type": "float" + }, + { + "name": "particleData", + "type": "float" + }, + { + "name": "particles", + "type": "int" + }, + { + "name": "data", + "type": [ + "array", + { + "count": { + "field": "particleId", + "map": { + "36": 2, + "37": 1, + "38": 1 + }, + "default": 0 + }, + "type": "varint" + } + ] + } + ] + ], + "packet_game_state_change": [ + "container", + [ + { + "name": "reason", + "type": "ubyte" + }, + { + "name": "gameMode", + "type": "float" + } + ] + ], + "packet_spawn_entity_weather": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "type", + "type": "byte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "packet_open_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "inventoryType", + "type": "string" + }, + { + "name": "windowTitle", + "type": "string" + }, + { + "name": "slotCount", + "type": "ubyte" + }, + { + "name": "entityId", + "type": [ + "switch", + { + "compareTo": "inventoryType", + "fields": { + "EntityHorse": "int" + }, + "default": "void" + } + ] + } + ] + ], + "packet_close_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + } + ] + ], + "packet_set_slot": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "slot", + "type": "short" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_window_items": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "items", + "type": [ + "array", + { + "countType": "short", + "type": "slot" + } + ] + } + ] + ], + "packet_craft_progress_bar": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "property", + "type": "short" + }, + { + "name": "value", + "type": "short" + } + ] + ], + "packet_transaction": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "accepted", + "type": "bool" + } + ] + ], + "packet_update_sign": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "text1", + "type": "string" + }, + { + "name": "text2", + "type": "string" + }, + { + "name": "text3", + "type": "string" + }, + { + "name": "text4", + "type": "string" + } + ] + ], + "packet_map": [ + "container", + [ + { + "name": "itemDamage", + "type": "varint" + }, + { + "name": "scale", + "type": "byte" + }, + { + "name": "icons", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "directionAndType", + "type": "byte" + }, + { + "name": "x", + "type": "byte" + }, + { + "name": "y", + "type": "byte" + } + ] + ] + } + ] + }, + { + "name": "columns", + "type": "byte" + }, + { + "name": "rows", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "y", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "data", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + } + ] + ], + "packet_tile_entity_data": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "action", + "type": "ubyte" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ], + "packet_open_sign_entity": [ + "container", + [ + { + "name": "location", + "type": "position" + } + ] + ], + "packet_statistics": [ + "container", + [ + { + "name": "entries", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "value", + "type": "varint" + } + ] + ] + } + ] + } + ] + ], + "packet_player_info": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "data", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "UUID", + "type": "UUID" + }, + { + "name": "name", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "string" + }, + "default": "void" + } + ] + }, + { + "name": "properties", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "value", + "type": "string" + }, + { + "name": "signature", + "type": [ + "option", + "string" + ] + } + ] + ] + } + ] + }, + "default": "void" + } + ] + }, + { + "name": "gamemode", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "varint", + "1": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "ping", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "varint", + "2": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "displayName", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": [ + "option", + "string" + ], + "3": [ + "option", + "string" + ] + }, + "default": "void" + } + ] + } + ] + ] + } + ] + } + ] + ], + "packet_abilities": [ + "container", + [ + { + "name": "flags", + "type": "byte" + }, + { + "name": "flyingSpeed", + "type": "float" + }, + { + "name": "walkingSpeed", + "type": "float" + } + ] + ], + "packet_tab_complete": [ + "container", + [ + { + "name": "matches", + "type": [ + "array", + { + "countType": "varint", + "type": "string" + } + ] + } + ] + ], + "packet_scoreboard_objective": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "action", + "type": "byte" + }, + { + "name": "displayText", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "type", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + } + ] + ], + "packet_scoreboard_score": [ + "container", + [ + { + "name": "itemName", + "type": "string" + }, + { + "name": "action", + "type": "byte" + }, + { + "name": "scoreName", + "type": "string" + }, + { + "name": "value", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "void" + }, + "default": "varint" + } + ] + } + ] + ], + "packet_scoreboard_display_objective": [ + "container", + [ + { + "name": "position", + "type": "byte" + }, + { + "name": "name", + "type": "string" + } + ] + ], + "packet_scoreboard_team": [ + "container", + [ + { + "name": "team", + "type": "string" + }, + { + "name": "mode", + "type": "byte" + }, + { + "name": "name", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "prefix", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "suffix", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "friendlyFire", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "byte", + "2": "byte" + }, + "default": "void" + } + ] + }, + { + "name": "nameTagVisibility", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "color", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "byte", + "2": "byte" + }, + "default": "void" + } + ] + }, + { + "name": "players", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": [ + "array", + { + "countType": "varint", + "type": "string" + } + ], + "3": [ + "array", + { + "countType": "varint", + "type": "string" + } + ], + "4": [ + "array", + { + "countType": "varint", + "type": "string" + } + ] + }, + "default": "void" + } + ] + } + ] + ], + "packet_custom_payload": [ + "container", + [ + { + "name": "channel", + "type": "string" + }, + { + "name": "data", + "type": "restBuffer" + } + ] + ], + "packet_kick_disconnect": [ + "container", + [ + { + "name": "reason", + "type": "string" + } + ] + ], + "packet_difficulty": [ + "container", + [ + { + "name": "difficulty", + "type": "ubyte" + } + ] + ], + "packet_combat_event": [ + "container", + [ + { + "name": "event", + "type": "varint" + }, + { + "name": "duration", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "1": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "playerId", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "2": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "entityId", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "1": "int", + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "message", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "2": "string" + }, + "default": "void" + } + ] + } + ] + ], + "packet_camera": [ + "container", + [ + { + "name": "cameraId", + "type": "varint" + } + ] + ], + "packet_world_border": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "double" + }, + "default": "void" + } + ] + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "z", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "old_radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "new_radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "speed", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "varint", + "3": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "portalBoundary", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "warning_time", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint", + "4": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "warning_blocks", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint", + "5": "varint" + }, + "default": "void" + } + ] + } + ] + ], + "packet_title": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "text", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "1": "string" + }, + "default": "void" + } + ] + }, + { + "name": "fadeIn", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "stay", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "fadeOut", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + } + ] + ], + "packet_set_compression": [ + "container", + [ + { + "name": "threshold", + "type": "varint" + } + ] + ], + "packet_playerlist_header": [ + "container", + [ + { + "name": "header", + "type": "string" + }, + { + "name": "footer", + "type": "string" + } + ] + ], + "packet_resource_pack_send": [ + "container", + [ + { + "name": "url", + "type": "string" + }, + { + "name": "hash", + "type": "string" + } + ] + ], + "packet_update_entity_nbt": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "tag", + "type": "nbt" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "keep_alive", + "1": "login", + "2": "chat", + "3": "update_time", + "4": "entity_equipment", + "5": "spawn_position", + "6": "update_health", + "7": "respawn", + "8": "position", + "9": "held_item_slot", + "10": "bed", + "11": "animation", + "12": "named_entity_spawn", + "13": "collect", + "14": "spawn_entity", + "15": "spawn_entity_living", + "16": "spawn_entity_painting", + "17": "spawn_entity_experience_orb", + "18": "entity_velocity", + "19": "entity_destroy", + "20": "entity", + "21": "rel_entity_move", + "22": "entity_look", + "23": "entity_move_look", + "24": "entity_teleport", + "25": "entity_head_rotation", + "26": "entity_status", + "27": "attach_entity", + "28": "entity_metadata", + "29": "entity_effect", + "30": "remove_entity_effect", + "31": "experience", + "32": "update_attributes", + "33": "map_chunk", + "34": "multi_block_change", + "35": "block_change", + "36": "block_action", + "37": "block_break_animation", + "38": "map_chunk_bulk", + "39": "explosion", + "40": "world_event", + "41": "named_sound_effect", + "42": "world_particles", + "43": "game_state_change", + "44": "spawn_entity_weather", + "45": "open_window", + "46": "close_window", + "47": "set_slot", + "48": "window_items", + "49": "craft_progress_bar", + "50": "transaction", + "51": "update_sign", + "52": "map", + "53": "tile_entity_data", + "54": "open_sign_entity", + "55": "statistics", + "56": "player_info", + "57": "abilities", + "58": "tab_complete", + "59": "scoreboard_objective", + "60": "scoreboard_score", + "61": "scoreboard_display_objective", + "62": "scoreboard_team", + "63": "custom_payload", + "64": "kick_disconnect", + "65": "difficulty", + "66": "combat_event", + "67": "camera", + "68": "world_border", + "69": "title", + "70": "set_compression", + "71": "playerlist_header", + "72": "resource_pack_send", + "73": "update_entity_nbt" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "keep_alive": "packet_keep_alive", + "login": "packet_login", + "chat": "packet_chat", + "update_time": "packet_update_time", + "entity_equipment": "packet_entity_equipment", + "spawn_position": "packet_spawn_position", + "update_health": "packet_update_health", + "respawn": "packet_respawn", + "position": "packet_position", + "held_item_slot": "packet_held_item_slot", + "bed": "packet_bed", + "animation": "packet_animation", + "named_entity_spawn": "packet_named_entity_spawn", + "collect": "packet_collect", + "spawn_entity": "packet_spawn_entity", + "spawn_entity_living": "packet_spawn_entity_living", + "spawn_entity_painting": "packet_spawn_entity_painting", + "spawn_entity_experience_orb": "packet_spawn_entity_experience_orb", + "entity_velocity": "packet_entity_velocity", + "entity_destroy": "packet_entity_destroy", + "entity": "packet_entity", + "rel_entity_move": "packet_rel_entity_move", + "entity_look": "packet_entity_look", + "entity_move_look": "packet_entity_move_look", + "entity_teleport": "packet_entity_teleport", + "entity_head_rotation": "packet_entity_head_rotation", + "entity_status": "packet_entity_status", + "attach_entity": "packet_attach_entity", + "entity_metadata": "packet_entity_metadata", + "entity_effect": "packet_entity_effect", + "remove_entity_effect": "packet_remove_entity_effect", + "experience": "packet_experience", + "update_attributes": "packet_update_attributes", + "map_chunk": "packet_map_chunk", + "multi_block_change": "packet_multi_block_change", + "block_change": "packet_block_change", + "block_action": "packet_block_action", + "block_break_animation": "packet_block_break_animation", + "map_chunk_bulk": "packet_map_chunk_bulk", + "explosion": "packet_explosion", + "world_event": "packet_world_event", + "named_sound_effect": "packet_named_sound_effect", + "world_particles": "packet_world_particles", + "game_state_change": "packet_game_state_change", + "spawn_entity_weather": "packet_spawn_entity_weather", + "open_window": "packet_open_window", + "close_window": "packet_close_window", + "set_slot": "packet_set_slot", + "window_items": "packet_window_items", + "craft_progress_bar": "packet_craft_progress_bar", + "transaction": "packet_transaction", + "update_sign": "packet_update_sign", + "map": "packet_map", + "tile_entity_data": "packet_tile_entity_data", + "open_sign_entity": "packet_open_sign_entity", + "statistics": "packet_statistics", + "player_info": "packet_player_info", + "abilities": "packet_abilities", + "tab_complete": "packet_tab_complete", + "scoreboard_objective": "packet_scoreboard_objective", + "scoreboard_score": "packet_scoreboard_score", + "scoreboard_display_objective": "packet_scoreboard_display_objective", + "scoreboard_team": "packet_scoreboard_team", + "custom_payload": "packet_custom_payload", + "kick_disconnect": "packet_kick_disconnect", + "difficulty": "packet_difficulty", + "combat_event": "packet_combat_event", + "camera": "packet_camera", + "world_border": "packet_world_border", + "title": "packet_title", + "set_compression": "packet_set_compression", + "playerlist_header": "packet_playerlist_header", + "resource_pack_send": "packet_resource_pack_send", + "update_entity_nbt": "packet_update_entity_nbt" + } + } + ] + } + ] + ] + } + } +} \ No newline at end of file diff --git a/src/protocol/1.9.json b/src/protocol/1.9.json new file mode 100644 index 0000000..31b9329 --- /dev/null +++ b/src/protocol/1.9.json @@ -0,0 +1,4557 @@ +{ + "handshaking": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_set_protocol": [ + "container", + [ + { + "name": "protocolVersion", + "type": "varint" + }, + { + "name": "serverHost", + "type": "string" + }, + { + "name": "serverPort", + "type": "ushort" + }, + { + "name": "nextState", + "type": "varint" + } + ] + ], + "packet_legacy_server_list_ping": [ + "container", + [ + { + "name": "payload", + "type": "ubyte" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "set_protocol", + "254": "legacy_server_list_ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "set_protocol": "packet_set_protocol", + "legacy_server_list_ping": "packet_legacy_server_list_ping" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": {} + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": {} + } + ] + } + ] + ] + } + }, + "status": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_ping_start": [ + "container", + [] + ], + "packet_ping": [ + "container", + [ + { + "name": "time", + "type": "long" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "ping_start", + "1": "ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "ping_start": "packet_ping_start", + "ping": "packet_ping" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_server_info": [ + "container", + [ + { + "name": "response", + "type": "string" + } + ] + ], + "packet_ping": [ + "container", + [ + { + "name": "time", + "type": "long" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "server_info", + "1": "ping" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "server_info": "packet_server_info", + "ping": "packet_ping" + } + } + ] + } + ] + ] + } + }, + "login": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_login_start": [ + "container", + [ + { + "name": "username", + "type": "string" + } + ] + ], + "packet_encryption_begin": [ + "container", + [ + { + "name": "sharedSecret", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + }, + { + "name": "verifyToken", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "login_start", + "1": "encryption_begin" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "login_start": "packet_login_start", + "encryption_begin": "packet_encryption_begin" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_disconnect": [ + "container", + [ + { + "name": "reason", + "type": "string" + } + ] + ], + "packet_encryption_begin": [ + "container", + [ + { + "name": "serverId", + "type": "string" + }, + { + "name": "publicKey", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + }, + { + "name": "verifyToken", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet_success": [ + "container", + [ + { + "name": "uuid", + "type": "string" + }, + { + "name": "username", + "type": "string" + } + ] + ], + "packet_compress": [ + "container", + [ + { + "name": "threshold", + "type": "varint" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "disconnect", + "1": "encryption_begin", + "2": "success", + "3": "compress" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "disconnect": "packet_disconnect", + "encryption_begin": "packet_encryption_begin", + "success": "packet_success", + "compress": "packet_compress" + } + } + ] + } + ] + ] + } + }, + "play": { + "toServer": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_keep_alive": [ + "container", + [ + { + "name": "keepAliveId", + "type": "varint" + } + ] + ], + "packet_chat": [ + "container", + [ + { + "name": "message", + "type": "string" + } + ] + ], + "packet_use_entity": [ + "container", + [ + { + "name": "target", + "type": "varint" + }, + { + "name": "mouse", + "type": "varint" + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "y", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "z", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "hand", + "type": [ + "switch", + { + "compareTo": "mouse", + "fields": { + "0": "varint", + "2": "varint" + }, + "default": "void" + } + ] + } + ] + ], + "packet_flying": [ + "container", + [ + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_position": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_look": [ + "container", + [ + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_position_look": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_block_dig": [ + "container", + [ + { + "name": "status", + "type": "byte" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "face", + "type": "byte" + } + ] + ], + "packet_block_place": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "direction", + "type": "varint" + }, + { + "name": "hand", + "type": "varint" + }, + { + "name": "cursorX", + "type": "byte" + }, + { + "name": "cursorY", + "type": "byte" + }, + { + "name": "cursorZ", + "type": "byte" + } + ] + ], + "packet_held_item_slot": [ + "container", + [ + { + "name": "slotId", + "type": "short" + } + ] + ], + "packet_arm_animation": [ + "container", + [ + { + "name": "hand", + "type": "varint" + } + ] + ], + "packet_entity_action": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "actionId", + "type": "varint" + }, + { + "name": "jumpBoost", + "type": "varint" + } + ] + ], + "packet_steer_vehicle": [ + "container", + [ + { + "name": "sideways", + "type": "float" + }, + { + "name": "forward", + "type": "float" + }, + { + "name": "jump", + "type": "ubyte" + } + ] + ], + "packet_close_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + } + ] + ], + "packet_window_click": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "slot", + "type": "short" + }, + { + "name": "mouseButton", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "mode", + "type": "byte" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_transaction": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "accepted", + "type": "bool" + } + ] + ], + "packet_set_creative_slot": [ + "container", + [ + { + "name": "slot", + "type": "short" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_enchant_item": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "enchantment", + "type": "byte" + } + ] + ], + "packet_update_sign": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "text1", + "type": "string" + }, + { + "name": "text2", + "type": "string" + }, + { + "name": "text3", + "type": "string" + }, + { + "name": "text4", + "type": "string" + } + ] + ], + "packet_abilities": [ + "container", + [ + { + "name": "flags", + "type": "byte" + }, + { + "name": "flyingSpeed", + "type": "float" + }, + { + "name": "walkingSpeed", + "type": "float" + } + ] + ], + "packet_tab_complete": [ + "container", + [ + { + "name": "text", + "type": "string" + }, + { + "name": "block", + "type": [ + "option", + "position" + ] + } + ] + ], + "packet_settings": [ + "container", + [ + { + "name": "locale", + "type": "string" + }, + { + "name": "viewDistance", + "type": "byte" + }, + { + "name": "chatFlags", + "type": "varint" + }, + { + "name": "chatColors", + "type": "bool" + }, + { + "name": "skinParts", + "type": "ubyte" + }, + { + "name": "mainHand", + "type": "varint" + } + ] + ], + "packet_client_command": [ + "container", + [ + { + "name": "payload", + "type": "varint" + } + ] + ], + "packet_custom_payload": [ + "container", + [ + { + "name": "channel", + "type": "string" + }, + { + "name": "data", + "type": "restBuffer" + } + ] + ], + "packet_spectate": [ + "container", + [ + { + "name": "target", + "type": "UUID" + } + ] + ], + "packet_resource_pack_receive": [ + "container", + [ + { + "name": "hash", + "type": "string" + }, + { + "name": "result", + "type": "varint" + } + ] + ], + "packet_use_item": [ + "container", + [ + { + "name": "hand", + "type": "varint" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "tab_complete", + "1": "chat", + "2": "client_command", + "3": "settings", + "4": "transaction", + "5": "enchant_item", + "6": "window_click", + "7": "close_window", + "8": "custom_payload", + "9": "use_entity", + "10": "keep_alive", + "11": "position", + "12": "position_look", + "13": "look", + "14": "flying", + "15": "abilities", + "16": "block_dig", + "17": "entity_action", + "18": "steer_vehicle", + "19": "resource_pack_receive", + "20": "held_item_slot", + "21": "set_creative_slot", + "22": "update_sign", + "23": "arm_animation", + "24": "spectate", + "25": "block_place", + "26": "use_item" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "keep_alive": "packet_keep_alive", + "chat": "packet_chat", + "use_entity": "packet_use_entity", + "flying": "packet_flying", + "position": "packet_position", + "look": "packet_look", + "position_look": "packet_position_look", + "block_dig": "packet_block_dig", + "block_place": "packet_block_place", + "held_item_slot": "packet_held_item_slot", + "arm_animation": "packet_arm_animation", + "entity_action": "packet_entity_action", + "steer_vehicle": "packet_steer_vehicle", + "close_window": "packet_close_window", + "window_click": "packet_window_click", + "transaction": "packet_transaction", + "set_creative_slot": "packet_set_creative_slot", + "enchant_item": "packet_enchant_item", + "update_sign": "packet_update_sign", + "abilities": "packet_abilities", + "tab_complete": "packet_tab_complete", + "settings": "packet_settings", + "client_command": "packet_client_command", + "custom_payload": "packet_custom_payload", + "spectate": "packet_spectate", + "resource_pack_receive": "packet_resource_pack_receive", + "use_item": "packet_use_item" + } + } + ] + } + ] + ] + }, + "toClient": { + "string": "native", + "varint": "native", + "ushort": "native", + "ubyte": "native", + "long": "native", + "buffer": "native", + "int": "native", + "byte": "native", + "bool": "native", + "short": "native", + "float": "native", + "double": "native", + "UUID": "native", + "option": "native", + "entityMetadataLoop": "native", + "bitfield": "native", + "container": "native", + "switch": "native", + "void": "native", + "array": "native", + "restBuffer": "native", + "nbt": "native", + "optionalNbt": "native", + "slot": [ + "container", + [ + { + "name": "blockId", + "type": "short" + }, + { + "anon": true, + "type": [ + "switch", + { + "compareTo": "blockId", + "fields": { + "-1": "void" + }, + "default": [ + "container", + [ + { + "name": "itemCount", + "type": "byte" + }, + { + "name": "itemDamage", + "type": "short" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ] + } + ] + } + ] + ], + "position": [ + "bitfield", + [ + { + "name": "x", + "size": 26, + "signed": true + }, + { + "name": "y", + "size": 12, + "signed": true + }, + { + "name": "z", + "size": 26, + "signed": true + } + ] + ], + "entityMetadataItem": [ + "switch", + { + "compareTo": "$compareTo", + "fields": { + "0": "byte", + "1": "varint", + "2": "float", + "3": "string", + "4": "string", + "5": "slot", + "6": "bool", + "7": [ + "container", + [ + { + "name": "pitch", + "type": "float" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "roll", + "type": "float" + } + ] + ], + "8": "position", + "9": [ + "option", + "position" + ], + "10": "varint", + "11": [ + "option", + "UUID" + ], + "12": "varint" + } + } + ], + "entityMetadata": [ + "entityMetadataLoop", + { + "endVal": 255, + "type": [ + "container", + [ + { + "anon": true, + "type": [ + "container", + [ + { + "name": "key", + "type": "ubyte" + }, + { + "name": "type", + "type": "byte" + } + ] + ] + }, + { + "name": "value", + "type": [ + "entityMetadataItem", + { + "compareTo": "type" + } + ] + } + ] + ] + } + ], + "packet_keep_alive": [ + "container", + [ + { + "name": "keepAliveId", + "type": "varint" + } + ] + ], + "packet_login": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "gameMode", + "type": "ubyte" + }, + { + "name": "dimension", + "type": "byte" + }, + { + "name": "difficulty", + "type": "ubyte" + }, + { + "name": "maxPlayers", + "type": "ubyte" + }, + { + "name": "levelType", + "type": "string" + }, + { + "name": "reducedDebugInfo", + "type": "bool" + } + ] + ], + "packet_chat": [ + "container", + [ + { + "name": "message", + "type": "string" + }, + { + "name": "position", + "type": "byte" + } + ] + ], + "packet_update_time": [ + "container", + [ + { + "name": "age", + "type": "long" + }, + { + "name": "time", + "type": "long" + } + ] + ], + "packet_entity_equipment": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "slot", + "type": "varint" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_spawn_position": [ + "container", + [ + { + "name": "location", + "type": "position" + } + ] + ], + "packet_update_health": [ + "container", + [ + { + "name": "health", + "type": "float" + }, + { + "name": "food", + "type": "varint" + }, + { + "name": "foodSaturation", + "type": "float" + } + ] + ], + "packet_respawn": [ + "container", + [ + { + "name": "dimension", + "type": "int" + }, + { + "name": "difficulty", + "type": "ubyte" + }, + { + "name": "gamemode", + "type": "ubyte" + }, + { + "name": "levelType", + "type": "string" + } + ] + ], + "packet_position": [ + "container", + [ + { + "name": "x", + "type": "double" + }, + { + "name": "y", + "type": "double" + }, + { + "name": "z", + "type": "double" + }, + { + "name": "yaw", + "type": "float" + }, + { + "name": "pitch", + "type": "float" + }, + { + "name": "flags", + "type": "byte" + } + ] + ], + "packet_held_item_slot": [ + "container", + [ + { + "name": "slot", + "type": "byte" + } + ] + ], + "packet_bed": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "location", + "type": "position" + } + ] + ], + "packet_animation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "animation", + "type": "ubyte" + } + ] + ], + "packet_named_entity_spawn": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "playerUUID", + "type": "UUID" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_collect": [ + "container", + [ + { + "name": "collectedEntityId", + "type": "varint" + }, + { + "name": "collectorEntityId", + "type": "varint" + } + ] + ], + "packet_spawn_entity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "entityUUID", + "type": "UUID" + }, + { + "name": "type", + "type": "byte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "intField", + "type": "int" + }, + { + "name": "velocityX", + "type": "short" + }, + { + "name": "velocityY", + "type": "short" + }, + { + "name": "velocityZ", + "type": "short" + } + ] + ], + "packet_spawn_entity_living": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "entityUUID", + "type": "UUID" + }, + { + "name": "type", + "type": "ubyte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "headPitch", + "type": "byte" + }, + { + "name": "velocityX", + "type": "short" + }, + { + "name": "velocityY", + "type": "short" + }, + { + "name": "velocityZ", + "type": "short" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_spawn_entity_painting": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "title", + "type": "string" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "direction", + "type": "ubyte" + } + ] + ], + "packet_spawn_entity_experience_orb": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "count", + "type": "short" + } + ] + ], + "packet_entity_velocity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "velocityX", + "type": "short" + }, + { + "name": "velocityY", + "type": "short" + }, + { + "name": "velocityZ", + "type": "short" + } + ] + ], + "packet_entity_destroy": [ + "container", + [ + { + "name": "entityIds", + "type": [ + "array", + { + "countType": "varint", + "type": "varint" + } + ] + } + ] + ], + "packet_entity": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + } + ] + ], + "packet_rel_entity_move": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "dX", + "type": "byte" + }, + { + "name": "dY", + "type": "byte" + }, + { + "name": "dZ", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_look": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_move_look": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "dX", + "type": "byte" + }, + { + "name": "dY", + "type": "byte" + }, + { + "name": "dZ", + "type": "byte" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_teleport": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "yaw", + "type": "byte" + }, + { + "name": "pitch", + "type": "byte" + }, + { + "name": "onGround", + "type": "bool" + } + ] + ], + "packet_entity_head_rotation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "headYaw", + "type": "byte" + } + ] + ], + "packet_entity_status": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "entityStatus", + "type": "byte" + } + ] + ], + "packet_attach_entity": [ + "container", + [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "vehicleId", + "type": "int" + }, + { + "name": "leash", + "type": "bool" + } + ] + ], + "packet_entity_metadata": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "metadata", + "type": "entityMetadata" + } + ] + ], + "packet_entity_effect": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "effectId", + "type": "byte" + }, + { + "name": "amplifier", + "type": "byte" + }, + { + "name": "duration", + "type": "varint" + }, + { + "name": "hideParticles", + "type": "bool" + } + ] + ], + "packet_remove_entity_effect": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "effectId", + "type": "byte" + } + ] + ], + "packet_experience": [ + "container", + [ + { + "name": "experienceBar", + "type": "float" + }, + { + "name": "level", + "type": "varint" + }, + { + "name": "totalExperience", + "type": "varint" + } + ] + ], + "packet_update_attributes": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "properties", + "type": [ + "array", + { + "countType": "int", + "type": [ + "container", + [ + { + "name": "key", + "type": "string" + }, + { + "name": "value", + "type": "double" + }, + { + "name": "modifiers", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "UUID", + "type": "UUID" + }, + { + "name": "amount", + "type": "double" + }, + { + "name": "operation", + "type": "byte" + } + ] + ] + } + ] + } + ] + ] + } + ] + } + ] + ], + "packet_map_chunk": [ + "container", + [ + { + "name": "x", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "groundUp", + "type": "bool" + }, + { + "name": "bitMap", + "type": "varint" + }, + { + "name": "chunkData", + "type": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + ], + "packet_multi_block_change": [ + "container", + [ + { + "name": "chunkX", + "type": "int" + }, + { + "name": "chunkZ", + "type": "int" + }, + { + "name": "records", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "horizontalPos", + "type": "ubyte" + }, + { + "name": "y", + "type": "ubyte" + }, + { + "name": "blockId", + "type": "varint" + } + ] + ] + } + ] + } + ] + ], + "packet_block_change": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "type", + "type": "varint" + } + ] + ], + "packet_block_action": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "byte1", + "type": "ubyte" + }, + { + "name": "byte2", + "type": "ubyte" + }, + { + "name": "blockId", + "type": "varint" + } + ] + ], + "packet_block_break_animation": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "destroyStage", + "type": "byte" + } + ] + ], + "packet_explosion": [ + "container", + [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "z", + "type": "float" + }, + { + "name": "radius", + "type": "float" + }, + { + "name": "affectedBlockOffsets", + "type": [ + "array", + { + "countType": "int", + "type": [ + "container", + [ + { + "name": "x", + "type": "byte" + }, + { + "name": "y", + "type": "byte" + }, + { + "name": "z", + "type": "byte" + } + ] + ] + } + ] + }, + { + "name": "playerMotionX", + "type": "float" + }, + { + "name": "playerMotionY", + "type": "float" + }, + { + "name": "playerMotionZ", + "type": "float" + } + ] + ], + "packet_world_event": [ + "container", + [ + { + "name": "effectId", + "type": "int" + }, + { + "name": "location", + "type": "position" + }, + { + "name": "data", + "type": "int" + }, + { + "name": "global", + "type": "bool" + } + ] + ], + "packet_named_sound_effect": [ + "container", + [ + { + "name": "soundName", + "type": "string" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + }, + { + "name": "volume", + "type": "float" + }, + { + "name": "pitch", + "type": "ubyte" + } + ] + ], + "packet_world_particles": [ + "container", + [ + { + "name": "particleId", + "type": "int" + }, + { + "name": "longDistance", + "type": "bool" + }, + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "z", + "type": "float" + }, + { + "name": "offsetX", + "type": "float" + }, + { + "name": "offsetY", + "type": "float" + }, + { + "name": "offsetZ", + "type": "float" + }, + { + "name": "particleData", + "type": "float" + }, + { + "name": "particles", + "type": "int" + }, + { + "name": "data", + "type": [ + "array", + { + "count": { + "field": "particleId", + "map": { + "36": 2, + "37": 1, + "38": 1 + }, + "default": 0 + }, + "type": "varint" + } + ] + } + ] + ], + "packet_game_state_change": [ + "container", + [ + { + "name": "reason", + "type": "ubyte" + }, + { + "name": "gameMode", + "type": "float" + } + ] + ], + "packet_spawn_entity_weather": [ + "container", + [ + { + "name": "entityId", + "type": "varint" + }, + { + "name": "type", + "type": "byte" + }, + { + "name": "x", + "type": "int" + }, + { + "name": "y", + "type": "int" + }, + { + "name": "z", + "type": "int" + } + ] + ], + "packet_open_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "inventoryType", + "type": "string" + }, + { + "name": "windowTitle", + "type": "string" + }, + { + "name": "slotCount", + "type": "ubyte" + }, + { + "name": "entityId", + "type": [ + "switch", + { + "compareTo": "inventoryType", + "fields": { + "EntityHorse": "int" + }, + "default": "void" + } + ] + } + ] + ], + "packet_close_window": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + } + ] + ], + "packet_set_slot": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "slot", + "type": "short" + }, + { + "name": "item", + "type": "slot" + } + ] + ], + "packet_window_items": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "items", + "type": [ + "array", + { + "countType": "short", + "type": "slot" + } + ] + } + ] + ], + "packet_craft_progress_bar": [ + "container", + [ + { + "name": "windowId", + "type": "ubyte" + }, + { + "name": "property", + "type": "short" + }, + { + "name": "value", + "type": "short" + } + ] + ], + "packet_transaction": [ + "container", + [ + { + "name": "windowId", + "type": "byte" + }, + { + "name": "action", + "type": "short" + }, + { + "name": "accepted", + "type": "bool" + } + ] + ], + "packet_update_sign": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "text1", + "type": "string" + }, + { + "name": "text2", + "type": "string" + }, + { + "name": "text3", + "type": "string" + }, + { + "name": "text4", + "type": "string" + } + ] + ], + "packet_map": [ + "container", + [ + { + "name": "itemDamage", + "type": "varint" + }, + { + "name": "scale", + "type": "byte" + }, + { + "name": "trackingPosition", + "type": "bool" + }, + { + "name": "icons", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "directionAndType", + "type": "byte" + }, + { + "name": "x", + "type": "byte" + }, + { + "name": "y", + "type": "byte" + } + ] + ] + } + ] + }, + { + "name": "columns", + "type": "byte" + }, + { + "name": "rows", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "y", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": "byte" + } + ] + }, + { + "name": "data", + "type": [ + "switch", + { + "compareTo": "columns", + "fields": { + "0": "void" + }, + "default": [ + "buffer", + { + "countType": "varint" + } + ] + } + ] + } + ] + ], + "packet_tile_entity_data": [ + "container", + [ + { + "name": "location", + "type": "position" + }, + { + "name": "action", + "type": "ubyte" + }, + { + "name": "nbtData", + "type": "optionalNbt" + } + ] + ], + "packet_open_sign_entity": [ + "container", + [ + { + "name": "location", + "type": "position" + } + ] + ], + "packet_statistics": [ + "container", + [ + { + "name": "entries", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "value", + "type": "varint" + } + ] + ] + } + ] + } + ] + ], + "packet_player_info": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "data", + "type": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "UUID", + "type": "UUID" + }, + { + "name": "name", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "string" + }, + "default": "void" + } + ] + }, + { + "name": "properties", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": [ + "array", + { + "countType": "varint", + "type": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "value", + "type": "string" + }, + { + "name": "signature", + "type": [ + "option", + "string" + ] + } + ] + ] + } + ] + }, + "default": "void" + } + ] + }, + { + "name": "gamemode", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "varint", + "1": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "ping", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": "varint", + "2": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "displayName", + "type": [ + "switch", + { + "compareTo": "../action", + "fields": { + "0": [ + "option", + "string" + ], + "3": [ + "option", + "string" + ] + }, + "default": "void" + } + ] + } + ] + ] + } + ] + } + ] + ], + "packet_abilities": [ + "container", + [ + { + "name": "flags", + "type": "byte" + }, + { + "name": "flyingSpeed", + "type": "float" + }, + { + "name": "walkingSpeed", + "type": "float" + } + ] + ], + "packet_tab_complete": [ + "container", + [ + { + "name": "matches", + "type": [ + "array", + { + "countType": "varint", + "type": "string" + } + ] + } + ] + ], + "packet_scoreboard_objective": [ + "container", + [ + { + "name": "name", + "type": "string" + }, + { + "name": "action", + "type": "byte" + }, + { + "name": "displayText", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "type", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + } + ] + ], + "packet_scoreboard_score": [ + "container", + [ + { + "name": "itemName", + "type": "string" + }, + { + "name": "action", + "type": "byte" + }, + { + "name": "scoreName", + "type": "string" + }, + { + "name": "value", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "void" + }, + "default": "varint" + } + ] + } + ] + ], + "packet_scoreboard_display_objective": [ + "container", + [ + { + "name": "position", + "type": "byte" + }, + { + "name": "name", + "type": "string" + } + ] + ], + "packet_scoreboard_team": [ + "container", + [ + { + "name": "team", + "type": "string" + }, + { + "name": "mode", + "type": "byte" + }, + { + "name": "name", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "prefix", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "suffix", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "friendlyFire", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "byte", + "2": "byte" + }, + "default": "void" + } + ] + }, + { + "name": "nameTagVisibility", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "collisionRule", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "string", + "2": "string" + }, + "default": "void" + } + ] + }, + { + "name": "color", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": "byte", + "2": "byte" + }, + "default": "void" + } + ] + }, + { + "name": "players", + "type": [ + "switch", + { + "compareTo": "mode", + "fields": { + "0": [ + "array", + { + "countType": "varint", + "type": "string" + } + ], + "3": [ + "array", + { + "countType": "varint", + "type": "string" + } + ], + "4": [ + "array", + { + "countType": "varint", + "type": "string" + } + ] + }, + "default": "void" + } + ] + } + ] + ], + "packet_custom_payload": [ + "container", + [ + { + "name": "channel", + "type": "string" + }, + { + "name": "data", + "type": "restBuffer" + } + ] + ], + "packet_kick_disconnect": [ + "container", + [ + { + "name": "reason", + "type": "string" + } + ] + ], + "packet_difficulty": [ + "container", + [ + { + "name": "difficulty", + "type": "ubyte" + } + ] + ], + "packet_combat_event": [ + "container", + [ + { + "name": "event", + "type": "varint" + }, + { + "name": "duration", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "1": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "playerId", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "2": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "entityId", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "1": "int", + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "message", + "type": [ + "switch", + { + "compareTo": "event", + "fields": { + "2": "string" + }, + "default": "void" + } + ] + } + ] + ], + "packet_camera": [ + "container", + [ + { + "name": "cameraId", + "type": "varint" + } + ] + ], + "packet_world_border": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "double" + }, + "default": "void" + } + ] + }, + { + "name": "x", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "z", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "old_radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "new_radius", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "double", + "3": "double" + }, + "default": "void" + } + ] + }, + { + "name": "speed", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "1": "varint", + "3": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "portalBoundary", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "warning_time", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint", + "4": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "warning_blocks", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "3": "varint", + "5": "varint" + }, + "default": "void" + } + ] + } + ] + ], + "packet_title": [ + "container", + [ + { + "name": "action", + "type": "varint" + }, + { + "name": "text", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "1": "string" + }, + "default": "void" + } + ] + }, + { + "name": "fadeIn", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "stay", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + }, + { + "name": "fadeOut", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "2": "int" + }, + "default": "void" + } + ] + } + ] + ], + "packet_set_compression": [ + "container", + [ + { + "name": "threshold", + "type": "varint" + } + ] + ], + "packet_playerlist_header": [ + "container", + [ + { + "name": "header", + "type": "string" + }, + { + "name": "footer", + "type": "string" + } + ] + ], + "packet_resource_pack_send": [ + "container", + [ + { + "name": "url", + "type": "string" + }, + { + "name": "hash", + "type": "string" + } + ] + ], + "packet_boss_bar": [ + "container", + [ + { + "name": "entityUUID", + "type": "UUID" + }, + { + "name": "action", + "type": "varint" + }, + { + "name": "title", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "string", + "3": "string" + }, + "default": "void" + } + ] + }, + { + "name": "health", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "float", + "2": "float" + }, + "default": "void" + } + ] + }, + { + "name": "color", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "varint", + "4": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "dividers", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "varint", + "4": "varint" + }, + "default": "void" + } + ] + }, + { + "name": "flags", + "type": [ + "switch", + { + "compareTo": "action", + "fields": { + "0": "ubyte", + "5": "ubyte" + }, + "default": "void" + } + ] + } + ] + ], + "packet_set_cooldown": [ + "container", + [ + { + "name": "itemID", + "type": "varint" + }, + { + "name": "cooldownTicks", + "type": "varint" + } + ] + ], + "packet_unload_chunk": [ + "container", + [ + { + "name": "chunkX", + "type": "int" + }, + { + "name": "chunkZ", + "type": "int" + } + ] + ], + "packet": [ + "container", + [ + { + "name": "name", + "type": [ + "mapper", + { + "type": "varint", + "mappings": { + "0": "spawn_entity", + "1": "spawn_entity_experience_orb", + "2": "spawn_entity_weather", + "3": "spawn_entity_living", + "4": "spawn_entity_painting", + "5": "named_entity_spawn", + "6": "animation", + "7": "statistics", + "8": "block_break_animation", + "9": "tile_entity_data", + "10": "block_action", + "11": "block_change", + "12": "boss_bar", + "13": "difficulty", + "14": "tab_complete", + "15": "chat", + "16": "multi_block_change", + "17": "transaction", + "18": "close_window", + "19": "open_window", + "20": "window_items", + "21": "craft_progress_bar", + "22": "set_slot", + "23": "set_cooldown", + "24": "custom_payload", + "25": "kick_disconnect", + "26": "entity_status", + "27": "explosion", + "28": "unload_chunk", + "29": "set_compression", + "30": "game_state_change", + "31": "keep_alive", + "32": "map_chunk", + "33": "world_event", + "34": "world_particles", + "35": "named_sound_effect", + "36": "login", + "37": "map", + "38": "rel_entity_move", + "39": "entity_move_look", + "40": "entity_look", + "41": "entity", + "42": "open_sign_entity", + "43": "abilities", + "44": "combat_event", + "45": "player_info", + "46": "position", + "47": "bed", + "48": "entity_destroy", + "49": "remove_entity_effect", + "50": "resource_pack_send", + "51": "respawn", + "52": "entity_head_rotation", + "53": "world_border", + "54": "camera", + "55": "held_item_slot", + "56": "scoreboard_display_objective", + "57": "entity_metadata", + "58": "attach_entity", + "59": "entity_velocity", + "60": "entity_equipment", + "61": "experience", + "62": "update_health", + "63": "scoreboard_objective", + "64": "scoreboard_team", + "65": "scoreboard_score", + "66": "spawn_position", + "67": "update_time", + "68": "title", + "69": "update_sign", + "70": "playerlist_header", + "71": "collect", + "72": "entity_teleport", + "73": "update_attributes", + "74": "entity_effect" + } + } + ] + }, + { + "name": "params", + "type": [ + "switch", + { + "compareTo": "name", + "fields": { + "keep_alive": "packet_keep_alive", + "login": "packet_login", + "chat": "packet_chat", + "update_time": "packet_update_time", + "entity_equipment": "packet_entity_equipment", + "spawn_position": "packet_spawn_position", + "update_health": "packet_update_health", + "respawn": "packet_respawn", + "position": "packet_position", + "held_item_slot": "packet_held_item_slot", + "bed": "packet_bed", + "animation": "packet_animation", + "named_entity_spawn": "packet_named_entity_spawn", + "collect": "packet_collect", + "spawn_entity": "packet_spawn_entity", + "spawn_entity_living": "packet_spawn_entity_living", + "spawn_entity_painting": "packet_spawn_entity_painting", + "spawn_entity_experience_orb": "packet_spawn_entity_experience_orb", + "entity_velocity": "packet_entity_velocity", + "entity_destroy": "packet_entity_destroy", + "entity": "packet_entity", + "rel_entity_move": "packet_rel_entity_move", + "entity_look": "packet_entity_look", + "entity_move_look": "packet_entity_move_look", + "entity_teleport": "packet_entity_teleport", + "entity_head_rotation": "packet_entity_head_rotation", + "entity_status": "packet_entity_status", + "attach_entity": "packet_attach_entity", + "entity_metadata": "packet_entity_metadata", + "entity_effect": "packet_entity_effect", + "remove_entity_effect": "packet_remove_entity_effect", + "experience": "packet_experience", + "update_attributes": "packet_update_attributes", + "map_chunk": "packet_map_chunk", + "multi_block_change": "packet_multi_block_change", + "block_change": "packet_block_change", + "block_action": "packet_block_action", + "block_break_animation": "packet_block_break_animation", + "explosion": "packet_explosion", + "world_event": "packet_world_event", + "named_sound_effect": "packet_named_sound_effect", + "world_particles": "packet_world_particles", + "game_state_change": "packet_game_state_change", + "spawn_entity_weather": "packet_spawn_entity_weather", + "open_window": "packet_open_window", + "close_window": "packet_close_window", + "set_slot": "packet_set_slot", + "window_items": "packet_window_items", + "craft_progress_bar": "packet_craft_progress_bar", + "transaction": "packet_transaction", + "update_sign": "packet_update_sign", + "map": "packet_map", + "tile_entity_data": "packet_tile_entity_data", + "open_sign_entity": "packet_open_sign_entity", + "statistics": "packet_statistics", + "player_info": "packet_player_info", + "abilities": "packet_abilities", + "tab_complete": "packet_tab_complete", + "scoreboard_objective": "packet_scoreboard_objective", + "scoreboard_score": "packet_scoreboard_score", + "scoreboard_display_objective": "packet_scoreboard_display_objective", + "scoreboard_team": "packet_scoreboard_team", + "custom_payload": "packet_custom_payload", + "kick_disconnect": "packet_kick_disconnect", + "difficulty": "packet_difficulty", + "combat_event": "packet_combat_event", + "camera": "packet_camera", + "world_border": "packet_world_border", + "title": "packet_title", + "set_compression": "packet_set_compression", + "playerlist_header": "packet_playerlist_header", + "resource_pack_send": "packet_resource_pack_send", + "boss_bar": "packet_boss_bar", + "set_cooldown": "packet_set_cooldown", + "unload_chunk": "packet_unload_chunk" + } + } + ] + } + ] + ] + } + } +} \ No newline at end of file diff --git a/src/protocol/generate.js b/src/protocol/generate.js new file mode 100644 index 0000000..6116215 --- /dev/null +++ b/src/protocol/generate.js @@ -0,0 +1,108 @@ +'use strict'; + +const minecraft_data = require('minecraft-data'); +const fs = require('fs'); +const states = require('../states'); +const supportedVersions = require('../').supportedVersions; + +function createProtocolSpec(version, state, direction) +{ + const mcData = minecraft_data(version); + const packets = mcData.protocol.states[state][direction]; + const versionTypes = mcData.protocol.types; + + const protoTypes = {}; + + Object.keys(versionTypes).forEach((name) => { + protoTypes[name] = versionTypes[name]; + }); + + Object.keys(packets).forEach((name) => { + protoTypes["packet_"+name] = ["container",packets[name].fields]; + }); + + protoTypes.packet = ["container", [ + { "name": "name", "type":["mapper",{"type": "varint" , + "mappings":Object.keys(packets).reduce((acc,name) => { + acc[parseInt(packets[name].id)]=name; + return acc; + },{}) + }]}, + { "name": "params", "type": ["switch", { + "compareTo": "name", + "fields": Object.keys(packets).reduce((acc,name) => { + acc[name]="packet_"+name; + return acc; + },{}) + }]} + ]]; + + return protoTypes; +} + +function createProtocolSpecs() +{ + const protocolSpecs = {}; + + supportedVersions.forEach((version) => { + protocolSpecs[version] = {}; + + Object.keys(states).forEach((stateName) => { + const state = states[stateName]; + + protocolSpecs[version][state] = {}; + + protocolSpecs[version][state].toServer = createProtocolSpec(version, state, 'toServer'); + protocolSpecs[version][state].toClient = createProtocolSpec(version, state, 'toClient'); + }); + }); + + return protocolSpecs; +} + +function writeProtocolSpecs(protocolSpecs) +{ + Object.keys(protocolSpecs).forEach((version) => { + const protocolSpec = protocolSpecs[version]; + + const filename = `src/protocol/${version}.json`; + const json = JSON.stringify(protocolSpec, null, ' '); + + fs.writeFile(filename, json, (err) => { + if (err) console.log(`Failed to write ${filename}: ${err}`); + }); + }); +} + +function writeProtocolVersions() +{ + const lookups = {}; + + // Lookup version info by release version, 1:1 + lookups.versionsByMinecraftVersion = minecraft_data.versionsByMinecraftVersion; + + // Lookup the latest version for a given protocol version code, (+ = post-netty, - = pre-netty) + const latestVersionsByProtocolVersionCode = {}; + Object.keys(minecraft_data.postNettyVersionsByProtocolVersion).forEach((protocolVersion) => { + latestVersionsByProtocolVersionCode[protocolVersion] = minecraft_data.postNettyVersionsByProtocolVersion[protocolVersion][0]; + }); + + Object.keys(minecraft_data.preNettyVersionsByProtocolVersion).forEach((protocolVersion) => { + latestVersionsByProtocolVersionCode[-protocolVersion] = minecraft_data.preNettyVersionsByProtocolVersion[protocolVersion][0]; + }); + + lookups.latestVersionsByProtocolVersionCode = latestVersionsByProtocolVersionCode; + + const json = JSON.stringify(lookups, null, ' '); + const filename = `src/protocol/protocolVersions.json`; + fs.writeFile(filename, json, (err) => { + if (err) console.log(`Failed to write ${filename}: ${err}`); + }); + + lookups.postNettyVersionsByProtocolVersion = minecraft_data.postNettyVersionsByProtocolVersion; +} + +const protocolSpecs = createProtocolSpecs(); +//console.log(JSON.stringify(protocolSpecs)); +writeProtocolSpecs(protocolSpecs); +writeProtocolVersions(); diff --git a/src/protocol/index.js b/src/protocol/index.js new file mode 100644 index 0000000..d76669d --- /dev/null +++ b/src/protocol/index.js @@ -0,0 +1,4 @@ +module.exports = { + '1.8': require('./1.8'), + '1.9': require('./1.9'), +}; diff --git a/src/protocol/protocolVersions.json b/src/protocol/protocolVersions.json new file mode 100644 index 0000000..7dda497 --- /dev/null +++ b/src/protocol/protocolVersions.json @@ -0,0 +1,1932 @@ +{ + "versionsByMinecraftVersion": { + "16w03a": { + "minecraftVersion": "16w03a", + "version": 96, + "usesNetty": true, + "majorVersion": "1.9" + }, + "16w02a": { + "minecraftVersion": "16w02a", + "version": 95, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w51b": { + "minecraftVersion": "15w51b", + "version": 94, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w51a": { + "minecraftVersion": "15w51a", + "version": 93, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w50a": { + "minecraftVersion": "15w50a", + "version": 92, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w49b": { + "minecraftVersion": "15w49b", + "version": 91, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w49a": { + "minecraftVersion": "15w49a", + "version": 90, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w47c": { + "minecraftVersion": "15w47c", + "version": 89, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w47b": { + "minecraftVersion": "15w47b", + "version": 88, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w47a": { + "minecraftVersion": "15w47a", + "version": 87, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w46a": { + "minecraftVersion": "15w46a", + "version": 86, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w45a": { + "minecraftVersion": "15w45a", + "version": 85, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w44b": { + "minecraftVersion": "15w44b", + "version": 84, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w44a": { + "minecraftVersion": "15w44a", + "version": 83, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w43c": { + "minecraftVersion": "15w43c", + "version": 82, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w43b": { + "minecraftVersion": "15w43b", + "version": 81, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w43a": { + "minecraftVersion": "15w43a", + "version": 80, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w42a": { + "minecraftVersion": "15w42a", + "version": 79, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w41b": { + "minecraftVersion": "15w41b", + "version": 78, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w41a": { + "minecraftVersion": "15w41a", + "version": 77, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w40b": { + "minecraftVersion": "15w40b", + "version": 76, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w40a": { + "minecraftVersion": "15w40a", + "version": 75, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w39c": { + "minecraftVersion": "15w39c", + "version": 74, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w38b": { + "minecraftVersion": "15w38b", + "version": 73, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w38a": { + "minecraftVersion": "15w38a", + "version": 72, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w37a": { + "minecraftVersion": "15w37a", + "version": 71, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w36d": { + "minecraftVersion": "15w36d", + "version": 70, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w36c": { + "minecraftVersion": "15w36c", + "version": 69, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w36b": { + "minecraftVersion": "15w36b", + "version": 68, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w36a": { + "minecraftVersion": "15w36a", + "version": 67, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w35e": { + "minecraftVersion": "15w35e", + "version": 66, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w35d": { + "minecraftVersion": "15w35d", + "version": 65, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w35c": { + "minecraftVersion": "15w35c", + "version": 64, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w35b": { + "minecraftVersion": "15w35b", + "version": 63, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w35a": { + "minecraftVersion": "15w35a", + "version": 62, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w34d": { + "minecraftVersion": "15w34d", + "version": 61, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w34c": { + "minecraftVersion": "15w34c", + "version": 60, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w34b": { + "minecraftVersion": "15w34b", + "version": 59, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w34a": { + "minecraftVersion": "15w34a", + "version": 58, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w33c": { + "minecraftVersion": "15w33c", + "version": 57, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w33b": { + "minecraftVersion": "15w33b", + "version": 56, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w33a": { + "minecraftVersion": "15w33a", + "version": 55, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w32c": { + "minecraftVersion": "15w32c", + "version": 54, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w32b": { + "minecraftVersion": "15w32b", + "version": 53, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w32a": { + "minecraftVersion": "15w32a", + "version": 52, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w31c": { + "minecraftVersion": "15w31c", + "version": 51, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w31b": { + "minecraftVersion": "15w31b", + "version": 50, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w31a": { + "minecraftVersion": "15w31a", + "version": 49, + "usesNetty": true, + "majorVersion": "1.9" + }, + "15w14a": { + "minecraftVersion": "15w14a", + "version": 48, + "usesNetty": true, + "majorVersion": "1.9" + }, + "1.8.9": { + "minecraftVersion": "1.8.9", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.8": { + "minecraftVersion": "1.8.8", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.7": { + "minecraftVersion": "1.8.7", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.6": { + "minecraftVersion": "1.8.6", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.5": { + "minecraftVersion": "1.8.5", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.4": { + "minecraftVersion": "1.8.4", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.3": { + "minecraftVersion": "1.8.3", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.2": { + "minecraftVersion": "1.8.2", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8.1": { + "minecraftVersion": "1.8.1", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8": { + "minecraftVersion": "1.8", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8-pre3": { + "minecraftVersion": "1.8-pre3", + "version": 46, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8-pre2": { + "minecraftVersion": "1.8-pre2", + "version": 45, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.8-pre1": { + "minecraftVersion": "1.8-pre1", + "version": 44, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w34d": { + "minecraftVersion": "14w34d", + "version": 43, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w34c": { + "minecraftVersion": "14w34c", + "version": 42, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w34b": { + "minecraftVersion": "14w34b", + "version": 41, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w34a": { + "minecraftVersion": "14w34a", + "version": 40, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w33c": { + "minecraftVersion": "14w33c", + "version": 39, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w33b": { + "minecraftVersion": "14w33b", + "version": 38, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w33a": { + "minecraftVersion": "14w33a", + "version": 37, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w32d": { + "minecraftVersion": "14w32d", + "version": 36, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w32c": { + "minecraftVersion": "14w32c", + "version": 35, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w32b": { + "minecraftVersion": "14w32b", + "version": 34, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w32a": { + "minecraftVersion": "14w32a", + "version": 33, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w31a": { + "minecraftVersion": "14w31a", + "version": 32, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w30c": { + "minecraftVersion": "14w30c", + "version": 31, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w30a": { + "minecraftVersion": "14w30a", + "version": 30, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w29a": { + "minecraftVersion": "14w29a", + "version": 29, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w28b": { + "minecraftVersion": "14w28b", + "version": 28, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w28a": { + "minecraftVersion": "14w28a", + "version": 27, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w27b": { + "minecraftVersion": "14w27b", + "version": 26, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w27a": { + "minecraftVersion": "14w27a", + "version": 26, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w26c": { + "minecraftVersion": "14w26c", + "version": 25, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w26b": { + "minecraftVersion": "14w26b", + "version": 24, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w26a": { + "minecraftVersion": "14w26a", + "version": 23, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w25b": { + "minecraftVersion": "14w25b", + "version": 22, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w25a": { + "minecraftVersion": "14w25a", + "version": 21, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w21b": { + "minecraftVersion": "14w21b", + "version": 20, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w21a": { + "minecraftVersion": "14w21a", + "version": 19, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w20a": { + "minecraftVersion": "14w20a", + "version": 18, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w19a": { + "minecraftVersion": "14w19a", + "version": 17, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w18b": { + "minecraftVersion": "14w18b", + "version": 16, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w17a": { + "minecraftVersion": "14w17a", + "version": 15, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w11a": { + "minecraftVersion": "14w11a", + "version": 14, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w08a": { + "minecraftVersion": "14w08a", + "version": 12, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w07a": { + "minecraftVersion": "14w07a", + "version": 11, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w06a": { + "minecraftVersion": "14w06a", + "version": 10, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w05a": { + "minecraftVersion": "14w05a", + "version": 9, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w04b": { + "minecraftVersion": "14w04b", + "version": 8, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w04a": { + "minecraftVersion": "14w04a", + "version": 7, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w03a": { + "minecraftVersion": "14w03a", + "version": 6, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14w02a": { + "minecraftVersion": "14w02a", + "version": 5, + "usesNetty": true, + "majorVersion": "1.8" + }, + "1.7.10": { + "minecraftVersion": "1.7.10", + "version": 5, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.9": { + "minecraftVersion": "1.7.9", + "version": 5, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.8": { + "minecraftVersion": "1.7.8", + "version": 5, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.7": { + "minecraftVersion": "1.7.7", + "version": 5, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.6": { + "minecraftVersion": "1.7.6", + "version": 5, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.5": { + "minecraftVersion": "1.7.5", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.4": { + "minecraftVersion": "1.7.4", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.3-pre": { + "minecraftVersion": "1.7.3-pre", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.2": { + "minecraftVersion": "1.7.2", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.7.1-pre": { + "minecraftVersion": "1.7.1-pre", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "1.6.4": { + "minecraftVersion": "1.6.4", + "version": 78, + "usesNetty": false, + "majorVersion": "1.6" + }, + "1.6.2": { + "minecraftVersion": "1.6.2", + "version": 74, + "usesNetty": false, + "majorVersion": "1.6" + }, + "1.6.1": { + "minecraftVersion": "1.6.1", + "version": 73, + "usesNetty": false, + "majorVersion": "1.6" + }, + "1.6-pre": { + "minecraftVersion": "1.6-pre", + "version": 72, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w26a": { + "minecraftVersion": "13w26a", + "version": 72, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w25c": { + "minecraftVersion": "13w25c", + "version": 71, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w25b": { + "minecraftVersion": "13w25b", + "version": 71, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w25a": { + "minecraftVersion": "13w25a", + "version": 71, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w24b": { + "minecraftVersion": "13w24b", + "version": 70, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w24a": { + "minecraftVersion": "13w24a", + "version": 69, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w23b": { + "minecraftVersion": "13w23b", + "version": 68, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w23a": { + "minecraftVersion": "13w23a", + "version": 67, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w22a": { + "minecraftVersion": "13w22a", + "version": 67, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w21b": { + "minecraftVersion": "13w21b", + "version": 67, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w21a": { + "minecraftVersion": "13w21a", + "version": 67, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w19a": { + "minecraftVersion": "13w19a", + "version": 66, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w18a": { + "minecraftVersion": "13w18a", + "version": 65, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w17a": { + "minecraftVersion": "13w17a", + "version": 64, + "usesNetty": false, + "majorVersion": "1.6" + }, + "13w16b": { + "minecraftVersion": "13w16b", + "version": 63, + "usesNetty": false, + "majorVersion": "1.6" + }, + "1.5.2": { + "minecraftVersion": "1.5.2", + "version": 61, + "usesNetty": false, + "majorVersion": "1.5" + }, + "1.5.1": { + "minecraftVersion": "1.5.1", + "version": 60, + "usesNetty": false, + "majorVersion": "1.5" + }, + "1.5": { + "minecraftVersion": "1.5", + "version": 60, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w09b": { + "minecraftVersion": "13w09b", + "version": 59, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w06a": { + "minecraftVersion": "13w06a", + "version": 58, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w05b": { + "minecraftVersion": "13w05b", + "version": 57, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w05a": { + "minecraftVersion": "13w05a", + "version": 56, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w04a": { + "minecraftVersion": "13w04a", + "version": 55, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w03a": { + "minecraftVersion": "13w03a", + "version": 54, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w02a": { + "minecraftVersion": "13w02a", + "version": 53, + "usesNetty": false, + "majorVersion": "1.5" + }, + "13w01a": { + "minecraftVersion": "13w01a", + "version": 52, + "usesNetty": false, + "majorVersion": "1.5" + }, + "1.4.7": { + "minecraftVersion": "1.4.7", + "version": 51, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.4.6": { + "minecraftVersion": "1.4.6", + "version": 51, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w49a": { + "minecraftVersion": "12w49a", + "version": 50, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.4.5": { + "minecraftVersion": "1.4.5", + "version": 49, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.4.4": { + "minecraftVersion": "1.4.4", + "version": 49, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.4.3-pre": { + "minecraftVersion": "1.4.3-pre", + "version": 48, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.4.2": { + "minecraftVersion": "1.4.2", + "version": 47, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w41a": { + "minecraftVersion": "12w41a", + "version": 46, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w40a": { + "minecraftVersion": "12w40a", + "version": 45, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w34b": { + "minecraftVersion": "12w34b", + "version": 42, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w34a": { + "minecraftVersion": "12w34a", + "version": 41, + "usesNetty": false, + "majorVersion": "1.4" + }, + "12w32a": { + "minecraftVersion": "12w32a", + "version": 40, + "usesNetty": false, + "majorVersion": "1.4" + }, + "1.3.2": { + "minecraftVersion": "1.3.2", + "version": 39, + "usesNetty": false, + "majorVersion": "1.3" + }, + "1.3.1": { + "minecraftVersion": "1.3.1", + "version": 39, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w27a": { + "minecraftVersion": "12w27a", + "version": 38, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w26a": { + "minecraftVersion": "12w26a", + "version": 37, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w25a": { + "minecraftVersion": "12w25a", + "version": 37, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w24a": { + "minecraftVersion": "12w24a", + "version": 36, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w23a": { + "minecraftVersion": "12w23a", + "version": 35, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w22a": { + "minecraftVersion": "12w22a", + "version": 34, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w21ab": { + "minecraftVersion": "12w21ab", + "version": 33, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w19a": { + "minecraftVersion": "12w19a", + "version": 32, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w18a": { + "minecraftVersion": "12w18a", + "version": 32, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w17a": { + "minecraftVersion": "12w17a", + "version": 31, + "usesNetty": false, + "majorVersion": "1.3" + }, + "12w16a": { + "minecraftVersion": "12w16a", + "version": 30, + "usesNetty": false, + "majorVersion": "1.3" + }, + "1.2.5": { + "minecraftVersion": "1.2.5", + "version": 29, + "usesNetty": false, + "majorVersion": "1.2" + }, + "1.2.4": { + "minecraftVersion": "1.2.4", + "version": 29, + "usesNetty": false, + "majorVersion": "1.2" + }, + "1.2.3": { + "minecraftVersion": "1.2.3", + "version": 28, + "usesNetty": false, + "majorVersion": "1.2" + }, + "1.2.2": { + "minecraftVersion": "1.2.2", + "version": 28, + "usesNetty": false, + "majorVersion": "1.2" + }, + "1.2.1": { + "minecraftVersion": "1.2.1", + "version": 28, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w07a": { + "minecraftVersion": "12w07a", + "version": 27, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w06a": { + "minecraftVersion": "12w06a", + "version": 25, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w01a": { + "minecraftVersion": "12w01a", + "version": 24, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w03a": { + "minecraftVersion": "12w03a", + "version": 24, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w04a": { + "minecraftVersion": "12w04a", + "version": 24, + "usesNetty": false, + "majorVersion": "1.2" + }, + "12w05a": { + "minecraftVersion": "12w05a", + "version": 24, + "usesNetty": false, + "majorVersion": "1.2" + }, + "1.1": { + "minecraftVersion": "1.1", + "version": 23, + "usesNetty": false, + "majorVersion": "1.1" + }, + "1.0.0": { + "minecraftVersion": "1.0.0", + "version": 22, + "usesNetty": false, + "majorVersion": "1.0" + } + }, + "latestVersionsByProtocolVersionCode": { + "4": { + "minecraftVersion": "1.7.5", + "version": 4, + "usesNetty": true, + "majorVersion": "1.7" + }, + "5": { + "minecraftVersion": "14w02a", + "version": 5, + "usesNetty": true, + "majorVersion": "1.8" + }, + "6": { + "minecraftVersion": "14w03a", + "version": 6, + "usesNetty": true, + "majorVersion": "1.8" + }, + "7": { + "minecraftVersion": "14w04a", + "version": 7, + "usesNetty": true, + "majorVersion": "1.8" + }, + "8": { + "minecraftVersion": "14w04b", + "version": 8, + "usesNetty": true, + "majorVersion": "1.8" + }, + "9": { + "minecraftVersion": "14w05a", + "version": 9, + "usesNetty": true, + "majorVersion": "1.8" + }, + "10": { + "minecraftVersion": "14w06a", + "version": 10, + "usesNetty": true, + "majorVersion": "1.8" + }, + "11": { + "minecraftVersion": "14w07a", + "version": 11, + "usesNetty": true, + "majorVersion": "1.8" + }, + "12": { + "minecraftVersion": "14w08a", + "version": 12, + "usesNetty": true, + "majorVersion": "1.8" + }, + "14": { + "minecraftVersion": "14w11a", + "version": 14, + "usesNetty": true, + "majorVersion": "1.8" + }, + "15": { + "minecraftVersion": "14w17a", + "version": 15, + "usesNetty": true, + "majorVersion": "1.8" + }, + "16": { + "minecraftVersion": "14w18b", + "version": 16, + "usesNetty": true, + "majorVersion": "1.8" + }, + "17": { + "minecraftVersion": "14w19a", + "version": 17, + "usesNetty": true, + "majorVersion": "1.8" + }, + "18": { + "minecraftVersion": "14w20a", + "version": 18, + "usesNetty": true, + "majorVersion": "1.8" + }, + "19": { + "minecraftVersion": "14w21a", + "version": 19, + "usesNetty": true, + "majorVersion": "1.8" + }, + "20": { + "minecraftVersion": "14w21b", + "version": 20, + "usesNetty": true, + "majorVersion": "1.8" + }, + "21": { + "minecraftVersion": "14w25a", + "version": 21, + "usesNetty": true, + "majorVersion": "1.8" + }, + "22": { + "minecraftVersion": "14w25b", + "version": 22, + "usesNetty": true, + "majorVersion": "1.8" + }, + "23": { + "minecraftVersion": "14w26a", + "version": 23, + "usesNetty": true, + "majorVersion": "1.8" + }, + "24": { + "minecraftVersion": "14w26b", + "version": 24, + "usesNetty": true, + "majorVersion": "1.8" + }, + "25": { + "minecraftVersion": "14w26c", + "version": 25, + "usesNetty": true, + "majorVersion": "1.8" + }, + "26": { + "minecraftVersion": "14w27b", + "version": 26, + "usesNetty": true, + "majorVersion": "1.8" + }, + "27": { + "minecraftVersion": "14w28a", + "version": 27, + "usesNetty": true, + "majorVersion": "1.8" + }, + "28": { + "minecraftVersion": "14w28b", + "version": 28, + "usesNetty": true, + "majorVersion": "1.8" + }, + "29": { + "minecraftVersion": "14w29a", + "version": 29, + "usesNetty": true, + "majorVersion": "1.8" + }, + "30": { + "minecraftVersion": "14w30a", + "version": 30, + "usesNetty": true, + "majorVersion": "1.8" + }, + "31": { + "minecraftVersion": "14w30c", + "version": 31, + "usesNetty": true, + "majorVersion": "1.8" + }, + "32": { + "minecraftVersion": "14w31a", + "version": 32, + "usesNetty": true, + "majorVersion": "1.8" + }, + "33": { + "minecraftVersion": "14w32a", + "version": 33, + "usesNetty": true, + "majorVersion": "1.8" + }, + "34": { + "minecraftVersion": "14w32b", + "version": 34, + "usesNetty": true, + "majorVersion": "1.8" + }, + "35": { + "minecraftVersion": "14w32c", + "version": 35, + "usesNetty": true, + "majorVersion": "1.8" + }, + "36": { + "minecraftVersion": "14w32d", + "version": 36, + "usesNetty": true, + "majorVersion": "1.8" + }, + "37": { + "minecraftVersion": "14w33a", + "version": 37, + "usesNetty": true, + "majorVersion": "1.8" + }, + "38": { + "minecraftVersion": "14w33b", + "version": 38, + "usesNetty": true, + "majorVersion": "1.8" + }, + "39": { + "minecraftVersion": "14w33c", + "version": 39, + "usesNetty": true, + "majorVersion": "1.8" + }, + "40": { + "minecraftVersion": "14w34a", + "version": 40, + "usesNetty": true, + "majorVersion": "1.8" + }, + "41": { + "minecraftVersion": "14w34b", + "version": 41, + "usesNetty": true, + "majorVersion": "1.8" + }, + "42": { + "minecraftVersion": "14w34c", + "version": 42, + "usesNetty": true, + "majorVersion": "1.8" + }, + "43": { + "minecraftVersion": "14w34d", + "version": 43, + "usesNetty": true, + "majorVersion": "1.8" + }, + "44": { + "minecraftVersion": "1.8-pre1", + "version": 44, + "usesNetty": true, + "majorVersion": "1.8" + }, + "45": { + "minecraftVersion": "1.8-pre2", + "version": 45, + "usesNetty": true, + "majorVersion": "1.8" + }, + "46": { + "minecraftVersion": "1.8-pre3", + "version": 46, + "usesNetty": true, + "majorVersion": "1.8" + }, + "47": { + "minecraftVersion": "1.8.9", + "version": 47, + "usesNetty": true, + "majorVersion": "1.8" + }, + "48": { + "minecraftVersion": "15w14a", + "version": 48, + "usesNetty": true, + "majorVersion": "1.9" + }, + "49": { + "minecraftVersion": "15w31a", + "version": 49, + "usesNetty": true, + "majorVersion": "1.9" + }, + "50": { + "minecraftVersion": "15w31b", + "version": 50, + "usesNetty": true, + "majorVersion": "1.9" + }, + "51": { + "minecraftVersion": "15w31c", + "version": 51, + "usesNetty": true, + "majorVersion": "1.9" + }, + "52": { + "minecraftVersion": "15w32a", + "version": 52, + "usesNetty": true, + "majorVersion": "1.9" + }, + "53": { + "minecraftVersion": "15w32b", + "version": 53, + "usesNetty": true, + "majorVersion": "1.9" + }, + "54": { + "minecraftVersion": "15w32c", + "version": 54, + "usesNetty": true, + "majorVersion": "1.9" + }, + "55": { + "minecraftVersion": "15w33a", + "version": 55, + "usesNetty": true, + "majorVersion": "1.9" + }, + "56": { + "minecraftVersion": "15w33b", + "version": 56, + "usesNetty": true, + "majorVersion": "1.9" + }, + "57": { + "minecraftVersion": "15w33c", + "version": 57, + "usesNetty": true, + "majorVersion": "1.9" + }, + "58": { + "minecraftVersion": "15w34a", + "version": 58, + "usesNetty": true, + "majorVersion": "1.9" + }, + "59": { + "minecraftVersion": "15w34b", + "version": 59, + "usesNetty": true, + "majorVersion": "1.9" + }, + "60": { + "minecraftVersion": "15w34c", + "version": 60, + "usesNetty": true, + "majorVersion": "1.9" + }, + "61": { + "minecraftVersion": "15w34d", + "version": 61, + "usesNetty": true, + "majorVersion": "1.9" + }, + "62": { + "minecraftVersion": "15w35a", + "version": 62, + "usesNetty": true, + "majorVersion": "1.9" + }, + "63": { + "minecraftVersion": "15w35b", + "version": 63, + "usesNetty": true, + "majorVersion": "1.9" + }, + "64": { + "minecraftVersion": "15w35c", + "version": 64, + "usesNetty": true, + "majorVersion": "1.9" + }, + "65": { + "minecraftVersion": "15w35d", + "version": 65, + "usesNetty": true, + "majorVersion": "1.9" + }, + "66": { + "minecraftVersion": "15w35e", + "version": 66, + "usesNetty": true, + "majorVersion": "1.9" + }, + "67": { + "minecraftVersion": "15w36a", + "version": 67, + "usesNetty": true, + "majorVersion": "1.9" + }, + "68": { + "minecraftVersion": "15w36b", + "version": 68, + "usesNetty": true, + "majorVersion": "1.9" + }, + "69": { + "minecraftVersion": "15w36c", + "version": 69, + "usesNetty": true, + "majorVersion": "1.9" + }, + "70": { + "minecraftVersion": "15w36d", + "version": 70, + "usesNetty": true, + "majorVersion": "1.9" + }, + "71": { + "minecraftVersion": "15w37a", + "version": 71, + "usesNetty": true, + "majorVersion": "1.9" + }, + "72": { + "minecraftVersion": "15w38a", + "version": 72, + "usesNetty": true, + "majorVersion": "1.9" + }, + "73": { + "minecraftVersion": "15w38b", + "version": 73, + "usesNetty": true, + "majorVersion": "1.9" + }, + "74": { + "minecraftVersion": "15w39c", + "version": 74, + "usesNetty": true, + "majorVersion": "1.9" + }, + "75": { + "minecraftVersion": "15w40a", + "version": 75, + "usesNetty": true, + "majorVersion": "1.9" + }, + "76": { + "minecraftVersion": "15w40b", + "version": 76, + "usesNetty": true, + "majorVersion": "1.9" + }, + "77": { + "minecraftVersion": "15w41a", + "version": 77, + "usesNetty": true, + "majorVersion": "1.9" + }, + "78": { + "minecraftVersion": "15w41b", + "version": 78, + "usesNetty": true, + "majorVersion": "1.9" + }, + "79": { + "minecraftVersion": "15w42a", + "version": 79, + "usesNetty": true, + "majorVersion": "1.9" + }, + "80": { + "minecraftVersion": "15w43a", + "version": 80, + "usesNetty": true, + "majorVersion": "1.9" + }, + "81": { + "minecraftVersion": "15w43b", + "version": 81, + "usesNetty": true, + "majorVersion": "1.9" + }, + "82": { + "minecraftVersion": "15w43c", + "version": 82, + "usesNetty": true, + "majorVersion": "1.9" + }, + "83": { + "minecraftVersion": "15w44a", + "version": 83, + "usesNetty": true, + "majorVersion": "1.9" + }, + "84": { + "minecraftVersion": "15w44b", + "version": 84, + "usesNetty": true, + "majorVersion": "1.9" + }, + "85": { + "minecraftVersion": "15w45a", + "version": 85, + "usesNetty": true, + "majorVersion": "1.9" + }, + "86": { + "minecraftVersion": "15w46a", + "version": 86, + "usesNetty": true, + "majorVersion": "1.9" + }, + "87": { + "minecraftVersion": "15w47a", + "version": 87, + "usesNetty": true, + "majorVersion": "1.9" + }, + "88": { + "minecraftVersion": "15w47b", + "version": 88, + "usesNetty": true, + "majorVersion": "1.9" + }, + "89": { + "minecraftVersion": "15w47c", + "version": 89, + "usesNetty": true, + "majorVersion": "1.9" + }, + "90": { + "minecraftVersion": "15w49a", + "version": 90, + "usesNetty": true, + "majorVersion": "1.9" + }, + "91": { + "minecraftVersion": "15w49b", + "version": 91, + "usesNetty": true, + "majorVersion": "1.9" + }, + "92": { + "minecraftVersion": "15w50a", + "version": 92, + "usesNetty": true, + "majorVersion": "1.9" + }, + "93": { + "minecraftVersion": "15w51a", + "version": 93, + "usesNetty": true, + "majorVersion": "1.9" + }, + "94": { + "minecraftVersion": "15w51b", + "version": 94, + "usesNetty": true, + "majorVersion": "1.9" + }, + "95": { + "minecraftVersion": "16w02a", + "version": 95, + "usesNetty": true, + "majorVersion": "1.9" + }, + "96": { + "minecraftVersion": "16w03a", + "version": 96, + "usesNetty": true, + "majorVersion": "1.9" + }, + "-22": { + "minecraftVersion": "1.0.0", + "version": 22, + "usesNetty": false, + "majorVersion": "1.0" + }, + "-23": { + "minecraftVersion": "1.1", + "version": 23, + "usesNetty": false, + "majorVersion": "1.1" + }, + "-24": { + "minecraftVersion": "12w01a", + "version": 24, + "usesNetty": false, + "majorVersion": "1.2" + }, + "-25": { + "minecraftVersion": "12w06a", + "version": 25, + "usesNetty": false, + "majorVersion": "1.2" + }, + "-27": { + "minecraftVersion": "12w07a", + "version": 27, + "usesNetty": false, + "majorVersion": "1.2" + }, + "-28": { + "minecraftVersion": "1.2.3", + "version": 28, + "usesNetty": false, + "majorVersion": "1.2" + }, + "-29": { + "minecraftVersion": "1.2.5", + "version": 29, + "usesNetty": false, + "majorVersion": "1.2" + }, + "-30": { + "minecraftVersion": "12w16a", + "version": 30, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-31": { + "minecraftVersion": "12w17a", + "version": 31, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-32": { + "minecraftVersion": "12w19a", + "version": 32, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-33": { + "minecraftVersion": "12w21ab", + "version": 33, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-34": { + "minecraftVersion": "12w22a", + "version": 34, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-35": { + "minecraftVersion": "12w23a", + "version": 35, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-36": { + "minecraftVersion": "12w24a", + "version": 36, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-37": { + "minecraftVersion": "12w26a", + "version": 37, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-38": { + "minecraftVersion": "12w27a", + "version": 38, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-39": { + "minecraftVersion": "1.3.2", + "version": 39, + "usesNetty": false, + "majorVersion": "1.3" + }, + "-40": { + "minecraftVersion": "12w32a", + "version": 40, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-41": { + "minecraftVersion": "12w34a", + "version": 41, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-42": { + "minecraftVersion": "12w34b", + "version": 42, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-45": { + "minecraftVersion": "12w40a", + "version": 45, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-46": { + "minecraftVersion": "12w41a", + "version": 46, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-47": { + "minecraftVersion": "1.4.2", + "version": 47, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-48": { + "minecraftVersion": "1.4.3-pre", + "version": 48, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-49": { + "minecraftVersion": "1.4.5", + "version": 49, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-50": { + "minecraftVersion": "12w49a", + "version": 50, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-51": { + "minecraftVersion": "1.4.7", + "version": 51, + "usesNetty": false, + "majorVersion": "1.4" + }, + "-52": { + "minecraftVersion": "13w01a", + "version": 52, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-53": { + "minecraftVersion": "13w02a", + "version": 53, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-54": { + "minecraftVersion": "13w03a", + "version": 54, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-55": { + "minecraftVersion": "13w04a", + "version": 55, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-56": { + "minecraftVersion": "13w05a", + "version": 56, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-57": { + "minecraftVersion": "13w05b", + "version": 57, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-58": { + "minecraftVersion": "13w06a", + "version": 58, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-59": { + "minecraftVersion": "13w09b", + "version": 59, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-60": { + "minecraftVersion": "1.5.1", + "version": 60, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-61": { + "minecraftVersion": "1.5.2", + "version": 61, + "usesNetty": false, + "majorVersion": "1.5" + }, + "-63": { + "minecraftVersion": "13w16b", + "version": 63, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-64": { + "minecraftVersion": "13w17a", + "version": 64, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-65": { + "minecraftVersion": "13w18a", + "version": 65, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-66": { + "minecraftVersion": "13w19a", + "version": 66, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-67": { + "minecraftVersion": "13w23a", + "version": 67, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-68": { + "minecraftVersion": "13w23b", + "version": 68, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-69": { + "minecraftVersion": "13w24a", + "version": 69, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-70": { + "minecraftVersion": "13w24b", + "version": 70, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-71": { + "minecraftVersion": "13w25c", + "version": 71, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-72": { + "minecraftVersion": "1.6-pre", + "version": 72, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-73": { + "minecraftVersion": "1.6.1", + "version": 73, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-74": { + "minecraftVersion": "1.6.2", + "version": 74, + "usesNetty": false, + "majorVersion": "1.6" + }, + "-78": { + "minecraftVersion": "1.6.4", + "version": 78, + "usesNetty": false, + "majorVersion": "1.6" + } + } +} \ No newline at end of file diff --git a/src/transforms/serializer.js b/src/transforms/serializer.js index 2c27238..f71c150 100644 --- a/src/transforms/serializer.js +++ b/src/transforms/serializer.js @@ -6,35 +6,24 @@ var Parser = require("protodef").Parser; var minecraft = require("../datatypes/minecraft"); var states = require("../states"); +var protocolSpecs = require('../protocol'); -function createProtocol(types,packets) +function createProtocol(version, state, direction) { var proto = new ProtoDef(); proto.addType("string",["pstring",{ countType:"varint" }]); proto.addTypes(minecraft); - proto.addTypes(types); - Object.keys(packets).forEach(function(name) { - proto.addType("packet_"+name,["container",packets[name].fields]); + if (!protocolSpecs[version]) throw new Error(`no protocol specification for version: ${version}`); + + var protocolSpec = protocolSpecs[version][state][direction]; + + Object.keys(protocolSpec).forEach((name) => { + proto.addType(name, protocolSpec[name]); }); - proto.addType("packet",["container", [ - { "name": "name", "type":["mapper",{"type": "varint" , - "mappings":Object.keys(packets).reduce(function(acc,name){ - acc[parseInt(packets[name].id)]=name; - return acc; - },{}) - }]}, - { "name": "params", "type": ["switch", { - "compareTo": "name", - "fields": Object.keys(packets).reduce(function(acc,name){ - acc[name]="packet_"+name; - return acc; - },{}) - }]} - ]]); return proto; } @@ -44,11 +33,9 @@ function createSerializer(opts) var state = opts.state !== undefined ? opts.state : states.HANDSHAKING; var isServer = opts.isServer !== undefined ? opts.isServer : false; var version = opts.version; - - var mcData=require("minecraft-data")(version); var direction = !isServer ? 'toServer' : 'toClient'; - var packets = mcData.protocol.states[state][direction]; - var proto=createProtocol(mcData.protocol.types,packets); + var proto = createProtocol(version, state, direction); + return new Serializer(proto,"packet"); } @@ -59,12 +46,9 @@ function createDeserializer(opts) var isServer = opts.isServer !== undefined ? opts.isServer : false; var packetsToParse = opts.packetsToParse !== undefined ? packetsToParse : {"packet": true}; var version = opts.version; - - - var mcData=require("minecraft-data")(version); var direction = isServer ? "toServer" : "toClient"; - var packets = mcData.protocol.states[state][direction]; - var proto=createProtocol(mcData.protocol.types,packets); + var proto = createProtocol(version, state, direction); + return new Parser(proto,"packet"); } diff --git a/src/version.js b/src/version.js index 503eb0c..efafce2 100644 --- a/src/version.js +++ b/src/version.js @@ -2,5 +2,5 @@ module.exports={ defaultVersion:'1.8', - supportedVersions:['1.8','1.9'] + supportedVersions: Object.keys(require('./protocol')) };