From af35ee9d979c62ea834e5a2016804b4acab5f018 Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Sat, 28 Mar 2026 15:31:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E6=9D=BF=E4=B8=8A=E4=BC=A0=E6=97=B6?= =?UTF-8?q?=E5=90=88=E6=88=90=E9=85=8D=E6=96=B9=E5=9B=BA=E5=AE=9A=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=85=8D=E6=96=B9=E4=B8=BAcrafting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/event/CtrlQPatternKeyHandler.java | 1 + .../client/screen/ProviderSelectScreen.java | 12 ++--- .../EncodePatternTransferHandlerMixin.java | 6 ++- .../uploadPattern/RecipeTypeNameConfig.java | 47 ++++++++++++++++--- 4 files changed, 50 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/extendedae_plus/client/event/CtrlQPatternKeyHandler.java b/src/main/java/com/extendedae_plus/client/event/CtrlQPatternKeyHandler.java index 4f8ff30..4021621 100644 --- a/src/main/java/com/extendedae_plus/client/event/CtrlQPatternKeyHandler.java +++ b/src/main/java/com/extendedae_plus/client/event/CtrlQPatternKeyHandler.java @@ -282,6 +282,7 @@ public class CtrlQPatternKeyHandler { // 10. 获取输出材料 List selectedOutputs = convertOutputsToItemStacks(matchingRecipeInfo); + RecipeTypeNameConfig.presetCraftingProviderSearchKey(); // 11. 发送网络包创建样板并上传到装配矩阵 ModNetwork.CHANNEL.sendToServer(new CreateAndUploadPatternC2SPacket( diff --git a/src/main/java/com/extendedae_plus/client/screen/ProviderSelectScreen.java b/src/main/java/com/extendedae_plus/client/screen/ProviderSelectScreen.java index c846dcd..f5d2bd4 100644 --- a/src/main/java/com/extendedae_plus/client/screen/ProviderSelectScreen.java +++ b/src/main/java/com/extendedae_plus/client/screen/ProviderSelectScreen.java @@ -78,7 +78,7 @@ public class ProviderSelectScreen extends Screen { // 缓存 Component JSON 解析 private static final Map componentCache = new HashMap<>(); private String lastLanguage = ""; // 当前语言版本 - private boolean autoUploadRequestedFromProcessingName = false; + private boolean autoUploadRequestedFromPresetSearch = false; private boolean autoUploadAttempted = false; private int lastExactMatchCount = 0; private boolean lastFilterUsedFallback = false; @@ -89,14 +89,12 @@ public class ProviderSelectScreen extends Screen { this.ids = ids; this.names = names; this.emptySlots = emptySlots; - // 如果有来自 JEI 的最近处理名称,则作为初始查询 + // 如果有来自最近一次写样板流程的预设搜索词,则作为初始查询 try { - String recent = RecipeTypeNameConfig.lastProcessingName; + String recent = RecipeTypeNameConfig.consumeLastProviderSearchKey(); if (recent != null && !recent.isBlank()) { this.query = recent; - this.autoUploadRequestedFromProcessingName = true; - // 用后即清空,避免污染下次 - RecipeTypeNameConfig.lastProcessingName = null; + this.autoUploadRequestedFromPresetSearch = true; } } catch (Throwable ignored) {} buildGroups(); @@ -401,7 +399,7 @@ public class ProviderSelectScreen extends Screen { } private void tryAutoUploadIfUniqueMatch() { - if (!autoUploadRequestedFromProcessingName || autoUploadAttempted) { + if (!autoUploadRequestedFromPresetSearch || autoUploadAttempted) { return; } autoUploadAttempted = true; diff --git a/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java index 5b7250d..33b9066 100644 --- a/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java @@ -30,8 +30,10 @@ public abstract class EncodePatternTransferHandlerMixin { if (!doTransfer) return; String name = null; if (recipeBase instanceof Recipe recipe) { - // 仅记录处理配方(非 3x3 合成) - if (EncodingHelper.isSupportedCraftingRecipe(recipe)) return; + if (EncodingHelper.isSupportedCraftingRecipe(recipe)) { + RecipeTypeNameConfig.presetCraftingProviderSearchKey(); + return; + } name = RecipeTypeNameConfig.mapRecipeTypeToSearchKey(recipe); } else if (recipeBase != null && "com.gregtechceu.gtceu.api.recipe.GTRecipe".equals(recipeBase.getClass().getName())) { diff --git a/src/main/java/com/extendedae_plus/util/uploadPattern/RecipeTypeNameConfig.java b/src/main/java/com/extendedae_plus/util/uploadPattern/RecipeTypeNameConfig.java index 77ae760..001be38 100644 --- a/src/main/java/com/extendedae_plus/util/uploadPattern/RecipeTypeNameConfig.java +++ b/src/main/java/com/extendedae_plus/util/uploadPattern/RecipeTypeNameConfig.java @@ -42,10 +42,32 @@ public final class RecipeTypeNameConfig { private RecipeTypeNameConfig() {} - // 最近一次通过 JEI 填充到编码终端的“处理配方”的中文名称(如:烧炼/高炉/烟熏...) - public static volatile String lastProcessingName = null; + // 最近一次打开供应器选择界面时的预设搜索关键字。 + // 处理样板会写入映射后的配方类型关键字,合成样板固定使用 crafting(可通过映射改名)。 + public static final String DEFAULT_CRAFTING_SEARCH_KEY = "crafting"; + private static volatile String lastProviderSearchKey = null; + public static void setLastProcessingName(String name) { - lastProcessingName = name; + setLastProviderSearchKey(name); + } + + public static void setLastProviderSearchKey(String name) { + if (name == null) { + lastProviderSearchKey = null; + return; + } + String trimmed = name.trim(); + lastProviderSearchKey = trimmed.isEmpty() ? null : trimmed; + } + + public static void presetCraftingProviderSearchKey() { + setLastProviderSearchKey(resolveSearchKeyAlias(DEFAULT_CRAFTING_SEARCH_KEY)); + } + + public static String consumeLastProviderSearchKey() { + String searchKey = lastProviderSearchKey; + lastProviderSearchKey = null; + return searchKey; } /** @@ -240,14 +262,25 @@ public final class RecipeTypeNameConfig { * @param recipe 配方对象 * @return 搜索关键字(自定义名称、别名或类型路径),或 null 如果无效 */ + public static String resolveSearchKeyAlias(String rawKey) { + if (rawKey == null) return null; + String normalized = rawKey.trim(); + if (normalized.isEmpty()) return null; + String alias = CUSTOM_ALIASES.get(normalized.toLowerCase()); + return alias != null && !alias.isBlank() ? alias : normalized; + } + public static String mapRecipeTypeToSearchKey(Recipe recipe) { if (recipe == null) return null; RecipeType type = recipe.getType(); ResourceLocation key = BuiltInRegistries.RECIPE_TYPE.getKey(type); if (key == null) return null; - String path = key.getPath().toLowerCase(); - // 优先查别名,再查完整 ID,最后用路径 - return CUSTOM_ALIASES.getOrDefault(path, CUSTOM_NAMES.getOrDefault(key, path)); + String resolvedPath = resolveSearchKeyAlias(key.getPath()); + if (resolvedPath != null) { + return resolvedPath; + } + String custom = CUSTOM_NAMES.get(key); + return custom != null && !custom.isBlank() ? custom : key.getPath(); } /** @@ -269,7 +302,7 @@ public final class RecipeTypeNameConfig { // 1) 别名优先(使用 path 作为最终搜索关键字) String path = rl.getPath(); if (path != null) { - String alias = CUSTOM_ALIASES.get(path.toLowerCase()); + String alias = resolveSearchKeyAlias(path); if (alias != null && !alias.isBlank()) return alias; } // 2) 再查完整ID映射