diff options
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt b/src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt new file mode 100644 index 0000000..70d511c --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt @@ -0,0 +1,48 @@ +package moe.nea.firmament.util + +import io.github.moulberry.repo.data.NEUItem +import io.github.moulberry.repo.data.Rarity +import kotlinx.serialization.Serializable +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NbtCompound +import net.minecraft.util.Identifier + +@JvmInline +value class SkyblockId(val neuItem: String) { + val identifier get() = Identifier("skyblockitem", neuItem.lowercase().replace(";", "__")) +} + +val NEUItem.skyblockId get() = SkyblockId(skyblockItemId) + +@Serializable +data class HypixelPetInfo( + val type: String, + val tier: Rarity, +) { + val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}") +} + +private val jsonparser = Json { ignoreUnknownKeys = true } + +val ItemStack.extraAttributes: NbtCompound + get() = getOrCreateSubNbt("ExtraAttributes") + +val ItemStack.skyBlockId: SkyblockId? + get() { + when (val id = extraAttributes.getString("id")) { + "PET" -> { + val jsonString = extraAttributes.getString("petInfo") + if (jsonString.isNullOrBlank()) return null + val petInfo = + runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) } + .getOrElse { return null } + return petInfo.skyblockId + } + // TODO: RUNE, ENCHANTED_BOOK, PARTY_HAT_CRAB{,_ANIMATED}, ABICASE + else -> { + return SkyblockId(id) + } + } + } |