跳到正文
烈焰甘蔗Wiki

陷阱(Traps)

Tinkers’ Construct 用来守家的 5 个方块:1 个竹刺 + 4 个木栅栏。全部在 world/TinkerWorld.java:161-165 构造、:256-260 注册。

基本信息

属性 值
模组 tconstruct
注册名 trap.punji、trap.barricade.oak、trap.barricade.spruce、trap.barricade.birch、trap.barricade.jungle
公共基类 mantle.blocks.MantleBlock(非普通方块,走自定义渲染)
注册代码 world/TinkerWorld.java:256-260
方块数 5
TileEntity 无(5 个都是纯逻辑方块)

Punji(竹刺)

属性 值 来源
类 tconstruct.blocks.traps.Punji extends MantleBlock blocks/traps/Punji.java:23
材质 Material.plants Punji.java:26
硬度 3.0 Punji.java:32
碰撞盒 (0.125, 0, 0.125) – (0.875, 0.375, 0.875) Punji.java:27
脚步声 Block.soundTypeGrass Punji.java:28
标签 TConstructRegistry.blockTab Punji.java:31
渲染 getRenderType() = PunjiRender.model tconstruct/world/model/PunjiRender.java

伤害公式(Punji.onEntityCollidedWithBlock)

int damage = world.getBlockMetadata(x, y, z) / 2 + 1;          // 基础
if (entity.fallDistance > 0) damage += fallDistance * 1.5 + 2; // 摔落加成
entity.attackEntityFrom(DamageSource.cactus, damage);
((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 20, 1));
部件 值
触发条件 entity instanceof EntityLivingBase
基础伤害 metadata / 2 + 1 ⇒ metadata 0/1 = 1,2/3 = 2,4/5 = 3,6/7 = 4
摔落加成 fallDistance × 1.5 + 2(仅当 fallDistance > 0)
伤害源 DamageSource.cactus
附赠 缓慢 20 tick、等级 1(Potion.moveSlowdown)

metadata 4 级加固(Punji.onBlockActivated)

右键竹刺,手里拿的也是竹刺,就把 metadata +1(上限 4,即 meta < 4 才加):

if (stack.getItem() == Item.getItemFromBlock(TinkerWorld.punji)) {
    world.setBlockMetadataWithNotify(x, y, z, meta + 1, 3);
    world.playSoundEffect(...);   // 音量 (stepSound.getVolume()+1)/2,音高 stepSound.getPitch()*0.8
    player.swingItem();
    if (!player.capabilities.isCreativeMode) { stack.stackSize--; if (stack.stackSize <= 0) player.destroyCurrentEquippedItem(); }
}

⇒ 成品配方出 5 个,每右击一次 +1 伤害,最多 4 级。创造模式不消耗。

掉落(Punji.quantityDropped)

public int quantityDropped(int meta, int fortune, Random random) { return meta + 1; }

⇒ 打掉几级的竹刺就掉几个,1 级掉 1 个,4 级掉 4 个。fortune 与 random 参数未使用。

BarricadeBlock(木栅栏 ×4)

一个类、四个实例,差异只有贴图——构造函数 (Block model, int meta),用 model.getIcon(2, modelMeta) 取贴图:

注册名 构造参数 贴图来源
trap.barricade.oak new BarricadeBlock(Blocks.log, 0) 原版橡木原木侧面
trap.barricade.spruce new BarricadeBlock(Blocks.log, 1) 云杉原木侧面
trap.barricade.birch new BarricadeBlock(Blocks.log, 2) 白桦原木侧面
trap.barricade.jungle new BarricadeBlock(Blocks.log, 3) 丛林原木侧面
属性 值 来源
类 tconstruct.blocks.traps.BarricadeBlock extends MantleBlock blocks/traps/BarricadeBlock.java:22
材质 Material.wood BarricadeBlock.java:27
硬度 4.0 BarricadeBlock.java:29
标签 TConstructRegistry.blockTab BarricadeBlock.java:30
isOpaqueCube() false BarricadeBlock.java:77
renderAsNormalBlock() false BarricadeBlock.java:83
getRenderType() BarricadeRender.model BarricadeBlock.java:88
registerBlockIcons 空实现 BarricadeBlock.java:45
碰撞盒 整格(getCollisionBoundingBoxFromPool 返回 x..x+1) BarricadeBlock.java:59-62
ItemBlock tconstruct.world.itemblocks.BarricadeItem(4 个共用) TinkerWorld.java:257-260

栅栏也有 4 级 metadata

BarricadeBlock.onBlockActivated(:77-100):手里拿栅栏且未潜行时,若 meta % 4 != 3 就 meta + 1(封顶 meta % 4 == 3),并消耗 1 个(创造模式不消耗)。

harvestBlock(:67-72)则反向降级后再掉落:

if (meta % 4 > 0) world.setBlock(x, y, z, this, meta - 1, 3);
dropBlockAsItem(world, x, y, z, new ItemStack(this));

⇒ 用镐采集 3 级栅栏:先把它退回 2 级(留在世界里),再掉 1 个栅栏。这与竹刺的 meta + 1 掉落不同——竹刺是掉了就掉 meta+1 个,栅栏是留下一个降级的方块 + 掉 1 个物品。

合成配方

全部在 world/TinkerWorld.java:752-780:

产物 数量 形状 材料
trap.punji 5 b b / ␣b␣ / b b(对角 5 根芦苇) Items.reeds
trap.barricade.oak 1 b / b logWood(OreDict,任一原木)
trap.barricade.spruce 1 b / b Blocks.log meta 1
trap.barricade.birch 1 b / b Blocks.log meta 2
trap.barricade.jungle 1 b / b Blocks.log meta 3

只有橡木栅栏用 OreDict 的 logWood,另外三个写死 metadata。这也意味着没有白桦/丛林以外的木种变体(如杉木之外的新木种),想换成别的木种只能靠橡木那一条 + 手动摆放。

交互

触发 行为
实体(EntityLivingBase)碰撞竹刺 造成 meta/2 + 1 (+ 摔落加成) 点仙人掌伤害 + 缓慢 I
右手拿竹刺右键竹刺 metadata +1(上限 4),播放音效,创造模式不消耗
竹刺被打掉 quantityDropped = meta + 1 ⇒ 掉 1–4 个
栅栏:手里拿栅栏右键(未潜行) metadata +1(按 % 4 封顶 3),消耗 1 个
栅栏:被采集 harvestBlock 先把 meta % 4 > 0 的方块降级 1 级留在原地,再掉 1 个物品
木栅栏 纯装饰+阻挡(碰撞盒是整格)

相关条目

源码

tconstruct/world/TinkerWorld.java:161-165, 256-260, 752-780,tconstruct/blocks/traps/{Punji,BarricadeBlock}.java,git 8f6e2496f7(tag 1.14.113-GTNH)。

浏览全部模组