8.9 KiB
8.9 KiB
TC KubeJS Bridge (tckubejsbridge)
中文 | English
将 神秘时代4(Thaumcraft 4 移植版) 的配方与研究系统桥接到 KubeJS。
整合包作者可以通过 kubejs/server_scripts/ 下的 KubeJS 脚本直接注册:
- 注魔配方
- 坩埚炼金配方
- 奥术有序 / 无序合成配方
- 物品固有要素
- 自定义研究分类 / 研究节点
- 替换 TC 原有配方
作者:AlkSur | 许可证:GPL-3.0
依赖
| Mod | 版本 | 关系 |
|---|---|---|
| NeoForge | 21.1.234 | 必需 |
| Minecraft | 1.21.1 | 必需 |
| Thaumcraft (TC4 移植版) | 0.2.2.34-port.1 | 必需 |
| KubeJS (NeoForge) | 2101.7.x | 必需(插件依赖其 API) |
KubeJS 在
neoforge.mods.toml中声明为 optional: 未安装 KubeJS 时本 mod 不会加载插件部分,不影响游戏启动。
构建与安装
工程位于 modules/tc-kubejs-bridge,属于多 module Gradle 工程。
# 在仓库根目录执行
gradle :tckubejsbridge:build
构建产物:
modules/tc-kubejs-bridge/build/libs/KubeJS Thaumcraft-<mod_version>+<neoforge_version>.jar
例如:
KubeJS Thaumcraft-1.0.0+21.1.234.jar
把 jar 放入 mods/ 文件夹即可。
快速开始
- 在
kubejs/server_scripts/下新建一个.js文件。 - 在脚本里使用
ServerEvents.recipes(event => { ... })。 - 保存后执行
/reload,或重启游戏。
所有 thaumcraft.xxx 都是顶层绑定,不要写成 event.thaumcraft.xxx。
配方注册
1. 注魔配方
ServerEvents.recipes(event => {
event.recipes.thaumcraft.infusion(
'MY_INFUSION', // research 键(全局唯一)
'minecraft:diamond', // 输出
3, // 不稳定性
['ignis 64', 'potentia 32'], // 所需源质
'minecraft:golden_apple', // 中心物品
'minecraft:blaze_rod', // 祭品
'minecraft:ender_pearl'
);
});
2. 坩埚炼金配方
ServerEvents.recipes(event => {
event.recipes.thaumcraft.crucible(
'MY_CRUCIBLE',
'minecraft:diamond',
'minecraft:coal', // 催化剂
{ aer: 16, ignis: 8 } // 对象写法
);
});
3. 奥术有序合成配方
ServerEvents.recipes(event => {
event.recipes.thaumcraft.arcane(
'MY_ARCANE',
'minecraft:diamond_sword',
['ignis 16', 'ordo 8'],
[' I ', ' I ', ' S '], // pattern:最多 3 行
{ I: 'minecraft:iron_ingot', S: 'minecraft:stick' }
);
});
4. 奥术无序合成配方
注意:
arcane_shapeless的材料必须放在一个数组里。
ServerEvents.recipes(event => {
event.recipes.thaumcraft.arcane_shapeless(
'MY_SHAPELESS',
'minecraft:diamond_helmet',
['aer 8', 'aqua 8'],
[
'minecraft:leather_helmet',
'minecraft:diamond',
'minecraft:diamond',
'minecraft:diamond'
]
);
});
物品固有要素
ServerEvents.recipes(event => {
// 添加
thaumcraft.addObjectTag('minecraft:stick', { aer: 1, ignis: 2 });
// 移除
thaumcraft.removeObjectTag('minecraft:stick');
});
替换已有配方
ServerEvents.recipes(event => {
// 先删
thaumcraft.removeInfusion('INFUSIONPROVIDER'); // 注魔
// thaumcraft.removeArcane('RESEARCH_KEY'); // 奥术
// thaumcraft.removeCrucible('RESEARCH_KEY'); // 坩埚
// 后注册,实现真正替换
event.recipes.thaumcraft.infusion(
'INFUSIONPROVIDER',
'thaumicenergistics:infusion_provider',
0,
['auram 10'],
'ae2:interface',
'minecraft:oak_planks'
);
});
自定义研究分类 / 研究节点
添加研究分类
ServerEvents.recipes(event => {
thaumcraft.addResearchCategory(
'MY_CATEGORY',
'textures/research/cat_icon.png',
'textures/research/cat_bg.png'
);
});
- 两个参数也可以:
addResearchCategory('MY_CATEGORY', 'textures/research/cat_icon.png') - 不带命名空间的路径默认使用
kubejs:命名空间。
添加研究节点
ServerEvents.recipes(event => {
thaumcraft.addResearchNode({
key: 'MY_RESEARCH',
category: 'MY_CATEGORY',
icon: 'textures/research/my_research.png',
parents: ['PARENT_KEY'],
autoUnlock: true, // 默认解锁
virtual: false, // 显示在魔导手册中;true 会隐藏
hidden: false,
col: 0,
row: 0,
complexity: 1,
aspects: { aer: 1, ignis: 1 }
});
});
支持字段:
| 字段 | 说明 |
|---|---|
key |
研究节点唯一 ID |
category |
所属研究分类,必须已存在 |
icon |
图标路径 |
parents / parentsHidden / siblings |
研究依赖关系 |
autoUnlock |
是否默认解锁 |
virtual |
是否虚拟节点(true 不会显示在魔导手册) |
hidden / concealed / lost |
可见性控制 |
special / stub / secondary / round |
研究类型标记 |
col / row / complexity |
研究树位置和复杂度 |
aspects |
研究关联要素 |
图标文件位置
脚本里写:
icon: 'textures/research/my_research.png'
对应文件:
kubejs/assets/kubejs/textures/research/my_research.png
也可以写完整路径:
icon: 'kubejs:textures/research/my_research.png'
研究名称 / 描述
TC 的研究名称通过语言文件翻译。
在 kubejs/assets/kubejs/lang/zh_cn.json 中添加:
{
"tc.research_category.MY_CATEGORY": "我的分类",
"tc.research_name.MY_RESEARCH": "我的研究",
"tc.research_text.MY_RESEARCH": "这是研究描述。"
}
英文则写在 kubejs/assets/kubejs/lang/en_us.json。
要素 tag 参考(TC4 移植版实际值)
注意:移植版的要素 tag 是拉丁文原名,不是 TC4 汉化/英文名。
| 要素 | tag | 要素 | tag |
|---|---|---|---|
| 风 AIR | aer |
土 EARTH | terra |
| 火 FIRE | ignis |
水 WATER | aqua |
| 秩序 ORDER | ordo |
混沌 ENTROPY | perditio |
| 虚空 VOID | vacuos |
光 LIGHT | lux |
| 天气 WEATHER | tempestas |
运动 MOTION | motus |
| 水晶 CRYSTAL | vitreus |
生命 LIFE | victus |
| 能量 ENERGY | potentia |
交换 EXCHANGE | permutatio |
| 死亡 DEATH | mortuus |
黑暗 DARKNESS | tenebrae |
| 灵魂 SOUL | spiritus |
异域 ELDRITCH | alienis |
| 魔法 MAGIC | praecantatio |
灵气 AURA | auram |
| 粘液 SLIME | limus |
植物 PLANT | herba |
| 树 TREE | arbor |
野兽 BEAST | bestia |
| 肉体 FLESH | corpus |
亡灵 UNDEAD | exanimis |
| 心智 MIND | cognitio |
感知 SENSES | sensus |
| 人类 MAN | humanus |
工具 TOOL | instrumentum |
| 贪婪 GREED | lucrum |
工艺 CRAFT | fabrico |
| 布料 CLOTH | pannus |
机制 MECHANISM | machina |
热重载说明
| 内容 | /reload |
说明 |
|---|---|---|
| 注魔 / 坩埚 / 奥术配方 | ✅ | 可以热重载 |
| 物品固有要素 | ✅ | 可以热重载 |
| 研究分类 / 研究节点 | ❌ | TC 研究系统缓存较多,需要重启游戏 |
research 键说明
- 如果
research不是 TC 已有研究,桥接会自动注册一个默认解锁的虚拟研究节点,并按“无研究要求”处理。 - 如果
research是 TC 已有研究,则仍然要求玩家完成对应研究。 research键全局唯一,重复键会被跳过。
排障
| 现象 | 原因 |
|---|---|
Constructor for thaumcraft:arcane_shapeless with N arguments not found |
材料没有放在数组里 |
Unknown aspect 'xxx' |
要素 tag 写错 |
Item with ID xxx does not exist |
物品 id 错误 |
研究分类名字显示为 tc.research_category.XXX |
缺少语言文件 |
| 研究图标 / 背景紫黑色 | 贴图不存在、路径不对、不是 PNG,或 KubeJS assets 未被加载 |
event.thaumcraft is undefined |
顶层绑定是 thaumcraft.xxx,不是 event.thaumcraft.xxx |
项目结构
src/main/java/tckubejsbridge/
├── TCKubeJSBridge.java // @Mod 主类
└── kubejs/
├── TCKubeJSPlugin.java // KubeJS 插件:schema + bindings
├── TCRecipeKJS.java // 自定义 KubeRecipe 基类
├── TCRecipeBridge.java // TC API 调用 / 去重 / 移除 / 研究注册
├── AspectListComponent.java // 源质列表组件
├── InfusionRecipeKJS.java // 注魔配方
├── CrucibleRecipeKJS.java // 坩埚配方
├── ShapedArcaneRecipeKJS.java // 奥术有序配方
└── ShapelessArcaneRecipeKJS.java // 奥术无序配方
src/main/resources/
├── kubejs.plugins.txt // 插件发现文件
└── META-INF/neoforge.mods.toml
example/infusion_example.js // 示例脚本