diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/Account.kt b/src/main/java/de/bixilon/minosoft/data/accounts/Account.kt index fc4d3ccb9..187741df8 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/Account.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/Account.kt @@ -17,8 +17,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.observer.DataObserver.Companion.observed -import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.AbstractServer +import de.bixilon.minosoft.config.profile.storage.ProfileStorage import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -27,6 +27,7 @@ import java.util.* abstract class Account( val username: String, + @get:JsonIgnore var storage: ProfileStorage?, ) { abstract val id: String abstract val type: ResourceLocation @@ -62,15 +63,7 @@ abstract class Account( } fun save() { - // ToDo: Optimize - profiles@ for (profile in AccountProfileManager.profiles.values) { - for ((_, account) in profile.entries) { - if (account === this) { - profile.storage?.invalidate() - break@profiles - } - } - } + storage?.invalidate() } open fun fetchKey(latch: AbstractLatch?): MinecraftPrivateKey? = null diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/microsoft/MicrosoftAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/microsoft/MicrosoftAccount.kt index bbf6fb6b6..dbb004af5 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/microsoft/MicrosoftAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/microsoft/MicrosoftAccount.kt @@ -21,6 +21,7 @@ import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.latch.AbstractLatch.Companion.child import de.bixilon.kutil.time.TimeUtil.millis import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager +import de.bixilon.minosoft.config.profile.storage.ProfileStorage import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.accounts.AccountStates import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties @@ -39,12 +40,13 @@ import java.util.* class MicrosoftAccount( override val uuid: UUID, + storage: ProfileStorage?, username: String, @field:JsonProperty private var msa: MicrosoftTokens, @field:JsonProperty private var minecraft: MinecraftTokens, @field:JsonProperty var key: MinecraftPrivateKey? = null, override val properties: PlayerProperties?, -) : Account(username) { +) : Account(username, storage) { override val id: String = uuid.toString() override val type: ResourceLocation = identifier diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/mojang/MojangAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/mojang/MojangAccount.kt index 131400c02..afed8dcfe 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/mojang/MojangAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/mojang/MojangAccount.kt @@ -45,7 +45,7 @@ class MojangAccount( val email: String, @field:JsonProperty private var accessToken: String, override val properties: PlayerProperties?, -) : Account(username) { +) : Account(username, null) { @Transient private var refreshed: Boolean = false override val type: ResourceLocation get() = identifier diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/offline/OfflineAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/offline/OfflineAccount.kt index 5f55a8bf0..a0761362c 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/offline/OfflineAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/offline/OfflineAccount.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.accounts.types.offline import com.fasterxml.jackson.annotation.JsonIgnore import de.bixilon.kutil.latch.AbstractLatch +import de.bixilon.minosoft.config.profile.storage.ProfileStorage import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.accounts.AccountStates import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties @@ -23,7 +24,7 @@ import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation import java.util.* -class OfflineAccount(username: String) : Account(username) { +class OfflineAccount(username: String, storage: ProfileStorage?) : Account(username, storage) { override val id: String = username override val uuid: UUID = UUID("OfflinePlayer:$username".hashCode().toLong(), 0L) // ToDo override val type: ResourceLocation = identifier diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt index a061df9c5..8df39b57d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt @@ -78,6 +78,7 @@ class MicrosoftAddController( try { val account = MicrosoftOAuthUtils.loginToMicrosoftAccount(response, latch) + account.storage = profile.storage profile.entries[account.id] = account if (this.account == null) { profile.selected = account diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt index 60be2ab06..ae428155e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -80,9 +80,10 @@ class OfflineAddController( if (addButtonFX.isDisable) { return } - val account = OfflineAccount(usernameFX.text) - accountProfile.entries[account.id] = account - accountProfile.selected = account + val profile = accountProfile + val account = OfflineAccount(usernameFX.text, profile.storage) + profile.entries[account.id] = account + profile.selected = account accountController.refreshList() close() diff --git a/src/main/java/de/bixilon/minosoft/terminal/commands/AccountManageCommand.kt b/src/main/java/de/bixilon/minosoft/terminal/commands/AccountManageCommand.kt index a30400630..91d557960 100644 --- a/src/main/java/de/bixilon/minosoft/terminal/commands/AccountManageCommand.kt +++ b/src/main/java/de/bixilon/minosoft/terminal/commands/AccountManageCommand.kt @@ -58,7 +58,7 @@ object AccountManageCommand : Command { if (!ProtocolDefinition.MINECRAFT_NAME_VALIDATOR.matcher(name).matches()) throw CommandException("Invalid username: $name") val profile = AccountProfileManager.selected if (profile.entries.containsKey(name)) throw CommandException("Account does already exist!") - val account = OfflineAccount(name) + val account = OfflineAccount(name, profile.storage) profile.entries[account.id] = account profile.selected = account stack.print.print("Successfully created and selected offline account ${account.username}!") @@ -72,6 +72,7 @@ object AccountManageCommand : Command { stack.print.print("Logging in into microsoft account...") val account = MicrosoftOAuthUtils.loginToMicrosoftAccount(it) val profile = AccountProfileManager.selected + account.storage = profile.storage profile.entries[account.id] = account profile.selected = account diff --git a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt index eb5aa401d..f4926fb1f 100644 --- a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt +++ b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt @@ -147,6 +147,7 @@ object MicrosoftOAuthUtils { val account = MicrosoftAccount( uuid = profile.uuid, + storage = null, username = profile.name, msa = msaTokens, minecraft = minecraftToken,