mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 17:07:55 -04:00
directory assets manager: use java path instead of string with slashes
This commit is contained in:
parent
d77bb34162
commit
0cbd90b598
@ -13,7 +13,6 @@
|
||||
|
||||
package de.bixilon.minosoft.assets.directory
|
||||
|
||||
import de.bixilon.kutil.file.FileUtil.slashPath
|
||||
import de.bixilon.kutil.latch.AbstractLatch
|
||||
import de.bixilon.minosoft.assets.AssetsManager
|
||||
import de.bixilon.minosoft.assets.properties.manager.AssetsManagerProperties
|
||||
@ -27,6 +26,7 @@ import java.io.FileInputStream
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Path
|
||||
import kotlin.io.path.relativeTo
|
||||
|
||||
|
||||
/**
|
||||
@ -34,11 +34,11 @@ import java.nio.file.Path
|
||||
*/
|
||||
|
||||
class DirectoryAssetsManager(
|
||||
private val rootPath: String,
|
||||
private val rootPath: Path,
|
||||
private val canUnload: Boolean = true,
|
||||
val prefix: String = AssetsManager.DEFAULT_ASSETS_PREFIX,
|
||||
) : AssetsManager {
|
||||
private val basePath = File(rootPath).slashPath + "/" + prefix
|
||||
private val basePath = rootPath.resolve(prefix)
|
||||
private var assets: MutableSet<ResourceLocation> = ObjectOpenHashSet()
|
||||
override var loaded: Boolean = false
|
||||
private set
|
||||
@ -48,22 +48,23 @@ class DirectoryAssetsManager(
|
||||
private set
|
||||
|
||||
private val ResourceLocation.filePath: Path
|
||||
get() = Path.of(basePath, namespace, path)
|
||||
get() = basePath.resolve(namespace).resolve(path)
|
||||
|
||||
private fun scanDirectory(directory: File) {
|
||||
private fun scanDirectory(root: Boolean, directory: File) {
|
||||
for (file in directory.listFiles() ?: return) {
|
||||
if (file.isDirectory) {
|
||||
scanDirectory(file)
|
||||
scanDirectory(false, file)
|
||||
continue
|
||||
}
|
||||
val path = file.slashPath.removePrefix(basePath).removePrefix(File.separator).toAssetName(false, prefix) ?: continue
|
||||
if (root) continue // root path just allows folders
|
||||
val path = file.toPath().relativeTo(basePath).toString().removePrefix(File.separator).toAssetName(false, prefix) ?: continue
|
||||
assets += path
|
||||
}
|
||||
}
|
||||
|
||||
override fun load(latch: AbstractLatch?) {
|
||||
check(!loaded) { "Already loaded!" }
|
||||
scanDirectory(File(basePath))
|
||||
scanDirectory(true, basePath.toFile())
|
||||
File("$rootPath/pack.png").let { if (it.exists() && it.isFile) image = FileInputStream(it).readAllBytes() }
|
||||
File("$rootPath/pack.mcmeta").let { if (it.exists() && it.isFile) properties = FileInputStream(it).readJson() }
|
||||
loaded = true
|
||||
|
@ -19,10 +19,9 @@ import de.bixilon.minosoft.assets.resource.ResourceAssetsManager
|
||||
import de.bixilon.minosoft.util.logging.Log
|
||||
import de.bixilon.minosoft.util.logging.LogLevels
|
||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||
import java.io.File
|
||||
import java.net.URLDecoder
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
import java.nio.file.Path
|
||||
|
||||
object ResourcesAssetsUtil {
|
||||
|
||||
@ -34,7 +33,7 @@ object ResourcesAssetsUtil {
|
||||
}
|
||||
|
||||
return when (rootResources.protocol) {
|
||||
"file" -> DirectoryAssetsManager(rootResources.path.removeSuffix(File.separator).removeSuffix(prefix), canUnload, prefix) // Read them directly from the folder
|
||||
"file" -> DirectoryAssetsManager(Path.of(rootResources.path).parent, canUnload, prefix) // Read them directly from the folder
|
||||
"jar" -> {
|
||||
val path: String = rootResources.path
|
||||
val jarPath = path.substring(5, path.indexOf("!"))
|
||||
|
@ -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.
|
||||
*
|
||||
@ -16,9 +16,10 @@ package de.bixilon.minosoft.config.profile.profiles.resources.assets.packs
|
||||
import de.bixilon.minosoft.assets.AssetsManager
|
||||
import de.bixilon.minosoft.assets.directory.DirectoryAssetsManager
|
||||
import de.bixilon.minosoft.assets.file.ZipAssetsManager
|
||||
import java.nio.file.Path
|
||||
|
||||
enum class ResourcePackType(val creator: (ResourcePack) -> AssetsManager) {
|
||||
ZIP({ ZipAssetsManager(it.path) }),
|
||||
DIRECTORY({ DirectoryAssetsManager(it.path) }),
|
||||
DIRECTORY({ DirectoryAssetsManager(Path.of(it.path)) }),
|
||||
;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class DirectorySource(
|
||||
|
||||
override fun process(mod: MinosoftMod) {
|
||||
val files = directory.listFiles()!!
|
||||
val assets = DirectoryAssetsManager(directory.path)
|
||||
val assets = DirectoryAssetsManager(directory.toPath())
|
||||
assets.load()
|
||||
|
||||
for (sub in files) {
|
||||
|
@ -49,7 +49,7 @@ class SplitDirectorySource(
|
||||
}
|
||||
|
||||
private fun processResources(mod: MinosoftMod) {
|
||||
val assets = DirectoryAssetsManager(resources.path)
|
||||
val assets = DirectoryAssetsManager(resources.toPath())
|
||||
assets.load(ParentLatch(0, mod.latch))
|
||||
mod.assetsManager = assets
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user