玩法与规则

操作很短,规则很实在:挖掘只认前景层、放置走服务端、合成要摆对九宫格。

操作一览

快捷栏 9 格,方块来自资源包 mapper 的 block.* 调色板。

1
2
3
4
5
6
7
8
9
按键作用说明
WASD / 方向键 / 空格移动、跳跃引擎自带;Shift 之类的组合要看引擎实现
19切换快捷栏方块方块名与库存显示在快捷栏上方
鼠标左键挖方块掉落进背包(下面有规则)
鼠标右键放置选中的方块由内核点击钩子接管,跳过引擎默认的"放泥土"
I背包 + 3×3 合成台点材料放入 / 点格子取回 / 点产物格合成
ESC设置面板缩放、HUD 透明度与大小、诊断行、全屏、创造模式
R重载资源包引擎自带(改完贴图不用重启)
E / Q已被引擎占用引擎的 client.World 用它们做相机缩放 —— 别再拿来做面板

挖:掉落规则

钩子跑在“引擎真正移除之前”,所以能读到现在是什么方块。

// mod 侧(服务端):左键点击钩子里先记掉落,再放行让引擎去挖
if (clickType == 0) {
    if (!hasForegroundBlock(api, cx, cy, lx, ly)) return false;   // 背景层挖不掉 → 没有掉落
    BlockAPI b = api.blockManager().getBlock(cx, cy, lx, ly);
    String drop = Items.dropOf(b.getBlockType());          // 矿石→材料,草方块→泥土,草/树叶→不掉
    if (drop != null) { addItem(conn, drop, 1); syncInventory(conn); }
    return false;                                              // 交给引擎去挖
}

两条“防刷”约定

  • 只有前景层有方块才掉落:地形生成写背景层时用的是 Chunk.setBackgroundBlock(), 它只往数组里塞、从不设置 isBackground = true,所以地形背景方块的 isBackground() 全是 false。照它判断的话,对着背景格狂点左键就能无限刷。
  • 同一格反复挖只掉一次:第一下挖掉前景方块,后面几下引擎自己就挖不动了(返回早退),自然没有掉落。

怎么判断“这一格能不能挖到东西”

  • getBlock() 是“前景没有就返回背景”,光看它分不出层;
  • 可靠做法是直接查前景层:((server.Chunk) chunkManager.getChunk(cx,cy)).getForegroundBlock(lx,ly) != null
  • 引擎的挖方块本来也只挖前景层 —— 两边规则一致就不会出现“挖了却有东西进包”。

合:背包与 3×3 合成台

按 I 打开。左边是背包(9 列),中间 3×3,右边产物格。

面板怎么用

  • 点背包里的物品 → 放进九宫格第一个空格(只是暂存,不扣料
  • 点九宫格里的物品(左右键都行)→ 取回
  • 摆对配方后产物格变绿 → 点它才向服务端请求合成
  • 鼠标悬停在格子上,页脚会显示物品名与数量

打开合成模拟器试配方 →

服务端会再校验一遍

客户端只发“九宫格里的九个物品”,服务端用同一份配方表 (Items.matchGrid无序匹配)判配方,再核对背包里确实有这些材料, 才扣料、加产物、把新背包推回客户端。摆错或材料不够,服务端什么都不动。

放:服务端权威

只走一条路 —— 引擎自己的点击包 + 内核钩子。

客户端和服务端必须都重启才会加载新的 mod/内核 —— mods\*.jarplant-mod-agent.jar 只在启动时读一次。

ESC 设置面板

改完立刻生效,并存进游戏目录的 hotbar.settings(删掉即恢复默认)。

范围写进配置
相机缩放0.25 – 5.0,步进 0.25zoom
快捷栏透明度20% – 100%hudAlpha
快捷栏大小24 – 72 像素cellSize
显示诊断行开 / 关showDiag
全屏窗口 ↔ 全屏—(不持久化)
无限放置(创造模式)开 / 关creative