搜索提供者(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() 产出:
- 取物品列表提供的全部语言(
ISearchParserProvider.getAllLanguages()); - 用配置项
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且通过构造器注入,运行期不可变。
相关条目
- 默认搜索过滤器 -
default提供器使用的物品名匹配过滤器 - Tooltip 搜索过滤器 -
tooltip提供器使用的提示文本匹配过滤器 - 配置系统 -
neiAllowedLanguages等配置项 - 匹配核心 Match - 拼音匹配的实际实现