特殊物品

基本信息

属性 值
所属枚举 com.dreammaster.item.NHItemList(见 NHItemList)
带自定义构造参数的物品 90 / 567
实现类数 7(CoinItem、NHMusicRecord、CustomPattern、OvenGlove、WitherProtectionRing、WoodenBrickForm、QuantumBread)
数量分布 80 + 4 + 2 + 1 + 1 + 1 + 1 = 90

NHItemList 中不带构造参数的那条重载直接 new Item()(NHItemList.java:616-618),因此下面 7 个类就是本 mod 全部的自定义物品实现。

OvenGlove 烤箱手套

com.dreammaster.item.baubles.OvenGlove —— 全 mod 逻辑最复杂的物品。

属性 值
继承 Item,实现 Baubles 的 IBauble
饰品槽位 BaubleType.RING(OvenGlove.java:91-92)
护甲值 setMaxDamage(0)(不消耗耐久,OvenGlove.java:37)
是否有子类型 setHasSubtypes(true)(OvenGlove.java:38)
NBT 耐久键 Durability(OvenGlove.java:34)
NBT 耐久上限 1000(OvenGlove.java:35)
事件处理器 内嵌 OvenGlove.EventHandler(OvenGlove.java:141)
事件注册 MinecraftForge.EVENT_BUS.register(new OvenGlove.EventHandler())(MainRegistry.java:256)
副手支持 依赖 modid Backhand(OvenGlove.java:166-170)

随机显示名

getItemStackDisplayName 在客户端每秒重掷一次 nextInt(4),按 <name>_<damage>_<rand>.name 查语言文件(OvenGlove.java:47-58),因此手套名在 4 个变体间轮换。zh_CN.lang 中确有 8 个对应键(OvenGlove_0_0 – OvenGlove_1_3)。

耐久机制

  • createOrInitNBTTag 在 NBT 缺失时写入 MAX_DURABILITY(OvenGlove.java:134-139)
  • onCreated 触发初始化(OvenGlove.java:106-108)
  • damageItem 逐次递减,降到 0 即停止(OvenGlove.java:117-122)
  • Tooltip 在 Durability <= 1 时追加 item.OvenGlove.desc.broken(OvenGlove.java:130-132)
  • 图标按 NBT 耐久取 2 张之一(OvenGlove.java:70)

免伤逻辑

