C 键:放置/合成网格(Crafting Grid Key)

基本信息

属性 值
热键 ID key.craftingGrid(本地化:Crafting Grid)
默认按键 C(Keyboard.KEY_C)
分类 key.categories.gameplay
实现类 codechicken.translocator.CraftingGridKeyHandler(继承 KeyBinding,单例 public static final instance)
事件 ClientTickEvent,仅在 Phase.END 响应
侧别 @SideOnly(Side.CLIENT)(纯客户端,服务端不注册)
注册条件 仅当 Translocator.disableCraftingGridKey == false 时才注册按键与 tick 处理器

本 mod 只有这一个热键。

功能

按 C 键对鼠标指着的方块面做两件事:

目标 行为
不是合成网格 尝试 Translocator.blockCraftingGrid.placeBlock(world, player, x, y, z, sideHit):成功则向服务端发包 type 1 放置
是合成网格 向服务端发包 type 2 立即合成该网格

触发条件

  1. mc.currentScreen == null(没有打开任何 GUI)
  2. mc.objectMouseOver != null 且 typeOfHit == MovingObjectType.BLOCK(准星指着方块)
  3. 边沿触发:wasPressed 记录上一 tick 状态,仅在 false → true 的跳变时触发一次(避免长按重复)
  4. 事件在 ClientTickEvent 的 END 阶段处理

放置判定

客户端先本地 placeBlock 试一次,只有成功才发包(减少无效网络流量)。 placeBlock 的条件:

  • disableCraftingGridKey 为 false
  • sideHit == 1(顶面)或目标是 Blocks.snow_layer
  • 目标若是 vine / tallgrass / deadbush 或可替换方块则不抬高,否则 y++
  • 下方必须是实心顶面(world.isSideSolid(x, y-1, z, ForgeDirection.UP))
  • world.canPlaceEntityOnSide(...) 通过

成功后 player.swingItem()。详见 合成网格 的摆放要求。

网络

包 类型 内容
PacketCustom(TranslocatorCPH.channel, 1) C→S 坐标(放置)
PacketCustom(TranslocatorCPH.channel, 2) C→S 坐标(合成)

服务端 TranslocatorSPH.handlePacket:

  • type 1 → Translocator.blockCraftingGrid.placeBlock(world, sender, x, y, z, side)
  • type 2 → 取出该坐标 TileEntity,强转 TileCraftingGrid 并 craft(sender)

相关条目

  • 合成网格 - 本按键放置与使用的方块
  • 模组配置 - disable-crafting-grid-key 会让本按键完全不注册