2015-07-27 02:26:36 +02:00
|
|
|
var ursa=require("./ursa");
|
|
|
|
var net = require('net');
|
|
|
|
var dns = require('dns');
|
|
|
|
var Client = require('./client');
|
|
|
|
var assert = require('assert');
|
2015-10-03 02:14:01 +02:00
|
|
|
var states = require("./states");
|
2015-07-27 02:26:36 +02:00
|
|
|
var debug = require("./debug");
|
2016-01-25 23:28:14 -08:00
|
|
|
|
2016-01-25 23:11:42 -08:00
|
|
|
var encrypt = require('./client/encrypt');
|
2016-01-25 23:19:46 -08:00
|
|
|
var keepalive = require('./client/keepalive');
|
2016-01-25 23:22:25 -08:00
|
|
|
var compress = require('./client/compress');
|
2016-01-25 23:28:14 -08:00
|
|
|
var caseCorrect = require('./client/caseCorrect');
|
2016-01-25 23:33:58 -08:00
|
|
|
var setProtocol = require('./client/setProtocol');
|
2015-07-27 02:26:36 +02:00
|
|
|
|
|
|
|
module.exports=createClient;
|
|
|
|
|
|
|
|
Client.prototype.connect = function(port, host) {
|
|
|
|
var self = this;
|
|
|
|
if(port == 25565 && net.isIP(host) === 0) {
|
|
|
|
dns.resolveSrv("_minecraft._tcp." + host, function(err, addresses) {
|
|
|
|
if(addresses && addresses.length > 0) {
|
|
|
|
self.setSocket(net.connect(addresses[0].port, addresses[0].name));
|
|
|
|
} else {
|
|
|
|
self.setSocket(net.connect(port, host));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
self.setSocket(net.connect(port, host));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function createClient(options) {
|
|
|
|
assert.ok(options, "options is required");
|
2016-01-25 23:28:14 -08:00
|
|
|
options.port = options.port || 25565;
|
|
|
|
options.host = options.host || 'localhost';
|
2015-07-27 02:26:36 +02:00
|
|
|
|
|
|
|
assert.ok(options.username, "username is required");
|
|
|
|
|
2015-09-29 22:41:41 +02:00
|
|
|
var optVersion = options.version || require("./version").defaultVersion;
|
|
|
|
var mcData=require("minecraft-data")(optVersion);
|
|
|
|
var version = mcData.version;
|
2016-01-25 23:33:58 -08:00
|
|
|
options.majorVersion = version.majorVersion;
|
|
|
|
options.protocolVersion = version.version;
|
2015-07-27 02:26:36 +02:00
|
|
|
|
2015-09-29 22:41:41 +02:00
|
|
|
|
2016-01-25 23:33:58 -08:00
|
|
|
var client = new Client(false, options.majorVersion);
|
|
|
|
setProtocol(client, options);
|
2016-01-25 23:24:20 -08:00
|
|
|
keepalive(client, options);
|
2016-01-25 23:11:42 -08:00
|
|
|
encrypt(client);
|
2015-09-14 17:11:44 +00:00
|
|
|
client.once('success', onLogin);
|
2016-01-25 23:22:25 -08:00
|
|
|
compress(client);
|
2016-01-25 23:28:14 -08:00
|
|
|
caseCorrect(client, options);
|
2015-07-27 02:26:36 +02:00
|
|
|
|
|
|
|
return client;
|
|
|
|
|
|
|
|
function onLogin(packet) {
|
|
|
|
client.state = states.PLAY;
|
|
|
|
client.uuid = packet.uuid;
|
|
|
|
client.username = packet.username;
|
|
|
|
}
|
|
|
|
}
|