跳转至

Pier 是什么

Pier 是一个 LeviLamina 模组,它的职责是装载别的模组。那些模组是会说同一份 C ABI 的动态库,所以用什么语言写,由作者决定。

这里没有解释器,也没有沙箱。模组是原生代码,服务端直接装载并调用,速度和 C++ 模组一样。 Pier 加的是一条边界,不是一层运行时。

它的形状

Text Only
1
2
3
4
5
6
7
8
你的模组  (任意语言)
    |
    |  sdk/abi.h        一份 C 头文件,约 190 个槽位
    v
  Pier    (C++,八个包)
    |
    v
LeviLamina  ->  基岩版专用服务器

头文件就是产品本体。仓库里位于它之下的一切都只是一个实现,而位于它之上的绑定, 除了它什么都不需要。

绑定

语言 状态
Rust 官方,功能最全 文档
C++ 官方,直接使用头文件 文档
Go 官方,通过 cgo 构建 c-shared DLL 文档
Zig 官方,通过 translate-c 直接使用头文件 文档
任何有 C FFI 的语言 你自己写 加一门语言

Rust 排在最前,是因为 Pier 本来就是从「想用 Rust 写 LeviLamina 模组」长出来的。 设计上并不偏向它,一个 Go 或 Zig 绑定不需要这个仓库改任何东西就能存在。

模组能碰到什么

领域
玩家 选择器、属性、背包、装备、能力位、权限、传送、标题、消息
世界 时间、天气、难度、游戏规则、生物群系、区块存档键、区域扫描
方块 按坐标读写、方块状态、方块实体、液体层
实体 快照、关系、状态效果、状态位、射线检测、按 NBT 生成
事件 LeviLamina 注册表事件,外加 Pier 用原生 detour 合成的 29 个
命令 原始文本命令,以及带客户端补全的类型化 overload
跨模组 具名服务通道、广播总线、同工具链快车道
维度 注册自定义维度、逐维度规则、格子约束

此外还有表单、计分板、容器、经济桥、键值库、原始数据包拦截、 模拟玩家、tick 控制与性能采样。

该看哪里