minecraft-protocol
Version:
Parse and serialize minecraft packets, plus authentication and encryption.
45 lines (39 loc) • 1.5 kB
JavaScript
const states = require('../states')
module.exports = function (client, options) {
client.on('connect', onConnect)
function onConnect () {
if (client.wait_connect) {
client.on('connect_allowed', next)
} else {
next()
}
function next () {
const mcData = require('minecraft-data')(client.version)
let taggedHost = options.host
if (client.tagHost) taggedHost += client.tagHost
if (options.fakeHost) taggedHost = options.fakeHost
client.write('set_protocol', {
protocolVersion: options.protocolVersion,
serverHost: taggedHost,
serverPort: options.port,
nextState: 2
})
client.state = states.LOGIN
client.write('login_start', {
username: client.username,
signature: (client.profileKeys && !mcData.supportFeature('useChatSessions'))
? {
timestamp: BigInt(client.profileKeys.expiresOn.getTime()), // should probably be called "expireTime"
// Remove padding on the public key: not needed in vanilla server but matches how vanilla client looks
publicKey: client.profileKeys.public.export({ type: 'spki', format: 'der' }),
signature: mcData.supportFeature('profileKeySignatureV2')
? client.profileKeys.signatureV2
: client.profileKeys.signature
}
: null,
playerUUID: client.session?.selectedProfile?.id ?? client.uuid
})
}
}
}