额外生命 (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")) 内部,而生命配方在其外部)。

相关条目