星辉魔法(Astral Sorcery)
Since after 21.1.2Astral Sorcery(星辉魔法)整合把流明(lumen)和星能(starlight)作为配方 capability 加入,各配一个存放它们的 Trait,另有三个读取天空与玩家研究进度的条件,以及一个记录机器采用谁的研究进度的 Trait。它只存在于高于 21.1.2 的 MBD2 版本中。

版本
MBD2 针对 Minecraft 1.21.1 的 Astral Sorcery 2.0.3.63 构建,而 Astral Sorcery 2.0.3 没有 Curios 9.5.1 或更新版本就拒绝启动。Astral Sorcery 没有 API,MBD2 用的是它的内部类:换一个 Astral Sorcery 版本就可能让整合失效。请用整合包里的准确版本测试。
加入了什么
| 层 | 注册名 | 用途 |
|---|---|---|
| 配方 capability | astral_lumen | 单一类型的流明,整数数量,可输入可输出 |
| 配方 capability | astral_starlight | 某个星座或任意星座的星能,小数数量,只能输入 |
| Trait | astral_lumen_storage | 按类型存放的流明缓冲,暴露为 Astral Sorcery 的流明 capability,并能加入流明网络 |
| Trait | astral_starlight_receiver | 保存透镜送到机器上的星能 |
| Trait | astral_researcher | 记录机器采用哪位玩家的 Astral Sorcery 进度 |
| 条件 | astral_constellation | 某个星座在天空中 |
| 条件 | astral_celestial_event | 日食或月食 |
| 条件 | astral_research | 机器的研究者进度足够 |
| 星能网络节点 | mbd2:machine_starlight_receiver | 接收器 Trait 在 Astral Sorcery 星能网络里登记的节点 |
| KubeJS | inputLumen、outputLumen、inputStarlight、astralConstellationCondition、astralCelestialEventCondition、astralResearchCondition | 见 KubeJS |
所有条目都以模组 ID astralsorcery 为条件。三个 Trait 每台机器各只能加一个。
流明与星能
这两种资源在 Astral Sorcery 里的传输方式不同,所以各有各的 Trait。
| 流明 | 星能 | |
|---|---|---|
| 在 Astral Sorcery 中 | 可存储的资源,分多种类型,如 Aevitas(生息)、Armara(甲御)、Vicio(动势),存放在 Lumen Array 里 | Starlight Focus Crystal 每 tick 发出的光流,带有它的星座。没有任何东西存储它 |
| 怎么传输 | 只能拉取的网络:设备向 16 格内、视线可及的源节点请求流明,或经 Lumen Filament 传得更远 | 用 Linking Tool 建立的链接,从聚焦水晶经 Lens 和 Prism 传递 |
| Trait | astral_lumen_storage | astral_starlight_receiver |
| 配方方向 | 输入和输出 | 只能输入 |
| 数量 | 整数;一瓶为 500 | 小数 |
流明存储
| 设置 | 范围 | 默认 | 含义 |
|---|---|---|---|
| Capacity(容量) | 1 及以上 | 4000 | 机器对每种流明各能存多少。一个 Lumen Array 为 4000 |
| Lumen Types(流明类型) | 流明 ID | 空 | 允许存入哪些类型,留空接受所有类型。也是 Draw From Network 会请求的类型 |
| Max Receive(最大输入) | 0 及以上 | 4000 | 每次操作最多存入的流明:经 capability 的每次插入,以及每次从网络汲取时的每种类型 |
| Max Extract(最大输出) | 0 及以上 | 4000 | 每次操作最多取出的流明,包括 Astral Sorcery 设备从机器汲取 |
| Provide To Network(向流明网络供应) | 开 | 作为源节点加入流明网络 | |
| Draw From Network(从流明网络汲取) | 关 | 像祭坛一样从网络把流明拉进来 | |
| Draw Interval(汲取间隔) | 1–1200 tick | 20 | 多久汲取一次 |
| Transfer Particles(传输粒子) | 开 | 汲取时沿链路显示 Astral Sorcery 的传输效果 | |
| Recipe Handler IO | IN | 有输出流明的配方时设为 BOTH 或 OUT | |
| Capability IO | 按面 | BOTH | 每个面上其他模组能否通过 ILumenHandler.BLOCK 插入或提取。internal(内部)是流明网络使用的那一面 |
机器自身的配方不受 Max Receive 和 Max Extract 限制。Lumen Types 只管存入:某个类型移出列表后,已存的流明仍然留着,也照样能被消耗。调小 Capacity 会丢弃放不下的部分。
接入流明网络
流明不走管道。Astral Sorcery 维护一个节点网络:Lumen Array 等源节点供应流明,祭坛、Lumen Crystallizer 等设备请求流明,Lumen Filament(流明丝结)把请求传下去。两个节点相距不超过 16 格且中间视线无遮挡时,请求就能到达;一串彼此可见的丝结能把它传得更远。
让 Astral Sorcery 给机器供流明:
- 在 Lumen Types 里列出机器需要的类型,并打开 Draw From Network。列表为空时它什么都不汲取。
- 把机器放在 Lumen Array 16 格以内且两者之间视线无遮挡的位置,或者用 Lumen Filament 补上距离。
- 每隔 Draw Interval tick,机器为每种列出的类型发一次请求,在缓冲放得下的范围内最多取 Max Receive。
让 Astral Sorcery 设备使用机器里的流明:保持 Provide To Network 开启。机器会供应它存有的每种类型,范围内的设备每次请求最多取走 Max Extract。网络经由 internal 这一面的 capability IO 抽取:把它设为 IN 或 NONE,机器就什么都不供应。
两者都开启时,机器不会供应 Lumen Types 里列出的类型,所以两台汲取同一类型的机器不会来回互抽。只由配方产出、没有列出的类型仍会供应。
机器每 20 tick 检查一次自己的节点,所以新放下的机器或改过的设置最多要一秒才会出现在网络上。拆掉机器会移除它的节点。Provide To Network 关闭时机器根本没有节点,汲取改为从它的位置发出请求,范围相同。
星能接收器

| 设置 | 范围 | 默认 | 含义 |
|---|---|---|---|
| Capacity(容量) | 1 及以上 | 1000 | 机器对每个星座的星能各保存多少。一个 Starlight Focus Crystal 在中继损耗前每 tick 大约给出 1 到 2.5 |
| Constellations(星座) | 星座 ID | 空 | 保留哪些星座的星能,留空全部保留。其余的在到达时丢弃 |
| Recipe Handler IO | IN | 保持 IN 或 BOTH:星能只会是输入 |
这个 Trait 没有 capability IO,也没有 auto IO。星能只能经 Astral Sorcery 星能网络的链接进来。
把星能送到机器
- 按 Astral Sorcery 典籍的说明搭好 Starlight Focus Crystal(星能聚焦水晶石)。夜间、其星座在天空中时,它给出该星座的星能;其他夜晚什么都不给。
- 拿 Linking Tool(链接工具)先右键聚焦水晶、Lens 或 Prism,再右键机器。一条链接最长 16 格,且需要视线无遮挡。要传得更远就用 Lens(每个只有一条出链)和 Prism(可有多条,光流平分)中继。用不纯的水晶做的中继每经过一个都会损失一部分光流。
- 机器加载后 20 tick 内会把自己登记为
mbd2:machine_starlight_receiver节点,并替换之前的方块留在该位置的节点。在此之前就连到它的链接从那时起开始输送。 - 每 tick 到达的星能进入对应星座的缓冲,最多到 Capacity。机器所在区块必须已加载。
要求任意星座星能的配方,会先从存量最多的星座取,不够再取下一个。
研究者
astral_researcher 只有一个设置:Refresh Interval(刷新间隔,1–12000 tick,默认 100)。
MBD2 机器没有所有者,所以这个 Trait 把机器绑定到放置它的玩家,并保存该玩家 Astral Sorcery 进度的快照:研究阶段、共鸣星座和已发现的星座。astral_research 条件读取的就是这份快照。
- 玩家在线时,每隔 Refresh Interval tick 以及每次检查
astral_research条件时都会重新读取快照。玩家离线时,以最后一次的快照为准。 - 由假玩家、命令或结构放下的机器保持未绑定,它的
astral_research配方永远不会运行。脚本可以调用 Trait 的bindTo(player)来绑定,参数是服务端玩家;脚本在MBDMachineEvents.onPlaced里做的绑定,MBD2 会保留。 - 开启 Keep data on drop(掉落时保留数据)后,绑定随机器物品一起走:无论之后谁放下它,机器都保留第一位研究者。
- 多方块结构中,条件会在控制器或某个部件上找这个 Trait。
条件
| 条件 | 编辑器名称 | 设置 | 何时通过 |
|---|---|---|---|
astral_constellation | Astral Constellation(星辉魔法 - 星座) | Constellation(星座,默认 Armara);Min Distribution(最小分布,0–1,默认 0) | 该星座在机器所在维度的天空中处于活跃状态,且分布不低于 Min Distribution |
astral_celestial_event | Astral Eclipse(星辉魔法 - 天象) | Event(天象):Solar Eclipse 或 Lunar Eclipse(默认 Solar Eclipse);Whole Day(整天,默认关) | 天象正在发生;开启 Whole Day 后,天象所在那一天的任何时候都通过 |
astral_research | Astral Research(星辉魔法 - 研究) | Min Tier(最低阶段):Shimmer、Illumination、Resonance、Luminance 或 Radiance(默认 Shimmer);Attuned To(共鸣星座,默认任意);Discovered(已发现星座,默认任意) | 机器的研究者已达到 Min Tier、共鸣于 Attuned To,并已发现 Discovered |
- Astral Sorcery 每天选一次活跃星座,所以
astral_constellation整天都会通过。要表达「当它在夜空中时」,再加一个设为夜晚的day_time条件。 - Min Distribution 是 Astral Sorcery 给活跃星座的 0 到 1 的权重,也就是聚焦水晶输出所乘的倍率。
0表示只要活跃即可。 - 机器没有
astral_researcherTrait,或者它没有绑定玩家时,astral_research永远不通过。 - 条件只观察,不消耗任何东西。配方运行期间每 tick 都会重新检查,所以星座离开天空或天象结束时配方会进入等待。
- 和所有条件一样,reverse 会反转检查结果,同类型的条件之间用 OR 组合:两个
astral_constellation条件只要其中一个星座在天空中就通过。见条件参考。
KubeJS
ServerEvents.recipes(event => {
// 消耗 Aevitas 流明和 Armara 星能,产出 Vicio 流明
event.recipes.example.starlit_infuser()
.id('example:starlit_amethyst')
.duration(200)
.inputLumen('500x astralsorcery:aevitas')
.inputStarlight('100x astralsorcery:armara')
.inputItems('minecraft:quartz')
.outputItems('minecraft:amethyst_shard')
.outputLumen('250x vicio')
// 任意星座的星能,每个工作 tick 消耗
event.recipes.example.starlit_infuser()
.id('example:starlit_glowstone')
.duration(100)
.perTick(r => r.inputStarlight('0.5'))
.inputItems('minecraft:redstone')
.outputItems('minecraft:glowstone_dust')
})| 方法 | 每个参数 | 省略数量时 |
|---|---|---|
inputLumen(...)、outputLumen(...) | '500x astralsorcery:aevitas'、'astralsorcery:aevitas' 或 'aevitas' | 500,即一瓶 |
inputStarlight(...) | '100' 表示任意星座,'100x astralsorcery:armara' 或 'armara' | 100 |
命名空间默认为 astralsorcery,x 后面要跟一个空格。流明数量必须是整数。数量小于等于零,或 ID 不对应任何流明或星座时,配方脚本运行时就会抛出异常。没有 outputStarlight。每 tick 的星能消耗要低于透镜送来的量,否则缓冲耗尽,配方进入等待。
ServerEvents.recipes(event => {
event.recipes.example.starlit_infuser()
.id('example:eclipse_infusion')
.duration(200)
.astralConstellationCondition('armara', 0.5) // 星座,最小分布 0 到 1
.dayTime(false) // 只在夜晚
.astralCelestialEventCondition('lunar_eclipse', true) // 'solar_eclipse' 或 'lunar_eclipse',整天
.astralResearchCondition('resonance', 'armara', '') // 最低阶段、共鸣星座、已发现星座;'' 表示任意
.inputStarlight('100x armara')
.inputItems('minecraft:diamond')
.outputItems('minecraft:nether_star')
})阶段名为 shimmer、illumination、resonance、luminance 和 radiance;阶段名和天象名不区分大小写。astralResearchCondition 的三个参数都要传。
上面每个方法在没有安装 Astral Sorcery 时都会抛出异常。在 Astral Sorcery 是可选模组的整合包里,用 Platform.isLoaded('astralsorcery') 把这些配方包起来。
机器 UI 与配方查看器

三个 Trait 都以 BAR 布局生成 UI:
- **流明存储:**每种 Lumen Types 里的类型一条,列表为空时每种已存类型一条,显示
数量/容量;没有可显示的内容时是一条灰色的空条。某个类型移出列表后只要还有存量,它的条就保留。悬停可看完整文字。 - **星能接收器:**按星座同样处理,小数部分显示两位。
- **研究者:**绑定玩家的名字和研究阶段,或 No researcher bound(未绑定研究者)。
这些条在运行时根据 Trait 的数据生成,不保存在 UI 模板里,所以会跟着机器的实际存量变化。
在配方查看器里,流明显示为该流明的图标,加上该流明颜色的数量和名称,如 -500 Aevitas。星能显示为星座颜色的星形图标,悬停提示里有完整文字,如 -100 Starlight of Armara。每 tick 内容会加上 /t。
Runtime value
以下设置可以作为 runtime value 按单台机器覆盖:
| Trait | 键 |
|---|---|
astral_lumen_storage | capacity、lumen_types、max_receive、max_extract、provide_to_network、draw_from_network、draw_interval |
astral_starlight_receiver | capacity、constellations |
Transfer Particles 和研究者的 Refresh Interval 不能覆盖。
排查清单
- 编辑器里没有这些 Trait 或 capability:注册表发现阶段 Astral Sorcery 不在,或者它没能加载。Astral Sorcery 2.0.3 需要 Curios 9.5.1 或更新版本。
- 带
outputLumen的配方不开始:Trait 的 Recipe Handler IO 仍是IN,输出类型不在 Lumen Types 里,或者该类型的缓冲已满。 - 机器从不汲取流明:Lumen Types 为空,16 格内没有视线可及、存有该类型的源节点,或者 Max Receive 为
0。 - Astral Sorcery 设备不用机器里的流明:Provide To Network 关闭了,internal 的 capability IO 不允许输出,或者 Draw From Network 开启时该类型列在 Lumen Types 里。
- 星能条一直是空的:没有任何东西链接到机器,现在是白天,聚焦水晶的星座不在天空中,链接被遮挡,或者 Constellations 没有包含该星座。
- 把星能作为配方输出:做不到,没有任何东西接收它。
astral_research配方从不运行:机器没有astral_researcherTrait,它是由假玩家或命令放下的,或者研究者还没达到 Min Tier。astral_constellation在白天也通过:这是预期行为,加上day_time。- 同类 Trait 加不了第二个:这是预期行为,每台机器每种只能有一个。