316 lines
11 KiB
Markdown
316 lines
11 KiB
Markdown
# The MapEditr Manual
|
|
|
|
## Introduction
|
|
|
|
MapEditr is a command-line tool for editing Minetest worlds. Note that MapEditr
|
|
is not a mod or plugin; it is a separate program which operates independently
|
|
of Minetest.
|
|
|
|
MapEditr reads and edits *map databases*, usually a file named `map.sqlite`
|
|
within each Minetest world directory. As such, the terms "world" and "map" may
|
|
be used interchangeably. Note that only SQLite format maps are currently
|
|
supported.
|
|
|
|
For most commands to work, the parts of the map to be read/modified must
|
|
already be generated. This can be done by either exploring the area in-game,
|
|
or by using Minetest's built-in `/emergeblocks` command.
|
|
|
|
MapEditr supports all maps created since Minetest version 0.4.2-rc1, released
|
|
July 2012. Any unsupported parts of the map will be skipped.
|
|
|
|
## General usage
|
|
|
|
`mapeditr [-h] [-y] <map> <SUBCOMMAND>`
|
|
|
|
Arguments:
|
|
|
|
- `-h, --help`: Print help information and exit.
|
|
- `-y, --yes`: Skip the default confirmation prompt (for those who feel brave).
|
|
- `<map>`: Path to the Minetest world/map to edit; this can be either a world
|
|
directory or a `map.sqlite` file. This world/map will be modified, so *always*
|
|
shut down the game or server before executing any command.
|
|
- `<SUBCOMMAND>`: Command to execute. See the "Commands" section below.
|
|
|
|
### Common command arguments
|
|
|
|
- `--p1 <x> <y> <z>` and `--p2 <x> <y> <z>`: Used to select a box-shaped
|
|
area with corners at `p1` and `p2`, similarly to how WorldEdit's area selection
|
|
works. Any two opposite corners can be used. These coordinates can be found
|
|
using Minetest's F5 debug menu.
|
|
- Node/item names, including `node`, `new_node`, etc.: Must be the full name,
|
|
e.g. "default:stone", not just "stone".
|
|
|
|
### Other tips
|
|
|
|
Optional arguments are indicated using [square brackets].
|
|
|
|
Text-like arguments can be surrounded with "quotes" if they contain spaces.
|
|
|
|
Due to technical limitations, MapEditr will often leave lighting glitches. To
|
|
fix these, use Minetest's built-in `/fixlight` command, or the equivalent
|
|
WorldEdit `//fixlight` command.
|
|
|
|
## Commands
|
|
|
|
### clone
|
|
|
|
Usage: `clone --p1 x y z --p2 x y z --offset x y z`
|
|
|
|
Clone (copy) the contents of an area to a new location.
|
|
|
|
Arguments:
|
|
|
|
- `--p1, --p2`: Area to clone.
|
|
- `--offset x y z`: Vector to shift the area's contents by. For example, to
|
|
copy an area 50 nodes downward (negative Y direction), use `--offset 0 -50 0`.
|
|
Directions may be determined using Minetest's F5 debug menu.
|
|
|
|
This command copies nodes, param1, param2, and metadata. Nothing will be copied
|
|
from or into mapblocks that are not yet generated.
|
|
|
|
Examples:
|
|
|
|
- Clone an area surrounding spawn 500 nodes west and 360 nodes north:
|
|
`clone --p1 200 80 200 --p2 -200 -15 -200 --offset -500 0 360`
|
|
|
|
### deleteblocks
|
|
|
|
Usage: `deleteblocks --p1 x y z --p2 x y z [--invert]`
|
|
|
|
Delete all mapblocks inside or outside an area. This command is often much
|
|
faster than Minetest's built-in `/deleteblocks` command.
|
|
|
|
Arguments:
|
|
|
|
- `--p1, --p2`: Area containing mapblocks to delete. By default, only mapblocks
|
|
fully within this area will be deleted.
|
|
- `--invert`: Delete all mapblocks fully *outside* the given area. Use with
|
|
caution; you could erase a large portion of your world!
|
|
|
|
**Note:** Deleting mapblocks is *not* the same as filling them with air! Mapgen
|
|
will be invoked where the blocks were deleted, and this sometimes causes
|
|
terrain glitches.
|
|
|
|
Examples:
|
|
|
|
- Delete all saved mapblocks below y = -200 and above y = 200:
|
|
`deleteblocks --p1 -31000 -200 -31000 --p2 31000 200 31000 --invert`
|
|
|
|
### deletemeta
|
|
|
|
Usage: `deletemeta [--node <node>] [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Delete node metadata of certain nodes. Node inventories (such as chest/furnace
|
|
contents) are also deleted.
|
|
|
|
Arguments:
|
|
|
|
- `--node <node>`: (Optional) Name of node to delete metadata from. If not
|
|
specified, metadata will be deleted from any node.
|
|
- `--p1, --p2`: (Optional) Area in which to delete metadata. If not specified,
|
|
metadata will be deleted everywhere.
|
|
- `--invert`: Delete metadata *outside* the given area.
|
|
|
|
### deleteobjects
|
|
|
|
Usage: `deleteobjects [--obj <object>] [--items [items]] [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Delete certain objects (entities) and/or item entities (dropped items).
|
|
|
|
Arguments:
|
|
|
|
- `--obj <object>`: (Optional) Name of object to delete, e.g. "boats:boat".
|
|
- `--items [items]`: (Optional) Delete only item entities (dropped items). If
|
|
one or more item names are listed after `--items`, only those items will be
|
|
deleted.
|
|
- `--p1, --p2`: (Optional) Area in which to delete objects. If not specified,
|
|
objects will be deleted everywhere.
|
|
- `--invert`: Delete objects *outside* the given area.
|
|
|
|
`--obj` and `--items` cannot be used simultaneously.
|
|
|
|
Examples:
|
|
|
|
- Delete all objects: `deleteobjects`
|
|
- Delete all cart entities: `deleteobjects --obj carts:cart`
|
|
- Delete dropped stone and gravel:
|
|
`deleteobjects --items default:stone default:gravel`
|
|
|
|
### deletetimers
|
|
|
|
Usage: `deletetimers [--node <node>] [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Delete node timers of certain nodes.
|
|
|
|
Arguments:
|
|
|
|
- `--node <node>`: (Optional) Name of node to delete node timers from. If not
|
|
specified, node timers of any node will be deleted.
|
|
- `--p1, --p2`: (Optional) Area in which to delete node timers. If not
|
|
specified, node timers will be deleted everywhere.
|
|
- `--invert`: Delete node timers *outside* the given area.
|
|
|
|
### fill
|
|
|
|
Usage: `fill --p1 x y z --p2 x y z [--invert] <new_node>`
|
|
|
|
Set all nodes inside or outside an area. Mapblocks that are not yet generated
|
|
will not be affected.
|
|
|
|
This command does not affect param2, node metadata, etc.
|
|
|
|
Arguments:
|
|
|
|
- `--p1, --p2`: Area to fill.
|
|
- `--invert`: Fill all generated nodes *outside* the given area.
|
|
- `<new_node>`: Name of the node to fill with.
|
|
|
|
Examples:
|
|
|
|
- Carve out a large hole in the ground:
|
|
`fill --p1 224 50 347 --p2 817 -40 73 air`
|
|
- Build a long obsidian glass wall travelling north/south:
|
|
`fill --p1 0 -30 -10000 --p2 0 30 10000 default:obsidian_glass`
|
|
|
|
### overlay
|
|
|
|
Usage: `overlay <input_map> [--p1 x y z] [--p2 x y z] [--invert] [--offset x y z]`
|
|
|
|
Copy part or all of a source map into the main map.
|
|
|
|
Arguments:
|
|
|
|
- `<input_map>`: Path to the source map/world. This map will not be modified.
|
|
- `--p1, --p2`: (Optional) Area to copy from. If not specified, MapEditr will
|
|
try to copy everything from the source map.
|
|
- `--invert`: Copy everything *outside* the given area.
|
|
- `--offset x y z`: (Optional) Vector to shift nodes by when copying; default
|
|
is no offset. Currently, an offset cannot be used with an inverted selection.
|
|
|
|
**If an area and/or offset is used:** To ensure that all data is copied, make
|
|
sure at least the "edges" of the destination area are generated, or the entire
|
|
destination area if using an offset.
|
|
|
|
This command will always copy nodes, param1, param2, and metadata. If no
|
|
offset is used, objects/entities and node timers may also be copied.
|
|
|
|
**Tip:** Overlay will be significantly faster if no offset is used.
|
|
|
|
Examples (your world/map paths will vary):
|
|
|
|
- Copy all of map `backup.sqlite` into the main world:
|
|
`overlay backup-maps/backup.sqlite`
|
|
- Copy world `test` into the main world, excluding the area within 120 nodes of
|
|
spawn: `overlay test --p1 -120 -120 -120 --p2 120 120 120 --invert`
|
|
- Copy an area from `map.sqlite` into the main world, moving it 32 nodes north:
|
|
`overlay map.sqlite --p1 6 36 -49 --p2 -9 74 -78 --offset 0 0 32`
|
|
|
|
### replaceininv
|
|
|
|
Usage: `replaceininv <item> [new_item] [--delete] [--deletemeta] [--nodes <nodes>] [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Replace, delete, or modify items in certain node inventories.
|
|
|
|
Arguments:
|
|
|
|
- `<item>`: Name of the item to replace/delete.
|
|
- `[new_item]`: (Optional) Name of the new item, if replacing items.
|
|
- `--delete`: Delete items instead of replacing them.
|
|
- `--deletemeta`: Delete metadata of affected items. May be used with or
|
|
without `new_item`, depending on whether items should also be replaced.
|
|
- `--nodes <nodes>`: (Optional) Names of one or more nodes to modify
|
|
inventories of. If not specified, items will be modified in any node with an
|
|
inventory.
|
|
- `--p1, --p2`: (Optional) Area in which to modify node inventories. If not
|
|
specified, items will be modified everywhere.
|
|
- `--invert`: Modify node inventories *outside* the given area.
|
|
|
|
Examples:
|
|
|
|
- Delete all lava buckets:
|
|
`replaceininv bucket:bucket_lava --delete`
|
|
- Replace all written books in chests with unwritten books, deleting metadata:
|
|
`replaceininv default:book_written default:book --deletemeta --nodes default:chest default:chest_locked`
|
|
|
|
### replacenodes
|
|
|
|
Usage: `replacenodes <node> <new_node> [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Replace one node with another node. Can also be used to remove unknown nodes
|
|
or swap a node that changed names.
|
|
|
|
This command does not affect param2, metadata, etc.
|
|
|
|
Arguments:
|
|
|
|
- `<node>`: Name of node to replace.
|
|
- `<new_node>`: Name of node to replace with.
|
|
- `--p1, --p2`: (Optional) Area in which to replace nodes. If not specified,
|
|
nodes will be replaced across the entire map.
|
|
- `--invert`: Replace nodes *outside* the given area.
|
|
|
|
Examples:
|
|
|
|
- Replace all legacy PB&J pup nodes with mese blocks:
|
|
`replacenodes pbj_pup:pbj_pup default:mese`
|
|
- Remove fire nodes near ground level:
|
|
`replacenodes fire:basic_flame air --p1 -31000 -80 -31000 --p2 31000 200 31000`
|
|
|
|
### setmetavar
|
|
|
|
Usage: `setmetavar <key> [value] [--delete] [--nodes <nodes>] [--p1 x y z] [--p2 x y z] [--invert]`
|
|
|
|
Set or delete a variable in node metadata of certain nodes. This only works on
|
|
nodes where the variable is already set.
|
|
|
|
Arguments:
|
|
|
|
- `<key>`: Name of variable to set/delete, e.g. `infotext`, `formspec`, etc.
|
|
- `[value]`: Value to set variable to, if setting a value. This should be a
|
|
string.
|
|
- `--delete`: Delete the variable.
|
|
- `--nodes <nodes>`: (Optional) Names of one or more nodes to modify. If not
|
|
specified, any node with the given variable will be modified.
|
|
- `--p1, --p2`: (Optional) Area in which to modify node metadata. If not
|
|
specified, nodes will be modified everywhere.
|
|
- `--invert`: Modify node metadata *outside* the given area.
|
|
|
|
Examples:
|
|
|
|
- Clear infotext of signs:
|
|
`setmetavar infotext --delete --nodes default:sign_wall_steel default:sign_wall_wood`
|
|
- Set "player1" as the owner of all steel trapdoors:
|
|
`setmetavar owner player1 --nodes doors:trapdoor_steel`
|
|
|
|
### setparam2
|
|
|
|
Usage: `setparam2 [--node <node>] [--p1 x y z] [--p2 x y z] [--invert] <param2>`
|
|
|
|
Set param2 values of certain nodes.
|
|
|
|
Arguments:
|
|
|
|
- `--node <node>`: (Optional) Name of node to modify. If not specified, the
|
|
param2 values of any node will be set.
|
|
- `--p1, --p2`: (Optional) Area in which to set param2 values. If not
|
|
specified, param2 will be set everywhere.
|
|
- `--invert`: Set param2 values *outside* the given area.
|
|
- `<param2>`: New param2 value, between 0 and 255.
|
|
|
|
An area and/or node is required for this command.
|
|
|
|
### vacuum
|
|
|
|
Usage: `vacuum`
|
|
|
|
Rebuild the map database to reduce its size. Vacuuming may take a long time for
|
|
large maps.
|
|
|
|
This command simply executes the SQLite `VACUUM` command, which shrinks and
|
|
optimizes the map database by efficiently "repacking" all mapblocks. No map
|
|
data is changed or deleted.
|
|
|
|
**Note:** Because data is temporarily copied into another file, vacuum could
|
|
require as much free disk space as is already occupied by the map. For example,
|
|
if map.sqlite is 10 GB, make sure you have **at least 10 GB** of free space!
|