aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util/HoveredItemStack.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-11-24 23:42:00 +0100
committerLinnea Gräf <nea@nea.moe>2025-11-24 23:42:00 +0100
commit6dd14e7225ff60361fe9f87020c424c0eb89a68b (patch)
tree6977d5a71850924becc71b1ac53f1865a1c8330a /src/main/kotlin/util/HoveredItemStack.kt
parent3f33928c8fefe4816af9d538fa3fce48d5e76f7c (diff)
downloadFirmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.tar.gz
Firmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.tar.bz2
Firmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.zip
feat: firmament api
Diffstat (limited to 'src/main/kotlin/util/HoveredItemStack.kt')
-rw-r--r--src/main/kotlin/util/HoveredItemStack.kt21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/main/kotlin/util/HoveredItemStack.kt b/src/main/kotlin/util/HoveredItemStack.kt
index c8d33fd..91202dd 100644
--- a/src/main/kotlin/util/HoveredItemStack.kt
+++ b/src/main/kotlin/util/HoveredItemStack.kt
@@ -1,13 +1,16 @@
package moe.nea.firmament.util
import com.google.auto.service.AutoService
+import kotlin.jvm.optionals.getOrNull
+import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
import net.minecraft.world.item.ItemStack
+import moe.nea.firmament.api.v1.FirmamentAPI
import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
import moe.nea.firmament.util.compatloader.CompatLoader
interface HoveredItemStackProvider : Comparable<HoveredItemStackProvider> {
- fun provideHoveredItemStack(screen: AbstractContainerScreen<*>): ItemStack?
+ fun provideHoveredItemStack(screen: Screen): ItemStack?
override fun compareTo(other: HoveredItemStackProvider): Int {
return compareValues(this.prio, other.prio)
}
@@ -22,8 +25,8 @@ interface HoveredItemStackProvider : Comparable<HoveredItemStackProvider> {
@AutoService(HoveredItemStackProvider::class)
class VanillaScreenProvider : HoveredItemStackProvider {
- override fun provideHoveredItemStack(screen: AbstractContainerScreen<*>): ItemStack? {
- screen as AccessorHandledScreen
+ override fun provideHoveredItemStack(screen: Screen): ItemStack? {
+ if (screen !is AccessorHandledScreen) return null
val vanillaSlot = screen.focusedSlot_Firmament?.item
return vanillaSlot
}
@@ -32,7 +35,17 @@ class VanillaScreenProvider : HoveredItemStackProvider {
get() = -1
}
-val AbstractContainerScreen<*>.focusedItemStack: ItemStack?
+@AutoService(HoveredItemStackProvider::class)
+class FirmamentStackScreenProvider : HoveredItemStackProvider {
+ override fun provideHoveredItemStack(screen: Screen): ItemStack? {
+ return FirmamentAPI.getInstance()
+ .hoveredItemWidget
+ .getOrNull()
+ ?.itemStack
+ }
+}
+
+val Screen.focusedItemStack: ItemStack?
get() =
HoveredItemStackProvider.sorted
.firstNotNullOfOrNull { it.provideHoveredItemStack(this)?.takeIf { !it.isEmpty } }