From b87d94dee19814587b38ed7c52510fe8d4b4d6bc Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Fri, 22 Aug 2025 22:38:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A01024=E5=B9=B6=E8=A1=8C?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=8D=95=E5=85=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extendedae_plus/client/InputEvents.java | 16 +++--------- .../integration/jei/JeiRuntimeProxy.java | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/extendedae_plus/client/InputEvents.java b/src/main/java/com/extendedae_plus/client/InputEvents.java index 4c5634e..8af06d1 100644 --- a/src/main/java/com/extendedae_plus/client/InputEvents.java +++ b/src/main/java/com/extendedae_plus/client/InputEvents.java @@ -90,19 +90,9 @@ public final class InputEvents { ITypedIngredient typed = hovered.get(); - String name = null; - try { - if (typed.getType() == VanillaTypes.ITEM_STACK) { - //noinspection unchecked - ItemStack stack = ((ITypedIngredient) typed).getIngredient(); - if (stack != null) { - name = stack.getHoverName().getString(); - } - } - } catch (Throwable ignored) { - } - - if (name == null || name.isEmpty()) return; // 非物品类型暂不处理(避免依赖未知 JEI 接口) + // 通用获取显示名称(兼容物品/流体等) + String name = JeiRuntimeProxy.getTypedIngredientDisplayName(typed); + if (name == null || name.isEmpty()) return; // 写入 AE2 终端的搜索框 var screen = Minecraft.getInstance().screen; diff --git a/src/main/java/com/extendedae_plus/integration/jei/JeiRuntimeProxy.java b/src/main/java/com/extendedae_plus/integration/jei/JeiRuntimeProxy.java index 1eb864a..9bac388 100644 --- a/src/main/java/com/extendedae_plus/integration/jei/JeiRuntimeProxy.java +++ b/src/main/java/com/extendedae_plus/integration/jei/JeiRuntimeProxy.java @@ -87,4 +87,30 @@ public final class JeiRuntimeProxy { // 兼容不同 JEI 版本或在启动阶段尚未就绪 } } + + /** + * 通用获取 JEI 悬浮配料的本地化显示名称(适配物品/流体等)。 + * 若无法安全获取,则返回空字符串。 + */ + public static String getTypedIngredientDisplayName(ITypedIngredient typed) { + IJeiRuntime rt = RUNTIME; + if (rt == null || typed == null) return ""; + try { + var manager = rt.getIngredientManager(); + var helper = manager.getIngredientHelper(typed.getType()); + // JEI 的 IIngredientHelper#getDisplayName 返回 Component(新版本)或 String(旧版本) + // 统一转为字符串,使用 toString() 兜底 + Object display = helper.getDisplayName(typed.getIngredient()); + if (display == null) return ""; + // 新版:net.minecraft.network.chat.Component + if (display instanceof net.minecraft.network.chat.Component comp) { + String s = comp.getString(); + return s == null ? "" : s; + } + String s = display.toString(); + return s == null ? "" : s; + } catch (Throwable ignored) { + } + return ""; + } }