南瓜与南瓜灯(Pumpkin / Jack-o’-Lantern)
Chisel 为 16 个南瓜图案各注册一个方块,再为同一批图案注册 16 个对应的南瓜灯方块,共 32 个注册方块。这是 Chisel 里方块数最多的单一家族。
基本信息
| 属性 | 值 |
|---|---|
| 注册名(南瓜) | chisel:pumpkin1 … chisel:pumpkin16 |
| 注册名(南瓜灯) | chisel:jackolantern1 … chisel:jackolantern16 |
| 类 | team.chisel.block.BlockCarvablePumpkin extends BlockPumpkin |
| 硬度 | 1.0F(两个家族都是) |
| 声音 | BlockCarvablePumpkin 构造里 setStepSound(Block.soundTypeWood) |
| 创意标签 | ChiselTabs.tabOtherChiselBlocks |
| 南瓜灯亮度 | ⚠️ 实际 1.0(见下) |
| 雕刻组 | pumpkin(17 成员)与 jackolantern(17 成员)两个互相独立的组 |
| ItemBlock | ItemCarvablePumpkin |
| 数组字段 | ChiselBlocks.pumpkin[16]、ChiselBlocks.jackolantern[16] |
⚠️ 南瓜灯亮度被覆写成 1.0(源码行为,未修复)
BlockCarvablePumpkin的构造器对isOn == true会setLightLevel(10.0F)(block/BlockCarvablePumpkin.java:27), 但Features.JACKOLANTERN在new BlockCarvablePumpkin(true)之后又链式调用了.setLightLevel(1.0f), 后者覆盖前者。所以chisel:jackolantern1–16的实际发光等级是 1.0(原版南瓜灯是 15)。 这是上游行为,本条目如实记录,不做"修正"。
变体与雕刻组
两个组都以原版方块为 order 0:
Carving.chisel.addVariation("pumpkin", Blocks.pumpkin, 0, 0); // PUMPKIN
Carving.chisel.addVariation("jackolantern", Blocks.lit_pumpkin, 0, 0); // JACKOLANTERN
随后循环把 16 个 Chisel 方块按 order metadata + 1 加进对应组:
| 方块 | 组内 order | 材质信息 |
|---|---|---|
minecraft:pumpkin |
0 | — |
chisel:pumpkin1 … pumpkin16 |
1 … 16 | pumpkin/pumpkin_face_<N>_off |
minecraft:lit_pumpkin |
0 | — |
chisel:jackolantern1 … jackolantern16 |
1 … 16 | pumpkin/pumpkin_face_<N>_on |
⇒ 每组 17 个成员,pumpkin 与 jackolantern 互不转换。
两组的 ItemBlock 是同一个类 ItemCarvablePumpkin,方块名也不同:南瓜 setBlockName("pumpkin"),南瓜灯 setBlockName("litpumpkin")(与原版一致,便于替换原版南瓜而不打断已有建筑)。
数值
| 属性 | 值 | 来源 |
|---|---|---|
| 注册方块数 | 32(16 + 16) | Features.java PUMPKIN / JACKOLANTERN 两个 for (metadata = 0; metadata < 16; metadata++) 循环 |
| 每组成员数 | 17 | 1 原版 + 16 Chisel |
| 硬度 | 1.0 | 两常量的 setHardness(1.0F) |
| 发光等级(南瓜) | 0(不发光) | 构造器 isOn = false 分支不设光 |
| 发光等级(南瓜灯) | 1.0(被覆写) | 见上 |
| 数组长度 | pumpkin / jackolantern 各 16 |
init/ChiselBlocks.java |
交互
| 触发 | 行为 |
|---|---|
| 左键雕刻刀点击原版南瓜 | 在 17 个南瓜图案间循环 |
| 左键雕刻刀点击原版南瓜灯 | 在 17 个南瓜灯图案间循环 |
在南瓜上下各放一层雪(y-1 和 y-2 都是 Blocks.snow) |
南瓜被替换成 Chisel 雪人 EntityChiselSnowman,南瓜本身作为雪人的手持物(槽位 2),并撒 120 个 snowshovel 粒子 |
| 南瓜 + 铁块构成铁傀儡(横 2×竖 3 的铁块阵) | 南瓜被移除,生成一个铁傀儡 EntityIronGolem(setPlayerCreated(true)) |
| 合成南瓜灯 | 无序配方:chisel:pumpkin<N> + 火把 ⇒ chisel:jackolantern<N>(Features.PUMPKIN.addRecipes(),needsMetaRecipes() 返回 true,对 16 个 meta 各跑一次) |
| 雕刻工具 | 雕刻刀左键切换变体,右键开 GUI |
机制一:雪人(BlockCarvablePumpkin.onBlockAdded 第一个分支)
- 条件:
(x, y-1, z)与(x, y-2, z)都是Blocks.snow - 客户端先跑;方块替换与刷怪包在
if (!world.isRemote)里 - 先
new ItemStack(world.getBlock(x,y,z), world.getBlockMetadata(x,y,z))抓取南瓜 - 依次
setBlock(air, 0, 2)清掉 y、y-1、y-2 三格 EntityChiselSnowman.setCurrentItemOrArmor(2, pumpkin)→ 雪人手持该南瓜setLocationAndAngles(x+0.5, y-1.95, z+0.5, 0, 0)→ 生成在原位置略下方- 三个格子各
notifyBlockChange - 紧接着(仍在
if (!world.isRemote)之外,所以双端都跑)在y-2到y+0.5范围内撒 120 个snowshovel粒子
机制二:铁傀儡(第二个分支,else if)
| 判定 | 条件 |
|---|---|
| 前置 | (x, y-1, z) 或 (x, y-2, z) 是 Blocks.iron_block |
flag(横向) |
(x-1, y-1, z) 与 (x+1, y-1, z) 都是铁块 |
flag1(纵向) |
(x, y-1, z-1) 与 (x, y-1, z+1) 都是铁块 |
| 触发 | flag || flag1 |
| 结果 | 移除 y、y-1、y-2 三格 + 横向或纵向那两格铁块,生成 EntityIronGolem 并 setPlayerCreated(true),位置同为 (x+0.5, y-1.95, z+0.5),最后对被清的每格 notifyBlockChange |
第二个分支没有
!world.isRemote保护——这是上游代码原样,本条目如实记录。
朝向贴图
BlockCarvablePumpkin.getIcon(side, meta) 决定哪一面贴南瓜脸:
| 条件 | 贴图 |
|---|---|
side == 1(顶)或 side == 0(底) |
pumpkin/pumpkin_top |
meta == 2 && side == 2 |
正面(pumpkin_face_<N>) |
meta == 3 && side == 5 |
正面 |
meta == 0 && side == 3 |
正面 |
meta == 1 && side == 4 |
正面 |
| 其它 | pumpkin/pumpkin_side |
合成配方
Features.PUMPKIN.addRecipes()(无序,16 份):
chisel:pumpkin<N> + torch
↓
chisel:jackolantern<N> (1 : 1)
南瓜灯本身没有其它获取途径(JACKOLANTERN 常量没有 addRecipes())。
相关条目
- Chisel Snowman - 雪上加南瓜生成的就是它
- Chisel - 雕刻工具
- Cloud in a Bottle - 同为"把方块变出别的东西"的投掷物