bedrock-protocol/dist/createClient.js
2019-07-14 18:22:34 +02:00

70 lines
No EOL
1.9 KiB
JavaScript

'use strict';
var assert = require('assert');
var raknet = require('raknet');
var fs = require('fs');
var path = require('path');
var zlib = require('zlib');
var ProtoDef = require('protodef').ProtoDef;
var batchProto = new ProtoDef();
batchProto.addTypes(require("./datatypes/minecraft"));
batchProto.addType("insideBatch", ["endOfArray", {
"type": ["buffer", {
"countType": "i32"
}]
}]);
function createClient(options) {
return null; //FIXME
assert.ok(options, 'options is required');
var port = options.port || 19132;
var host = options.host || 'localhost';
assert.ok(options.username, 'username is required');
options.customPackets = require('../data/protocol');
options.customTypes = require('./datatypes/minecraft');
var client = raknet.createClient(options);
client.username = options.username;
client.on('mcpe', function (packet) {
return client.emit(packet.name, packet.params);
});
client.writeMCPE = function (name, packet) {
client.writeEncapsulated('mcpe', {
name: name,
params: packet
});
};
client.on('login', function () {
client.writeMCPE('game_login', {
username: client.username,
protocol: 70,
protocol2: 70,
clientId: [-1, -697896776],
clientUuid: '86372ed8-d055-b23a-9171-5e3ac594d766',
serverAddress: client.host + ":" + client.port,
clientSecret: new Buffer('e8 88 db 7b 9f f2 f0 44 a3 51 08 18 4e 8c 7f 9a'.replace(/ /g, ''), 'hex'),
skin: {
skinType: 'Standard_Steve',
texture: fs.readFileSync(path.join(__dirname, 'texture'))
}
});
});
client.on('batch', function (packet) {
var buf = zlib.inflateSync(packet.payload);
var packets = batchProto.parsePacketBuffer("insideBatch", buf).data;
packets.forEach(function (packet) {
return client.readEncapsulatedPacket(Buffer.concat([new Buffer([0xfe]), packet]));
});
});
return client;
}
module.exports = createClient;