assets manager: provide packFormat

This commit is contained in:
Moritz Zwerger 2023-09-23 00:08:32 +02:00
parent 6955fae49e
commit dad2e82285
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 70 additions and 3 deletions

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.assets
import de.bixilon.kutil.latch.AbstractLatch import de.bixilon.kutil.latch.AbstractLatch
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.assets.minecraft.JarAssetsManager 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.minecraft.index.IndexAssetsManager
import de.bixilon.minosoft.assets.multi.PriorityAssetsManager import de.bixilon.minosoft.assets.multi.PriorityAssetsManager
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
@ -37,7 +38,7 @@ object AssetsLoader {
} }
if (!profile.assets.disableIndexAssets) { 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) { if (!profile.assets.disableJarAssets) {
assetsManager += JarAssetsManager(property.jarAssetsHash, property.clientJarHash, profile, version, property.jarAssetsTarBytes ?: JarAssetsManager.DEFAULT_TAR_BYTES) assetsManager += JarAssetsManager(property.jarAssetsHash, property.clientJarHash, profile, version, property.jarAssetsTarBytes ?: JarAssetsManager.DEFAULT_TAR_BYTES)

View File

@ -18,6 +18,9 @@ import de.bixilon.kutil.latch.AbstractLatch
import de.bixilon.kutil.string.StringUtil.formatPlaceholder import de.bixilon.kutil.string.StringUtil.formatPlaceholder
import de.bixilon.kutil.url.URLUtil.toURL import de.bixilon.kutil.url.URLUtil.toURL
import de.bixilon.minosoft.assets.InvalidAssetException 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.FileAssetsTypes
import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileAssetsUtil
import de.bixilon.minosoft.assets.util.HashTypes import de.bixilon.minosoft.assets.util.HashTypes
@ -58,6 +61,8 @@ class JarAssetsManager(
override var loaded: Boolean = false override var loaded: Boolean = false
private set private set
private var assets: MutableMap<String, ByteArray> = mutableMapOf() private var assets: MutableMap<String, ByteArray> = mutableMapOf()
override val properties = AssetsManagerProperties(PackProperties(format = version.packFormat))
private fun tryLoadAssets(): Boolean { private fun tryLoadAssets(): Boolean {
val assets = FileAssetsUtil.readOrNull(jarAssetsHash, FileAssetsTypes.GAME, verify = profile.verify)?.let { ByteArrayInputStream(it).readArchive() } ?: return false val assets = FileAssetsUtil.readOrNull(jarAssetsHash, FileAssetsTypes.GAME, verify = profile.verify)?.let { ByteArrayInputStream(it).readArchive() } ?: return false

View File

@ -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 <https://www.gnu.org/licenses/>.
*
* 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
}
}

View File

@ -25,6 +25,8 @@ import de.bixilon.kutil.url.URLUtil.toURL
import de.bixilon.minosoft.assets.error.AssetCorruptedError import de.bixilon.minosoft.assets.error.AssetCorruptedError
import de.bixilon.minosoft.assets.error.AssetNotFoundError import de.bixilon.minosoft.assets.error.AssetNotFoundError
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsManager 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.FileAssetsTypes
import de.bixilon.minosoft.assets.util.FileAssetsUtil import de.bixilon.minosoft.assets.util.FileAssetsUtil
import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName import de.bixilon.minosoft.assets.util.FileAssetsUtil.toAssetName
@ -49,11 +51,13 @@ class IndexAssetsManager(
private val assetsVersion: String, private val assetsVersion: String,
private val indexHash: String, private val indexHash: String,
private val types: Set<IndexAssetsType>, private val types: Set<IndexAssetsType>,
packFormat: Int,
) : MinecraftAssetsManager { ) : MinecraftAssetsManager {
private val verify: Boolean = profile.verify private val verify: Boolean = profile.verify
private val assets: MutableMap<ResourceLocation, AssetsProperty> = synchronizedMapOf() private val assets: MutableMap<ResourceLocation, AssetsProperty> = synchronizedMapOf()
override var loaded: Boolean = false override var loaded: Boolean = false
private set private set
override val properties = AssetsManagerProperties(PackProperties(format = packFormat))
private fun readAssetsIndex(): Map<String, Any> { private fun readAssetsIndex(): Map<String, Any> {
return FileAssetsUtil.readOrNull(indexHash, FileAssetsTypes.GAME, verify = verify)?.let { ByteArrayInputStream(it).readJsonObject() } ?: downloadAssetsIndex() return FileAssetsUtil.readOrNull(indexHash, FileAssetsTypes.GAME, verify = verify)?.let { ByteArrayInputStream(it).readJsonObject() } ?: downloadAssetsIndex()

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * 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. * 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( data class PackProperties(
@JsonProperty("pack_format") val format: Int, @JsonProperty("pack_format") val format: Int,
val description: ChatComponent, val description: ChatComponent = ChatComponent.EMPTY,
) )