喷漆罐

[!INFO] 源码: SprayCanItem.java、ProjectBlue.java:123-137

给微型拉杆和微型按钮上色的消耗品。颜色存在 NBT,耐久值存在 damage,本 mod 少见地把两者分开存。

注册信息

注册名 变量 类 子项
gcewing_projectblue:emptySprayCan emptySprayCan Item(无子类) 无(Item 默认)
gcewing_projectblue:sprayCan sprayCan SprayCanItem 17 个(颜色 0–16,存 NBT)

颜色对照表

颜色存在 NBT color(int),不是 damage。显示名 %s Spray Paint,%s 取 color.gcewing_projectblue:<color>:

color 名称 说明
0 White 白色
1 Orange 橙色
2 Magenta 品红
3 Light Blue 淡蓝
4 Yellow 黄色
5 Lime 黄绿
6 Pink 粉
7 Grey 深灰
8 Light Grey 浅灰
9 Cyan 青
10 Purple 紫
11 Blue 蓝
12 Brown 棕
13 Green 绿
14 Red 红
15 Black 黑
16 Stone 去漆剂 — 显示名走 item.gcewing_projectblue:paintRemover.name,即「Paint Remover」

去漆剂(color 16)不是灰色。它用于把已上色的控件还原:合成时 miniatureStackFor 对 meta 16 的拉杆/按钮返回原版拉杆/按钮。

耐久

getMaxDamage() 返回 256。伤害值存 item damage,颜色存 NBT,两者在 getContainerItem 中分别处理:

  • hasContainerItem = stack.getItemDamage() < getMaxDamage()
  • getContainerItem:耐久 +1,颜色不变;若超过 256 则返回 emptySprayCan
  • doesContainerItemLeaveCraftingGrid 返回 false(避免在合成台里循环消耗)

即一罐喷漆可用 256 次。每次对控制面板喷色(ControlPanelPart.activateCell)都会消耗 1 点。

合成

空罐

无序 3 格(ProjectBlue.registerRecipes):

[石头按钮] [铁锭]
[铁锭]     [铁锭]

产出 4 个空罐(newRecipe(emptySprayCan, 4, "b", "I", "I", ...))。

填充

16 种颜色各一条无序配方(for (int i = 0; i < 16; i++)):

[空喷漆罐] [牛奶桶] [鸡蛋] [染料 meta = 15 - i]

产出 1 个对应颜色的喷漆罐。15 - i 是因为染料 meta 与捆绑线颜色序号相反(染料 15 = 黑 = 通道色 0 白)。

两种用法

用法 位置 效果
合成上色 合成台:控件 + 喷漆罐 永久改变控件 meta(PaintControl,2 格横向)
面板调通道 对控制面板点击 把该格通道色设为喷漆颜色;颜色 16 时重置为该格号

面板调通道时播放 step.snow 音效,不扣耐久(源码中该分支直接 return,无 stack.stackSize--)。耐久只在合成上色时通过 getContainerItem 消耗。

相关