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 | |
parent | bd0712adb0eb9c12a97a201b6df52fbdad0f0dba (diff) | |
download | firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.gz firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.tar.bz2 firmament-9c7ea1ff0a676c0c568b06750df8cb364b77d01b.zip |
Support copying nerd stats from item list
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) + } + } |