Add mob drop viewer to item list
This commit is contained in:
101
src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt
Normal file
101
src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2024 Linnea Gräf <nea@nea.moe>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package moe.nea.firmament.repo
|
||||
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import net.fabricmc.fabric.api.resource.ModResourcePack
|
||||
import net.fabricmc.loader.api.FabricLoader
|
||||
import net.fabricmc.loader.api.metadata.ModMetadata
|
||||
import kotlin.io.path.exists
|
||||
import kotlin.io.path.isRegularFile
|
||||
import kotlin.io.path.relativeTo
|
||||
import kotlin.streams.asSequence
|
||||
import net.minecraft.resource.AbstractFileResourcePack
|
||||
import net.minecraft.resource.InputSupplier
|
||||
import net.minecraft.resource.ResourcePack
|
||||
import net.minecraft.resource.ResourceType
|
||||
import net.minecraft.resource.metadata.ResourceMetadataReader
|
||||
import net.minecraft.util.Identifier
|
||||
import net.minecraft.util.PathUtil
|
||||
|
||||
class RepoModResourcePack(val basePath: Path) : ModResourcePack {
|
||||
companion object {
|
||||
fun append(packs: MutableList<in ModResourcePack>) {
|
||||
packs.add(RepoModResourcePack(RepoDownloadManager.repoSavedLocation))
|
||||
}
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
}
|
||||
|
||||
override fun openRoot(vararg segments: String): InputSupplier<InputStream>? {
|
||||
return getFile(segments)?.let { InputSupplier.create(it) }
|
||||
}
|
||||
|
||||
fun getFile(segments: Array<out String>): Path? {
|
||||
PathUtil.validatePath(*segments)
|
||||
val path = segments.fold(basePath, Path::resolve)
|
||||
if (!path.isRegularFile()) return null
|
||||
return path
|
||||
}
|
||||
|
||||
override fun open(type: ResourceType?, id: Identifier): InputSupplier<InputStream>? {
|
||||
if (type != ResourceType.CLIENT_RESOURCES) return null
|
||||
if (id.namespace != "neurepo") return null
|
||||
val file = getFile(id.path.split("/").toTypedArray())
|
||||
return file?.let { InputSupplier.create(it) }
|
||||
}
|
||||
|
||||
override fun findResources(
|
||||
type: ResourceType?,
|
||||
namespace: String,
|
||||
prefix: String,
|
||||
consumer: ResourcePack.ResultConsumer
|
||||
) {
|
||||
if (namespace != "neurepo") return
|
||||
if (type != ResourceType.CLIENT_RESOURCES) return
|
||||
|
||||
val prefixPath = basePath.resolve(prefix)
|
||||
if (!prefixPath.exists())
|
||||
return
|
||||
Files.walk(prefixPath)
|
||||
.asSequence()
|
||||
.map { it.relativeTo(basePath) }
|
||||
.forEach {
|
||||
consumer.accept(Identifier.of("neurepo", it.toString()), InputSupplier.create(it))
|
||||
}
|
||||
}
|
||||
|
||||
override fun getNamespaces(type: ResourceType?): Set<String> {
|
||||
if (type != ResourceType.CLIENT_RESOURCES) return emptySet()
|
||||
return setOf("neurepo")
|
||||
}
|
||||
|
||||
override fun <T> parseMetadata(metaReader: ResourceMetadataReader<T>): T? {
|
||||
return AbstractFileResourcePack.parseMetadata(
|
||||
metaReader, """
|
||||
{
|
||||
"pack": {
|
||||
"pack_format": 12,
|
||||
"description": "NEU Repo Resources"
|
||||
}
|
||||
}
|
||||
""".trimIndent().byteInputStream()
|
||||
)
|
||||
}
|
||||
|
||||
override fun getName(): String {
|
||||
return "NEU Repo Resources"
|
||||
}
|
||||
|
||||
override fun getFabricModMetadata(): ModMetadata {
|
||||
return FabricLoader.getInstance().getModContainer("firmament")
|
||||
.get().metadata
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user