aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2023-12-29 20:26:22 +0100
committerLinnea Gräf <nea@nea.moe>2023-12-29 20:26:22 +0100
commit9c7ea1ff0a676c0c568b06750df8cb364b77d01b (patch)
tree96e6cf1cc6b411db4813623027737bb4c4ce3ae8
parentbd0712adb0eb9c12a97a201b6df52fbdad0f0dba (diff)
downloadfirmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.gz
firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.bz2
firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.zip
Support copying nerd stats from item list
-rw-r--r--src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java2
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt33
-rw-r--r--src/main/kotlin/moe/nea/firmament/features/debug/PowerUserTools.kt5
-rw-r--r--src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt35
4 files changed, 40 insertions, 35 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java
index b14717d..f61aca3 100644
--- a/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java
+++ b/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java
@@ -6,7 +6,7 @@
package moe.nea.firmament.mixins.accessor;
-import me.shedaniel.math.Rectangle;
+import kotlin.Deprecated;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.screen.slot.Slot;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt b/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt
index 7e3203b..6bf299f 100644
--- a/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt
+++ b/src/main/kotlin/moe/nea/firmament/features/debug/DeveloperFeatures.kt
@@ -8,25 +8,17 @@ package moe.nea.firmament.features.debug
import java.nio.file.Path
import java.util.concurrent.CompletableFuture
-import org.lwjgl.glfw.GLFW
import kotlin.io.path.absolute
import kotlin.io.path.exists
import net.minecraft.client.MinecraftClient
-import net.minecraft.text.ClickEvent
-import net.minecraft.text.HoverEvent
-import net.minecraft.text.Style
import net.minecraft.text.Text
-import net.minecraft.util.Formatting
import moe.nea.firmament.Firmament
-import moe.nea.firmament.events.HandledScreenKeyPressedEvent
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig
-import moe.nea.firmament.keybindings.IKeyBinding
-import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.TimeMark
+import moe.nea.firmament.util.errorBoundary
import moe.nea.firmament.util.iterate
-import moe.nea.firmament.util.skyBlockId
object DeveloperFeatures : FirmamentFeature {
override val identifier: String
@@ -66,29 +58,6 @@ object DeveloperFeatures : FirmamentFeature {
override fun onLoad() {
- HandledScreenKeyPressedEvent.subscribe {
- if (it.matches(IKeyBinding.ofKeyCode(GLFW.GLFW_KEY_K))) {
- it.screen as AccessorHandledScreen
- val focussedSlot = it.screen.focusedSlot_Firmament ?: return@subscribe
- val item = focussedSlot.stack ?: return@subscribe
- val ident = item.skyBlockId?.identifier.toString()
- MinecraftClient.getInstance().inGameHud.chatHud.addMessage(
- Text.translatable(
- "firmament.debug.skyblockid",
- ident
- ).setStyle(
- Style.EMPTY.withColor(Formatting.AQUA)
- .withClickEvent(ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, ident))
- .withHoverEvent(
- HoverEvent(
- HoverEvent.Action.SHOW_TEXT,
- Text.translatable("firmament.debug.skyblockid.copy")
- )
- )
- )
- )
- }
- }
}
}
diff --git a/src/main/kotlin/moe/nea/firmament/features/debug/PowerUserTools.kt b/src/main/kotlin/moe/nea/firmament/features/debug/PowerUserTools.kt
index 8c9baf7..4140490 100644
--- a/src/main/kotlin/moe/nea/firmament/features/debug/PowerUserTools.kt
+++ b/src/main/kotlin/moe/nea/firmament/features/debug/PowerUserTools.kt
@@ -24,6 +24,7 @@ import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.mixins.accessor.AccessorHandledScreen
import moe.nea.firmament.util.ClipboardUtils
import moe.nea.firmament.util.MC
+import moe.nea.firmament.util.focusedItemStack
import moe.nea.firmament.util.skyBlockId
object PowerUserTools : FirmamentFeature {
@@ -56,7 +57,7 @@ object PowerUserTools : FirmamentFeature {
it.lines.add(Text.translatable("firmament.tooltip.skyblockid", id.neuItem))
}
val (item, text) = lastCopiedStack ?: return@subscribe
- if (item != it.stack) {
+ if (!ItemStack.areEqual(item, it.stack)) {
lastCopiedStack = null
return@subscribe
}
@@ -96,7 +97,7 @@ object PowerUserTools : FirmamentFeature {
}
HandledScreenKeyPressedEvent.subscribe {
if (it.screen !is AccessorHandledScreen) return@subscribe
- val item = it.screen.focusedSlot_Firmament?.stack ?: return@subscribe
+ val item = it.screen.focusedItemStack ?: return@subscribe
if (it.matches(TConfig.copyItemId)) {
val sbId = item.skyBlockId
if (sbId == null) {
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)
+ }
+ }