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