From 65d3287242a3bca1fde3d2bfa71980a0244193be Mon Sep 17 00:00:00 2001 From: ABKQPO <93412322+ABKQPO@users.noreply.github.com> Date: Sun, 4 Oct 2026 01:47:29 +0800 Subject: [PATCH 1/2] remove mixin --- dependencies.gradle | 6 +-- .../buildcraft/BuildCraftHelpers.java | 23 +++------- .../integration/gregtech/GregTechHelpers.java | 45 ------------------- .../NeiCustomDiagramBridge.java | 5 +-- .../com/hfstudio/guidenh/mixins/Mixins.java | 10 +---- .../buildcraft/AccessorTileGenericPipe.java | 24 ---------- .../gregtech/AccessorHatchElementBuilder.java | 21 --------- .../MixinHatchElementBuilderPreview.java | 10 +++-- .../AccessorCustomInteractable.java | 19 -------- 9 files changed, 21 insertions(+), 142 deletions(-) delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/buildcraft/AccessorTileGenericPipe.java delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/AccessorHatchElementBuilder.java delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/neicustomdiagram/AccessorCustomInteractable.java diff --git a/dependencies.gradle b/dependencies.gradle index bea8fac61..8896859ba 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -19,7 +19,7 @@ dependencies { shadowImplementation("org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.36.0") devOnlyNonPublishable("com.github.GTNewHorizons:StructureLib:1.4.43:dev") - devOnlyNonPublishable("com.github.GTNewHorizons:GT5-Unofficial:5.09.54.158:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:GT5-Unofficial:5.09.54.194:dev") devOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.140-GTNH:dev") devOnlyNonPublishable("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-1061-GTNH:dev") devOnlyNonPublishable("com.github.GTNewHorizons:CarpentersBlocks:3.7.3-GTNH:dev") @@ -42,12 +42,12 @@ dependencies { runtimeOnlyNonPublishable("it.unimi.dsi:fastutil:8.5.18") runtimeOnlyNonPublishable(rfg.deobf("curse.maven:spark-361579:4271867")) - compileOnlyApi("com.github.GTNewHorizons:nei-custom-diagram:1.8.35:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:nei-custom-diagram:1.8.36:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:TinkersConstruct:1.14.112-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Mantle:0.5.4:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.6.0-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:LogisticsPipes:1.5.36-GTNH:dev") { transitive = false } - compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.63:dev") { transitive = false } + compileOnlyApi("com.github.GTNewHorizons:BuildCraft:7.1.64:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:Translocators:1.4.5:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:SimpleSkinBackport:1.0.3-GTNH:dev") { transitive = false } compileOnlyApi("com.github.GTNewHorizons:OpenComputers:1.12.61-GTNH:dev") { transitive = false } diff --git a/src/main/java/com/hfstudio/guidenh/integration/buildcraft/BuildCraftHelpers.java b/src/main/java/com/hfstudio/guidenh/integration/buildcraft/BuildCraftHelpers.java index 4c61adbbd..4ad6ab6e2 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/buildcraft/BuildCraftHelpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/buildcraft/BuildCraftHelpers.java @@ -8,7 +8,6 @@ import org.jetbrains.annotations.Nullable; import com.hfstudio.guidenh.guide.scene.level.GuidebookLevel; -import com.hfstudio.guidenh.mixins.late.compat.buildcraft.AccessorTileGenericPipe; import buildcraft.transport.BlockGenericPipe; import buildcraft.transport.Pipe; @@ -36,15 +35,14 @@ public static ItemStack resolveDisplayStack(GuidebookLevel level, Block block, i return null; } TileEntity tile = level.getTileEntity(x, y, z); - if (!isTileGenericPipe(tile)) { + if (!(tile instanceof TileGenericPipe genericPipe)) { return null; } - AccessorTileGenericPipe accessor = (AccessorTileGenericPipe) tile; - Pipe pipe = accessor.getPipe(); + Pipe pipe = genericPipe.pipe; if (pipe == null || pipe.item == null) { return null; } - return new ItemStack(pipe.item, 1, accessor.invokeGetItemMetadata()); + return new ItemStack(pipe.item, 1, genericPipe.getItemMetadata()); } /** @@ -55,17 +53,16 @@ public static ItemStack resolveDisplayStack(GuidebookLevel level, Block block, i */ @Optional.Method(modid = "BuildCraft|Transport") public static void initializePipeRenderState(TileEntity tile) { - if (!isTileGenericPipe(tile)) { + if (!(tile instanceof TileGenericPipe genericPipe)) { return; } - AccessorTileGenericPipe accessor = (AccessorTileGenericPipe) tile; - if (accessor.getPipe() == null) { + if (genericPipe.pipe == null) { return; } // Recompute pipeConnectionsBuffer from the current fake-world neighbors, then // copy the buffer into the PipeRenderState connection matrix. - accessor.invokeComputeConnections(); - accessor.invokeRefreshRenderState(); + genericPipe.computeConnections(); + genericPipe.refreshRenderState(); } /** @@ -78,10 +75,4 @@ public static void prepare(GuidebookLevel level) { initializePipeRenderState(tile); } } - - @Optional.Method(modid = "BuildCraft|Transport") - public static boolean isTileGenericPipe(@Nullable TileEntity tile) { - return tile instanceof TileGenericPipe; - } - } diff --git a/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java b/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java index b3f188fd7..a34eccc5e 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java @@ -21,7 +21,6 @@ import com.hfstudio.guidenh.guide.scene.level.GuidebookLevel; import com.hfstudio.guidenh.guide.scene.support.GuideDebugLog; import com.hfstudio.guidenh.integration.Mods; -import com.hfstudio.guidenh.mixins.late.compat.gregtech.AccessorHatchElementBuilder; import bartworks.system.material.BWMetaGeneratedBlocks; import bartworks.system.material.TileEntityMetaGeneratedBlock; @@ -36,7 +35,6 @@ import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; import gregtech.api.structure.error.StructureError; import gregtech.api.util.GTOreDictUnificator; -import gregtech.api.util.HatchElementBuilder; import gregtech.common.blocks.ItemMachines; import gregtech.common.misc.GTStructureChannels; @@ -916,49 +914,6 @@ private static boolean isMTEHatchImpl(Object metaTileEntity) { return metaTileEntity instanceof MTEHatch; } - public static boolean isHatchElementBuilder(@Nullable Object candidate) { - return Mods.GregTech.isModLoaded() && isHatchElementBuilderImpl(candidate); - } - - @Optional.Method(modid = "gregtech_nh") - private static boolean isHatchElementBuilderImpl(Object candidate) { - return candidate instanceof HatchElementBuilder; - } - - public static int getHatchBuilderHint(@Nullable Object hatchBuilder) { - if (!isHatchElementBuilder(hatchBuilder)) { - return -1; - } - try { - return getHatchBuilderHintImpl(hatchBuilder); - } catch (Throwable ignored) { - return -1; - } - } - - @Optional.Method(modid = "gregtech_nh") - private static int getHatchBuilderHintImpl(Object hatchBuilder) { - return ((AccessorHatchElementBuilder) hatchBuilder).guidenh$getHint(); - } - - @Nullable - public static ItemStack getStackFormFromMetaTile(@Nullable Object metaTileEntity) { - if (metaTileEntity == null || !Mods.GregTech.isModLoaded()) { - return null; - } - try { - return getStackFormFromMetaTileImpl(metaTileEntity); - } catch (Throwable ignored) { - return null; - } - } - - @Optional.Method(modid = "gregtech_nh") - @Nullable - private static ItemStack getStackFormFromMetaTileImpl(Object metaTileEntity) { - return ((IMetaTileEntity) metaTileEntity).getStackForm(1L); - } - public static void logInfoOnce(String key, String message, Object... args) { if (!GuideDebugLog.isEnabled() || key == null || key.isEmpty() || message == null || message.isEmpty()) { return; diff --git a/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java b/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java index 9cc8fbb6f..902177465 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java +++ b/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java @@ -36,7 +36,6 @@ import com.hfstudio.guidenh.guide.internal.util.DisplayScale; import com.hfstudio.guidenh.guide.scene.support.GuideDebugLog; import com.hfstudio.guidenh.integration.Mods; -import com.hfstudio.guidenh.mixins.late.compat.neicustomdiagram.AccessorCustomInteractable; import cpw.mods.fml.common.Optional; @@ -198,10 +197,10 @@ private static void renderCustomInteractable(CustomInteractable interactable, Di int clipY, int clipWidth, int clipHeight) { if (interactable.drawable() instanceof ComponentLabel componentLabel) { Point position = interactable.position(); - ((AccessorCustomInteractable) interactable).getDrawBackground() + interactable.drawBackground() .accept(position); renderComponent(componentLabel.component(), position, clipX, clipY, clipWidth, clipHeight); - ((AccessorCustomInteractable) interactable).getDrawForeground() + interactable.drawForeground() .accept(position); return; } diff --git a/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java b/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java index 0cfaee349..c490bf41b 100644 --- a/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java +++ b/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java @@ -28,18 +28,12 @@ public enum Mixins implements IMixins { BQ_COMPAT(Side.CLIENT, Phase.LATE, Mods.BetterQuesting, "compat.betterquesting.MixinPanelButtonQuest", "compat.betterquesting.MixinPanelTextBox", "compat.betterquesting.AccessorPanelTextBox"), - GREGTECH_HATCH_BUILDER(Side.CLIENT, Phase.LATE, Mods.GregTech, "compat.gregtech.AccessorHatchElementBuilder", - "compat.gregtech.MixinHatchElementBuilderPreview", "compat.gregtech.MixinHatchElementPlacementPreview"), + GREGTECH_HATCH_BUILDER(Side.CLIENT, Phase.LATE, Mods.GregTech, "compat.gregtech.MixinHatchElementBuilderPreview", + "compat.gregtech.MixinHatchElementPlacementPreview"), STRUCTURELIB_MINIMUM_HATCHES(Side.CLIENT, Phase.LATE, Mods.StructureLib, "compat.structurelib.MixinSurvivalBuildStructureWalker"), - BC_TILE_GENERIC_PIPE(Side.CLIENT, Phase.LATE, Mods.BuildCraftTransport, - "compat.buildcraft.AccessorTileGenericPipe"), - - NEI_CUSTOM_DIAGRAM(Side.CLIENT, Phase.LATE, Mods.NeiCustomDiagram, - "compat.neicustomdiagram.AccessorCustomInteractable"), - ; private final MixinBuilder builder; diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/buildcraft/AccessorTileGenericPipe.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/buildcraft/AccessorTileGenericPipe.java deleted file mode 100644 index 0323a4bf4..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/buildcraft/AccessorTileGenericPipe.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.buildcraft; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -import buildcraft.transport.Pipe; -import buildcraft.transport.TileGenericPipe; - -@Mixin(value = TileGenericPipe.class, remap = false) -public interface AccessorTileGenericPipe { - - @Accessor("pipe") - Pipe getPipe(); - - @Invoker("computeConnections") - void invokeComputeConnections(); - - @Invoker("refreshRenderState") - void invokeRefreshRenderState(); - - @Invoker("getItemMetadata") - int invokeGetItemMetadata(); -} diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/AccessorHatchElementBuilder.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/AccessorHatchElementBuilder.java deleted file mode 100644 index 4bc1017a8..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/AccessorHatchElementBuilder.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.gregtech; - -import java.util.function.Predicate; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import gregtech.api.util.HatchElementBuilder; - -@Mixin(value = HatchElementBuilder.class, remap = false) -public interface AccessorHatchElementBuilder { - - @Accessor("mHint") - int guidenh$getHint(); - - @Accessor("mReject") - Predicate guidenh$getReject(); - - @Accessor("mCasingIndex") - int guidenh$getCasingIndex(); -} diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/MixinHatchElementBuilderPreview.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/MixinHatchElementBuilderPreview.java index 1e31bf1c0..e5ae6577a 100644 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/MixinHatchElementBuilderPreview.java +++ b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/gregtech/MixinHatchElementBuilderPreview.java @@ -22,6 +22,12 @@ @Mixin(value = HatchElementBuilder.class, remap = false) public abstract class MixinHatchElementBuilderPreview { + @Shadow + private int mCasingIndex; + + @Shadow + private Predicate mReject; + @Shadow private BiFunction> mHatchItemFilter; @@ -38,8 +44,6 @@ public abstract class MixinHatchElementBuilderPreview { if (element == null) { return; } - boolean hasMinimumRequirement = ((AccessorHatchElementBuilder) this).guidenh$getReject() != null; - int casingIndex = ((AccessorHatchElementBuilder) this).guidenh$getCasingIndex(); - StructureLibMinimumHatchPlacement.register(element, hasMinimumRequirement, casingIndex); + StructureLibMinimumHatchPlacement.register(element, mReject != null, mCasingIndex); } } diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/neicustomdiagram/AccessorCustomInteractable.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/neicustomdiagram/AccessorCustomInteractable.java deleted file mode 100644 index efa2e4d2e..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/neicustomdiagram/AccessorCustomInteractable.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.neicustomdiagram; - -import java.util.function.Consumer; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import com.github.dcysteine.neicustomdiagram.api.diagram.interactable.CustomInteractable; -import com.github.dcysteine.neicustomdiagram.api.draw.Point; - -@Mixin(value = CustomInteractable.class, remap = false) -public interface AccessorCustomInteractable { - - @Accessor("drawBackground") - Consumer getDrawBackground(); - - @Accessor("drawForeground") - Consumer getDrawForeground(); -} From b0c21414c1147bfa3965f892261bccb4ad5298b9 Mon Sep 17 00:00:00 2001 From: ABKQPO <93412322+ABKQPO@users.noreply.github.com> Date: Sun, 4 Oct 2026 02:27:32 +0800 Subject: [PATCH 2/2] remove bq mixin --- dependencies.gradle | 2 +- .../GuideNhClientIntegrationBootstrap.java | 59 +++++++++------- .../BetterQuestingQuestHoverProvider.java | 20 +++++- .../integration/betterquesting/BqCompat.java | 24 ------- .../betterquesting/BqGuidePageLinks.java | 6 +- .../com/hfstudio/guidenh/mixins/Mixins.java | 3 - .../betterquesting/AccessorPanelTextBox.java | 15 ----- .../betterquesting/MixinPanelButtonQuest.java | 67 ------------------- .../betterquesting/MixinPanelTextBox.java | 46 ------------- 9 files changed, 55 insertions(+), 187 deletions(-) delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/AccessorPanelTextBox.java delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelButtonQuest.java delete mode 100644 src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelTextBox.java diff --git a/dependencies.gradle b/dependencies.gradle index 8896859ba..9238e601b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -27,7 +27,7 @@ dependencies { devOnlyNonPublishable("com.github.GTNewHorizons:WirelessRedstone-CBE:1.7.12:dev") devOnlyNonPublishable("com.github.GTNewHorizons:Railcraft:9.17.31:dev") devOnlyNonPublishable("com.github.GTNewHorizons:EnhancedLootBags:1.3.4:dev") - devOnlyNonPublishable("com.github.GTNewHorizons:BetterQuesting:3.8.86-GTNH:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:BetterQuesting:3.8.88-GTNH:dev") devOnlyNonPublishable("com.github.GTNewHorizons:Angelica:2.2.13:dev") devOnlyNonPublishable("com.github.GTNewHorizons:TX-Loader:1.9:dev") devOnlyNonPublishable("curse.maven:cofh-core-69162:2388751") diff --git a/src/main/java/com/hfstudio/guidenh/integration/GuideNhClientIntegrationBootstrap.java b/src/main/java/com/hfstudio/guidenh/integration/GuideNhClientIntegrationBootstrap.java index b36bc4ff7..7b4f42f0c 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/GuideNhClientIntegrationBootstrap.java +++ b/src/main/java/com/hfstudio/guidenh/integration/GuideNhClientIntegrationBootstrap.java @@ -1,5 +1,12 @@ package com.hfstudio.guidenh.integration; +import java.util.List; +import java.util.Map.Entry; +import java.util.UUID; + +import net.minecraft.util.ResourceLocation; + +import com.hfstudio.guidenh.client.hotkey.OpenGuideHotkey; import com.hfstudio.guidenh.guide.scene.snapshot.GuideStructureSnapshotRegistration; import com.hfstudio.guidenh.integration.ae2.Ae2BlockStatsProvider; import com.hfstudio.guidenh.integration.ae2.Ae2FakeWorldIntegration; @@ -8,6 +15,7 @@ import com.hfstudio.guidenh.integration.api.client.GuideNhClientIntegrationRegistry; import com.hfstudio.guidenh.integration.bartworks.BartWorksFakeWorldIntegration; import com.hfstudio.guidenh.integration.betterquesting.BetterQuestingQuestHoverProvider; +import com.hfstudio.guidenh.integration.betterquesting.BqGuidePageLinks; import com.hfstudio.guidenh.integration.betterquesting.BqGuidePageUriHandler; import com.hfstudio.guidenh.integration.buildcraft.BuildCraftBlockDisplayProvider; import com.hfstudio.guidenh.integration.buildcraft.BuildCraftPreviewPrepareContributor; @@ -40,6 +48,10 @@ import com.hfstudio.guidenh.integration.structurelib.StructureLibControllerIntegrationRegistry; import com.hfstudio.guidenh.integration.tinkerconstruct.TinkersConstructPreviewPrepareContributor; +import betterquesting.api2.client.gui.context.QuestHoverRegistry; +import betterquesting.api2.client.gui.context.QuestTooltipRegistry; +import betterquesting.api2.client.gui.panels.content.PanelTextBox; + public class GuideNhClientIntegrationBootstrap { private GuideNhClientIntegrationBootstrap() {} @@ -78,33 +90,28 @@ public static void preInitClient() { if (Mods.BetterQuesting.isModLoaded()) { BqGuidePageUriHandler.register(); - - // TODO: Enable these registrations after BetterQuesting releases the editor and text-box extension APIs. - // TextEditorActionRegistry.register( - // new ResourceLocation("guidenh", "guide_link"), - // new TextEditorMacro("guidenh.compat.bq.insert_guide_link", "[guide] ", "[/guide]")); - // ResourceLocation guidePageInteraction = new ResourceLocation("guidenh", "guide_page"); - // PanelTextBox.registerTextProcessor( - // guidePageInteraction, - // text -> BqGuidePageLinks.replaceGuideTags( - // text, - // (target, label) -> PanelTextBox.createInteractiveText(guidePageInteraction, target, label))); - // PanelTextBox.registerTextInteraction(guidePageInteraction, new PanelTextBox.TextInteraction() { - // - // @Override - // public boolean onClick(String target) { - // return BqGuidePageUriHandler.open(BqGuidePageLinks.parsePageSpec(target)); - // } - // - // @Override - // public List getTooltip(String target) { - // PageAnchor anchor = BqGuidePageLinks.parsePageSpec(target); - // return anchor != null ? BqGuidePageLinks.getTooltip(anchor) : null; - // } - // }); - + PanelTextBox.registerTextProcessor( + new ResourceLocation("guidenh", "guide_page_links"), + BqGuidePageLinks::replaceGuideTags); + QuestTooltipRegistry.register((target, tooltip) -> { + if (target instanceof UUID uuid) { + OpenGuideHotkey.appendQuestTooltip(uuid, tooltip); + } else if (target instanceof Entryentry) { + Object key = entry.getKey(); + if (key instanceof UUID uuid) { + OpenGuideHotkey.appendQuestTooltip(uuid, tooltip); + } + } else if (target instanceof String s) { + List guideTooltip = BqGuidePageLinks.getTooltip(s); + if (guideTooltip != null) { + tooltip.addAll(guideTooltip); + } + } + }); + BetterQuestingQuestHoverProvider hoverProvider = new BetterQuestingQuestHoverProvider(); + QuestHoverRegistry.register(hoverProvider); GuideNhClientIntegrationRegistry.global() - .registerQuestHoverProvider(new BetterQuestingQuestHoverProvider()); + .registerQuestHoverProvider(hoverProvider); } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BetterQuestingQuestHoverProvider.java b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BetterQuestingQuestHoverProvider.java index c0dfb3ccc..04c3b3f8e 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BetterQuestingQuestHoverProvider.java +++ b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BetterQuestingQuestHoverProvider.java @@ -1,5 +1,6 @@ package com.hfstudio.guidenh.integration.betterquesting; +import java.util.Map.Entry; import java.util.UUID; import org.jetbrains.annotations.Nullable; @@ -8,11 +9,26 @@ import com.hfstudio.guidenh.guide.internal.MutableGuide; import com.hfstudio.guidenh.integration.api.client.QuestHoverProvider; -public class BetterQuestingQuestHoverProvider implements QuestHoverProvider { +import betterquesting.api2.client.gui.context.IQuestHoverListener; + +public class BetterQuestingQuestHoverProvider implements QuestHoverProvider, IQuestHoverListener { + + @Nullable + private Object currentTarget; @Override public @Nullable UUID currentHoveredQuestId() { - return BqCompat.getCurrentHoveredQuestUuid(); + if (!(currentTarget instanceof Entry)) { + return null; + } + + Object key = ((Entry) currentTarget).getKey(); + return key instanceof UUID ? (UUID) key : null; + } + + @Override + public void onQuestHoverChanged(@Nullable Object target) { + currentTarget = target; } @Override diff --git a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqCompat.java b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqCompat.java index de966326d..0570b6a72 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqCompat.java +++ b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqCompat.java @@ -1,9 +1,6 @@ package com.hfstudio.guidenh.integration.betterquesting; import java.util.List; -import java.util.UUID; - -import org.jetbrains.annotations.Nullable; import com.hfstudio.guidenh.guide.GuideBuilder; import com.hfstudio.guidenh.guide.compiler.TagCompiler; @@ -19,9 +16,6 @@ */ public class BqCompat { - @Nullable - public static volatile UUID currentHoveredQuestUuid; - /** * Attaches the {@link QuestIndex} to the given guide builder. Safe to call when BQ is * absent because {@link QuestIndex} only depends on standard library types. @@ -39,22 +33,4 @@ public static void appendCompilers(List compilers) { compilers.add(new QuestLinkCompiler()); compilers.add(new QuestCardCompiler()); } - - /** - * Returns the UUID of the BetterQuesting quest currently under the mouse cursor in the BQ - * quest line GUI, or {@code null} if no quest is hovered. Updated by the BQ-targeted mixin - * and consumed by the open-guide hotkey handler. - */ - @Nullable - public static UUID getCurrentHoveredQuestUuid() { - return currentHoveredQuestUuid; - } - - /** - * Sets the UUID of the BetterQuesting quest currently under the mouse cursor. Intended for - * use by the BQ-targeted mixin only. Pass {@code null} to clear. - */ - public static void setCurrentHoveredQuestUuid(@Nullable UUID uuid) { - currentHoveredQuestUuid = uuid; - } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqGuidePageLinks.java b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqGuidePageLinks.java index 6657bd15a..6c9573d24 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqGuidePageLinks.java +++ b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/BqGuidePageLinks.java @@ -123,10 +123,10 @@ public static boolean isGuideUri(@Nullable String url) { public static List getTooltip(PageAnchor anchor) { GuidePageLinkTarget target = GuidePageLinkTarget.resolve(anchor); - List tooltip = List.of( + return List.of( EnumChatFormatting.AQUA + I18n.format("guidenh.compat.bq.open_guide_page"), - EnumChatFormatting.GRAY + target.title()); - return tooltip; + EnumChatFormatting.GRAY + target.title(), + EnumChatFormatting.GRAY + I18n.format("betterquesting.tooltip.quest_link.click")); } private static String replaceGuideTagsUncached(String text, diff --git a/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java b/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java index c490bf41b..42466ea42 100644 --- a/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java +++ b/src/main/java/com/hfstudio/guidenh/mixins/Mixins.java @@ -25,9 +25,6 @@ public enum Mixins implements IMixins { ANGELICA_SCENE_EXPORT(Side.CLIENT, Phase.LATE, Mods.Angelica, "compat.angelica.MixinVanillaModelMeshesSceneExportCapture"), - BQ_COMPAT(Side.CLIENT, Phase.LATE, Mods.BetterQuesting, "compat.betterquesting.MixinPanelButtonQuest", - "compat.betterquesting.MixinPanelTextBox", "compat.betterquesting.AccessorPanelTextBox"), - GREGTECH_HATCH_BUILDER(Side.CLIENT, Phase.LATE, Mods.GregTech, "compat.gregtech.MixinHatchElementBuilderPreview", "compat.gregtech.MixinHatchElementPlacementPreview"), diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/AccessorPanelTextBox.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/AccessorPanelTextBox.java deleted file mode 100644 index bb22d6f77..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/AccessorPanelTextBox.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.betterquesting; - -import java.util.List; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import betterquesting.api2.client.gui.panels.content.PanelTextBox; - -@Mixin(value = PanelTextBox.class, remap = false) -public interface AccessorPanelTextBox { - - @Accessor("hotZones") - List guidenh$getHotZones(); -} diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelButtonQuest.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelButtonQuest.java deleted file mode 100644 index 205d87118..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelButtonQuest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.betterquesting; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.hfstudio.guidenh.client.hotkey.OpenGuideHotkey; -import com.hfstudio.guidenh.integration.betterquesting.BqCompat; - -import betterquesting.api.questing.IQuest; -import betterquesting.api2.client.gui.controls.PanelButtonQuest; - -@Mixin(value = PanelButtonQuest.class, remap = false) -public abstract class MixinPanelButtonQuest { - - @Inject(method = "drawPanel(IIF)V", at = @At("HEAD"), remap = false, require = 0) - private void guidenh$captureQuestHover(int mx, int my, float partialTick, CallbackInfo ci) { - PanelButtonQuest self = (PanelButtonQuest) (Object) this; - Map.Entry stored = self.getStoredValue(); - if (stored == null) { - return; - } - UUID id = stored.getKey(); - if (self.getTransform() - .contains(mx, my)) { - BqCompat.setCurrentHoveredQuestUuid(id); - } else if (Objects.equals(BqCompat.getCurrentHoveredQuestUuid(), id)) { - BqCompat.setCurrentHoveredQuestUuid(null); - } - } - - @Inject( - method = "getTooltip(II)Ljava/util/List;", - at = @At("RETURN"), - remap = false, - require = 0, - cancellable = true) - private void guidenh$appendQuestGuideTooltip(int mx, int my, CallbackInfoReturnable> cir) { - PanelButtonQuest self = (PanelButtonQuest) (Object) this; - Map.Entry stored = self.getStoredValue(); - if (stored == null || !self.getTransform() - .contains(mx, my)) { - return; - } - - List tooltip = cir.getReturnValue(); - if (tooltip == null) { - return; - } - - List mutableTooltip = tooltip; - if (!(tooltip instanceof ArrayList)) { - mutableTooltip = new ArrayList<>(tooltip); - } - if (OpenGuideHotkey.appendQuestTooltip(stored.getKey(), mutableTooltip)) { - cir.setReturnValue(mutableTooltip); - } - } -} diff --git a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelTextBox.java b/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelTextBox.java deleted file mode 100644 index a30d13dac..000000000 --- a/src/main/java/com/hfstudio/guidenh/mixins/late/compat/betterquesting/MixinPanelTextBox.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.hfstudio.guidenh.mixins.late.compat.betterquesting; - -import java.util.List; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.hfstudio.guidenh.integration.betterquesting.BqGuidePageLinks; - -import betterquesting.api2.client.gui.panels.content.PanelTextBox; - -@Mixin(value = PanelTextBox.class, remap = false) -public abstract class MixinPanelTextBox { - - @ModifyVariable( - method = "setText(Ljava/lang/String;)Lbetterquesting/api2/client/gui/panels/content/PanelTextBox;", - at = @At("HEAD"), - argsOnly = true, - name = "text") - private String guidenh$replaceGuideTags(String text) { - return BqGuidePageLinks.replaceGuideTags(text); - } - - @Inject(method = "getTooltip(II)Ljava/util/List;", at = @At("HEAD"), cancellable = true) - private void guidenh$getGuideLinkTooltip(int mx, int my, CallbackInfoReturnable> cir) { - int mxt = mx + ((PanelTextBox) (Object) this).getTransform() - .getX(); - int myt = my + ((PanelTextBox) (Object) this).getTransform() - .getY(); - for (PanelTextBox.HotZone hotZone : ((AccessorPanelTextBox) this).guidenh$getHotZones()) { - if (hotZone.location.contains(mxt, myt)) { - Object link = hotZone.link; - if (link instanceof String) { - List tooltip = BqGuidePageLinks.getTooltip((String) link); - if (tooltip != null && !tooltip.isEmpty()) { - cir.setReturnValue(tooltip); - } - } - return; - } - } - } -}