Original project by Simon Rettberg. All the credit goes to him for the idea and vision.
mcmap
is a tool allowing you to create isometric renders of your Minecraft save file.
This project is under heavy development, but compatible with newer versions of Minecraft.
mcmap <options> path/to/<your save>
The standard save path is different between OSes:
- On Linux, it is
$HOME/.minecraft/saves
; - On macOS, under
~/Library/Application\ Support/minecraft/saves
; - On Windows, the standard path is
%AppData%\.minecraft\saves
. If using Ubuntu on Windows, the path to access the save folder is the following:/mnt/c/<Your user>/AppData/Roaming/.minecraft/saves
.
Native Windows is now supported.
Pre-compiled binaries can be downloaded from the releases page.
For now, the program can only be used via terminal
/powershell
on Linux/Macos or Windows respectively.
An experimental GUI is available for Windows and can be downloaded here.
Name | Description |
---|---|
-from X Z |
sets the coordinates of the block to start rendering at |
-to X Z |
sets the coordinates of the block to end rendering at |
-center X Z |
sets the center of a circular render |
-radius VAL |
sets the radius of a circular render |
-min/max VAL |
minimum/maximum Y index (height) of blocks to render |
-file NAME |
sets the output filename to 'NAME'; default is ./output.png |
-colors NAME |
sets the custom color file to 'NAME' |
-nw -ne -se -sw |
controls which direction will point to the top corner; North-West is default |
-marker x z color |
draw a marker at x z of color color in red ,green ,blue or white ; can be used up to 256 times |
-nowater |
do not render water |
-nobeacons |
do not render beacon beams |
-shading |
toggle shading (brightens blocks depending on height) |
-lighting |
toggle lighting (brightens blocks depending on light) |
-nether |
render the nether |
-end |
render the end |
-dim[ension] [namespace:]id |
render a dimension by namespaced ID |
-mb VAL |
maximum memory to use at once (default 3.5G, increase for large maps if you have the ram) |
-fragment VAL |
render terrain in regions of the specified size (default 1024x1024 blocks) |
-tile VAL |
generate split output in square tiles of the specified size (in pixels) (default 0, disabled) |
-padding |
padding around the final image, in pixels (default: 5) |
-h[elp] |
display an option summary |
-v[erbose] |
toggle debug mode |
-dumpcolors |
dump a json with all defined colors |
Note: Currently you need both -from
and -to
OR -center
and -radius
to define bounds.
mcmap
will render the terrain in batches using all the threads of your computer. Unfortunately, when those batches merge, some artifacts are created: lines appear in oceans where the merge was operated.
Use -fragment
with a bigger value to limit the amount of batches and thus of artifacts. This is limited by the available memory, as rendering a whole map iin one go may require 10+ gigabytes of ram.
Use -fragment
with a lower value to increase performance. Fragments of 256x256 and 512x512 blocks are really efficient.
mcmap
supports changing the colors of blocks. To do so, prepare a custom color file by editing the output of mcmap -dumpcolors
, and pass it as an argument using the -colors
argument.
The accepted format is a json
file, with a specific structure.
The root contains a list of block IDs to modify, with the namespace prefix, such as namespace:block
.
To define a color for a simple, regular block, provide an entry in a JSON file. The color format is a hexadecimal color code. If the alpha is not specified, it is assumed to be opaque.
"namespace:block": #rrggbbaa (or #rrggbb)
Examples:
{
"minecraft:dirt": #7b573b,
"minecraft:ice": #7dadff9f,
...
}
Some blocks are better looking when drawn in a specific way.
To specify that a block has to be drawn differently, you have to provide a json
structure with the following fields:
"namespace:block": {
"type": <BlockType>,
"color": "#rrggbbaa",
"accent": "#rrggbbaa" (Optional)
}
The available available block types are:
Name | Appearance | Accent support |
---|---|---|
Full |
Default. Full-block. | No |
Hide |
Do not render the block entirely. | No |
Clear |
This block is optimized for transparent block in large quantities, such as glass and water. The top of the block is not rendered, making for a smooth surface when blending blocks together. | No |
Thin |
Will color only the top of the block underneath. Used for snow, rails, pressure plates. | No |
Slab |
Half block. | No |
Stair |
Renders a stair block. | No |
Rod |
A slimmer block, used for fences and walls. | No |
Wire |
Small dot on the floor, used for tripwire and redstone. | No |
Head |
Smaller block, also used for pots, pickles, and mushrooms. | No |
Plant |
Used in a variety of cases, renders a leaf-like block. | No |
UnderwaterPlant |
Same as Plant , but the air is water-colored. Used for sea-grass and kelp. |
No |
Fire |
Fire-like. Used for fire. | No |
Beam |
Internal block type, used for markers and beacon beams. | No |
Torch |
Three pixels in a vertical line, with the top pixel rendered with the accent color. | Yes |
Ore |
Block with veins of color. The vein is rendered with the accent color. | Yes |
Grown |
Blocks that have a different layer on top. Grass, nylium, etc. The top layer is rendered with the accent color. | Yes |
Log |
Directionnal block, to render logs/pillars as close as possible. The center of the pillar is rendered with the accent color. Used for logs, pillars, basalt. | Yes |
Lamp |
Conditionnal block, to render redstone lamps. If lit, rendered with accent color. | Yes |
NOTE: Waterlogged blocks will be rendered within water instead of air by default according to their blockstates. However, sea-grass and kelp are hardcoded to be underwater and their blockstates won't reflect this, so they have to be defined as UnderwaterPlants
.
Examples:
{
"minecraft:dirt": "#7b573b", // Full block with solid color
"minecraft:grass_block": {
"type": "Grown", // Use a special block type
"accent": "#4c7a40", // Accent supported for `Grown`
"color": "#7b573b"
},
"minecraft:water": {
"type": "Clear"
"color": "#0734c832", // Transparency enabled
},
}
Using the -tile
options with a non-zero value triggers the split output. A folder will be created with the following format:
$ ls output
0 104 15 21 28 34 40 47 53 6 66 72 79 85 91 98
1 105 16 22 29 35 41 48 54 60 67 73 8 86 92 99
10 106 17 23 3 36 42 49 55 61 68 74 80 87 93 mapinfo.json
100 11 18 24 30 37 43 5 56 62 69 75 81 88 94
101 12 19 25 31 38 44 50 57 63 7 76 82 89 95
102 13 2 26 32 39 45 51 58 64 70 77 83 9 96
103 14 20 27 33 4 46 52 59 65 71 78 84 90 97
To view the generated map, open the HTML file in contrib/leaflet/index.html
. A file dialog will be present; give it the above mapinfo.json
to load the map.
mcmap
depends on the zlib
, PNG
, fmt
and spdlog
libraries.
Development was made using gcc
version 10, and can be compiled with gcc
8 or later or clang
10 or later.
Configuration is done using CMake
.
Getting the libraries depends on your distribution:
- Ubuntu:
apt update && apt install git make g++ libpng-dev cmake libspdlog-dev
; - Archlinux:
pacman -S --needed git gcc make cmake libpng spdlog fmt
.
Then get the code and compile:
git clone https://github.com/spoutn1k/mcmap
mkdir -p mcmap/build && cd mcmap/build
cmake ..
make -j
In an Apple environment, you need a developer toolkit recent enough, with the version of g++ --version
superior to 10.
Using brew
:
brew install libpng libomp <fmt/spdlog package names>
git clone https://github.com/spoutn1k/mcmap
mkdir -p mcmap/build && cd mcmap/build
cmake ..
make -j
mcmap
was successfully compiled for Windows Visual C++ 19 and nmake
.
As there is no package manager on Windows, libpng
and zlib
need to be compiled/installed manually.
If compiling the GUI version, you will also need Qt
.
Once those are installed, configure mcmap
following this template:
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DSTATIC_BUILD=1^
-DQt5_DIR=<path to qt>\lib\cmake\Qt5^
-Dfmt_DIR=<path to fmt>\lib\cmake\fmt^
-Dspdlog_DIR=<path to spdlog>\lib\cmake\spdlog^
-DPNG_LIBRARY=<path to libpng>\lib\libpng16_static.lib^
-DZLIB_LIBRARY=<path to zlib>\lib\zlibstatic.lib
You can also download and set up Ubuntu on windows then the steps are the same as Linux/Ubuntu.
Check g++ --version
. Supported versions are at least 8.0.0.
If your version is not up to date, install a more recent one using your package manager.
You will have access to the new version using g++-Y
with Y being the version number.
Compile using CXX=g++-Y make
.
Try compiling with OPENMP=NOTHXM8 make
.
This disables the underlying threading code, so performance may drop.
This is due to the merging algorithm.
Try increasing the split size with the -fragment
option, or change the color of the water block to use the Full
block type to make it less noticeable.