diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/assets/TestAssetsManager.kt b/src/integration-test/kotlin/de/bixilon/minosoft/assets/TestAssetsManager.kt
index 14f2e77bd..405261db9 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/assets/TestAssetsManager.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/assets/TestAssetsManager.kt
@@ -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
+ }
}
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/ModelTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/ModelTestUtil.kt
index 19a70364b..450fe570a 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/ModelTestUtil.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/ModelTestUtil.kt
@@ -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
}
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt
index e2070de2b..29985352a 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/models/baked/BakedModelTestUtil.kt
@@ -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)))
diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt
index 1666e103d..70cd86c95 100644
--- a/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/protocol/network/connection/play/ConnectionTestUtil.kt
@@ -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)
diff --git a/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt b/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt
index 6a40db96a..227400d67 100644
--- a/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt
+++ b/src/main/java/de/bixilon/minosoft/assets/AssetsLoader.kt
@@ -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)
diff --git a/src/main/java/de/bixilon/minosoft/assets/connection/ConnectionAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/connection/ConnectionAssetsManager.kt
new file mode 100644
index 000000000..10192f4c5
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/assets/connection/ConnectionAssetsManager.kt
@@ -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 .
+ *
+ * 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()
diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt
index 4c7117a96..5f45d2101 100644
--- a/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt
+++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/MinecraftAssetsVersion.kt
@@ -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
}
}
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 cbfa0ac85..be014fb9a 100644
--- a/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt
+++ b/src/main/java/de/bixilon/minosoft/assets/multi/PriorityAssetsManager.kt
@@ -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 = mutableSetOf()
diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/server/entries/AbstractServer.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/server/entries/AbstractServer.kt
index 233356a2b..b2215e4c9 100644
--- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/server/entries/AbstractServer.kt
+++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/server/entries/AbstractServer.kt
@@ -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
val forcedVersion: Version?
+
var faviconHash: String?
}
diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/assets/AssetsC.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/assets/AssetsC.kt
index d6db26166..90ba8bcbd 100644
--- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/assets/AssetsC.kt
+++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/assets/AssetsC.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.
*
@@ -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 by SetDelegate(profile, mutableSetOf(*IndexAssetsType.VALUES), "")
val resourcePacks: List by ListDelegate(profile, mutableListOf(), "")
+
+ val packFormat by IntDelegate(profile, -1, "", arrayOf(-1..-1, 0..LATEST_PACK_FORMAT))
}
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 81b72720d..4aac7b0b4 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
@@ -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