diff options
author | Linnea Gräf <nea@nea.moe> | 2023-12-29 20:26:22 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2023-12-29 20:26:22 +0100 |
commit | 9c7ea1ff0a676c0c568b06750df8cb364b77d01b (patch) | |
tree | 96e6cf1cc6b411db4813623027737bb4c4ce3ae8 /src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt | |
parent | bd0712adb0eb9c12a97a201b6df52fbdad0f0dba (diff) | |
download | firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.gz firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.bz2 firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.zip |
Support copying nerd stats from item list
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt b/src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt new file mode 100644 index 0000000..786723e --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt @@ -0,0 +1,35 @@ +/* + * SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe> + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package moe.nea.firmament.util + +import me.shedaniel.math.impl.PointHelper +import me.shedaniel.rei.api.client.REIRuntime +import me.shedaniel.rei.api.client.gui.widgets.Slot +import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry +import net.minecraft.client.gui.Element +import net.minecraft.client.gui.ParentElement +import net.minecraft.client.gui.screen.ingame.HandledScreen +import net.minecraft.item.ItemStack +import moe.nea.firmament.mixins.accessor.AccessorHandledScreen + + +val HandledScreen<*>.focusedItemStack: ItemStack? + get() { + this as AccessorHandledScreen + val vanillaSlot = this.focusedSlot_Firmament?.stack + if (vanillaSlot != null) return vanillaSlot + val focusedSlot = ScreenRegistry.getInstance().getFocusedStack(this, PointHelper.ofMouse()) + if (focusedSlot != null) return focusedSlot.cheatsAs().value + var baseElement: Element? = REIRuntime.getInstance().overlay.orElse(null) + val mx = PointHelper.getMouseFloatingX() + val my = PointHelper.getMouseFloatingY() + while (true) { + if (baseElement is Slot) return baseElement.currentEntry.cheatsAs().value + if (baseElement !is ParentElement) return null + baseElement = baseElement.hoveredElement(mx, my).orElse(null) + } + } |