Support copying nerd stats from item list
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
35
src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt
Normal file
35
src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt
Normal file
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user