Savaru的魔力

Savaru的魔力

从一个法力池施放法术,而非符文包,每个法术的法力消耗由你设定。

Savaru 的魔力(Savaru's Mana)

概述

法术引擎(Spell Engine)用物品来定价法术。这确实可行,但它会把施法者的物品栏变成一本流水账:每次出门前都要制作、携带并补充成堆的符文。

Savaru 的魔力 用魔力池取代了这一切。以符文定价的法术改为消耗你的魔力来施放,而符文则留在箱子里。每个法术都有独立的消耗,写入一个可以逐行编辑的配置文件,因此一个廉价的功能性法术和一个终极法术不会用同一个公式来定价。

该模组暴露的其他所有内容都是普通的实体属性(Entity Attribute),这意味着装备、药水、天赋树和词缀系统都可以仅通过原版的属性修饰器来影响你的魔力。


功能说明

用魔力代替符文

任何标价物品为符文的法术都会被接管:如果你的魔力足以支付,施法就会成功,且不会消耗任何物品。真正属于物理消耗品的弹药——箭矢、子弹、霰弹、弹壳——会被特意保留不动,因为用魔力条来支付这些物品会改变这些武器的玩法,而不仅仅是改变它们的消耗来源。

你无法负担的法术会以与其他缺少施法消耗时相同的方式失败,并显示通常的反馈信息,提示你缺少的是魔力。

每个法术独立定价,而非统一公式

在首次加载世界时,包内所有法术都会被定价并写入 config/savaru_mana/spell_costs.json,每个法术一行,可直接编辑:

"spells": {
  "wizards:arcane_bolt": 20.0,
  "wizards:fire_meteor": 80.0
}

修改一个数字,只有对应法术的消耗会改变。删除一行,则会根据法术自身的数据——伤害系数和投射物数量——并使用同一文件中的可调权重重新计算该法术的消耗。

任何系统都能驱动的属性

属性 默认值 作用
savaru_mana:mana 100 最大魔力值
savaru_mana:mana_regen 4 每秒恢复的魔力值
savaru_mana:mana_cost 100 消耗倍率,以百分比表示
savaru_mana:mana_damage_reduction 100 魔力尚存时受到的伤害
savaru_mana:mind_over_matter 0 供其他模组驱动的自由容量

因为这些是真实的属性,它们会出现在属性面板中,任何能添加属性修饰器的模组都可以赋予魔力,而无需知道本模组的存在。

真正可以摆放的魔力条

从 Mod Menu 打开设置,魔力条会由 HUD 使用的同一套代码实时绘制在其实际位置——将其拖拽到你想要的位置,或者使用方向键逐像素微调。你在调整时,预览填充条会上下浮动,因此低魔力状态的颜色及其阈值可以在动态中判断,而不是靠猜测。

滑块可调节宽度、高度、不透明度、缩放比例和低魔力阈值,并带有锚点角,切换锚点时会自动重新测量偏移量,因此更换锚点不会导致魔力条瞬移。所有设置都存储在 config/savaru_mana/hud.json 中,该文件仍然可以手动编辑——屏幕界面只是这个文件的前端,而不是第二个数据源。


模组作者信息

com.savaru.mana.api.SavaruManaApi 是入口点。每个方法都是静态的,接受一个 PlayerEntity 参数,因此可以通过完全反射来调用,无需硬依赖:

double  getMana(PlayerEntity player);
double  getMaxMana(PlayerEntity player);
void    restore(PlayerEntity player, double amount);
boolean spend(PlayerEntity player, double amount);   // 全有或全无
double  drain(PlayerEntity player);                  // 清空,返回原有的魔力值

兼容性

  • 需要 法术引擎(Spell Engine)1.10 或更高版本、Fabric API 以及 Minecraft 1.21.1。
  • 不能 与 RPG Mana 同时安装;两者功能相同。
  • Mod Menu 是可选的;没有它配置文件仍然有效。不需要任何配置库。

从 RPG Mana 迁移

本模组仅以自己的命名空间注册属性。在安装 RPG Mana 时生成的装备带有 rpgmana: 属性 ID,而 Minecraft 会在其中一个 ID 无法解析时丢弃物品的整个属性块——包括基础攻击伤害和攻击速度。切换后请重新生成或重新获取受影响的装备。