import 'dart:convert'; import 'package:libac_flutter/nbt/NbtUtils.dart'; import 'package:libac_flutter/nbt/Tag.dart'; import 'package:libac_flutter/nbt/impl/CompoundTag.dart'; import 'package:libac_flutter/nbt/impl/StringTag.dart'; import 'package:libac_flutter/packets/packets.dart'; import 'package:libac_flutter/utils/uuid/NbtUUID.dart'; import 'package:libac_flutter/utils/uuid/UUID.dart'; import 'package:servermanager/structs/settings.dart'; class ClientPackets { static void register() { PacketRegistry reg = PacketRegistry(); reg.register(C2SLoginPacket(), () { return C2SLoginPacket(); }); } } class C2SLoginPacket implements IPacket { String username = ""; String password = ""; @override void decodeJson(String params) { fromJson(json.decode(params)); } @override void decodeTag(Tag tag) { CompoundTag ct = tag.asCompoundTag(); username = ct.get("username")!.asString(); password = ct.get("password")!.asString(); } @override NetworkDirection direction() { return NetworkDirection.ClientToServer; } @override String encodeJson() { return json.encode(toJson()); } @override Tag encodeTag() { CompoundTag tag = CompoundTag(); tag.put("username", StringTag.valueOf(username)); tag.put("password", StringTag.valueOf(password)); return tag; } @override void fromJson(Map js) { username = js['username'] as String; password = js['password'] as String; } @override String getChannelID() { return "Login"; } @override Future handleServerPacket() async { S2CResponse response = S2CResponse(); // Attempt to log in. Settings settings = Settings(); if (settings.serverLoginCreds.username == username && settings.serverLoginCreds.password == password) { NbtUtils.writeBoolean(response.contents, "valid", true); settings.remoteLoginToken = UUID.generate(4); NbtUtils.writeUUID(response.contents, "token", NbtUUID.fromUUID(settings.remoteLoginToken)); } else { NbtUtils.writeBoolean(response.contents, "valid", false); } return PacketResponse(replyDataTag: response.encodeTag().asCompoundTag()); } @override Map toJson() { return {"username": username, "password": password}; } @override Future handleClientPacket() async {} }