From fba701131c8380fcd172ed2ce7ee54f918a7ce54 Mon Sep 17 00:00:00 2001 From: GaLicn <3096147684@qq.com> Date: Sat, 16 Aug 2025 01:34:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=86=99=E5=AE=8C=E6=A0=B7?= =?UTF-8?q?=E6=9D=BF=E4=B8=8A=E4=BC=A0=E6=97=B6=E8=87=AA=E5=8A=A8=E5=A1=AB?= =?UTF-8?q?=E5=86=99=E5=A4=84=E7=90=86=E6=96=B9=E6=B3=95=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/ui/ProviderSelectScreen.java | 9 +++++ .../EncodePatternTransferHandlerMixin.java | 39 +++++++++++++++++++ .../util/ExtendedAEPatternUploadUtil.java | 35 +++++++++++++++++ .../resources/extendedae_plus.mixins.json | 3 +- 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java diff --git a/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java b/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java index e934c99..53e3c07 100644 --- a/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java +++ b/src/main/java/com/extendedae_plus/client/ui/ProviderSelectScreen.java @@ -52,6 +52,15 @@ public class ProviderSelectScreen extends Screen { this.ids = ids; this.names = names; this.emptySlots = emptySlots; + // 如果有来自 JEI 的最近处理名称,则作为初始查询 + try { + String recent = com.extendedae_plus.util.ExtendedAEPatternUploadUtil.lastProcessingName; + if (recent != null && !recent.isBlank()) { + this.query = recent; + // 用后即清空,避免污染下次 + com.extendedae_plus.util.ExtendedAEPatternUploadUtil.lastProcessingName = null; + } + } catch (Throwable ignored) {} buildGroups(); applyFilter(); } diff --git a/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java new file mode 100644 index 0000000..cd57956 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java @@ -0,0 +1,39 @@ +package com.extendedae_plus.mixin.jei; + +import appeng.integration.modules.jei.transfer.EncodePatternTransferHandler; +import appeng.integration.modules.jeirei.EncodingHelper; +import appeng.menu.me.items.PatternEncodingTermMenu; +import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.recipe.transfer.IRecipeTransferError; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.crafting.Recipe; +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; + +/** + * 捕获通过 JEI 点击 + 填充到样板编码终端的处理配方,并记录其工艺名称(如“烧炼”)。 + */ +@Mixin(value = EncodePatternTransferHandler.class, remap = false) +public abstract class EncodePatternTransferHandlerMixin { + + @Inject(method = "transferRecipe", at = @At("HEAD"), require = 0) + private void extendedae_plus$captureProcessingName(PatternEncodingTermMenu menu, + Object recipeBase, + IRecipeSlotsView slotsView, + Player player, + boolean maxTransfer, + boolean doTransfer, + CallbackInfoReturnable cir) { + if (!doTransfer) return; + if (!(recipeBase instanceof Recipe recipe)) return; + // 仅记录处理配方(非 3x3 合成) + if (EncodingHelper.isSupportedCraftingRecipe(recipe)) return; + String name = ExtendedAEPatternUploadUtil.mapRecipeTypeToCn(recipe); + if (name != null && !name.isBlank()) { + ExtendedAEPatternUploadUtil.setLastProcessingName(name); + } + } +} diff --git a/src/main/java/com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java b/src/main/java/com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java index 2b3f119..df79f4d 100644 --- a/src/main/java/com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java +++ b/src/main/java/com/extendedae_plus/util/ExtendedAEPatternUploadUtil.java @@ -26,12 +26,47 @@ import com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerM import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.items.IItemHandler; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeType; + /** * ExtendedAE扩展样板管理终端专用的样板上传工具类 * 兼容ExtendedAE的ContainerExPatternTerminal和原版AE2的PatternAccessTermMenu */ public class ExtendedAEPatternUploadUtil { + // 最近一次通过 JEI 填充到编码终端的“处理配方”的中文名称(如:烧炼/高炉/烟熏...) + public static volatile String lastProcessingName = null; + + public static void setLastProcessingName(String name) { + lastProcessingName = name; + } + + public static String mapRecipeTypeToCn(Recipe recipe) { + if (recipe == null) return null; + RecipeType type = recipe.getType(); + ResourceLocation key = BuiltInRegistries.RECIPE_TYPE.getKey(type); + if (key == null) return null; + String id = key.toString(); + String path = key.getPath(); + // 常见原版类型映射 + switch (path) { + case "smelting": + return "烧炼"; // 熔炉 + case "blasting": + return "高炉"; + case "smoking": + return "烟熏"; + case "campfire_cooking": + return "营火烹饪"; + default: + // 其他模组类型,返回路径名,必要时可再做表扩展 + return path; + } + } + /** * 获取玩家当前的样板访问终端菜单(支持ExtendedAE和原版AE2) * diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index afcd551..fc58dbc 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -9,7 +9,8 @@ "GuiExPatternTerminalMixin", "HighlightButtonMixin", "PickFromWirelessMixin", - "PatternEncodingTermScreenMixin" + "PatternEncodingTermScreenMixin", + "jei.EncodePatternTransferHandlerMixin" ], "mixins": [ "ContainerExPatternProviderMixin",