mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 02:15:34 -04:00
resource profile: provide pack format
This commit is contained in:
parent
73b9d4c541
commit
f1f18e2c92
@ -14,6 +14,9 @@
|
||||
package de.bixilon.minosoft.assets
|
||||
|
||||
import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties
|
||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.InputStream
|
||||
@ -36,4 +39,12 @@ object TestAssetsManager : AssetsManager {
|
||||
}
|
||||
|
||||
override fun getAssetsManager(path: ResourceLocation) = null
|
||||
|
||||
|
||||
fun AssetsManager.box(packFormat: Int = 0): ConnectionAssetsManager {
|
||||
val manager = ConnectionAssetsManager(AssetsManagerProperties(PackProperties(0)))
|
||||
manager += this
|
||||
|
||||
return manager
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.models
|
||||
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.MemoryAssetsManager
|
||||
import de.bixilon.minosoft.assets.TestAssetsManager.box
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.ModelElement
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.state.apply.SingleBlockStateApply
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.BakedModel
|
||||
@ -43,7 +44,7 @@ object ModelTestUtil {
|
||||
for ((name, value) in files) {
|
||||
assets.push(name.toResourceLocation().model(), value)
|
||||
}
|
||||
this.block::assets.forceSet(assets)
|
||||
this.block::assets.forceSet(assets.box())
|
||||
|
||||
return assets
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec2.Vec2i
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.assets.MemoryAssetsManager
|
||||
import de.bixilon.minosoft.assets.TestAssetsManager.box
|
||||
import de.bixilon.minosoft.data.direction.Directions
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.models.block.element.face.ModelFace
|
||||
@ -38,7 +39,7 @@ object BakedModelTestUtil {
|
||||
for (name in names) {
|
||||
assets.push(name.toResourceLocation().texture(), texture)
|
||||
}
|
||||
connection::assetsManager.forceSet(assets)
|
||||
connection::assetsManager.forceSet(assets.box())
|
||||
val rendering = Rendering(connection)
|
||||
rendering.context.textures::debugTexture.forceSet(MemoryTexture(Vec2i(0, 0)))
|
||||
|
||||
|
@ -16,7 +16,10 @@ package de.bixilon.minosoft.protocol.network.connection.play
|
||||
import de.bixilon.kotlinglm.pow
|
||||
import de.bixilon.kutil.observer.DataObserver
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.TestAssetsManager
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
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.camera.ConnectionCamera
|
||||
import de.bixilon.minosoft.config.profile.ProfileTestUtil.createProfiles
|
||||
import de.bixilon.minosoft.data.accounts.types.test.TestAccount
|
||||
@ -60,7 +63,7 @@ object ConnectionTestUtil {
|
||||
connection::network.forceSet(TestNetwork())
|
||||
connection::events.forceSet(EventMaster())
|
||||
connection::profiles.forceSet(profiles)
|
||||
connection::assetsManager.forceSet(TestAssetsManager)
|
||||
connection::assetsManager.forceSet(ConnectionAssetsManager(AssetsManagerProperties(PackProperties(version.packFormat))))
|
||||
connection::state.forceSet(DataObserver(PlayConnectionStates.PLAYING))
|
||||
connection::tags.forceSet(TagManager())
|
||||
connection::legacyTags.forceSet(FALLBACK_TAGS)
|
||||
|
@ -15,10 +15,12 @@ package de.bixilon.minosoft.assets
|
||||
|
||||
import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
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.manager.AssetsManagerProperties
|
||||
import de.bixilon.minosoft.assets.properties.manager.pack.PackProperties
|
||||
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
|
||||
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperty
|
||||
import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile
|
||||
@ -26,16 +28,31 @@ import de.bixilon.minosoft.protocol.versions.Version
|
||||
|
||||
object AssetsLoader {
|
||||
|
||||
fun create(profile: ResourcesProfile, version: Version, latch: AbstractLatch, property: AssetsVersionProperty = AssetsVersionProperties[version] ?: throw IllegalAccessException("$version has no assets!")): AssetsManager {
|
||||
val assetsManager = PriorityAssetsManager()
|
||||
private fun ResourcesProfile.createPackProperties(version: Version): AssetsManagerProperties {
|
||||
var packFormat = assets.packFormat
|
||||
if (packFormat < 0) {
|
||||
packFormat = version.packFormat
|
||||
}
|
||||
|
||||
return AssetsManagerProperties(PackProperties(packFormat))
|
||||
}
|
||||
|
||||
private fun ConnectionAssetsManager.addPacks(profile: ResourcesProfile, latch: AbstractLatch) {
|
||||
for (resourcePack in profile.assets.resourcePacks.reversed()) {
|
||||
val manager = resourcePack.type.creator.invoke(resourcePack)
|
||||
manager.load(latch)
|
||||
this += manager
|
||||
}
|
||||
}
|
||||
|
||||
fun create(profile: ResourcesProfile, version: Version, latch: AbstractLatch, property: AssetsVersionProperty = AssetsVersionProperties[version] ?: throw IllegalAccessException("$version has no assets!")): ConnectionAssetsManager {
|
||||
val properties = profile.createPackProperties(version)
|
||||
|
||||
val assetsManager = ConnectionAssetsManager(properties)
|
||||
|
||||
assetsManager += Minosoft.OVERRIDE_ASSETS_MANAGER
|
||||
for (resourcePack in profile.assets.resourcePacks.reversed()) {
|
||||
resourcePack.type.creator(resourcePack).let {
|
||||
it.load(latch)
|
||||
assetsManager += it
|
||||
}
|
||||
}
|
||||
|
||||
assetsManager.addPacks(profile, latch)
|
||||
|
||||
if (!profile.assets.disableIndexAssets) {
|
||||
assetsManager += IndexAssetsManager(profile, property.indexVersion, property.indexHash, profile.assets.indexAssetsTypes.toSet(), version.packFormat)
|
||||
|
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* 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.connection
|
||||
|
||||
import de.bixilon.minosoft.assets.multi.PriorityAssetsManager
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
|
||||
class ConnectionAssetsManager(
|
||||
override val properties: AssetsManagerProperties,
|
||||
) : PriorityAssetsManager()
|
@ -32,6 +32,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_23W32A
|
||||
import de.bixilon.minosoft.protocol.versions.Version
|
||||
|
||||
object MinecraftAssetsVersion {
|
||||
const val LATEST_PACK_FORMAT = 18
|
||||
|
||||
val Version.packFormat: Int
|
||||
get() = when {
|
||||
@ -51,7 +52,7 @@ object MinecraftAssetsVersion {
|
||||
versionId < V_23W31A -> 15
|
||||
versionId < V_23W32A -> 16
|
||||
versionId < V_1_20_2_PRE2 -> 17
|
||||
else -> 18
|
||||
else -> LATEST_PACK_FORMAT
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import java.io.InputStream
|
||||
/**
|
||||
* A set of assets managers (sorted)
|
||||
*/
|
||||
class PriorityAssetsManager(
|
||||
open class PriorityAssetsManager(
|
||||
vararg managers: AssetsManager,
|
||||
) : MultiAssetsManager {
|
||||
private val managers: MutableSet<AssetsManager> = mutableSetOf()
|
||||
|
@ -20,8 +20,10 @@ import de.bixilon.minosoft.protocol.versions.Version
|
||||
interface AbstractServer {
|
||||
val address: String
|
||||
val name: ChatComponent
|
||||
|
||||
val queryVersion: Boolean
|
||||
val profiles: MutableMap<ResourceLocation, String>
|
||||
val forcedVersion: Version?
|
||||
|
||||
var faviconHash: String?
|
||||
}
|
||||
|
@ -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.
|
||||
*
|
||||
@ -13,8 +13,10 @@
|
||||
|
||||
package de.bixilon.minosoft.config.profile.profiles.resources.assets
|
||||
|
||||
import de.bixilon.minosoft.assets.minecraft.MinecraftAssetsVersion.LATEST_PACK_FORMAT
|
||||
import de.bixilon.minosoft.assets.minecraft.index.IndexAssetsType
|
||||
import de.bixilon.minosoft.config.profile.delegate.primitive.BooleanDelegate
|
||||
import de.bixilon.minosoft.config.profile.delegate.primitive.IntDelegate
|
||||
import de.bixilon.minosoft.config.profile.delegate.types.list.ListDelegate
|
||||
import de.bixilon.minosoft.config.profile.delegate.types.set.SetDelegate
|
||||
import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile
|
||||
@ -26,4 +28,6 @@ class AssetsC(profile: ResourcesProfile) {
|
||||
val indexAssetsTypes: MutableSet<IndexAssetsType> by SetDelegate(profile, mutableSetOf(*IndexAssetsType.VALUES), "")
|
||||
|
||||
val resourcePacks: List<ResourcePack> by ListDelegate(profile, mutableListOf(), "")
|
||||
|
||||
val packFormat by IntDelegate(profile, -1, "", arrayOf(-1..-1, 0..LATEST_PACK_FORMAT))
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
||||
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
||||
import de.bixilon.kutil.reflection.ReflectionUtil.forceSet
|
||||
import de.bixilon.minosoft.assets.AssetsLoader
|
||||
import de.bixilon.minosoft.assets.AssetsManager
|
||||
import de.bixilon.minosoft.assets.connection.ConnectionAssetsManager
|
||||
import de.bixilon.minosoft.camera.ConnectionCamera
|
||||
import de.bixilon.minosoft.commands.nodes.RootNode
|
||||
import de.bixilon.minosoft.config.profile.ConnectionProfiles
|
||||
@ -95,7 +95,7 @@ class PlayConnection(
|
||||
val sequence = AtomicInteger(1)
|
||||
|
||||
|
||||
lateinit var assetsManager: AssetsManager
|
||||
lateinit var assetsManager: ConnectionAssetsManager
|
||||
private set
|
||||
lateinit var language: Translator
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user