Skip to content

Commit

Permalink
Support copying nerd stats from item list
Browse files Browse the repository at this point in the history
  • Loading branch information
nea89o committed Dec 29, 2023
1 parent bd0712a commit 9c7ea1f
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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")
)
)
)
)
}
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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) {
Expand Down
35 changes: 35 additions & 0 deletions src/main/kotlin/moe/nea/firmament/util/HoveredItemStack.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <[email protected]>
*
* 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)
}
}

0 comments on commit 9c7ea1f

Please sign in to comment.