
Weft:一款为模组开发而生的体素沙盒引擎
来源标题:Weft: A voxel sandbox engine built for modding
Weft 是一款面向模组开发的体素沙盒引擎,玩法类似 Minecraft,支持生存与创造模式、合成、生物和洞穴,但并非克隆且不读取 Minecraft 世界。它支持 Windows、Linux 和 macOS,需要支持 Vulkan 的 GPU,目前仍处于早期阶段,存档格式可能随版本变化。游戏本体就是一个名为 base 的模组,与引擎之间没有私有钩子或优先级,因此模组能做到与 base 相同的事。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
它玩起来很像 Minecraft,有生存和创造模式、合成、生物和洞穴。它不是克隆品,也不读取 Minecraft 的世界存档。 Weft 可以在 Windows、Linux 和 macOS 上运行,所以你需要一台电脑。 解压后直接运行即可,需要支持 Vulkan 的 GPU。目前还是早期版本,存档格式可能在不同版本之间发生变化。 游戏本身就是一个名为 base 的 mod,引擎没有给它任何私有钩子或优先权。base 能做的事,你的 mod 也能做。 仓库里的 testmod 就是证明:你完全不需要改动引擎。 世界的边界在哪里 这里的区块是立方体,每个方向都是 16 格,所以高度和深度都没有限制。 地形在 GPU 上生成,正因如此,远处的地形才能绘制到远超你视距的地方。游戏里有洞穴和多个维度,生物群系颜色会在边界处相互融合。 没有随机刻。植物、熔炉和其他计时方块会补上无人值守期间的时间,即使所在区块没有加载也一样,所以你离开时正在熔炼的熔炉,回来时还在继续工作。 在暂停菜单里进入 Multiplayer,选择 Open to Friends。你会得到一个票据,朋友把它粘贴到 Multiplayer > Join 里即可。它走点对点连接,不需要服务器,也不用端口转发。 如果需要长期在线的世界,可以用 weft --server 运行一个无窗口、无需 GPU 的服务器。 方块可以发出彩色光,两盏灯的光重叠时颜色会混合。纹理可以连接相邻方块、随机选择变体、播放动画或发光。 资源包和着色器包可以改变这一切的视觉效果。 这就是一个完整的 lib.rs。它添加了一颗 ruby,一种只有铁镐或更高级镐才能掉落的矿石,以及这种矿石在 y -64 到 16 之间的矿脉。要让它跑起来: 已发布的游戏则把 mod 放在你的用户文件夹里,它的 Mods 界面有一个按钮可以直接打开对应目录。 use weft_sdk::; declare_mod!(deps: ["base"], init: init); pub static RUBY: Item = Item::named("ruby"); pub static RUBY_ORE: Block = Block::named("ruby_ore"); static INGREDIENTS: CreativeTab = CreativeTab::named("base:ingredients"); fn init(r: &mut Registry) { r.block(&RUBY_ORE) .hardness(3.0) .mined_by("pickaxe", tool_tier::IRON) .drops("ruby", 1); r.item(&RUBY).tag("gems/ruby").tab(&INGREDIENTS); r.ore(&RUBY_ORE).y(-64, 16).veins(2).vein_size(5) .replaces("#stone_ore_replaceables"); mod 之间如何协作 燃料、食物、耐久、沙子、ores/iron 这类东西都是组件和标签,这些名字不属于任何人。任何 mod 都可以读写它们,而不必依赖添加某个方块的 mod。 r.item(&COAL_DUST).set(&FUEL, 800).tag("hot"); // 你自己的内容 r.set("base:stick", &FUEL, 100); // 别人的内容 r.set("#planks/", &FUEL, 300); // 所有带该标签的内容 if let Some(ticks) = FUEL.on_item(stack.item) { /* burn it / } 配方使用同样的名字。base 游戏里的这一行会为每种同时拥有两个标签的材料生成一个配方,所以任何 mod 新增的木材都能自动得到对应的木板。 r.shapeless(C, "#planks/{m}", 4, &["#logs/{m}"], 0); 四种接入方式 请按这个顺序尝试。如果为了做一件合理的事不得不绕开引擎,那就是引擎的缺陷,应该报告出来,而不是用 hack 绕过去。 // 事件:每 tick 批量触发一次,不可取消 r.on_event(&LEVEL_UP, |b| for e in b.iter() { / ... / }); // 询问:任何人都可以否决,任何否决都生效 r.before_event(&actions::BREAK_BLOCK, |q| { if is_protected(q.pos()) { Verdict::Deny } else { Verdict::Abstain }); // 数值链:伤害、攻击伤害,或你自己的链 r.modify(&chain::DAMAGE, stage::MULTIPLY, |m| { m.value = 0.5 }); // 属性:带时限的修饰符,随实体一起保存 r.attribute(&MANA, 100.0, 0.0, 1000.0); 出问题的时候 F3+T 可以重新加载纹理、翻译、着色器和 UI,无需重启。F3 显示你的 mod 每 tick 的耗时,/gizmo 绘制调试图形,--log mod:mymod=debug 打开你的调试日志。 回调里发生 panic 会禁用该回调,并在日志里注明你的 mod。原生崩溃会生成一份报告,记录当时正在运行的 mod。 weft --pack-mod run/mods/mymod 会把你的 mod 文件夹打包成 zip。库只能在构建它的系统上运行,所以把 Windows、Linux 和 macOS 的库都放进文件夹,同一个 zip 就能在三个平台上通用。 examplemod 里的 release.yml 会在 GitHub 上构建三个平台,你推送 tag 时自动发布 zip。 针对其他引擎版本构建的 mod 会拒绝加载,并要求重新构建,所以新版本发布后你的 mod 也需要重新构建。 支持 Windows、Linux 和 macOS。需要支持 Vulkan 的 GPU。 tar xf Weft--linux-x64.tar.gz Weft/weft 同一个游戏打包成单个文件。Vulkan、GPU 驱动和声音仍然来自你的系统。 chmod +x Weft--linux-x64.AppImage ./Weft--linux-x64.AppImage 下载 macOS 处理器 Apple Silicon Intel Vulkan 随游戏一起提供。游戏没有经过 Apple 签名,所以第二行命令用于清除隔离标记。 tar xf Weft--macos-arm64.tar.gz xattr -dr com.apple.quarantine Weft Weft/weft tar xf Weft-*-macos-x64.tar.gz xattr -dr com.apple.quarantine Weft Weft/weft 下载 Weft 自带纹理。如果通过官方启动器或 Prism 安装了 Minecraft,Weft 启动时会用那份副本构建一个资源包。这个资源包保留在你的电脑上,你可以在 Settings > Resource Packs 里关掉它。 如果你想自己构建,需要 Rust 1.95 或更新版本: git clone https://github.com/Weft-Rust/Weft.git cd Weft cargo run --release 早期阶段 存档格式仍可能在不同版本之间变化,所以世界不一定能带到下一个版本。如果遇到问题,请在 Discord 或 issues 里反馈。 mod 接口和存档格式仍可能在不同版本之间变化。欢迎提交 issue 和 pull request,无论是引擎、mod、纹理还是文档。提交 pull request 之前请先阅读 AI 政策,它对所有人都适用。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。