搜索提供者(Search Provider)

基本信息

属性 值
类型 物品列表搜索提供者(NEI ISearchParserProvider 实现)
实现类 net.moecraft.nechar.NecharSearchParserProvider
注册入口 net.moecraft.nechar.NEINecharConfig#loadConfig()(IConfigureNEI)
注册数量 2 个
触发条件 玩家在物品列表搜索框输入文本时,由物品列表按前缀分派

两个提供者

# 名称 name 前缀 prefix 高亮色 过滤器工厂 SearchMode
1 default '\0'(空字符) EnumChatFormatting.RESET NecharDisplayFilter::new 硬编码为 SearchMode.ALWAYS(匿名子类覆写)
2 tooltip '#' EnumChatFormatting.YELLOW NecharTooltipFilter::new 读取物品列表设置 inventory.search.tooltipSearchMode
  • default 提供器以空字符作为前缀,意味着它不承担任何显式前缀语法,等同于"无前缀时的默认匹配模式"。
  • tooltip 提供器以 # 作为前缀,搜索文本以 # 开头时才会启用。

匹配语言

两个提供器共用同一份 matchingLanguages,由 NEINecharConfig#getMatchingLanguages() 产出:

  1. 取物品列表提供的全部语言(ISearchParserProvider.getAllLanguages());
  2. 用配置项 neiAllowedLanguages(见 配置系统)逐个比对语言代码过滤。

只有落在 neiAllowedLanguages 白名单里的语言会被标记为"匹配语言",拼音搜索文本只会对这些语言的本地化名称生效。

过滤器创建流程

getFilter(String searchText) 的执行逻辑:

步骤 行为
1 调用 SearchField.getPattern(searchText) 把搜索文本编译为正则 Pattern
2 若 pattern == null(文本无法编译为正则)→ 返回 NothingItemFilter(匹配不到任何物品)
3 否则调用 createFilter.apply(searchText, pattern) 构造过滤器
4 若工厂返回 null → 同样降级为 NothingItemFilter

过滤器工厂以 BiFunction<String, Pattern, ItemFilter> 形式注入,因此 default 与 tooltip 两条路径共用同一段解析逻辑,仅过滤器类型不同。

行为

  • 搜索文本同时以两种形式交给过滤器:原始字符串(供拼音/子串匹配)与编译后的正则(供 super.matches 传统正则匹配),因此拼音搜索与传统正则搜索可以叠加生效。
  • 每个提供器的构造参数全部为 final 且通过构造器注入,运行期不可变。

相关条目