Pier 是什么¶
Pier 是一个 LeviLamina 模组,它的职责是装载别的模组。那些模组是会说同一份 C ABI 的动态库,所以用什么语言写,由作者决定。
这里没有解释器,也没有沙箱。模组是原生代码,服务端直接装载并调用,速度和 C++ 模组一样。 Pier 加的是一条边界,不是一层运行时。
它的形状¶
| Text Only | |
|---|---|
头文件就是产品本体。仓库里位于它之下的一切都只是一个实现,而位于它之上的绑定, 除了它什么都不需要。
绑定¶
| 语言 | 状态 | |
|---|---|---|
| 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 控制与性能采样。