NotEnoughCharacters

[!INFO] Git Commit: febf056 | Updated: 2026-02-04

NotEnoughCharacters(modid nechar)是一个 1.7.10 纯客户端拼音搜索增强模组。它没有任何方块、物品、实体、附魔、维度或结构内容——全部功能围绕"让玩家能用拼音搜到物品与界面内容"展开,工作方式是 ASM 字节码改写:在其他模组客户端界面的方法里,把 String.contains、String.matches、Pattern.matcher 替换成拼音感知实现(匹配核心 Match),并在物品列表中注册两个搜索提供者。

源码分两个包:net.moecraft.nechar(模组主类与物品列表集成)与 net.vfyjxf.nechar(coremod、转换器、指令、配置)。核心搜索引擎为第三方库 me.towdium.pinin.PinIn,目标接口来自物品列表的 codechicken.nei 搜索提供者 API,字节码改写基于 ASM。

设定列表

搜索与匹配

  • 搜索提供者 - 向物品列表注册的 2 个 ISearchParserProvider:default(前缀空字符、SearchMode.ALWAYS)与 tooltip(前缀 #、黄色高亮),共用 neiAllowedLanguages 过滤出的匹配语言
  • 默认搜索过滤器 - NecharDisplayFilter:自定义显示名 → 物品默认名两级回退的拼音匹配,再回退父类正则
  • Tooltip 搜索过滤器 - NecharTooltipFilter:# 前缀路径,对物品提示文本做拼音匹配或正则匹配
  • 匹配核心 Match - 字节码注入的最终实现:contains 转发 PinIn、matches/matcher 把 .* 通配降级为拼音子串匹配、isChinese 覆盖扩展私用区码位
  • NecharUtils.contain - 物品列表搜索入口封装:代理对字形归一化、千分位逗号忽略、13 个电压等级 + zpm/max 的特殊搜索

字节码改写(transform)

  • 转换器注册表 - TransformerRegistry 注册 2 个可配置转换器(TransformerString → TransformerRegExp);Configurable 按"默认 + 附加 − 黑名单"构建方法表,HashMultimap 自动去重
  • TransformerString - 把 String.contains 改写为 Match.contains,含 INVOKEDYNAMIC 方法引用(Kotlin)替换
  • TransformerRegExp - 把 Pattern.matcher 与 String.matches 改写为 Match.matcher / Match.matches
  • 默认转换目标列表 - 4 项正则 + 22 项子串(21 唯一)默认目标,覆盖 AE2、Ae2fc、Extra Cells、Logistics Pipes、ProjectRed Expansion、Better Questing、Just Enough Calculation 等 11 个模组的界面

指令与配置

  • /nech 命令 - 客户端指令,权限等级 1,三个子命令 profile / verbose <true\|false> / keyboard <9 种方案>,带完整 Tab 补全
  • 配置系统 - config/NotEnoughCharacters.cfg 的 5 个分类全部配置项、类型、默认值与 Spell 枚举(9 个拼音方案)
  • 拼音词典扩展 - CustomDictLoader 追加 14 个私用区字形读音(金字旁钅系 12 项 + 石田 + 气奥),双读音设计

加载与工具

  • Coremod 引导 ClassTransformer - NechCorePlugin(getSetupClass 指向自身,call() 置 INITIALIZED)与 NechClassTransformer 的字节码改写钩子及完整生命周期
  • 性能分析器 Profiler - /nech profile 递归扫描 mods 目录,用 ASM 发现可转换目标,输出 JSON 到 logs/necharacters-profiler.txt