Files
kubejs-thaumcraft/README.md
T
2026-08-18 22:23:25 +08:00

347 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TC KubeJS Bridge (tckubejsbridge)
> **中文** | [English](README_EN.md)
将 **神秘时代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 工程。
```bash
# 在仓库根目录执行
gradle :tckubejsbridge:build
```
构建产物:
```text
modules/tc-kubejs-bridge/build/libs/KubeJS Thaumcraft-<mod_version>+<neoforge_version>.jar
```
例如:
```text
KubeJS Thaumcraft-1.0.0+21.1.234.jar
```
把 jar 放入 `mods/` 文件夹即可。
---
## 快速开始
1. 在 `kubejs/server_scripts/` 下新建一个 `.js` 文件。
2. 在脚本里使用 `ServerEvents.recipes(event => { ... })`。
3. 保存后执行 `/reload`,或重启游戏。
所有 `thaumcraft.xxx` 都是**顶层绑定**,不要写成 `event.thaumcraft.xxx`。
---
## 配方注册
### 1. 注魔配方
```js
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. 坩埚炼金配方
```js
ServerEvents.recipes(event => {
event.recipes.thaumcraft.crucible(
'MY_CRUCIBLE',
'minecraft:diamond',
'minecraft:coal', // 催化剂
{ aer: 16, ignis: 8 } // 对象写法
);
});
```
### 3. 奥术有序合成配方
```js
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` 的材料必须放在**一个数组**里。
```js
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'
]
);
});
```
---
## 物品固有要素
```js
ServerEvents.recipes(event => {
// 添加
thaumcraft.addObjectTag('minecraft:stick', { aer: 1, ignis: 2 });
// 移除
thaumcraft.removeObjectTag('minecraft:stick');
});
```
---
## 替换已有配方
```js
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'
);
});
```
---
## 自定义研究分类 / 研究节点
### 添加研究分类
```js
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:` 命名空间。
### 添加研究节点
```js
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` | 研究关联要素 |
### 图标文件位置
脚本里写:
```js
icon: 'textures/research/my_research.png'
```
对应文件:
```text
kubejs/assets/kubejs/textures/research/my_research.png
```
也可以写完整路径:
```js
icon: 'kubejs:textures/research/my_research.png'
```
### 研究名称 / 描述
TC 的研究名称通过语言文件翻译。
在 `kubejs/assets/kubejs/lang/zh_cn.json` 中添加:
```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` |
## 项目结构
```text
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 // 示例脚本
```