下载地址:MapEditr
地图编辑器
MapEditr 是一个用于快速操作 Minetest 世界的命令行工具。它可以替换节点和项目、填充区域、组合不同世界的部分等等。
该工具在功能上类似于WorldEdit,但专为在 Minetest 中不切实际的大型操作而设计。由于它主要针对速度进行了优化,因此 MapEditr 缺少 WorldEdit 的一些更专业的功能。
MapEditr 最初基于MapEdit,除了用 Rust 而不是 Python 编写(因此添加了“r”)。切换到编译语言将使 MapEditr 更加健壮,并且在未来更易于维护。
编译/安装
选项 1:预构建版本
如果您使用的是 Windows 并且没有安装 Rust,您可以从发布页面下载 MapEditr 最新版本的构建。目前只有 64 位 Windows 版本可用。
要从任何地方运行mapeditr
命令,可执行文件的路径必须包含在系统的 Path 变量中。这是一篇 解释如何在 Windows 上编辑 Path 变量的文章。
选项 2:使用 Cargo 安装
此方法适用于任何操作系统。要使用 Cargo,您必须先安装 Rust,可以从Rust 网站下载。然后,只需运行:
cargo install --git https://github.com/random-geek/MapEditr.git
这将下载 MapEditr 并将其安装到$HOME/.cargo/bin
. 安装后,您应该可以使用该 mapeditr
命令从任何地方运行 MapEditr。
选项 3:正常构建
如果您不想安装 MapEditr,您可以使用 Cargo 正常构建它。在 MapEditr 目录中,运行:
cargo build --release
该--release
标志很重要,因为它会生成一个优化的可执行文件,该可执行文件的运行速度比默认的未优化版本快得多。编译后的可执行文件将在target/release
目录中。
用法
有关 MapEditr 工作原理的概述以及命令列表及其用法,请参阅Manual.md。
这些只是您可以使用 MapEditr 做的一些有用的事情:
- 删除旧模组留下的未知节点
replacenodes
。 - 使用 . 在几秒钟内建造极长的墙壁和道路
fill
。 - 使用 有选择地删除实体和/或丢弃的项目
deleteobjects
。 - 将多个世界或地图保存与
overlay
.
地图编辑器手册
介绍
MapEditr 是一个用于编辑 Minetest 世界的命令行工具。请注意,MapEditr 不是模组或插件;它是一个独立于 Minetest 运行的独立程序。
MapEditr 读取和编辑地图数据库 ,通常是map.sqlite
在每个 Minetest 世界目录中命名的文件。因此,术语“世界”和“地图”可以互换使用。请注意,当前仅支持 SQLite 格式映射。
要使大多数命令正常工作,必须已经生成要读取/修改的映射部分。这可以通过探索游戏中的区域或使用 Minetest 的内置/emergeblocks
命令来完成。
MapEditr 支持自 2012 年 7 月发布的 Minetest 版本 0.4.2-rc1 以来创建的所有地图。地图中任何不受支持的部分都将被跳过。
一般用法
mapeditr [-h] [-y] <map> <SUBCOMMAND>
论据:
-h, --help
:打印帮助信息并退出。-y, --yes
:跳过默认的确认提示(对于那些感到勇敢的人)。<map>
:要编辑的 Minetest 世界/地图的路径;这可以是世界目录或map.sqlite
文件。这个世界/地图将被修改,所以在执行任何命令之前总是 关闭游戏或服务器。<SUBCOMMAND>
: 要执行的命令。请参阅下面的“命令”部分。
常用命令参数
--p1 <x> <y> <z>
和--p2 <x> <y> <z>
:用于选择一个角在p1
和处的矩形区域p2
,类似于 WorldEdit 的区域选择工作方式。可以使用任意两个对角。这些坐标可以使用 Minetest 的 F5 调试菜单找到。- 节点/项目名称,包括
node
、new_node
等:必须是全名,例如“default:stone”,而不仅仅是“stone”。
其他提示
可选参数使用 [方括号] 表示。
如果类似文本的参数包含空格,则可以用“引号”括起来。
由于技术限制,MapEditr 经常会留下照明故障。要解决这些问题,请使用 Minetest 的内置/fixlight
命令或等效的 WorldEdit//fixlight
命令。
命令
克隆
用法:clone --p1 x y z --p2 x y z --offset x y z
将区域的内容克隆(复制)到新位置。
论据:
--p1, --p2
:要克隆的区域。--offset x y z
: 用于移动区域内容的向量。例如,要向下复制一个区域 50 个节点(负 Y 方向),请使用--offset 0 -50 0
. 可以使用 Minetest 的 F5 调试菜单确定方向。
此命令复制节点、param1、param2 和元数据。任何内容都不会从尚未生成的地图块中复制或复制到其中。
例子:
- 克隆一个围绕生成 500 个节点以西和 360 个节点以北的区域:
clone --p1 200 80 200 --p2 -200 -15 -200 --offset -500 0 360
删除块
用法:deleteblocks --p1 x y z --p2 x y z [--invert]
删除区域内或区域外的所有地图块。这个命令通常比 Minetest 的内置/deleteblocks
命令快得多。
论据:
--p1, --p2
:包含要删除的地图块的区域。默认情况下,只会删除完全位于该区域内的地图块。--invert
:完全删除给定区域之外的所有地图块。 谨慎使用;你可以抹去你世界的很大一部分!
注意: 删除地图块与 填充空气不同!Mapgen 将在块被删除的地方被调用,这有时会导致地形故障。
例子:
- 删除 y = -200 和 y = 200 以上的所有已保存地图块:
deleteblocks --p1 -31000 -200 -31000 --p2 31000 200 31000 --invert
删除元
用法:deletemeta [--node <node>] [--p1 x y z] [--p2 x y z] [--invert]
删除某些节点的节点元数据。节点库存(例如箱子/熔炉内容)也被删除。
论据:
--node <node>
:(可选)要从中删除元数据的节点名称。如果未指定,将从任何节点删除元数据。--p1, --p2
:(可选)删除元数据的区域。如果未指定,元数据将在各处删除。--invert
:删除给定区域之外的元数据。
删除对象
用法:deleteobjects [--obj <object>] [--items [items]] [--p1 x y z] [--p2 x y z] [--invert]
删除某些对象(实体)和/或项目实体(丢弃的项目)。
论据:
--obj <object>
:(可选)要删除的对象的名称,例如“boats:boat”。--items [items]
:(可选)仅删除项目实体(丢弃的项目)。如果在 之后列出了一个或多个项目名称--items
,则只会删除这些项目。--p1, --p2
:(可选)删除对象的区域。如果未指定,对象将在所有地方被删除。--invert
:删除给定区域之外的对象。
--obj
并且--items
不能同时使用。
例子:
- 删除所有对象:
deleteobjects
- 删除所有购物车实体:
deleteobjects --obj carts:cart
- 删除掉落的石头和砾石:
deleteobjects --items default:stone default:gravel
删除定时器
用法:deletetimers [--node <node>] [--p1 x y z] [--p2 x y z] [--invert]
删除某些节点的节点定时器。
论据:
--node <node>
:(可选)要从中删除节点计时器的节点名称。如果不指定,任何节点的节点定时器都将被删除。--p1, --p2
:(可选)删除节点计时器的区域。如果未指定,节点计时器将在任何地方被删除。--invert
:删除给定区域外 的节点计时器。
充满
用法:fill --p1 x y z --p2 x y z [--invert] <new_node>
设置区域内或区域外的所有节点。尚未生成的地图块不会受到影响。
该命令不影响 param2、节点元数据等。
论据:
--p1, --p2
:要填充的区域。--invert
:填充给定区域之外 的所有生成节点。<new_node>
:要填充的节点的名称。
例子:
- 在地上挖出一个大洞:
fill --p1 224 50 347 --p2 817 -40 73 air
- 建造一堵长长的黑曜石玻璃墙,向南/北移动:
fill --p1 0 -30 -10000 --p2 0 30 10000 default:obsidian_glass
覆盖
用法:overlay <input_map> [--p1 x y z] [--p2 x y z] [--invert] [--offset x y z]
将部分或全部源地图复制到主地图中。
论据:
<input_map>
:源地图/世界的路径。此地图不会被修改。--p1, --p2
:(可选)要复制的区域。如果未指定,MapEditr 将尝试从源地图复制所有内容。--invert
:复制给定区域之外的所有内容。--offset x y z
:(可选)复制时移动节点的向量;默认为无偏移。目前,偏移量不能与反向选择一起使用。
如果使用区域和/或偏移量: 为确保复制所有数据,请确保至少生成目标区域的“边缘”,或者如果使用偏移量,则生成整个目标区域。
此命令将始终复制节点、param1、param2 和元数据。如果不使用偏移量,也可以复制对象/实体和节点计时器。
提示: 如果不使用偏移量,叠加将明显更快。
示例(您的世界/地图路径会有所不同):
- 将所有地图复制
backup.sqlite
到主世界:overlay backup-maps/backup.sqlite
- 将世界复制
test
到主世界,不包括 120 个节点内的区域:overlay test --p1 -120 -120 -120 --p2 120 120 120 --invert
map.sqlite
从主世界 复制一个区域,将其向北移动 32 个节点:overlay map.sqlite --p1 6 36 -49 --p2 -9 74 -78 --offset 0 0 32
替代品
用法:replaceininv <item> [new_item] [--delete] [--deletemeta] [--nodes <nodes>] [--p1 x y z] [--p2 x y z] [--invert]
替换、删除或修改某些节点清单中的项目。
论据:
<item>
:要替换/删除的项目的名称。[new_item]
:(可选)新项目的名称,如果替换项目。--delete
:删除项目而不是替换它们。--deletemeta
:删除受影响项目的元数据。可以与或不一起使用new_item
,具体取决于是否也应更换项目。--nodes <nodes>
:(可选)要修改其清单的一个或多个节点的名称。如果未指定,则将在具有库存的任何节点中修改项目。--p1, --p2
:(可选)修改节点清单的区域。如果未指定,项目将随处修改。--invert
:修改给定区域外 的节点库存。
例子:
- 删除所有熔岩桶:
replaceininv bucket:bucket_lava --delete
- 用不成文的书替换箱子里的所有成书,删除元数据:
replaceininv default:book_written default:book --deletemeta --nodes default:chest default:chest_locked
替换节点
用法:replacenodes <node> <new_node> [--p1 x y z] [--p2 x y z] [--invert]
用另一个节点替换一个节点。也可用于删除未知节点或交换更改名称的节点。
此命令不影响 param2、元数据等。
论据:
<node>
:要替换的节点名称。<new_node>
:要替换的节点的名称。--p1, --p2
:(可选)替换节点的区域。如果未指定,则将在整个地图中替换节点。--invert
:替换给定区域之外的节点。
例子:
- 将所有遗留的 PB&J pup 节点替换为 mese 块:
replacenodes pbj_pup:pbj_pup default:mese
- 移除地面附近的火灾节点:
replacenodes fire:basic_flame air --p1 -31000 -80 -31000 --p2 31000 200 31000
设置元变量
用法:setmetavar <key> [value] [--delete] [--nodes <nodes>] [--p1 x y z] [--p2 x y z] [--invert]
设置或删除某些节点的节点元数据中的变量。这仅适用于已设置变量的节点。
论据:
<key>
: 要设置/删除的变量的名称,例如infotext
,formspec
等。[value]
: 设置变量的值,如果设置一个值。这应该是一个字符串。--delete
: 删除变量。--nodes <nodes>
:(可选)要修改的一个或多个节点的名称。如果未指定,任何具有给定变量的节点都将被修改。--p1, --p2
:(可选)修改节点元数据的区域。如果未指定,节点将在任何地方进行修改。--invert
:修改给定区域外 的节点元数据。
例子:
- 清晰的标志信息文本:
setmetavar infotext --delete --nodes default:sign_wall_steel default:sign_wall_wood
- 将“player1”设置为所有钢活板门的所有者:
setmetavar owner player1 --nodes doors:trapdoor_steel
设置参数2
用法:setparam2 [--node <node>] [--p1 x y z] [--p2 x y z] [--invert] <param2>
设置某些节点的 param2 值。
论据:
--node <node>
:(可选)要修改的节点名称。如果未指定,将设置任何节点的 param2 值。--p1, --p2
:(可选)设置 param2 值的区域。如果未指定,param2 将在任何地方设置。--invert
:在给定区域之外 设置 param2 值。<param2>
:新的 param2 值,介于 0 和 255 之间。
此命令需要区域和/或节点。
真空
用法:vacuum
重建地图数据库以减小其大小。对于大型地图,吸尘可能需要很长时间。
该命令只执行 SQLiteVACUUM
命令,该命令通过有效地“重新打包”所有地图块来缩小和优化地图数据库。没有地图数据被更改或删除。
注意: 因为数据被临时复制到另一个文件中,所以清理可能需要与地图已占用的磁盘空间一样多的可用磁盘空间。例如,如果 map.sqlite 为 10 GB,请确保您至少有 10 GB 的可用空间!
执照
MapEditr 受LICENSE.txt
.
此外,如果您在另一个项目中使用 MapEditr 的代码,我将非常感谢您项目的自述文件或文档中对 MapEditr 的合理确认/归属。
致谢
Minetest项目对于MapEdit /MapEditr 的制作非常重要,原因很明显。
原始 MapEdit 代码的某些部分改编自 AndrejIT 的 map_unexplore项目。所有应得的功劳归于该项目的作者。
还要感谢 ExeterDad 和已故故乡服务器的版主,他们为 MapEdit/MapEditr 提供了部分灵感。