From c41488139136c213fd5d799523da5f318a0014a2 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Wed, 27 Nov 2024 16:06:52 +0100 Subject: feat: Add item type function --- src/main/kotlin/util/skyblock/AbilityUtils.kt | 1 + src/main/kotlin/util/skyblock/ItemType.kt | 40 ++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) (limited to 'src/main/kotlin/util/skyblock') diff --git a/src/main/kotlin/util/skyblock/AbilityUtils.kt b/src/main/kotlin/util/skyblock/AbilityUtils.kt index 0f0adbe..0d7d2b7 100644 --- a/src/main/kotlin/util/skyblock/AbilityUtils.kt +++ b/src/main/kotlin/util/skyblock/AbilityUtils.kt @@ -131,6 +131,7 @@ object AbilityUtils { return abilities } + // TODO: memoize fun getAbilities(itemStack: ItemStack): List { return getAbilities(itemStack.loreAccordingToNbt) } diff --git a/src/main/kotlin/util/skyblock/ItemType.kt b/src/main/kotlin/util/skyblock/ItemType.kt index 7d53c0d..b031b69 100644 --- a/src/main/kotlin/util/skyblock/ItemType.kt +++ b/src/main/kotlin/util/skyblock/ItemType.kt @@ -1,21 +1,41 @@ package moe.nea.firmament.util.skyblock -import kotlin.properties.ReadOnlyProperty -import kotlin.reflect.KProperty +import net.minecraft.item.ItemStack +import moe.nea.firmament.util.directLiteralStringContent +import moe.nea.firmament.util.mc.loreAccordingToNbt +import moe.nea.firmament.util.petData -class ItemType(val name: String) { +@JvmInline +value class ItemType private constructor(val name: String) { companion object { - private val generated = object : ReadOnlyProperty { - override fun getValue(thisRef: Any?, property: KProperty<*>): ItemType { - return ItemType.ofName(property.name) - } - } - fun ofName(name: String): ItemType { return ItemType(name) } - val SWORD by generated + fun fromItemStack(itemStack: ItemStack): ItemType? { + if (itemStack.petData != null) + return PET + val typeText = + itemStack.loreAccordingToNbt.lastOrNull() + ?.siblings?.find { + !it.style.isObfuscated && !it.directLiteralStringContent.isNullOrBlank() + }?.directLiteralStringContent + if (typeText != null) { + val type = typeText.substringAfter(' ', missingDelimiterValue = "").trim() + if (type.isEmpty()) return null + return ofName(type) + } + return null + } + + val SWORD = ofName("SWORD") + val DRILL = ofName("DRILL") + val PICKAXE = ofName("PICKAXE") + + /** + * This one is not really official (it never shows up in game). + */ + val PET = ofName("PET") } } -- cgit