feat: Load mining islands from repo
This commit is contained in:
@@ -61,11 +61,12 @@ object ItemCache : IReloadable {
|
||||
putShort("Damage", damage.toShort())
|
||||
}
|
||||
|
||||
private fun NbtCompound.transformFrom10809ToModern(): NbtCompound? =
|
||||
private fun NbtCompound.transformFrom10809ToModern() = convert189ToModern(this@transformFrom10809ToModern)
|
||||
fun convert189ToModern(nbtComponent: NbtCompound): NbtCompound? =
|
||||
try {
|
||||
df.update(
|
||||
TypeReferences.ITEM_STACK,
|
||||
Dynamic(NbtOps.INSTANCE, this),
|
||||
Dynamic(NbtOps.INSTANCE, nbtComponent),
|
||||
-1,
|
||||
SharedConstants.getGameVersion().saveVersion.id
|
||||
).value as NbtCompound
|
||||
|
||||
72
src/main/kotlin/repo/MiningRepoData.kt
Normal file
72
src/main/kotlin/repo/MiningRepoData.kt
Normal file
@@ -0,0 +1,72 @@
|
||||
package moe.nea.firmament.repo
|
||||
|
||||
import io.github.moulberry.repo.IReloadable
|
||||
import io.github.moulberry.repo.NEURepository
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Transient
|
||||
import kotlinx.serialization.serializer
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
import kotlin.streams.asSequence
|
||||
import net.minecraft.block.Block
|
||||
import net.minecraft.item.BlockItem
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
import moe.nea.firmament.repo.ReforgeStore.kJson
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.SkyBlockIsland
|
||||
import moe.nea.firmament.util.SkyblockId
|
||||
|
||||
class MiningRepoData : IReloadable {
|
||||
var customMiningAreas: Map<SkyBlockIsland, CustomMiningArea> = mapOf()
|
||||
private set
|
||||
var customMiningBlocks: List<CustomMiningBlock> = listOf()
|
||||
private set
|
||||
|
||||
|
||||
override fun reload(repo: NEURepository) {
|
||||
customMiningAreas = repo.file("mining/custom_mining_areas.json")
|
||||
?.kJson(serializer()) ?: mapOf()
|
||||
customMiningBlocks = repo.tree("mining/blocks")
|
||||
.asSequence()
|
||||
.filter { it.path.endsWith(".json") }
|
||||
.map { it.kJson(serializer<CustomMiningBlock>()) }
|
||||
.toList()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class CustomMiningBlock(
|
||||
val breakingPower: Int = 0,
|
||||
val blockStrength: Int = 0,
|
||||
val name: String? = null,
|
||||
val baseDrop: SkyblockId? = null,
|
||||
val blocks189: List<Block189> = emptyList()
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Block189(
|
||||
val itemId: String,
|
||||
val damage: Short = 0,
|
||||
val onlyIn: List<SkyBlockIsland>? = null,
|
||||
) {
|
||||
@Transient
|
||||
val block = convertToModernBlock()
|
||||
|
||||
private fun convertToModernBlock(): Block? {
|
||||
// TODO: this should be in a shared util, really
|
||||
val newCompound = ItemCache.convert189ToModern(NbtCompound().apply {
|
||||
putString("id", itemId)
|
||||
putShort("Damage", damage)
|
||||
}) ?: return null
|
||||
val itemStack = ItemStack.fromNbt(MC.defaultRegistries, newCompound).getOrNull() ?: return null
|
||||
val blockItem = itemStack.item as? BlockItem ?: return null
|
||||
return blockItem.block
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class CustomMiningArea(
|
||||
val isSpecialMining: Boolean = true
|
||||
)
|
||||
|
||||
|
||||
}
|
||||
@@ -54,6 +54,7 @@ object RepoManager {
|
||||
|
||||
val essenceRecipeProvider = EssenceRecipeProvider()
|
||||
val recipeCache = BetterRepoRecipeCache(essenceRecipeProvider, ReforgeStore)
|
||||
val miningData = MiningRepoData()
|
||||
|
||||
fun makeNEURepository(path: Path): NEURepository {
|
||||
return NEURepository.of(path).apply {
|
||||
@@ -63,6 +64,7 @@ object RepoManager {
|
||||
registerReloadListener(ItemNameLookup)
|
||||
registerReloadListener(ReforgeStore)
|
||||
registerReloadListener(essenceRecipeProvider)
|
||||
registerReloadListener(miningData)
|
||||
ReloadRegistrationEvent.publish(ReloadRegistrationEvent(this))
|
||||
registerReloadListener {
|
||||
if (TestUtil.isInTest) return@registerReloadListener
|
||||
|
||||
Reference in New Issue
Block a user