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.fixes.Fixes
|
||||||
import moe.nea.firmament.features.inventory.CraftingOverlay
|
import moe.nea.firmament.features.inventory.CraftingOverlay
|
||||||
import moe.nea.firmament.features.inventory.ItemRarityCosmetics
|
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.PriceData
|
||||||
import moe.nea.firmament.features.inventory.SaveCursorPosition
|
import moe.nea.firmament.features.inventory.SaveCursorPosition
|
||||||
import moe.nea.firmament.features.inventory.SlotLocking
|
import moe.nea.firmament.features.inventory.SlotLocking
|
||||||
@@ -67,6 +68,7 @@ object FeatureManager : DataHolder<FeatureManager.Config>(serializer(), "feature
|
|||||||
loadFeature(CompatibliltyFeatures)
|
loadFeature(CompatibliltyFeatures)
|
||||||
loadFeature(AnniversaryFeatures)
|
loadFeature(AnniversaryFeatures)
|
||||||
loadFeature(QuickCommands)
|
loadFeature(QuickCommands)
|
||||||
|
loadFeature(PetFeatures)
|
||||||
loadFeature(SaveCursorPosition)
|
loadFeature(SaveCursorPosition)
|
||||||
loadFeature(CustomSkyBlockTextures)
|
loadFeature(CustomSkyBlockTextures)
|
||||||
loadFeature(PriceData)
|
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
|
inline var screen
|
||||||
get() = instance.currentScreen
|
get() = instance.currentScreen
|
||||||
set(value) = instance.setScreen(value)
|
set(value) = instance.setScreen(value)
|
||||||
|
val screenName get() = screen?.title?.unformattedString?.trim()
|
||||||
inline val handledScreen: HandledScreen<*>? get() = instance.currentScreen as? HandledScreen<*>
|
inline val handledScreen: HandledScreen<*>? get() = instance.currentScreen as? HandledScreen<*>
|
||||||
inline val window get() = instance.window
|
inline val window get() = instance.window
|
||||||
inline val currentRegistries: RegistryWrapper.WrapperLookup? get() = world?.registryManager
|
inline val currentRegistries: RegistryWrapper.WrapperLookup? get() = world?.registryManager
|
||||||
|
|||||||
@@ -1,21 +1,22 @@
|
|||||||
|
|
||||||
|
|
||||||
@file:UseSerializers(DashlessUUIDSerializer::class)
|
@file:UseSerializers(DashlessUUIDSerializer::class)
|
||||||
|
|
||||||
package moe.nea.firmament.util
|
package moe.nea.firmament.util
|
||||||
|
|
||||||
import io.github.moulberry.repo.data.NEUItem
|
import io.github.moulberry.repo.data.NEUItem
|
||||||
import io.github.moulberry.repo.data.Rarity
|
import io.github.moulberry.repo.data.Rarity
|
||||||
|
import java.util.Optional
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.UseSerializers
|
import kotlinx.serialization.UseSerializers
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
import kotlin.jvm.optionals.getOrNull
|
||||||
import net.minecraft.component.DataComponentTypes
|
import net.minecraft.component.DataComponentTypes
|
||||||
import net.minecraft.component.type.NbtComponent
|
import net.minecraft.component.type.NbtComponent
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.nbt.NbtCompound
|
import net.minecraft.nbt.NbtCompound
|
||||||
import net.minecraft.util.Identifier
|
import net.minecraft.util.Identifier
|
||||||
import moe.nea.firmament.repo.set
|
import moe.nea.firmament.repo.set
|
||||||
|
import moe.nea.firmament.util.collections.WeakCache
|
||||||
import moe.nea.firmament.util.json.DashlessUUIDSerializer
|
import moe.nea.firmament.util.json.DashlessUUIDSerializer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,6 +76,7 @@ data class HypixelPetInfo(
|
|||||||
val exp: Double = 0.0,
|
val exp: Double = 0.0,
|
||||||
val candyUsed: Int = 0,
|
val candyUsed: Int = 0,
|
||||||
val uuid: UUID? = null,
|
val uuid: UUID? = null,
|
||||||
|
val active: Boolean = false,
|
||||||
) {
|
) {
|
||||||
val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}")
|
val skyblockId get() = SkyblockId("${type.uppercase()};${tier.ordinal}")
|
||||||
}
|
}
|
||||||
@@ -97,14 +99,16 @@ val ItemStack.skyblockUUIDString: String?
|
|||||||
val ItemStack.skyblockUUID: UUID?
|
val ItemStack.skyblockUUID: UUID?
|
||||||
get() = skyblockUUIDString?.let { UUID.fromString(it) }
|
get() = skyblockUUIDString?.let { UUID.fromString(it) }
|
||||||
|
|
||||||
val ItemStack.petData: HypixelPetInfo?
|
private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>>("PetInfo") {
|
||||||
get() {
|
val jsonString = it.extraAttributes.getString("petInfo")
|
||||||
val jsonString = extraAttributes.getString("petInfo")
|
if (jsonString.isNullOrBlank()) return@memoize Optional.empty()
|
||||||
if (jsonString.isNullOrBlank()) return null
|
runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
|
||||||
return runCatching { jsonparser.decodeFromString<HypixelPetInfo>(jsonString) }
|
.getOrElse { null }.intoOptional()
|
||||||
.getOrElse { return null }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val ItemStack.petData: HypixelPetInfo?
|
||||||
|
get() = petDataCache(this).getOrNull()
|
||||||
|
|
||||||
fun ItemStack.setSkyBlockFirmamentUiId(uiId: String) = setSkyBlockId(SkyblockId("FIRMAMENT_UI_$uiId"))
|
fun ItemStack.setSkyBlockFirmamentUiId(uiId: String) = setSkyBlockId(SkyblockId("FIRMAMENT_UI_$uiId"))
|
||||||
fun ItemStack.setSkyBlockId(skyblockId: SkyblockId): ItemStack {
|
fun ItemStack.setSkyBlockId(skyblockId: SkyblockId): ItemStack {
|
||||||
this.extraAttributes["id"] = skyblockId.neuItem
|
this.extraAttributes["id"] = skyblockId.neuItem
|
||||||
|
|||||||
@@ -80,6 +80,8 @@
|
|||||||
"firmament.config.repo.disable-item-groups": "Disable Item Groups",
|
"firmament.config.repo.disable-item-groups": "Disable Item Groups",
|
||||||
"firmament.config.repo.reload": "Reload Item List",
|
"firmament.config.repo.reload": "Reload Item List",
|
||||||
"firmament.config.repo.redownload": "Redownload 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.start": "Ursa request launched",
|
||||||
"firmament.ursa.debugrequest.result": "Ursa request succeeded: %s",
|
"firmament.ursa.debugrequest.result": "Ursa request succeeded: %s",
|
||||||
"firmament.sbinfo.nolocraw": "No locraw data available",
|
"firmament.sbinfo.nolocraw": "No locraw data available",
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 558 B |
Reference in New Issue
Block a user