Thaumcraft 脚本类
基本信息
| 属性 | 值 |
|---|---|
| 门控字符串 | Thaumcraft |
| 插件类 | modtweaker2.mods.thaumcraft.Thaumcraft |
| 注册点 | ModTweaker2.java:78 |
| 脚本类数 | 7(+2 个由括号暴露的接口) |
@ZenMethod |
63 |
| 括号前缀 | <aspect:NAME> |
| dump 指令 | research、aspectList |
功能
Thaumcraft 是 ModTweaker 桥接面最大的插件之一,覆盖配方、要素、研究、传送扭曲与战利品五条线。
| Zenscript 类 | Java 文件 | @ZenMethod |
|---|---|---|
mods.thaumcraft.Research |
handlers/Research.java |
32 |
mods.thaumcraft.Warp |
handlers/Warp.java |
7 |
mods.thaumcraft.Aspects |
handlers/Aspects.java |
6 |
mods.thaumcraft.Loot |
handlers/Loot.java |
6 |
mods.thaumcraft.Infusion |
handlers/Infusion.java |
5 |
mods.thaumcraft.Arcane |
handlers/Arcane.java |
3 |
mods.thaumcraft.Crucible |
handlers/Crucible.java |
2 |
63 = 61(上表 7 个已注册类)+ 2(IAspectStack 的 @ZenMethod,见 括号类)。
各类要点
Research(32)
最大的单一脚本类,除添加/删除研究外还暴露一整套属性 setter。按用途分组:
| 组 | 方法 |
|---|---|
| 分类 | addTab(2 个重载)、removeTab |
| 研究条目 | addResearch(3 个重载)、removeResearch、orphanResearch、moveResearch、hasResearched |
| 页面 | addPage、addCraftingPage、addCruciblePage、addArcanePage、addInfusionPage、addEnchantmentPage、clearPages |
| 前置 | addPrereq、clearPrereqs、addSibling、clearSiblings |
| 属性 | setRound、setSpikey、setStub、setSecondary、setVirtual、setAutoUnlock、setConcealed、setHidden、setAspects、setComplexity |
| 配方页 | refreshResearchRecipe |
这些 setter 与 modtweaker2/mods/thaumcraft/research/ 下 15 个 IUndoableAction 实现一一对应——research/ 目录里的类均无 @ZenMethod(实测 grep -c '^\s*@ZenMethod' modtweaker2/mods/thaumcraft/research/*.java 合计为 0),它们只是被 Research 门面驱动的动作对象,不是独立的脚本类。同样的门面/动作分层也出现在 Botania 的 Lexicon(22 个方法对应 lexicon/ 下 11 个无 @ZenMethod 的动作类)。
Warp(7)
addToResearch、addToItem、removeFromResearch、removeFromItem、removeAll、removeAllResearch、removeAllItems——直接操作扭曲传送的注册表。该表由 ThaumcraftHelper 的静态块通过反射抓取:ReflectionHelper.getStaticObject(ThaumcraftApi.class, "warpMap")(ThaumcraftHelper.java:27),存入 public static HashMap<Object, Integer> warpList(ThaumcraftHelper.java:24)。抓取失败会被空 catch 静默吞掉,见 反射与日志助手。
Aspects(6)
add、set、remove 操作要素定义;addEntity、setEntity、removeEntity 操作「实体/物品带哪些要素」的映射。
Loot(6)
战利品品级三档各一对增删:addCommonLoot / removeCommonLoot、addUncommonLoot / removeUncommonLoot、addRareLoot / removeRareLoot。
Infusion(5)
addRecipe(2 个重载)、removeRecipe,外加 addEnchantment / removeEnchant。其配方类型是自定义的 modtweaker2/mods/thaumcraft/recipe/MTInfusionRecipe.java(该文件无 @ZenMethod)。
Arcane(3)与 Crucible(2)
Arcane 提供 addShaped / addShapeless / removeRecipe;Crucible 提供 addRecipe / removeRecipe。
要素括号
<aspect:terra> 之类的字面量由 AspectBracketHandler 解析(Thaumcraft.java:16 注册)。查表走 Aspect.getAspect(name.toLowerCase())(AspectBracketHandler.java:30),命中返回数量为 1 的 MCAspectStack。IAspectStack 带 3 个 @ZenGetter(definition / name / displayName)和 1 个 MUL 运算符(IAspectStack.java:15、:18、:21、:24),使 <aspect:terra> * 10 成立。
dump 指令
/minetweaker research— 输出全部分类名;带[CATEGORY]参数则输出该分类下的研究键(Commands.java:175-180)/minetweaker aspectList— 输出注册到实体与物品上的要素(Commands.java:181-185)
两条都裹在 TweakerPlugin.isLoaded("Thaumcraft")(Commands.java:174)内。