@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
160 lines (157 loc) • 13.7 kB
JavaScript
import 'node:fs';
import 'confbox';
import '@jsprismarine/errors';
import '@jsprismarine/jsbinaryutils';
import 'node:assert';
import 'node:path';
import 'node:process';
import '../../block/BlockToolType.es.js';
import '@jsprismarine/bedrock-data';
import '@jsprismarine/nbt';
import 'zlib';
import '@jsprismarine/math';
import '@jsprismarine/minecraft';
import '../packet/AddActorPacket.es.js';
import '../packet/MoveActorAbsolutePacket.es.js';
import '../packet/RemoveActorPacket.es.js';
import 'node:crypto';
import '../packet/ActorFallPacket.es.js';
import '../packet/AddItemActorPacket.es.js';
import '../packet/AddPlayerPacket.es.js';
import '../packet/AnimatePacket.es.js';
import '../packet/AvailableActorIdentifiersPacket.es.js';
import '../packet/AvailableCommandsPacket.es.js';
import '../CompressionProvider.es.js';
import '../packet/NetworkSettingsPacket.es.js';
import '../packet/BiomeDefinitionListPacket.es.js';
import '../packet/ChangeDimensionPacket.es.js';
import '../packet/ChunkRadiusUpdatedPacket.es.js';
import '../packet/CommandRequestPacket.es.js';
import '../packet/ContainerClosePacket.es.js';
import '../packet/ContainerOpenPacket.es.js';
import '../packet/CreativeContentPacket.es.js';
import '../packet/DisconnectPacket.es.js';
import '../packet/EmoteListPacket.es.js';
import '../packet/InteractPacket.es.js';
import '../packet/InventoryContentPacket.es.js';
import '../packet/InventoryTransactionPacket.es.js';
import '../packet/ItemComponentPacket.es.js';
import '../packet/ItemStackRequestPacket.es.js';
import '../packet/ItemStackResponsePacket.es.js';
import '../packet/LevelChunkPacket.es.js';
import '../packet/LevelSoundEventPacket.es.js';
import '../packet/LoginPacket.es.js';
import '../packet/MobEquipmentPacket.es.js';
import '../packet/MovePlayerPacket.es.js';
import '../packet/NetworkChunkPublisherUpdatePacket.es.js';
import '../packet/OnScreenTextureAnimationPacket.es.js';
import '../packet/PacketViolationWarningPacket.es.js';
import '../packet/PlaySoundPacket.es.js';
import PlayStatusPacket from '../packet/PlayStatusPacket.es.js';
import '../packet/PlayerActionPacket.es.js';
import '../packet/PlayerListPacket.es.js';
import '../packet/PlayerSkinPacket.es.js';
import '../packet/RequestChunkRadiusPacket.es.js';
import '../packet/RequestNetworkSettingsPacket.es.js';
import '../packet/ResourcePackResponsePacket.es.js';
import '../packet/ResourcePackStackPacket.es.js';
import ResourcePacksInfoPacket from '../packet/ResourcePacksInfoPacket.es.js';
import '../packet/ServerSettingsRequestPacket.es.js';
import '../packet/SetActorDataPacket.es.js';
import '../packet/SetDefaultGametypePacket.es.js';
import '../packet/SetHealthPacket.es.js';
import '../packet/SetLocalPlayerAsInitializedPacket.es.js';
import '../packet/SetPlayerGametypePacket.es.js';
import '../packet/SetTimePacket.es.js';
import '../packet/ShowProfilePacket.es.js';
import '../packet/StartGamePacket.es.js';
import '../packet/TextPacket.es.js';
import '../packet/TickSyncPacket.es.js';
import '../packet/TransferPacket.es.js';
import '../packet/UpdateAdventureSettingsPacket.es.js';
import '../packet/UpdateAttributesPacket.es.js';
import '../packet/UpdateBlockPacket.es.js';
import '../packet/WorldEventPacket.es.js';
import '@jsprismarine/brigadier';
import Identifiers from '../Identifiers.es.js';
import '../../config/Config.es.js';
import './AnimateHandler.es.js';
import './CommandRequestHandler.es.js';
import './ContainerCloseHandler.es.js';
import './EmoteListHandler.es.js';
import './InteractHandler.es.js';
import './InventoryTransactionHandler.es.js';
import './LevelSoundEventHandler.es.js';
import './MobEquipmentHandler.es.js';
import './MovePlayerHandler.es.js';
import './PacketViolationWarningHandler.es.js';
import './PlayerActionHandler.es.js';
import './RequestChunkRadiusHandler.es.js';
import './RequestNetworkSettingsHandler.es.js';
import './ResourcePackResponseHandler.es.js';
import './ServerSettingsRequestHandler.es.js';
import './SetDefaultGametypeHandler.es.js';
import './SetLocalPlayerAsInitializedHandler.es.js';
import './SetPlayerGametypeHandler.es.js';
import './TextHandler.es.js';
import './TickSyncHandler.es.js';
import 'node:readline';
import Player from '../../Player.es.js';
import '@jsprismarine/raknet';
import 'evt';
import 'assert';
import 'heap';
import '../packet/UpdateAbilitiesPacket.es.js';
import PlayStatusType from '../type/PlayStatusType.es.js';
class LoginHandler {
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();
const session = connection.initPlayerConnection(server, player);
await session.sendPlayStatus(PlayStatusType.LoginSuccess);
const resourcePacksInfo = new ResourcePacksInfoPacket();
resourcePacksInfo.resourcePackRequired = false;
resourcePacksInfo.forceServerPacksEnabled = false;
resourcePacksInfo.hasScripts = false;
resourcePacksInfo.hasAddonPacks = false;
await connection.sendDataPacket(resourcePacksInfo, true);
}
}
export { LoginHandler as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9naW5IYW5kbGVyLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmV0d29yay9oYW5kbGVyL0xvZ2luSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF5ZXIgfSBmcm9tICcuLi8uLi8nO1xuaW1wb3J0IHR5cGUgU2VydmVyIGZyb20gJy4uLy4uL1NlcnZlcic7XG5pbXBvcnQgdHlwZSBDbGllbnRDb25uZWN0aW9uIGZyb20gJy4uL0NsaWVudENvbm5lY3Rpb24nO1xuaW1wb3J0IElkZW50aWZpZXJzIGZyb20gJy4uL0lkZW50aWZpZXJzJztcbmltcG9ydCB7IFBsYXlTdGF0dXNQYWNrZXQgfSBmcm9tICcuLi9QYWNrZXRzJztcbmltcG9ydCB0eXBlIExvZ2luUGFja2V0IGZyb20gJy4uL3BhY2tldC9Mb2dpblBhY2tldCc7XG5pbXBvcnQgUmVzb3VyY2VQYWNrc0luZm9QYWNrZXQgZnJvbSAnLi4vcGFja2V0L1Jlc291cmNlUGFja3NJbmZvUGFja2V0JztcbmltcG9ydCBQbGF5U3RhdHVzVHlwZSBmcm9tICcuLi90eXBlL1BsYXlTdGF0dXNUeXBlJztcbmltcG9ydCB0eXBlIFByZUxvZ2luUGFja2V0SGFuZGxlciBmcm9tICcuL1ByZUxvZ2luUGFja2V0SGFuZGxlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2luSGFuZGxlciBpbXBsZW1lbnRzIFByZUxvZ2luUGFja2V0SGFuZGxlcjxMb2dpblBhY2tldD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgTmV0SUQgPSBJZGVudGlmaWVycy5Mb2dpblBhY2tldDtcblxuICAgIC8qKlxuICAgICAqIEBUT0RPOiBDaGVjayBpZiBwbGF5ZXIgY291bnQgPj0gbWF4IHBsYXllcnNcbiAgICAgKiBAVE9ETzogZW5jcnlwdGlvbiBoYW5kc2hha2UuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZShwYWNrZXQ6IExvZ2luUGFja2V0LCBzZXJ2ZXI6IFNlcnZlciwgY29ubmVjdGlvbjogQ2xpZW50Q29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwbGF5U3RhdHVzID0gbmV3IFBsYXlTdGF0dXNQYWNrZXQoKTtcblxuICAgICAgICAvLyBLaWNrIGNsaWVudCBpZiBoYXMgbmV3ZXIgLyBvbGRlciBjbGllbnQgdmVyc2lvblxuICAgICAgICBpZiAocGFja2V0LnByb3RvY29sICE9PSBJZGVudGlmaWVycy5Qcm90b2NvbCkge1xuICAgICAgICAgICAgcGxheVN0YXR1cy5zdGF0dXMgPVxuICAgICAgICAgICAgICAgIHBhY2tldC5wcm90b2NvbCA8IElkZW50aWZpZXJzLlByb3RvY29sXG4gICAgICAgICAgICAgICAgICAgID8gUGxheVN0YXR1c1R5cGUuTG9naW5GYWlsZWRDbGllbnRcbiAgICAgICAgICAgICAgICAgICAgOiBQbGF5U3RhdHVzVHlwZS5Mb2dpbkZhaWxlZFNlcnZlcjtcbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uc2VuZERhdGFQYWNrZXQocGxheVN0YXR1cywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLaWNrIHRoZSBwbGF5ZXIgaWYgdGhlaXIgdXNlcm5hbWUgaXMgaW52YWxpZFxuICAgICAgICBpZiAoIXBhY2tldC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCdJbnZhbGlkIHVzZXJuYW1lIScsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBsYXllciA9IG5ldyBQbGF5ZXIoe1xuICAgICAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgICAgIHdvcmxkOiBzZXJ2ZXIuZ2V0V29ybGRNYW5hZ2VyKCkuZ2V0RGVmYXVsdFdvcmxkKCkhLFxuICAgICAgICAgICAgc2VydmVyLFxuICAgICAgICAgICAgdXVpZDogcGFja2V0LmlkZW50aXR5XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBsYXllci5zZXROYW1lKHBhY2tldC5kaXNwbGF5TmFtZSk7XG4gICAgICAgIHBsYXllci54dWlkID0gcGFja2V0LlhVSUQ7XG4gICAgICAgIHBsYXllci5yYW5kb21JZCA9IHBhY2tldC5jbGllbnRSYW5kb21JZDtcbiAgICAgICAgcGxheWVyLmxvY2FsZSA9IHBhY2tldC5sYW5ndWFnZUNvZGU7XG4gICAgICAgIHBsYXllci5za2luID0gcGFja2V0LnNraW47XG4gICAgICAgIHBsYXllci5kZXZpY2UgPSBwYWNrZXQuZGV2aWNlO1xuXG4gICAgICAgIC8vIFBsYXllciB3aXRoIHNhbWUgbmFtZSBvciB4dWlkIGlzIGFscmVhZHkgY29ubmVjdGVkLFxuICAgICAgICAvLyBzbyBraWNrIHRoZSBvbGQgcGxheWVyIGFuZCBsZXQgdGhlIG5ldyBwbGF5ZXIgY29ubmVjdC5cbiAgICAgICAgYXdhaXQgc2VydmVyXG4gICAgICAgICAgICAuZ2V0U2Vzc2lvbk1hbmFnZXIoKVxuICAgICAgICAgICAgLmZpbmRQbGF5ZXIoeyBuYW1lOiBwYWNrZXQuZGlzcGxheU5hbWUsIHh1aWQ6IHBhY2tldC5YVUlEIH0pXG4gICAgICAgICAgICA/LmtpY2soJ0xvZ2dlZCBpbiBmcm9tIGFub3RoZXIgbG9jYXRpb24nKTtcblxuICAgICAgICBpZiAoIXBsYXllci54dWlkICYmIHNlcnZlci5nZXRDb25maWcoKS5nZXRPbmxpbmVNb2RlKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHBsYXllci5raWNrKCdTZXJ2ZXIgaXMgaW4gb25saW5lLW1vZGUhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWFzb24gPSBzZXJ2ZXIuZ2V0QmFuTWFuYWdlcigpLmlzQmFubmVkKHBsYXllcik7XG4gICAgICAgIGlmIChyZWFzb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhd2FpdCBwbGF5ZXIua2ljayhgWW91IGhhdmUgYmVlbiBiYW5uZWQke3JlYXNvbiA/IGAgZm9yIHJlYXNvbjogJHtyZWFzb259YCA6ICcnfSFgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHBsYXllci5lbmFibGUoKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHBsYXllciBjb25uZWN0aW9uIHRvIGJlIHJlY29nbml6ZWQgYXMgYSBjb25uZWN0ZWQgcGxheWVyXG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBjb25uZWN0aW9uLmluaXRQbGF5ZXJDb25uZWN0aW9uKHNlcnZlciwgcGxheWVyKTtcbiAgICAgICAgYXdhaXQgc2Vzc2lvbi5zZW5kUGxheVN0YXR1cyhQbGF5U3RhdHVzVHlwZS5Mb2dpblN1Y2Nlc3MpO1xuXG4gICAgICAgIC8vIEZpbmFsaXplIGNvbm5lY3Rpb24gaGFuZHNoYWtlXG4gICAgICAgIGNvbnN0IHJlc291cmNlUGFja3NJbmZvID0gbmV3IFJlc291cmNlUGFja3NJbmZvUGFja2V0KCk7XG4gICAgICAgIHJlc291cmNlUGFja3NJbmZvLnJlc291cmNlUGFja1JlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIHJlc291cmNlUGFja3NJbmZvLmZvcmNlU2VydmVyUGFja3NFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHJlc291cmNlUGFja3NJbmZvLmhhc1NjcmlwdHMgPSBmYWxzZTtcbiAgICAgICAgcmVzb3VyY2VQYWNrc0luZm8uaGFzQWRkb25QYWNrcyA9IGZhbHNlO1xuICAgICAgICBhd2FpdCBjb25uZWN0aW9uLnNlbmREYXRhUGFja2V0KHJlc291cmNlUGFja3NJbmZvLCB0cnVlKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLE1BQXFCLFlBQTJELENBQUE7QUFBQSxFQUM1RSxPQUFj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