diff --git a/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt b/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt index dd1390c56..6a40db96a 100644 --- a/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt +++ b/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt @@ -16,6 +16,7 @@ package de.bixilon.minosoft.assets import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.assets.minecraft.JarAssetsManager +import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.packFormat import de.bixilon.minosoft.assets.minecraft.index.IndexAssetsManager import de.bixilon.minosoft.assets.multi.PriorityAssetsManager import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties @@ -37,7 +38,7 @@ object AssetsLoader { } if (!profile.assets.disableIndexAssets) { - assetsManager += IndexAssetsManager(profile, property.indexVersion, property.indexHash, profile.assets.indexAssetsTypes.toSet()) + assetsManager += IndexAssetsManager(profile, property.indexVersion, property.indexHash, profile.assets.indexAssetsTypes.toSet(), version.packFormat) } if (!profile.assets.disableJarAssets) { assetsManager += JarAssetsManager(property.jarAssetsHash, property.clientJarHash, profile, version, property.jarAssetsTarBytes ?: JarAssetsManager.DEFAULT_TAR_BYTES) diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt index a7c7ef04a..4e09fa96d 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/JarAssetsManager.kt @@ -18,6 +18,9 @@ import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.string.StringUtil.formatPlaceholder import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.minosoft.assets.InvalidAssetException +import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.packFormat +import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties +import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties import de.bixilon.minosoft.assets.util.FileAssetsTypes import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.HashTypes @@ -58,6 +61,8 @@ class JarAssetsManager( override var loaded: Boolean = false private set private var assets: MutableMap = mutableMapOf() + override val properties = AssetsManagerProperties(PackProperties(format = version.packFormat)) + private fun tryLoadAssets(): Boolean { val assets = FileAssetsUtil.readOrNull(jarAssetsHash, FileAssetsTypes.GAME, verify = profile.verify)?.let { ByteArrayInputStream(it).readArchive() } ?: return false diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt new file mode 100644 index 000000000..4c7117a96 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt @@ -0,0 +1,57 @@ +/* + * Minosoft + * 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. + * + * 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.assets.minecraft + +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_15W31A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_16W32A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_18W48A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_15_PRE1 +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_16_2_RC1 +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_19_4_PRE1 +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_20_2_PRE2 +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_20W45A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_21W39A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_22W11A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_22W42A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_22W45A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W14A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W17A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W31A +import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W32A +import de.bixilon.minosoft.protocol.versions.Version + +object MinecraftAssetsVersion { + + val Version.packFormat: Int + get() = when { + versionId < V_15W31A -> 1 + versionId < V_16W32A -> 2 + versionId < V_18W48A -> 3 + versionId < V_1_15_PRE1 -> 4 + versionId < V_1_16_2_RC1 -> 5 // TODO: That should be lower, walls changed earlier + versionId < V_20W45A -> 6 + versionId < V_21W39A -> 7 + versionId < V_22W11A -> 8 + versionId < V_22W42A -> 9 + versionId < V_22W45A -> 11 + versionId < V_1_19_4_PRE1 -> 12 + versionId < V_23W14A -> 13 + versionId < V_23W17A -> 14 + versionId < V_23W31A -> 15 + versionId < V_23W32A -> 16 + versionId < V_1_20_2_PRE2 -> 17 + else -> 18 + } + +} diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt index cb2303ac7..3353aab90 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt @@ -25,6 +25,8 @@ import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.minosoft.assets.error.AssetCorruptedError import de.bixilon.minosoft.assets.error.AssetNotFoundError import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsManager +import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties +import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties import de.bixilon.minosoft.assets.util.FileAssetsTypes import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName @@ -49,11 +51,13 @@ class IndexAssetsManager( private val assetsVersion: String, private val indexHash: String, private val types: Set, + packFormat: Int, ) : MinecraftAssetsManager { private val verify: Boolean = profile.verify private val assets: MutableMap = synchronizedMapOf() override var loaded: Boolean = false private set + override val properties = AssetsManagerProperties(PackProperties(format = packFormat)) private fun readAssetsIndex(): Map { return FileAssetsUtil.readOrNull(indexHash, FileAssetsTypes.GAME, verify = verify)?.let { ByteArrayInputStream(it).readJsonObject() } ?: downloadAssetsIndex() diff --git a/src/main/java/de/bixilon/minosoft/assets/properties/manager/pack/PackProperties.kt b/src/main/java/de/bixilon/minosoft/assets/properties/manager/pack/PackProperties.kt index 7b167ae34..307c94d82 100644 --- a/src/main/java/de/bixilon/minosoft/assets/properties/manager/pack/PackProperties.kt +++ b/src/main/java/de/bixilon/minosoft/assets/properties/manager/pack/PackProperties.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2021 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. * @@ -18,5 +18,5 @@ import de.bixilon.minosoft.data.text.ChatComponent data class PackProperties( @JsonProperty("pack_format") val format: Int, - val description: ChatComponent, + val description: ChatComponent = ChatComponent.EMPTY, )