EventHandler.onDamage(OvenGlove.java:144)监听 LivingAttackEvent:只对玩家、只对 DamageSourceHotItem 生效;难度为和平时直接 setCanceled(true)(OvenGlove.java:155-159,注释引用 issue #16879);伤害来源物品必须是主手,或在 Backhand 加载时是副手(OvenGlove.java:164-172)。

WitherProtectionRing 凋零防护指环

com.dreammaster.item.baubles.WitherProtectionRing

属性 值
继承 Item,实现 IBauble
饰品槽位 BaubleType.RING(WitherProtectionRing.java:29-30)
限制 无 —— canEquip / canUnequip 恒为 true(WitherProtectionRing.java:19-26)
效果 每 tick 1/20 概率移除 Potion.wither 效果(:55-60)

onWornTick 先 instanceof EntityPlayer 早退(:51-53),再 user.worldObj.rand.nextInt(20) == 0 判定(:55)。Tooltip 有 2 行绿色斜体说明(:41-46)。

QuantumBread 量子面包

com.dreammaster.item.food.QuantumBread —— 本 mod 唯一的 ItemFood。

属性 值
饱和度 / 饥饿恢复 super(1, 0.0F, true) → 堆叠 1、饱和 0.0、alwaysEdible(:22-23)
附魔光泽 hasEffect 恒返回 true(:45-47)
随机显示名 每 250ms 重掷 nextInt(2),按 <name>_<rand>.name 查表(:31-38)

食用效果(onFoodEaten,:50-56):

效果 数值
饥饿值 addStats(10, 1.0F)
生命恢复 Potion.regeneration,20×60 tick,等级 2
跳跃提升 Potion.jump,20×60 tick,等级 2
移动速度 Potion.moveSpeed,20×60 tick,等级 2

CoinItem 币

com.dreammaster.item.CoinItem —— 80 个币共用同一个类,靠两个构造参数 (String coinType, int coinTier) 区分(CoinItem.java:20-23)。

渲染走双层贴图:

渲染元素 贴图路径 来源
背景 dreamcraft:coins/background/big<coinTier> CoinItem.java:40
前景类型 dreamcraft:coins/icons/<coinType><coinTier> CoinItem.java:42
是否双层 requiresMultipleRenderPasses() 返回 coinType != null CoinItem.java:33-35

CoinBlank – CoinBlankIV 共 5 个传入 coinType = null,因此不渲染前景层(NHItemList.java:114-118),是未铸币坯。

币共有 16 个 coinType 取值,每个各 5 个等级(coinTier 0–4),合计 80:

coinType 数量
adventure、bee、bm、builder、chemist、chunkloader、cook、farmer、gardener、ranger、space、survivor、technician、witch、wizard 各 5,共 75
null(CoinBlank – CoinBlankIV) 5

CoinChunkloaderTierI – TierV 的堆叠上限被静态块设为 4(NHItemList.java:600-604)。

NHMusicRecord 音乐唱片

com.dreammaster.item.record.NHMusicRecord,两个构造器(NHMusicRecord.java:14-27):

唱片 声音来源 归属
AbsoluteZeroDisc record.absolute_zero 本 mod sounds.json
FloraDisc record.flora 本 mod sounds.json
LunchBreakDisc track.lunch_break vendingmachine mod
SweetDreamsDisc record.sweet_dreams 本 mod sounds.json

LunchBreakDisc 是唯一跨模组取音乐的唱片,走三参构造器指定外部 modid(NHItemList.java:36)。getRecordResource 按 modid 构造 ResourceLocation(NHMusicRecord.java:30-32)。

CustomPattern 铸型

com.dreammaster.item.CustomPattern 实现 TConstruct 的 IPattern(CustomPattern.java:13),类上与两个方法上均标 @Optional.Interface / @Optional.Method(modid = TINKER_CONSTRUCT)(:12、:16、:22)。

方法 返回
getPatternCost 0(免费,CustomPattern.java:17-19)
getPatternOutput null(CustomPattern.java:23-25)

仅 2 个实例:BowFletchingCast、BowStringCast,均属 MOLDS 标签(NHItemList.java:30-31)。语言键为 Cast.BowFletchingCast / Cast.BowStringCast。

WoodenBrickForm 木制砖模板

com.dreammaster.item.WoodenBrickForm —— 唯一的容器物品(hasContainerItem,WoodenBrickForm.java:22):

方法 作用
hasContainerItem() 返回 true(:22)
getContainerItem(ItemStack) 返回容器物品(:32)
doesContainerItemLeaveCraftingGrid 控制容器物品是否留在合成格(:16)
isRepairable() 可修复(:27)

数值

数值名 值
自定义物品实现类 7
带构造参数物品 90
OvenGlove NBT 耐久上限 1000
OvenGlove 显示名变体 4
QuantumBread 显示名变体 2
生效药水时长 1200 tick(60 秒),等级 2
币类型数 16 个 coinType × 5 级 = 80,其中 5 个 CoinBlank* 的 coinType 为 null,不渲染前景层

交互

物品 主要交互
OvenGlove 装备在 Baubles 指环槽;徒手或副手持物被烧伤时消耗 NBT 耐久免伤
WitherProtectionRing 装备后每 tick 1/20 概率清除凋零效果
QuantumBread 食用,恢复 10 点饥饿并给 3 个 60 秒二级增益
Coin* 通过 Forestry 印章 / 区块加载器配方获取,见 配方脚本
CustomPattern TConstruct 铸型,消耗为 0
WoodenBrickForm 合成砖块的容器物品

相关条目