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 立即合成该网格 |
触发条件
mc.currentScreen == null(没有打开任何 GUI)mc.objectMouseOver != null且typeOfHit == MovingObjectType.BLOCK(准星指着方块)- 边沿触发:
wasPressed记录上一 tick 状态,仅在false → true的跳变时触发一次(避免长按重复) - 事件在
ClientTickEvent的END阶段处理
放置判定
客户端先本地 placeBlock 试一次,只有成功才发包(减少无效网络流量)。
placeBlock 的条件:
disableCraftingGridKey为 falsesideHit == 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)