diff --git a/src/main/java/lu/kolja/expandedae/definition/ExpLang.java b/src/main/java/lu/kolja/expandedae/definition/ExpLang.java index 36b7c05..0729fa2 100644 --- a/src/main/java/lu/kolja/expandedae/definition/ExpLang.java +++ b/src/main/java/lu/kolja/expandedae/definition/ExpLang.java @@ -28,6 +28,7 @@ public enum ExpLang implements LocalizationEnum { GUI_BUTTONS_PATTERN_MULT("gui.buttons.pattern.mult", "§bx%d§f"), GUI_BUTTONS_TOOLTIPS_PATTERN_DIV("gui.buttons.tooltips.pattern.div", "Divides contents by §b%d§f"), GUI_BUTTONS_TOOLTIPS_PATTERN_MULT("gui.buttons.tooltips.pattern.mult", "Multiplies contents by §c%d§f"), + GUI_EXP_SHIFT_TO_HIGHLIGHT("gui.expandedae.shift_to_highlight", "Shift-Click to highlight"), GROUP_ADV_PATTERN_PROVIDER_NAME("group.adv_pattern_provider.name", "ME Advanced Pattern Provider"), GROUP_EX_PATTERN_PROVIDER_NAME("group.ex_pattern_provider.name", "ME Extended Pattern Provider"), diff --git a/src/main/java/lu/kolja/expandedae/helper/misc/ICraftingCPUMenu.java b/src/main/java/lu/kolja/expandedae/helper/misc/ICraftingCPUMenu.java new file mode 100644 index 0000000..cbe5539 --- /dev/null +++ b/src/main/java/lu/kolja/expandedae/helper/misc/ICraftingCPUMenu.java @@ -0,0 +1,7 @@ +package lu.kolja.expandedae.helper.misc; + +import appeng.api.stacks.AEKey; + +public interface ICraftingCPUMenu { + AEKey expandedae$writeToKey(AEKey key); +} diff --git a/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUMenu.java b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUMenu.java new file mode 100644 index 0000000..2901574 --- /dev/null +++ b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUMenu.java @@ -0,0 +1,34 @@ +package lu.kolja.expandedae.mixin.highlight; + +import appeng.api.networking.IGrid; +import appeng.api.stacks.AEKey; +import appeng.blockentity.crafting.PatternProviderBlockEntity; +import appeng.menu.me.crafting.CraftingCPUMenu; +import lu.kolja.expandedae.helper.misc.ICraftingCPUMenu; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(value = CraftingCPUMenu.class, remap = false) +public abstract class MixinCraftingCPUMenu implements ICraftingCPUMenu { + @Shadow abstract IGrid getGrid(); + + @Shadow @Final private IGrid grid; + + @Unique + @Nullable + @Override + public AEKey expandedae$writeToKey(AEKey key) { + for (var machine : this.grid.getActiveMachines(PatternProviderBlockEntity.class)) { + for (var inputs : machine.getLogic().getAvailablePatterns()) { + if (inputs.getOutputs()[0].what() != key) continue; + var tag = key.toTag(); + tag.putLong("pos", machine.getBlockPos().asLong()); + return AEKey.fromTagGeneric(tag); + } + } + return key; + } +} diff --git a/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUScreen.java b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUScreen.java new file mode 100644 index 0000000..a2001a2 --- /dev/null +++ b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingCPUScreen.java @@ -0,0 +1,39 @@ +package lu.kolja.expandedae.mixin.highlight; + +import appeng.client.gui.AEBaseScreen; +import appeng.client.gui.me.crafting.CraftingCPUScreen; +import appeng.client.gui.me.crafting.CraftingStatusTableRenderer; +import appeng.client.gui.style.ScreenStyle; +import appeng.menu.me.crafting.CraftingCPUMenu; +import lu.kolja.expandedae.client.render.ExpHighlightHandler; +import lu.kolja.expandedae.helper.misc.KeybindUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = CraftingCPUScreen.class, remap = false) +public class MixinCraftingCPUScreen extends AEBaseScreen { + + @Shadow @Final private CraftingStatusTableRenderer table; + + public MixinCraftingCPUScreen(T menu, Inventory playerInventory, Component title, ScreenStyle style) { + super(menu, playerInventory, title, style); + } + + @Override + public boolean mouseClicked(double xCoord, double yCoord, int btn) { + var hoveredStack = this.table.getHoveredStack(); + if (hoveredStack == null || !KeybindUtil.isShiftDown()) return false; + var data = hoveredStack.stack().what().toTag(); + var pos = BlockPos.of(data.getLong("pos")); + ExpHighlightHandler.highlight( + pos, + getPlayer().level().dimension(), + System.currentTimeMillis() + 100000 + ); + return super.mouseClicked(xCoord, yCoord, btn); + } +} diff --git a/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingStatusTableRenderer.java b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingStatusTableRenderer.java new file mode 100644 index 0000000..28e1dfc --- /dev/null +++ b/src/main/java/lu/kolja/expandedae/mixin/highlight/MixinCraftingStatusTableRenderer.java @@ -0,0 +1,48 @@ +package lu.kolja.expandedae.mixin.highlight; + +import appeng.api.stacks.AEKey; +import appeng.client.gui.AEBaseScreen; +import appeng.client.gui.me.crafting.AbstractTableRenderer; +import appeng.client.gui.me.crafting.CraftingCPUScreen; +import appeng.client.gui.me.crafting.CraftingStatusTableRenderer; +import appeng.menu.me.crafting.CraftingCPUMenu; +import appeng.menu.me.crafting.CraftingStatusEntry; +import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; +import java.util.List; +import lu.kolja.expandedae.helper.misc.ICraftingCPUMenu; +import lu.kolja.expandedae.helper.misc.KeybindUtil; +import net.minecraft.network.chat.Component; +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.CallbackInfoReturnable; + +@Mixin(value = CraftingStatusTableRenderer.class, remap = false) +public abstract class MixinCraftingStatusTableRenderer extends AbstractTableRenderer { + public MixinCraftingStatusTableRenderer(AEBaseScreen screen, int x, int y, int rows) { + super(screen, x, y, rows); + } + + @Inject( + method = "getEntryStack(Lappeng/menu/me/crafting/CraftingStatusEntry;)Lappeng/api/stacks/AEKey;", + at = @At("RETURN"), + cancellable = true + ) + private void getEntryStack(CallbackInfoReturnable cir) { + var key = cir.getReturnValue(); + var writtenKey = ((ICraftingCPUMenu) (((CraftingCPUScreen) this.screen).getMenu())).expandedae$writeToKey(key); + cir.setReturnValue(writtenKey); + } + + @Inject( + method = "getEntryTooltip(Lappeng/menu/me/crafting/CraftingStatusEntry;)Ljava/util/List;", + at = @At("RETURN"), + cancellable = true + ) + private void getEntryTooltip(CraftingStatusEntry entry, CallbackInfoReturnable> cir) { + if (!KeybindUtil.isShiftDown()) return; + var lines = cir.getReturnValue(); + lines.add(Component.translatable("gui.expandedae.shift_to_highlight")); + cir.setReturnValue(lines); + } +} diff --git a/src/main/resources/mixins.expandedae.json b/src/main/resources/mixins.expandedae.json index 12c4fdc..50869c8 100644 --- a/src/main/resources/mixins.expandedae.json +++ b/src/main/resources/mixins.expandedae.json @@ -14,6 +14,8 @@ "compat.cosmic.MixinPatternProviderMenuCosm", "cpu.MixinCPUSelectionList", "cpu.MixinCraftingCPUCluster", + "highlight.MixinCraftingCPUMenu", + "highlight.MixinCraftingStatusTableRenderer", "emi.MixinEmiScreenBase", "misc.MixinMathExpressionParser", "misc.MixinSettings", @@ -29,6 +31,7 @@ "compat.appflux.MixinPatternProviderScreenAppFlux", "compat.cosmic.MixinPatternProviderScreenCosm", "cpu.MixinCraftConfirmScreen", + "highlight.MixinCraftingCPUScreen", "cpu.MixinModelBakery", "misc.MixinSettingToggleButton", "patternprovider.MixinPatternProviderScreen"