跳到正文
烈焰甘蔗Wiki

Extra Hearts(里程碑额外心形)

基本信息

属性 值
类型 属性修改机制
触发方式 ProgressInfo 里程碑计算 + AttributeModifier
属性 maxHealth

功能

当玩家达成食物里程碑时,会通过 AttributeModifier 动态增加玩家的最大生命值。

每达成一个里程碑,玩家获得额外的红心(每心 = 2 HP 生命值)。

里程碑的计量单位:食物点数

里程碑不是按"吃了几种食物"计数,而是按食物点数(food points):

foodsPointsEaten = Σ(所有「曾经吃过」的唯一食物的 hunger 值)

其中 hunger 以饥饿单位计(1 单位 = 半格饱食度),数据源是 fullHistory(唯一食物集合)而非最近历史(ProgressInfo.java:25-33)。同一物品按 Item + metadata 判重(FoodEaten.equals,比较注册名与 getItemDamage(),FoodEaten.java:35-44)。

默认配置下的实际阈值:base = 50、无递增 ⇒ 第 1 个里程碑 50 点、第 2 个 100 点、第 5 个 250 点(不是 50 种食物)。

[!WARNING] 已订正(本轮源码审计) 原文的里程碑公式、修正公式、UUID、6 个配置项默认值逐条核对全部正确(证据见下)。原文缺少的实测数值与反馈效果已补齐。

里程碑机制

线性增长(increment = 0)

每个里程碑需要固定的食品点数:

第 N 个里程碑 = N × base

(ProgressInfo.java:64-65)

二次增长(increment > 0)

里程碑要求递增(越往后越难):

第 N 个里程碑 = (base − increment/2) × N + (increment/2) × N²

(ProgressInfo.java:56-62;已达成数用判别式反解,ProgressInfo.java:74-84)

配置项

配置项 默认值 说明
hearts.milestones.enable true 启用额外心形模块(ModConfig.java:48)
hearts.milestones.base 50 每个里程碑所需基础食品点数(ModConfig.java:52)
hearts.milestones.increment 0 每个里程碑的增量(0 = 线性)(ModConfig.java:56)
hearts.milestones.reward 1 每个里程碑奖励的心形数(ModConfig.java:60)
hearts.milestones.maximum -1 最大里程碑数(-1 = 无限制;>0 时封顶)(ModConfig.java:65、ProgressInfo.java:20, 90)
hearts.milestones.persists.through.death true 里程碑进度是否在死亡后保留(ModConfig.java:69)

生命值计算

totalHealthModifier = milestonesAchieved × 2 × HEARTS_PER_MILESTONE

每次里程碑达成时,通过 SharedMonsterAttributes.maxHealth 的 UUID f88d6ac1-4193-4ff0-85f5-f0357fe89d17 的 AttributeModifier 应用修正,操作符 0(相加),名称 Health gained from trying new foods(MaxHealthHandler.java:14, 31-39)。

默认配置下上限 = floor(点数 / 50) × 2 HP:50 点 → +2 HP(1 心)、250 点 → +10 HP(5 心)。

修正重算时按比例缩放当前血量:先 setHealth(0.1f) 强制刷新属性,再写入 旧血量 × 新上限 / 旧上限(MaxHealthHandler.java:54-58)。整个方法仅在服务端执行(MaxHealthHandler.java:17-19),且受 hearts.milestones.enable 开关约束(:21-23)。

里程碑进度显示

里程碑进度信息通过 ProgressInfo 类计算,支持线性和二次增长算法;/foodlist size 会直接打印它(见 /foodlist 命令)。

达成时的反馈

每次吃到从未吃过的食物都会生成 12 个 heart 粒子;若同时推进了里程碑,额外生成 12 个 happyVillager 粒子并播放 random.levelup 音效(FoodHistory.java:236-248)。

相关条目

浏览全部模组