Add current pet highlighter
This commit is contained in:
@@ -21,6 +21,7 @@ import moe.nea.firmament.features.fixes.CompatibliltyFeatures
|
||||
import moe.nea.firmament.features.fixes.Fixes
|
||||
import moe.nea.firmament.features.inventory.CraftingOverlay
|
||||
import moe.nea.firmament.features.inventory.ItemRarityCosmetics
|
||||
import moe.nea.firmament.features.inventory.PetFeatures
|
||||
import moe.nea.firmament.features.inventory.PriceData
|
||||
import moe.nea.firmament.features.inventory.SaveCursorPosition
|
||||
import moe.nea.firmament.features.inventory.SlotLocking
|
||||
@@ -67,6 +68,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
||||
loadFeature(CompatibliltyFeatures)
|
||||
loadFeature(AnniversaryFeatures)
|
||||
loadFeature(QuickCommands)
|
||||
loadFeature(PetFeatures)
|
||||
loadFeature(SaveCursorPosition)
|
||||
loadFeature(CustomSkyBlockTextures)
|
||||
loadFeature(PriceData)
|
||||
|
||||
40
src/main/kotlin/features/inventory/PetFeatures.kt
Normal file
40
src/main/kotlin/features/inventory/PetFeatures.kt
Normal file
@@ -0,0 +1,40 @@
|
||||
package moe.nea.firmament.features.inventory
|
||||
|
||||
import net.minecraft.util.Identifier
|
||||
import moe.nea.firmament.annotations.Subscribe
|
||||
import moe.nea.firmament.events.SlotRenderEvents
|
||||
import moe.nea.firmament.features.FirmamentFeature
|
||||
import moe.nea.firmament.gui.config.ManagedConfig
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.petData
|
||||
import moe.nea.firmament.util.unformattedString
|
||||
import moe.nea.firmament.util.useMatch
|
||||
|
||||
object PetFeatures : FirmamentFeature {
|
||||
override val identifier: String
|
||||
get() = "pets"
|
||||
|
||||
override val config: ManagedConfig?
|
||||
get() = TConfig
|
||||
|
||||
object TConfig : ManagedConfig(identifier) {
|
||||
val highlightEquippedPet by toggle("highlight-pet") { true }
|
||||
}
|
||||
|
||||
val petMenuTitle = "Pets(?: \\([0-9]+/[0-9]+\\))?".toPattern()
|
||||
|
||||
@Subscribe
|
||||
fun onSlotRender(event: SlotRenderEvents.Before) {
|
||||
if (!TConfig.highlightEquippedPet) return
|
||||
val stack = event.slot.stack
|
||||
if (stack.petData?.active == true)
|
||||
petMenuTitle.useMatch(MC.screenName ?: return) {
|
||||
event.context.drawSprite(
|
||||
event.slot.x, event.slot.y, 0, 16, 16,
|
||||
MC.guiAtlasManager.getSprite(Identifier.of("firmament:selected_pet_background"))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -86,6 +86,7 @@ object MC {
|
||||
inline var screen
|
||||
get() = instance.currentScreen
|
||||
set(value) = instance.setScreen(value)
|
||||
val screenName get() = screen?.title?.unformattedString?.trim()
|
||||
inline val handledScreen: HandledScreen<*>? get() = instance.currentScreen as? HandledScreen<*>
|
||||
inline val window get() = instance.window
|
||||
inline val currentRegistries: RegistryWrapper.WrapperLookup? get() = world?.registryManager
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
|
||||
|
||||
@file:UseSerializers(DashlessUUIDSerializer::class)
|
||||
|
||||
package moe.nea.firmament.util
|
||||
|
||||
import io.github.moulberry.repo.data.NEUItem
|
||||
import io.github.moulberry.repo.data.Rarity
|
||||
import java.util.Optional
|
||||
import java.util.UUID
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.UseSerializers
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
import net.minecraft.component.DataComponentTypes
|
||||
import net.minecraft.component.type.NbtComponent
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
import net.minecraft.util.Identifier
|
||||
import moe.nea.firmament.repo.set
|
||||
import moe.nea.firmament.util.collections.WeakCache
|
||||
import moe.nea.firmament.util.json.DashlessUUIDSerializer
|
||||
|
||||
/**
|
||||
@@ -75,6 +76,7 @@ data class HypixelPetInfo(
|
||||
val exp: Double = 0.0,
|
||||
val candyUsed: Int = 0,
|
||||
val uuid: UUID? = null,
|
||||
val active: Boolean = false,
|
||||
) {
|
||||
val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}")
|
||||
}
|
||||
@@ -97,13 +99,15 @@ val ItemStack.skyblockUUIDString: String?
|
||||
val ItemStack.skyblockUUID: UUID?
|
||||
get() = skyblockUUIDString?.let { UUID.fromString(it) }
|
||||
|
||||
private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>>("PetInfo") {
|
||||
val jsonString = it.extraAttributes.getString("petInfo")
|
||||
if (jsonString.isNullOrBlank()) return@memoize Optional.empty()
|
||||
runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
|
||||
.getOrElse { null }.intoOptional()
|
||||
}
|
||||
|
||||
val ItemStack.petData: HypixelPetInfo?
|
||||
get() {
|
||||
val jsonString = extraAttributes.getString("petInfo")
|
||||
if (jsonString.isNullOrBlank()) return null
|
||||
return runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
|
||||
.getOrElse { return null }
|
||||
}
|
||||
get() = petDataCache(this).getOrNull()
|
||||
|
||||
fun ItemStack.setSkyBlockFirmamentUiId(uiId: String) = setSkyBlockId(SkyblockId("FIRMAMENT_UI_$uiId"))
|
||||
fun ItemStack.setSkyBlockId(skyblockId: SkyblockId): ItemStack {
|
||||
|
||||
@@ -80,6 +80,8 @@
|
||||
"firmament.config.repo.disable-item-groups": "Disable Item Groups",
|
||||
"firmament.config.repo.reload": "Reload Item List",
|
||||
"firmament.config.repo.redownload": "Redownload Item List",
|
||||
"firmament.config.pets": "Pets",
|
||||
"firmament.config.pets.highlight-pet": "Highlight active pet",
|
||||
"firmament.ursa.debugrequest.start": "Ursa request launched",
|
||||
"firmament.ursa.debugrequest.result": "Ursa request succeeded: %s",
|
||||
"firmament.sbinfo.nolocraw": "No locraw data available",
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 558 B |
Reference in New Issue
Block a user