模板(OpenBlocks:stencil)与颜料刷(OpenBlocks:paintBrush)
基本信息
| 物品 | 注册名 | 类 | 声明位置 |
|---|---|---|---|
| 模板 | OpenBlocks:stencil |
openblocks.common.item.ItemStencil |
OpenBlocks.java:452(textureName = "stencilcover_full") |
| 颜料刷 | OpenBlocks:paintBrush |
openblocks.common.item.ItemPaintBrush |
OpenBlocks.java:449(unlocalizedName = "paintbrush") |
另有 OpenBlocks:generic 里的 unpreparedStencil(未加工模板坯)与 sketchingPencil(素描铅笔)——见通用 meta 物品。
功能:15 种模板
openblocks.common.Stencil 是一个 15 项枚举(common/Stencil.java:9-25),每个常量带一个贴图名:
| # | 枚举常量 | 贴图名 | 中文名 |
|---|---|---|---|
| 0 | CREEPER_FACE |
creeperface |
苦力怕脸 |
| 1 | BORDER |
border |
边框 |
| 2 | STRIPES |
stripes |
条纹 |
| 3 | CORNER |
corner |
角 |
| 4 | CORNER2 |
corner2 |
角 2 |
| 5 | CORNER3 |
corner3 |
角 3 |
| 6 | HOLE |
hole |
洞 |
| 7 | SPIRAL |
spiral |
螺旋 |
| 8 | THICKSTRIPES |
thickstripes |
粗条纹 |
| 9 | SPLAT |
splat |
泼溅 |
| 10 | STORAGE |
storage |
存储 |
| 11 | HEART |
heart |
心 |
| 12 | HEART2 |
heart2 |
心 2 |
| 13 | MUSIC |
music |
音符 |
| 14 | BALLOON |
balloon |
气球 |
每个模板注册两张贴图(Stencil.java:35-39):
openblocks:stencil_<name>—— 用于getBlockIcon()openblocks:stencilcover_<name>—— 用于getCoverBlockIcon()
物品图标取 cover 图标,为 null 时回退到 itemIcon(ItemStencil.java:36-39)。创造模式子物品按 stencil.ordinal() 逐个生成(:41-47)。
模板的使用流程
ItemStencil.onItemUse(ItemStencil.java:49-74):
- 若
PaintUtils.instance.isAllowedToReplace(...)允许,先把目标方块就地换成画布(BlockCanvas.replaceBlock,:53-55) - 取 TE,若是
TileEntityCanvas则取stack.getItemDamage()作为stencilId(:61) stencil = Stencil.VALUES[stencilId],越界时catch (ArrayIndexOutOfBoundsException)返回 false(:62-67)——损坏数据不会崩客户端canvas.useStencil(side, stencil)成功则消耗 1 个模板(:69)
useStencil 的细节(TileEntityCanvas.java:181-190):若该面已是最后一层模板且新模板与旧模板相同则返回 false(拒绝同一模板叠加);否则旧的顶层模板以 new ItemStack(Items.stencil, 1, oldStencil.ordinal()) 完整退还(:187)——所以换模板不会丢失。
颜料刷
ItemPaintBrush 的关键常量(ItemPaintBrush.java:30-40):
| 常量 | 值 | 含义 |
|---|---|---|
SINGLE_COLOR_THRESHOLD |
16 | 低于此数视为单色,走纯色渲染路径 |
TAG_COLOR |
"color" |
颜色存 NBT |
MAX_USES |
24 | 耐久 24 |
| 堆叠 | 1 | setMaxStackSize(1) |
其他颜料类物品
OpenBlocks:tastyClay(ItemTastyClay extends ItemFood,ItemTastyClay.java:12)是可食用的黏土块。OpenBlocks:infoBook(ItemInfoBook,:12)打开信息书。
数值
| 数值名 | 来源 | 值 |
|---|---|---|
| 模板种类 | Stencil 枚举 |
15(Stencil.java:9-25) |
| 每种模板贴图数 | registerBlockIcons |
2(Stencil.java:37-38) |
| 模板 meta 范围 | Stencil.VALUES[dmg] |
0 ~ 14(ItemStencil.java:38) |
| 颜料刷耐久 | MAX_USES |
24(ItemPaintBrush.java:34) |
| 颜料刷单色阈值 | SINGLE_COLOR_THRESHOLD |
16(ItemPaintBrush.java:30) |
| 颜料刷堆叠 | 硬编码 | 1(ItemPaintBrush.java:40) |
15 这个数字经两种方式核对:
Stencil.java中^\s+[A-Z][A-Z0-9]*\("形式的常量声明行计数,以及},/;分隔的枚举体手工清点,结果一致。
交互
| 触发 | 行为 |
|---|---|
| 模板右键方块 | 允许替换时先转成画布,再贴模板;成功消耗 1 个 |
| 对同一面重复贴同一模板 | 拒绝(TileEntityCanvas.java:184-186) |
| 换模板 | 旧模板作为物品退还(TileEntityCanvas.java:187) |
| 模板物品损坏 / meta 越界 | ArrayIndexOutOfBoundsException 被捕获,返回 false(ItemStencil.java:63-67) |
| 颜料刷用尽 | 24 次后损坏 |
合成配方
模板在 Config.registerCraftingRecipes 中没有直接合成配方——它由绘图桌用「未加工模板坯 + 素描铅笔」制作(Config.java:1073-1088)。这是 OpenBlocks 唯一的内容创作型配方。
颜料刷的配方位于 Config.java 的物品段(未逐条核对,故不在此断言字符表)。
相关条目
- 方块 / 投影建造系统 - 画布、投影仪与模板的关系
- 通用 meta 物品 -
unpreparedStencil/sketchingPencil的isEnabled开关 - 配置项全表