额外生命 (Extra Life)
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | betterquesting:extra_life |
| 类 | betterquesting.items.ItemExtraLife |
| 注册位置 | GameRegistry.registerItem(extraLife, "extra_life")(BetterQuesting.java:101) |
| 贴图 | betterquesting:heart(setTextureName,ItemExtraLife.java:33),资源为 heart_full.png / heart_half.png / heart_quarter.png |
| 是否有子类 | 是(setHasSubtypes(true),ItemExtraLife.java:36) |
| 中文名 | betterquesting.extra_life.full.name=1颗心 / .half.name=1/2颗心 / .quarter.name=1/4颗心 |
功能
额外生命是 BetterQuesting 硬核(Hardcore)模式的回血道具。在硬核模式下玩家死亡会扣掉一条命(见 生命值与硬核模式),生命耗尽即被服务器封禁。右键使用一颗心可把命数加回 1 —— 它是硬核服务器上唯一能"续命"的物品。
关键约束:只有 meta 0(full)可被使用。onItemRightClick 首行即 if (stack.getItemDamage() != 0) return stack;(ItemExtraLife.java:53)—— 另外两个子类型只能作为合成材料被消耗,不能直接吃。
第二个约束:非硬核模式下完全无效。else if (QuestSettings.INSTANCE.getProperty(NativeProps.HARDCORE)) 意味着硬核关闭时该物品只是普通的右键空气(ItemExtraLife.java:55)。
第三个约束:已达生命上限时仅提示、不消耗(除创造模式)。此时发红字 betterquesting.gui.full_lives 并原样返回(ItemExtraLife.java:63-71)。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 子类型(damage)值 | 0 = 1 颗心、1 = 1/2 颗心、2 = 1/4 颗心 | zh_CN.lang 三条 key;ItemExtraLife 仅覆写 getIcon 按 damage 选图 |
| 可直接使用的 meta | 仅 0 | stack.getItemDamage() != 0 提前返回(ItemExtraLife.java:53) |
| 每次使用增加生命 | +1 | LifeDatabase.INSTANCE.setLives(uuid, lives + 1)(ItemExtraLife.java:76) |
| 使用音效 | random.levelup,音量 1.0,音高 1.0 |
world.playSoundAtEntity(player, "random.levelup", 1F, 1F)(ItemExtraLife.java:73) |
| 创造模式 | 不消耗堆叠 | if (!player.capabilities.isCreativeMode) stack.stackSize--;(ItemExtraLife.java:56-58) |
| 生命上限 | 由世界属性 NativeProps.LIVES_MAX 决定,默认 10 |
见 任务属性 |
| meta 取模 | damage % 3 |
getUnlocalizedName(ItemStack)(ItemExtraLife.java:100)与 getIconFromDamage(ItemExtraLife.java:130)都用 % 3,故 damage 3 复用 quarter 表现 |
| 附魔光环 | 仅 meta 0 有 | hasEffect 返回 stack.getItemDamage() == 0(ItemExtraLife.java:108-111) |
交互
| 触发 | 行为 |
|---|---|
| 右键(meta 0,硬核开启,未满) | 生命 +1,堆叠 -1,播放 random.levelup |
| 右键(meta 0,硬核开启,已满) | 红字提示 betterquesting.gui.full_lives,不消耗 |
| 右键(meta 0,硬核关闭) | 服务端发消息 betterquesting.msg.heart_disabled,无效果(ItemExtraLife.java:83) |
| 右键(meta 1 / 2) | 直接返回,无任何效果 |
| 使用成功提示 | betterquesting.gui.remaining_lives,参数为 lives + 1,带黄色格式码(ItemExtraLife.java:78-81) |
左键放置(onItemUse) |
恒返回 true,无放置行为(ItemExtraLife.java:43-46) |
合成配方
全部为无序(shapeless),注册于 BetterQuesting.java:129-151。方括号内为材料,右侧为产物的 meta:
| 材料 | 产出 |
|---|---|
[1/4, 1/4, 1/4, 1/4] |
1 × 1 颗心 |
[1/4, 1/4, 1/2] |
1 × 1 颗心 |
[1/2, 1/2] |
1 × 1 颗心 |
[1 颗心] |
2 × 1/2 颗心 |
[1/4, 1/4] |
1 × 1/2 颗心 |
[1/2 颗心] |
2 × 1/4 颗心 |
对应源码 6 次 addShapelessRecipe(BetterQuesting.java:129-151),注意「2 × 1/2 颗心」与「1 × 1/2 颗心」是不同的产物(前者来自 1 颗心,后者来自 2 个 1/4),写 NBT 时不要混淆。
配方全部不受 DreamCraft 条件限制(与两个方块不同,那段在 if (!Loader.isModLoaded("dreamcraft")) 内部,而生命配方在其外部)。