@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
62 lines (61 loc) • 8.33 kB
JavaScript
import Identifiers from "../Identifiers.es.js";
import PlayStatusPacket from "../packet/PlayStatusPacket.es.js";
import ResourcePacksInfoPacket from "../packet/ResourcePacksInfoPacket.es.js";
import PlayStatusType from "../type/PlayStatusType.es.js";
import Player from "../../Player.es.js";
//#region src/network/handler/LoginHandler.ts
var LoginHandler = class {
static NetID = Identifiers.LoginPacket;
/**
* @TODO: Check if player count >= max players
* @TODO: encryption handshake.
*/
async handle(packet, server, connection) {
const playStatus = new PlayStatusPacket();
if (packet.protocol !== Identifiers.Protocol) {
playStatus.status = packet.protocol < Identifiers.Protocol ? PlayStatusType.LoginFailedClient : PlayStatusType.LoginFailedServer;
await connection.sendDataPacket(playStatus, true);
return;
}
if (!packet.displayName) {
connection.disconnect("Invalid username!", false);
return;
}
const player = new Player({
connection,
world: server.getWorldManager().getDefaultWorld(),
server,
uuid: packet.identity
});
player.setName(packet.displayName);
player.xuid = packet.XUID;
player.randomId = packet.clientRandomId;
player.locale = packet.languageCode;
player.skin = packet.skin;
player.device = packet.device;
await server.getSessionManager().findPlayer({
name: packet.displayName,
xuid: packet.XUID
})?.kick("Logged in from another location");
if (!player.xuid && server.getConfig().getOnlineMode()) {
await player.kick("Server is in online-mode!");
return;
}
const reason = server.getBanManager().isBanned(player);
if (reason !== false) {
await player.kick(`You have been banned${reason ? ` for reason: ${reason}` : ""}!`);
return;
}
await player.enable();
await connection.initPlayerConnection(server, player).sendPlayStatus(PlayStatusType.LoginSuccess);
const resourcePacksInfo = new ResourcePacksInfoPacket();
resourcePacksInfo.resourcePackRequired = false;
resourcePacksInfo.forceServerPacksEnabled = false;
resourcePacksInfo.hasScripts = false;
resourcePacksInfo.hasAddonPacks = false;
await connection.sendDataPacket(resourcePacksInfo, true);
}
};
//#endregion
export { LoginHandler as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naW5IYW5kbGVyLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZXR3b3JrL2hhbmRsZXIvTG9naW5IYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYXllciB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vLi4vU2VydmVyJztcbmltcG9ydCB0eXBlIENsaWVudENvbm5lY3Rpb24gZnJvbSAnLi4vQ2xpZW50Q29ubmVjdGlvbic7XG5pbXBvcnQgSWRlbnRpZmllcnMgZnJvbSAnLi4vSWRlbnRpZmllcnMnO1xuaW1wb3J0IHsgUGxheVN0YXR1c1BhY2tldCB9IGZyb20gJy4uL1BhY2tldHMnO1xuaW1wb3J0IHR5cGUgTG9naW5QYWNrZXQgZnJvbSAnLi4vcGFja2V0L0xvZ2luUGFja2V0JztcbmltcG9ydCBSZXNvdXJjZVBhY2tzSW5mb1BhY2tldCBmcm9tICcuLi9wYWNrZXQvUmVzb3VyY2VQYWNrc0luZm9QYWNrZXQnO1xuaW1wb3J0IFBsYXlTdGF0dXNUeXBlIGZyb20gJy4uL3R5cGUvUGxheVN0YXR1c1R5cGUnO1xuaW1wb3J0IHR5cGUgUHJlTG9naW5QYWNrZXRIYW5kbGVyIGZyb20gJy4vUHJlTG9naW5QYWNrZXRIYW5kbGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9naW5IYW5kbGVyIGltcGxlbWVudHMgUHJlTG9naW5QYWNrZXRIYW5kbGVyPExvZ2luUGFja2V0PiB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLkxvZ2luUGFja2V0O1xuXG4gICAgLyoqXG4gICAgICogQFRPRE86IENoZWNrIGlmIHBsYXllciBjb3VudCA+PSBtYXggcGxheWVyc1xuICAgICAqIEBUT0RPOiBlbmNyeXB0aW9uIGhhbmRzaGFrZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlKHBhY2tldDogTG9naW5QYWNrZXQsIHNlcnZlcjogU2VydmVyLCBjb25uZWN0aW9uOiBDbGllbnRDb25uZWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBsYXlTdGF0dXMgPSBuZXcgUGxheVN0YXR1c1BhY2tldCgpO1xuXG4gICAgICAgIC8vIEtpY2sgY2xpZW50IGlmIGhhcyBuZXdlciAvIG9sZGVyIGNsaWVudCB2ZXJzaW9uXG4gICAgICAgIGlmIChwYWNrZXQucHJvdG9jb2wgIT09IElkZW50aWZpZXJzLlByb3RvY29sKSB7XG4gICAgICAgICAgICBwbGF5U3RhdHVzLnN0YXR1cyA9XG4gICAgICAgICAgICAgICAgcGFja2V0LnByb3RvY29sIDwgSWRlbnRpZmllcnMuUHJvdG9jb2xcbiAgICAgICAgICAgICAgICAgICAgPyBQbGF5U3RhdHVzVHlwZS5Mb2dpbkZhaWxlZENsaWVudFxuICAgICAgICAgICAgICAgICAgICA6IFBsYXlTdGF0dXNUeXBlLkxvZ2luRmFpbGVkU2VydmVyO1xuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5zZW5kRGF0YVBhY2tldChwbGF5U3RhdHVzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEtpY2sgdGhlIHBsYXllciBpZiB0aGVpciB1c2VybmFtZSBpcyBpbnZhbGlkXG4gICAgICAgIGlmICghcGFja2V0LmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoJ0ludmFsaWQgdXNlcm5hbWUhJywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGxheWVyID0gbmV3IFBsYXllcih7XG4gICAgICAgICAgICBjb25uZWN0aW9uLFxuICAgICAgICAgICAgd29ybGQ6IHNlcnZlci5nZXRXb3JsZE1hbmFnZXIoKS5nZXREZWZhdWx0V29ybGQoKSEsXG4gICAgICAgICAgICBzZXJ2ZXIsXG4gICAgICAgICAgICB1dWlkOiBwYWNrZXQuaWRlbnRpdHlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGxheWVyLnNldE5hbWUocGFja2V0LmRpc3BsYXlOYW1lKTtcbiAgICAgICAgcGxheWVyLnh1aWQgPSBwYWNrZXQuWFVJRDtcbiAgICAgICAgcGxheWVyLnJhbmRvbUlkID0gcGFja2V0LmNsaWVudFJhbmRvbUlkO1xuICAgICAgICBwbGF5ZXIubG9jYWxlID0gcGFja2V0Lmxhbmd1YWdlQ29kZTtcbiAgICAgICAgcGxheWVyLnNraW4gPSBwYWNrZXQuc2tpbjtcbiAgICAgICAgcGxheWVyLmRldmljZSA9IHBhY2tldC5kZXZpY2U7XG5cbiAgICAgICAgLy8gUGxheWVyIHdpdGggc2FtZSBuYW1lIG9yIHh1aWQgaXMgYWxyZWFkeSBjb25uZWN0ZWQsXG4gICAgICAgIC8vIHNvIGtpY2sgdGhlIG9sZCBwbGF5ZXIgYW5kIGxldCB0aGUgbmV3IHBsYXllciBjb25uZWN0LlxuICAgICAgICBhd2FpdCBzZXJ2ZXJcbiAgICAgICAgICAgIC5nZXRTZXNzaW9uTWFuYWdlcigpXG4gICAgICAgICAgICAuZmluZFBsYXllcih7IG5hbWU6IHBhY2tldC5kaXNwbGF5TmFtZSwgeHVpZDogcGFja2V0LlhVSUQgfSlcbiAgICAgICAgICAgID8ua2ljaygnTG9nZ2VkIGluIGZyb20gYW5vdGhlciBsb2NhdGlvbicpO1xuXG4gICAgICAgIGlmICghcGxheWVyLnh1aWQgJiYgc2VydmVyLmdldENvbmZpZygpLmdldE9ubGluZU1vZGUoKSkge1xuICAgICAgICAgICAgYXdhaXQgcGxheWVyLmtpY2soJ1NlcnZlciBpcyBpbiBvbmxpbmUtbW9kZSEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IHNlcnZlci5nZXRCYW5NYW5hZ2VyKCkuaXNCYW5uZWQocGxheWVyKTtcbiAgICAgICAgaWYgKHJlYXNvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHBsYXllci5raWNrKGBZb3UgaGF2ZSBiZWVuIGJhbm5lZCR7cmVhc29uID8gYCBmb3IgcmVhc29uOiAke3JlYXNvbn1gIDogJyd9IWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcGxheWVyLmVuYWJsZSgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcGxheWVyIGNvbm5lY3Rpb24gdG8gYmUgcmVjb2duaXplZCBhcyBhIGNvbm5lY3RlZCBwbGF5ZXJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uaW5pdFBsYXllckNvbm5lY3Rpb24oc2VydmVyLCBwbGF5ZXIpO1xuICAgICAgICBhd2FpdCBzZXNzaW9uLnNlbmRQbGF5U3RhdHVzKFBsYXlTdGF0dXNUeXBlLkxvZ2luU3VjY2Vzcyk7XG5cbiAgICAgICAgLy8gRmluYWxpemUgY29ubmVjdGlvbiBoYW5kc2hha2VcbiAgICAgICAgY29uc3QgcmVzb3VyY2VQYWNrc0luZm8gPSBuZXcgUmVzb3VyY2VQYWNrc0luZm9QYWNrZXQoKTtcbiAgICAgICAgcmVzb3VyY2VQYWNrc0luZm8ucmVzb3VyY2VQYWNrUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgcmVzb3VyY2VQYWNrc0luZm8uZm9yY2VTZXJ2ZXJQYWNrc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVzb3VyY2VQYWNrc0luZm8uaGFzU2NyaXB0cyA9IGZhbHNlO1xuICAgICAgICByZXNvdXJjZVBhY2tzSW5mby5oYXNBZGRvblBhY2tzID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uc2VuZERhdGFQYWNrZXQocmVzb3VyY2VQYWNrc0luZm8sIHRydWUpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBVUEsSUFBcUIsZUFBckIsTUFBZ0Y7Q0FDNUUsT0FBYyxRQUFRLFlBQVk7Ozs7O0NBTWxDLE1BQWEsT0FBTyxRQUFxQixRQUFnQixZQUE2QztFQUNsRyxNQUFNLGFBQWEsSUFBSSxpQkFBaUI7RUFHeEMsSUFBSSxPQUFPLGFBQWEsWUFBWSxVQUFVO0dBQzFDLFdBQVcsU0FDUCxPQUFPLFdBQVcsWUFBWSxXQUN4QixlQUFlLG9CQUNmLGVBQWU7R0FDekIsTUFBTSxXQUFXLGVBQWUsWUFBWSxJQUFJO0dBQ2hEO0VBQ0o7RUFHQSxJQUFJLENBQUMsT0FBTyxhQUFhO0dBQ3JCLFdBQVcsV0FBVyxxQkFBcUIsS0FBSztHQUNoRDtFQUNKO0VBRUEsTUFBTSxTQUFTLElBQUksT0FBTztHQUN0QjtHQUNBLE9BQU8sT0FBTyxnQkFBZ0IsRUFBRSxnQkFBZ0I7R0FDaEQ7R0FDQSxNQUFNLE9BQU87RUFDakIsQ0FBQztFQUVELE9BQU8sUUFBUSxPQUFPLFdBQVc7RUFDakMsT0FBTyxPQUFPLE9BQU87RUFDckIsT0FBTyxXQUFXLE9BQU87RUFDekIsT0FBTyxTQUFTLE9BQU87RUFDdkIsT0FBTyxPQUFPLE9BQU87RUFDckIsT0FBTyxTQUFTLE9BQU87RUFJdkIsTUFBTSxPQUNELGtCQUFrQixFQUNsQixXQUFXO0dBQUUsTUFBTSxPQUFPO0dBQWEsTUFBTSxPQUFPO0VBQUssQ0FBQyxHQUN6RCxLQUFLLGlDQUFpQztFQUU1QyxJQUFJLENBQUMsT0FBTyxRQUFRLE9BQU8sVUFBVSxFQUFFLGNBQWMsR0FBRztHQUNwRCxNQUFNLE9BQU8sS0FBSywyQkFBMkI7R0FDN0M7RUFDSjtFQUVBLE1BQU0sU0FBUyxPQUFPLGNBQWMsRUFBRSxTQUFTLE1BQU07RUFDckQsSUFBSSxXQUFXLE9BQU87R0FDbEIsTUFBTSxPQUFPLEtBQUssdUJBQXVCLFNBQVMsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFO0dBQ2xGO0VBQ0o7RUFFQSxNQUFNLE9BQU8sT0FBTztFQUlwQixNQURnQixXQUFXLHFCQUFxQixRQUFRLE1BQ2xELEVBQVEsZUFBZSxlQUFlLFlBQVk7RUFHeEQsTUFBTSxvQkFBb0IsSUFBSSx3QkFBd0I7RUFDdEQsa0JBQWtCLHVCQUF1QjtFQUN6QyxrQkFBa0IsMEJBQTBCO0VBQzVDLGtCQUFrQixhQUFhO0VBQy9CLGtCQUFrQixnQkFBZ0I7RUFDbEMsTUFBTSxXQUFXLGVBQWUsbUJBQW1CLElBQUk7Q0FDM0Q7QUFDSiJ9