From 08fe1267ac5622e215bdd97fe76aedf59211dab4 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 10 Oct 2022 16:50:36 +0200 Subject: [PATCH] rework language loading, allow language inheritance --- src/main/java/de/bixilon/minosoft/Minosoft.kt | 6 +- .../bixilon/minosoft/assets/AssetsManager.kt | 18 ++++ .../assets/multi/PriorityAssetsManager.kt | 7 ++ .../profile/profiles/eros/general/GeneralC.kt | 4 +- .../minosoft/data/accounts/AccountStates.kt | 2 +- .../minosoft/data/language/LanguageManager.kt | 92 ------------------- .../minosoft/data/language/LanguageUtil.kt | 89 ++++++++++++++++++ .../data/language/{ => lang}/Language.kt | 16 ++-- .../{Description.kt => lang/LanguageData.kt} | 7 +- .../data/language/lang/LanguageList.kt | 43 +++++++++ .../data/language/manager/LanguageManager.kt | 45 +++++++++ .../{ => manager}/MultiLanguageManager.kt | 10 +- .../language/{ => translate}/Translatable.kt | 4 +- .../language/{ => translate}/Translated.kt | 4 +- .../language/{ => translate}/Translator.kt | 4 +- .../data/registries/ResourceLocation.kt | 2 +- .../data/registries/effects/StatusEffect.kt | 2 +- .../data/registries/entities/EntityType.kt | 2 +- .../data/registries/item/items/Item.kt | 2 +- .../data/registries/statistics/Statistic.kt | 2 +- .../data/registries/versions/Version.kt | 5 + .../minosoft/data/text/BaseComponent.kt | 2 +- .../minosoft/data/text/ChatComponent.kt | 6 +- .../dialog/profiles/ProfileSelectDialog.kt | 2 +- .../gui/eros/main/account/ErosAccountType.kt | 2 +- .../main/play/server/type/types/ServerType.kt | 4 +- .../network/connection/play/PlayConnection.kt | 7 +- .../connection/play/PlayConnectionStates.kt | 2 +- .../clientsettings/ClientSettingsManager.kt | 4 +- .../status/StatusConnectionStates.kt | 4 +- 30 files changed, 252 insertions(+), 147 deletions(-) delete mode 100644 src/main/java/de/bixilon/minosoft/data/language/LanguageManager.kt rename src/main/java/de/bixilon/minosoft/data/language/{ => lang}/Language.kt (87%) rename src/main/java/de/bixilon/minosoft/data/language/{Description.kt => lang/LanguageData.kt} (85%) create mode 100644 src/main/java/de/bixilon/minosoft/data/language/lang/LanguageList.kt create mode 100644 src/main/java/de/bixilon/minosoft/data/language/manager/LanguageManager.kt rename src/main/java/de/bixilon/minosoft/data/language/{ => manager}/MultiLanguageManager.kt (90%) rename src/main/java/de/bixilon/minosoft/data/language/{ => translate}/Translatable.kt (90%) rename src/main/java/de/bixilon/minosoft/data/language/{ => translate}/Translated.kt (90%) rename src/main/java/de/bixilon/minosoft/data/language/{ => translate}/Translator.kt (93%) diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index ec0831f34..da4192543 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -29,8 +29,8 @@ import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager -import de.bixilon.minosoft.data.language.LanguageManager.Companion.load -import de.bixilon.minosoft.data.language.MultiLanguageManager +import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.data.language.manager.MultiLanguageManager import de.bixilon.minosoft.data.registries.DefaultRegistries import de.bixilon.minosoft.data.registries.versions.Versions import de.bixilon.minosoft.gui.eros.Eros @@ -132,7 +132,7 @@ object Minosoft { val language = ErosProfileManager.selected.general.language ErosProfileManager.selected.general::language.profileWatch(this, true) { Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Loading language files (${language})" } - LANGUAGE_MANAGER.translators[ProtocolDefinition.MINOSOFT_NAMESPACE] = load(it, null, MINOSOFT_ASSETS_MANAGER, minosoft("language/")) + LANGUAGE_MANAGER.translators[ProtocolDefinition.MINOSOFT_NAMESPACE] = LanguageUtil.load(it, null, MINOSOFT_ASSETS_MANAGER, minosoft("language/")) Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Language files loaded!" } } } diff --git a/src/main/java/de/bixilon/minosoft/assets/AssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/AssetsManager.kt index 9527119e5..7c29aab4b 100644 --- a/src/main/java/de/bixilon/minosoft/assets/AssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/AssetsManager.kt @@ -51,6 +51,24 @@ interface AssetsManager { */ fun getOrNull(path: ResourceLocation): InputStream? + fun getAllOrNull(path: ResourceLocation): List? { + val list = mutableListOf() + getAll(path, list) + if (list.isEmpty()) { + return null + } + return list + } + + @Throws(FileNotFoundException::class) + fun getAll(path: ResourceLocation): List { + return getAllOrNull(path) ?: throw FileNotFoundException("Can not find any assets matching $path!") + } + + fun getAll(path: ResourceLocation, list: MutableList) { + list += getOrNull(path) ?: return + } + /** * Loads all assets */ diff --git a/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt index f8433bf41..d9c7755ec 100644 --- a/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt @@ -75,6 +75,13 @@ class PriorityAssetsManager( return null } + override fun getAll(path: ResourceLocation, list: MutableList) { + val managers = this.managers[path.namespace] ?: return + for (manager in managers) { + manager.getAll(path, list) + } + } + override fun load(latch: CountUpAndDownLatch) { for ((_, managers) in managers) { for (manager in managers) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/general/GeneralC.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/general/GeneralC.kt index 1e8b214da..467151a99 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/general/GeneralC.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/general/GeneralC.kt @@ -20,7 +20,7 @@ import de.bixilon.minosoft.config.profile.profiles.account.AccountProfile import de.bixilon.minosoft.config.profile.profiles.account.AccountProfileManager import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.mapDelegate -import de.bixilon.minosoft.data.language.LanguageManager +import de.bixilon.minosoft.data.language.LanguageUtil import de.bixilon.minosoft.data.registries.ResourceLocation import java.util.* @@ -28,7 +28,7 @@ class GeneralC { /** * Language to use for eros. This is also the fallback language for other profiles */ - var language: String by delegate(Locale.getDefault()?.fullName ?: LanguageManager.FALLBACK_LANGUAGE) + var language: String by delegate(Locale.getDefault()?.fullName ?: LanguageUtil.FALLBACK_LANGUAGE) @get:JsonProperty("account_profile") private var _accountProfile: String? by delegate(null) diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/AccountStates.kt b/src/main/java/de/bixilon/minosoft/data/accounts/AccountStates.kt index a6e627231..882f7dc06 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/AccountStates.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/AccountStates.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.data.accounts -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation diff --git a/src/main/java/de/bixilon/minosoft/data/language/LanguageManager.kt b/src/main/java/de/bixilon/minosoft/data/language/LanguageManager.kt deleted file mode 100644 index 50c6cd315..000000000 --- a/src/main/java/de/bixilon/minosoft/data/language/LanguageManager.kt +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Minosoft - * Copyright (C) 2020-2022 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. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ - -package de.bixilon.minosoft.data.language - -import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf -import de.bixilon.kutil.exception.ExceptionUtil.tryCatch -import de.bixilon.minosoft.assets.AssetsManager -import de.bixilon.minosoft.assets.util.FileUtil.readAsString -import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject -import de.bixilon.minosoft.data.registries.ResourceLocation -import de.bixilon.minosoft.data.registries.versions.Version -import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.data.text.TextComponent -import de.bixilon.minosoft.protocol.protocol.ProtocolVersions -import java.io.FileNotFoundException - -class LanguageManager( - private val languages: MutableList = synchronizedListOf(), -) : Translator { - - override fun canTranslate(key: ResourceLocation?): Boolean { - for (language in languages) { - if (language.canTranslate(key)) { - return true - } - } - return false - } - - override fun translate(key: ResourceLocation?, parent: TextComponent?, vararg data: Any?): ChatComponent { - for (language in languages) { - if (!language.canTranslate(key)) { - continue - } - return language.translate(key, parent, *data) - } - - if (data.isEmpty()) { - return ChatComponent.of(key.toString(), null, parent) - } - return ChatComponent.of(key.toString() + "->" + data.contentToString(), null, parent) - } - - companion object { - const val FALLBACK_LANGUAGE = "en_US" - - fun load(language: String, version: Version?, assetsManager: AssetsManager, path: ResourceLocation = ResourceLocation("lang/")): LanguageManager { - - fun loadMinecraftLanguage(language: String): Language { - val data: MutableMap = mutableMapOf() - - if (version != null && version.versionId >= ProtocolVersions.V_18W02A) { - for ((key, value) in assetsManager[ResourceLocation(path.namespace, path.path + "${language.lowercase()}.json")].readJsonObject()) { - data[ResourceLocation(key)] = value.toString() - } - } else { - val lines = assetsManager[ResourceLocation(path.namespace, path.path + "${language.lowercase()}.lang")].readAsString().lineSequence() - - for (line in lines) { - if (line.isBlank() || line.startsWith("#")) { - continue - } - val split = line.split('=', limit = 2) - data[ResourceLocation(split[0])] = split[1].replace("\\n", "\n") - } - } - - return Language(language, data) - } - - val languages: MutableList = mutableListOf() - - if (language != FALLBACK_LANGUAGE) { - tryCatch(FileNotFoundException::class.java, executor = { languages += loadMinecraftLanguage(language) }) - } - languages += loadMinecraftLanguage(FALLBACK_LANGUAGE) - - return LanguageManager(languages) - } - } -} diff --git a/src/main/java/de/bixilon/minosoft/data/language/LanguageUtil.kt b/src/main/java/de/bixilon/minosoft/data/language/LanguageUtil.kt index 37b5f4d11..ac0aab8a7 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/LanguageUtil.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/LanguageUtil.kt @@ -13,11 +13,28 @@ package de.bixilon.minosoft.data.language +import de.bixilon.kutil.exception.ExceptionUtil +import de.bixilon.kutil.json.JsonObject +import de.bixilon.minosoft.assets.AssetsManager +import de.bixilon.minosoft.assets.util.FileUtil.readAsString +import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject +import de.bixilon.minosoft.data.language.lang.Language +import de.bixilon.minosoft.data.language.lang.LanguageData +import de.bixilon.minosoft.data.language.lang.LanguageList +import de.bixilon.minosoft.data.language.manager.LanguageManager +import de.bixilon.minosoft.data.language.translate.Translated +import de.bixilon.minosoft.data.language.translate.Translator +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.versions.Version +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.minosoft import de.bixilon.minosoft.util.KUtil.toResourceLocation +import java.io.FileNotFoundException object LanguageUtil { + const val FALLBACK_LANGUAGE = "en_us" fun String?.i18n(): Translated { @@ -27,4 +44,76 @@ object LanguageUtil { } return Translated(resourceLocation) } + + fun loadJsonLanguage(json: JsonObject): LanguageData { + val data: LanguageData = mutableMapOf() + + for ((key, value) in json) { + val path = ResourceLocation(key).path + data[path] = value.toString().correctValue() + } + + return data + } + + fun loadLanguage(lines: Sequence): LanguageData { + val data: LanguageData = mutableMapOf() + + for (line in lines) { + if (line.isBlank() || line.startsWith("#")) { + continue + } + val (key, value) = line.split('=', limit = 2) + val path = ResourceLocation(key).path + data[path] = value.correctValue() + } + return data + } + + private fun String.correctValue(): String { + return this.replace("\\n", "\n") + } + + fun getFallbackTranslation(key: ResourceLocation?, parent: TextComponent?, vararg data: Any?): ChatComponent { + if (data.isEmpty()) { + return ChatComponent.of(key.toString(), null, parent) + } + return ChatComponent.of(key.toString() + "->" + data.contentToString(), null, parent) + } + + fun loadLanguage(language: String, assetsManager: AssetsManager, json: Boolean, path: ResourceLocation): Translator { + val assets = assetsManager.getAll(ResourceLocation(path.namespace, path.path + language + if (json) ".json" else ".lang")) + val languages: MutableList = mutableListOf() + + for (asset in assets) { + val data = if (json) loadJsonLanguage(asset.readJsonObject()) else loadLanguage(asset.readAsString().lineSequence()) + languages += Language(language, data) + } + + + if (languages.size == 1) { + return languages.first() + } + return LanguageList(languages) + } + + + fun load(language: String, version: Version?, assetsManager: AssetsManager, path: ResourceLocation = ResourceLocation("lang/")): Translator { + val name = language.lowercase() + val json = version != null && version.jsonLanguage + + val languages: MutableList = mutableListOf() + + + if (name != FALLBACK_LANGUAGE) { + ExceptionUtil.tryCatch(FileNotFoundException::class.java, executor = { languages += loadLanguage(name, assetsManager, json, path) }) + } + languages += loadLanguage(FALLBACK_LANGUAGE, assetsManager, json, path) + + if (languages.size == 1) { + return languages.first() + } + + return LanguageManager(languages) + } } diff --git a/src/main/java/de/bixilon/minosoft/data/language/Language.kt b/src/main/java/de/bixilon/minosoft/data/language/lang/Language.kt similarity index 87% rename from src/main/java/de/bixilon/minosoft/data/language/Language.kt rename to src/main/java/de/bixilon/minosoft/data/language/lang/Language.kt index 4dfdda2f6..662880ab6 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/Language.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/lang/Language.kt @@ -10,8 +10,10 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.lang +import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.data.language.translate.Translator import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.BaseComponent import de.bixilon.minosoft.data.text.ChatComponent @@ -19,21 +21,15 @@ import de.bixilon.minosoft.data.text.TextComponent class Language( val name: String, - private val data: Map, + private val data: LanguageData, ) : Translator { override fun canTranslate(key: ResourceLocation?): Boolean { - return data.containsKey(key) + return data.containsKey(key?.namespace) } override fun translate(key: ResourceLocation?, parent: TextComponent?, vararg data: Any?): ChatComponent { - val placeholder = this.data[key] - if (placeholder == null) { - if (data.isEmpty()) { - return ChatComponent.of(key.toString(), null, parent) - } - return ChatComponent.of(key.toString() + "->" + data.contentToString(), null, parent) - } + val placeholder = this.data[key?.path] ?: return LanguageUtil.getFallbackTranslation(key, parent, data) val ret = BaseComponent() diff --git a/src/main/java/de/bixilon/minosoft/data/language/Description.kt b/src/main/java/de/bixilon/minosoft/data/language/lang/LanguageData.kt similarity index 85% rename from src/main/java/de/bixilon/minosoft/data/language/Description.kt rename to src/main/java/de/bixilon/minosoft/data/language/lang/LanguageData.kt index 3a15490a2..fc742ea78 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/Description.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/lang/LanguageData.kt @@ -11,9 +11,6 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.lang -annotation class Description( - val nameKey: String, - val translationKey: String, -) +typealias LanguageData = MutableMap diff --git a/src/main/java/de/bixilon/minosoft/data/language/lang/LanguageList.kt b/src/main/java/de/bixilon/minosoft/data/language/lang/LanguageList.kt new file mode 100644 index 000000000..da6fb7c27 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/language/lang/LanguageList.kt @@ -0,0 +1,43 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.language.lang + +import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.data.language.translate.Translator +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.data.text.TextComponent + +class LanguageList( + private val list: MutableList, +) : Translator { + + override fun canTranslate(key: ResourceLocation?): Boolean { + for (language in list) { + if (language.canTranslate(key)) { + return true + } + } + return false + } + + override fun translate(key: ResourceLocation?, parent: TextComponent?, vararg data: Any?): ChatComponent { + for (language in list) { + if (language.canTranslate(key)) { + return language.translate(key, parent, data) + } + } + return LanguageUtil.getFallbackTranslation(key, parent, data) + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/language/manager/LanguageManager.kt b/src/main/java/de/bixilon/minosoft/data/language/manager/LanguageManager.kt new file mode 100644 index 000000000..94aee567a --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/language/manager/LanguageManager.kt @@ -0,0 +1,45 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 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. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.language.manager + +import de.bixilon.kutil.collections.CollectionUtil.synchronizedListOf +import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.data.language.translate.Translator +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.data.text.TextComponent + +class LanguageManager( + private val languages: MutableList = synchronizedListOf(), +) : Translator { + + override fun canTranslate(key: ResourceLocation?): Boolean { + for (language in languages) { + if (language.canTranslate(key)) { + return true + } + } + return false + } + + override fun translate(key: ResourceLocation?, parent: TextComponent?, vararg data: Any?): ChatComponent { + for (language in languages) { + if (!language.canTranslate(key)) { + continue + } + return language.translate(key, parent, *data) + } + return LanguageUtil.getFallbackTranslation(key, parent, data) + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/language/MultiLanguageManager.kt b/src/main/java/de/bixilon/minosoft/data/language/manager/MultiLanguageManager.kt similarity index 90% rename from src/main/java/de/bixilon/minosoft/data/language/MultiLanguageManager.kt rename to src/main/java/de/bixilon/minosoft/data/language/manager/MultiLanguageManager.kt index 8d21bc308..80c5cf83c 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/MultiLanguageManager.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/manager/MultiLanguageManager.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -11,12 +11,12 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.manager +import de.bixilon.minosoft.data.language.translate.Translator import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.TextComponent -import java.util.* class MultiLanguageManager( val translators: MutableMap = mutableMapOf(), @@ -32,8 +32,4 @@ class MultiLanguageManager( return translators[key.namespace]?.translate(key, parent, *data) ?: ChatComponent.of("$key: ${data.contentToString()}") } - - fun loadLanguage(language: Locale) { - - } } diff --git a/src/main/java/de/bixilon/minosoft/data/language/Translatable.kt b/src/main/java/de/bixilon/minosoft/data/language/translate/Translatable.kt similarity index 90% rename from src/main/java/de/bixilon/minosoft/data/language/Translatable.kt rename to src/main/java/de/bixilon/minosoft/data/language/translate/Translatable.kt index 950e37d62..3f25ffdd5 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/Translatable.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/translate/Translatable.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.translate import de.bixilon.minosoft.data.registries.ResourceLocation diff --git a/src/main/java/de/bixilon/minosoft/data/language/Translated.kt b/src/main/java/de/bixilon/minosoft/data/language/translate/Translated.kt similarity index 90% rename from src/main/java/de/bixilon/minosoft/data/language/Translated.kt rename to src/main/java/de/bixilon/minosoft/data/language/translate/Translated.kt index 4a6a5200a..6b55b1bf8 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/Translated.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/translate/Translated.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2022 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.translate import de.bixilon.minosoft.data.registries.ResourceLocation diff --git a/src/main/java/de/bixilon/minosoft/data/language/Translator.kt b/src/main/java/de/bixilon/minosoft/data/language/translate/Translator.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/data/language/Translator.kt rename to src/main/java/de/bixilon/minosoft/data/language/translate/Translator.kt index d80cc4e6e..fa70f0ac1 100644 --- a/src/main/java/de/bixilon/minosoft/data/language/Translator.kt +++ b/src/main/java/de/bixilon/minosoft/data/language/translate/Translator.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.language +package de.bixilon.minosoft.data.language.translate import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent diff --git a/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt b/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt index c0b2ceab9..3ede94788 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/ResourceLocation.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.data.registries import de.bixilon.kutil.string.StringUtil.isLowercase -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import java.util.* diff --git a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt index 1d1f56986..fc6390b6d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt @@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.registries.effects import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.json.JsonUtil.toJsonObject -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.effects.attributes.EntityAttributeModifier import de.bixilon.minosoft.data.registries.registries.Registries diff --git a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt index 1fd778f07..97f6a02c9 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt @@ -23,7 +23,7 @@ import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.data.EntityData import de.bixilon.minosoft.data.entities.data.EntityDataField import de.bixilon.minosoft.data.entities.entities.Entity -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.item.items.SpawnEggItem import de.bixilon.minosoft.data.registries.registries.Registries diff --git a/src/main/java/de/bixilon/minosoft/data/registries/item/items/Item.kt b/src/main/java/de/bixilon/minosoft/data/registries/item/items/Item.kt index 3f6a3eda4..47c821598 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/item/items/Item.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/item/items/Item.kt @@ -17,7 +17,7 @@ import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.Rarities import de.bixilon.minosoft.data.container.stack.ItemStack import de.bixilon.minosoft.data.entities.entities.player.Hands -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.factory.clazz.MultiClassFactory diff --git a/src/main/java/de/bixilon/minosoft/data/registries/statistics/Statistic.kt b/src/main/java/de/bixilon/minosoft/data/registries/statistics/Statistic.kt index e81eb17f7..66f9c9e4b 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/statistics/Statistic.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/statistics/Statistic.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.data.registries.statistics import de.bixilon.kutil.cast.CastUtil.unsafeCast -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem diff --git a/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt b/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt index 4babc4513..ae6ac1c2f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt @@ -57,6 +57,10 @@ class Version( return name } + operator fun compareTo(versionId: Int): Int { + return this.versionId.compareTo(versionId) + } + val flattened: Boolean get() = versionId >= ProtocolDefinition.FLATTING_VERSION_ID val hasOffhand: Boolean get() = versionId >= V_15W31A val maxPacketLength get() = if (versionId < ProtocolVersions.V_1_17_1_RC2) 1 shl 21 else 1 shl 23 @@ -64,4 +68,5 @@ class Version( val hasAttackCooldown get() = versionId >= ProtocolVersions.V_15W34A val requiresSignedChat get() = versionId >= ProtocolVersions.V_22W17A val supportsRGBChat get() = versionId >= ProtocolVersions.V_20W17A + val jsonLanguage get() = versionId >= ProtocolVersions.V_18W02A } diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt index 547152b27..03c394064 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt @@ -18,7 +18,7 @@ import de.bixilon.kutil.json.JsonUtil.toJsonList import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.url.URLUtil.toURL -import de.bixilon.minosoft.data.language.Translator +import de.bixilon.minosoft.data.language.translate.Translator import de.bixilon.minosoft.data.text.events.click.ClickEvent import de.bixilon.minosoft.data.text.events.click.ClickEvents import de.bixilon.minosoft.data.text.events.click.OpenURLClickEvent diff --git a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt index de61c0b08..70751b759 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger and contributors + * Copyright (C) 2020-2022 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. * @@ -15,8 +15,8 @@ package de.bixilon.minosoft.data.text import com.fasterxml.jackson.core.JacksonException import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.Minosoft -import de.bixilon.minosoft.data.language.Translatable -import de.bixilon.minosoft.data.language.Translator +import de.bixilon.minosoft.data.language.translate.Translatable +import de.bixilon.minosoft.data.language.translate.Translator import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.formatting.color.RGBColor import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/profiles/ProfileSelectDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/profiles/ProfileSelectDialog.kt index 0c0ff9a8f..e02640aeb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/profiles/ProfileSelectDialog.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/profiles/ProfileSelectDialog.kt @@ -18,7 +18,7 @@ import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.profiles.Profile -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.eros.controller.DialogController import de.bixilon.minosoft.gui.eros.util.JavaFXUtil diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/ErosAccountType.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/ErosAccountType.kt index 51f74b900..2e8edb2e2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/ErosAccountType.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/ErosAccountType.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.eros.main.account import de.bixilon.minosoft.data.accounts.Account -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocationAble import org.kordamp.ikonli.Ikon diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/types/ServerType.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/types/ServerType.kt index 8fb783b3f..29a067b26 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/types/ServerType.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/server/type/types/ServerType.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.eros.main.play.server.type.types import de.bixilon.minosoft.config.profile.profiles.eros.server.entries.Server -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.gui.eros.main.play.server.card.ServerCard import org.kordamp.ikonli.Ikon diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt index 301c8053c..71443d364 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnection.kt @@ -30,7 +30,8 @@ import de.bixilon.minosoft.data.chat.ChatTextPositions import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity import de.bixilon.minosoft.data.entities.entities.player.local.PlayerPrivateKey import de.bixilon.minosoft.data.entities.entities.player.tab.TabList -import de.bixilon.minosoft.data.language.LanguageManager +import de.bixilon.minosoft.data.language.LanguageUtil +import de.bixilon.minosoft.data.language.translate.Translator import de.bixilon.minosoft.data.physics.CollisionDetector import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocationAble @@ -84,7 +85,7 @@ class PlayConnection( lateinit var assetsManager: AssetsManager private set val tags: MutableMap>> = synchronizedMapOf() - lateinit var language: LanguageManager + lateinit var language: Translator @Deprecated("will be removed once split into modules") @@ -202,7 +203,7 @@ class PlayConnection( state = PlayConnectionStates.LOADING - language = LanguageManager.load(profiles.connection.language ?: profiles.eros.general.language, version, assetsManager) + language = LanguageUtil.load(profiles.connection.language ?: profiles.eros.general.language, version, assetsManager) player = LocalPlayerEntity(account, this, privateKey) diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionStates.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionStates.kt index 8c2e4b1df..a9e842244 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionStates.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/PlayConnectionStates.kt @@ -15,7 +15,7 @@ package de.bixilon.minosoft.protocol.network.connection.play import de.bixilon.kutil.enums.EnumUtil import de.bixilon.kutil.enums.ValuesEnum -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/clientsettings/ClientSettingsManager.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/clientsettings/ClientSettingsManager.kt index 6ce393483..2743a0049 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/clientsettings/ClientSettingsManager.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/play/clientsettings/ClientSettingsManager.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.protocol.network.connection.play.clientsettings import de.bixilon.minosoft.config.profile.delegate.watcher.SimpleProfileDelegateWatcher.Companion.profileWatch -import de.bixilon.minosoft.data.language.LanguageManager +import de.bixilon.minosoft.data.language.LanguageUtil import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.c2s.play.SettingsC2SP import de.bixilon.minosoft.protocol.protocol.ProtocolStates @@ -64,7 +64,7 @@ class ClientSettingsManager( return } this.language = language - connection.language = LanguageManager.load(language, connection.version, connection.assetsManager) + connection.language = LanguageUtil.load(language, connection.version, connection.assetsManager) sendClientSettings() } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnectionStates.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnectionStates.kt index 8fe885265..e735bc1f9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnectionStates.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/status/StatusConnectionStates.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 Moritz Zwerger + * Copyright (C) 2020-2022 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.protocol.network.connection.status -import de.bixilon.minosoft.data.language.Translatable +import de.bixilon.minosoft.data.language.translate.Translatable import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation