AW
AW
← BACK

NoitaCraft

把《Noita》的魔法编程系统搬进 Minecraft——250 门法术、8 把法杖、可编程牌库与触发链,用数据驱动还原机制而非克隆素材

JavaFabricMinecraftGame DesignData-Driven
ROLE · 独立开发PERIOD · 2026-09 至今 · 270+ 提交 · 持续开发中

FEATURES

🪄

250 门法术 · 8 把法杖

投射物 77、修饰 80、触发 19、多重 14、实用 22、其它 22、材料 13、静态 3,全部由单一注册表声明

🎴

完整牌库机制

抽取/弃牌堆/回绕、洗牌、施法延迟、充能、法力(含负蓝耗回蓝)、使用次数全部按原生语义实现

⛓️

触发与复制族

ON_HIT / TIMER / ON_EXPIRE 三态触发,追加触发、法术复制、一分为多、希腊字母、谬、魔杖刷新、条件要求

🧪

916 项自动化测试

124 个测试类锁定抽取、洗牌、修饰合并、触发、回绕、无效抽取与复制语义,最近一次全绿

✨

自研粒子管线

1 个统一粒子类型 + 57 个预设 + 12 个客户端特效类,8×8 方形像素块、年龄渐变、亚 tick 连续发射

🗃️

真正数据包化

法术与法杖走 ResourceReloadListener 读 data/<ns>/noita/spells|wands/*.json,可覆盖内置定义

TECH

  • ▸Java 25 · Fabric Loom 1.17.20 · Minecraft 26.2 · 官方 Mojang mappings
  • ▸纯 Java 施法引擎 CastEngine(98KB),不依赖任何 Minecraft 类型,行为由 916 项测试锁定
  • ▸引擎状态全量持久化进物品组件(WandDrawState),跨施法不丢弃牌堆与回绕池
  • ▸配套扩展模组 Noita Architecture:驻村法师、法师防御塔、法师村庄(42 个结构)

项目概览

受《Noita》启发的 Minecraft Fabric 模组,目标是忠实还原机制,而不是克隆素材。

核心是把「法术编程」搬进 Minecraft:法杖有牌库和弃牌堆,法术分为投射物、修饰、多重施法、触发四类,修饰法术作用于整个施法块,触发载荷则开启一个独立的子施法块。目前注册了 250 门法术(其中 6 门是内部辅助,公开 244 门)和 8 把法杖。

引擎与游戏解耦

CastEngine 是一个不依赖任何 Minecraft 类型的纯 Java 引擎:输入法杖状态与随机源,输出一个 CastFrame,记录本次施法产生的投射物、法力消耗、施法延迟与是否发生回绕。牌库语义因此可以被单元测试穷举锁定——目前 916 项测试、124 个测试类,最近一次运行 0 失败。

已实现的机制包括:抽取与弃牌堆、洗牌(按充能周期重播种)、施法延迟、充能、法力(含负蓝耗回蓝且可不超上限)、修饰合并、多重施法、三态触发(触碰/定时/失效)、回绕、法术复制、一分为多、追加触发、魔杖刷新、条件要求、谬、八个希腊字母、使用次数系统、条件暴击。

数值对齐

官方 wiki 的 Cargo API 是权威来源,换算规则固定:速度 Noita/20、寿命 帧/3、施法延迟 秒×20、重力 Noita/1000、爆炸半径 /5。

曾发现早期一批法术把帧数填进了 tick 槽(相当于按 ×60 而非 ×20 换算),已全部修正并由 registryValues_matchOfficialWiki 测试锁定。官方存在同名/串名实体的情况也已实证,最终以实机验收与 wiki 为准。

自研粒子系统

原版粒子的寿命不可控,会把头部颜色拖进尾迹造成混色,所以做了一套统一粒子管线:1 个粒子类型 + 57 个预设工厂 + 12 个客户端特效类。贴图固定为 8×8 方形像素块(这是像素游戏,不用圆形软边光晕),颜色渐变交给粒子的年龄插值,靠亚 tick 多点发射消除断点。爆炸按官方公式分层:火花在 [0.333R, R] 环形带内随机出生、方向沿径向,数量 7~20。

客户端表现

SpellHud 显示法力条、施法延迟条、装填条与上次施法图标;DamageHud 在世界坐标锚定漂浮伤害数字;还有法术 tooltip 面板、法杖编辑器界面与游戏内生存指南。

真实的不足

我会把这个项目的进度也如实写出来,避免读者高估:

  • 锯片家族是半成品:碟状投射物、巨型碟状投射物、召唤终结锯刃的现有实现与数值不可信,属性待重做。
  • 光明穿凿已搁置:目前只是一道穿墙的光,官方那种切开任意固体材料的挖掘还没实现。
  • 无自定义音效:核弹等法术复用原版爆炸声,未实现原版的破碎与血肉特效。
  • 部分机制待定:伤害分型、暴击率、后坐力、友伤等仍属设计决策待定;触发载荷的抽卡数恒为 1。
  • 实机验收仍是瓶颈:新法术的施放视觉与交互、完整生存流程都还没走完验收。
  • 项目自身的 README 数字也已过期(仍写着 26 门法术 / 4 把法杖),待同步。

配套扩展:Noita Architecture

noitacraft-Extra 把法术世界放进世界生成:驻村法师(5 个流派、法术交易货架从主模组实时法术表构建)、法师防御塔(自研追踪与出膛净空)、法师村庄(注入原版村庄池,42 个 .nbt 结构)。未完成项:法师帽未做(原版职业覆盖层的帽子区需要额外元数据)、施法无抬手动画、塔还没有耗能与等级设定。

SCREENSHOTS

实机演示

Minecraft 内的实际施法画面——法杖编辑器、法术组合与自研粒子效果(方形像素块、年龄渐变拖尾)。