Markers¶
Mapcrafter allows you to add different markers easily to your rendered maps. Markers are organized in marker groups, this allows you show and hide different marker groups on the rendered map.
Automatically Generated Markers¶
Mapcrafter is able to automatically generate markers from specific signs in your Minecraft world.
A special marker section type is used to configure automatically generated marker groups. Here is an example:
[marker:homes]
name = Homes
prefix = [home]
icon = home.png
icon_size = [32, 32]
This section defines a marker group showing different homes in your
Minecraft world. Every sign that starts with the prefix [home]
is
shown on the map as marker of this marker group.
See Marker Options for a reference of marker section options.
To automatically generate these markers, use the mapcrafter_markers
program with your configuration file:
mapcrafter_markers -c render.conf
This program generates your defined marker groups and writes them to a
markers-generated.js
file in your output directory. You do not need
to worry about manually specified markers being overwritten.
If you have a very big world and want some progress information, use the verbose flag:
mapcrafter_markers -v -c render.conf
Manually Specifying Markers¶
Of course it is still possible to add markers manually to your map.
You can do this by editing the markers.js
file in your output directory
(it is not overwritten by Mapcrafter if it already exists).
The markers.js
file is a Javascript file which is included
by the web interface and contains definitions for the map markers.
Here is an example markers.js
file:
// Add your own markers to this file.
var MAPCRAFTER_MARKERS = [
// just one example marker group
{
// id of the marker group, without spaces/other special chars
"id" : "signs",
// name of the marker group, displayed in the webinterface
"name" : "Signs",
// icon of the markers belonging to that group (optional)
"icon" : "sign.png",
// size of that icon
"iconSize" : [32, 32],
// whether this marker group is shown by default (optional)
"showDefault" : true,
// markers of this marker group...
"markers" : {
// ...in the world "world"
"world" : [
// example marker, pretty format:
{
// position ([x, z, y])
"pos" : [35, -21, 64],
// title when you hover over the marker
"title" : "Sign1",
// text in the marker popup window
"text" : "Hello."
// override the icon of a single marker (optional)
"icon" : "player.png",
// override the size of the marker icon (optional)
"iconSize" : [16, 32]
},
// more markers:
{"pos" : [100, 100, 64], "title" : "Test1"},
{"pos" : [100, 200, 64], "title" : "Test2"},
{"pos" : [500, 30, 64], "title" : "Test2"},
],
},
},
// another marker group
{
"id" : "homes",
"name" : "Homes",
"icon" : "home.png",
"iconSize" : [32, 32],
"markers" : {
"world" : [
{"pos" : [42, 73, 64], "title" : "Steve's home"},
],
"world2" : [
{"pos" : [73, 42, 64], "title" : "Steve's other home"},
],
},
},
];
As you can see there is a bit Javascript syntax involved here. Do not forget
quotation marks around strings or the commas after array elements. The
lines starting with a //
are comments and ignored by Javascript.
The file has a Javascript-Array called MAPCRAFTER_MARKERS
which
contains the different marker groups. The elements are associative
Javascript-Arrays and contain the options of the different marker groups.
These options are similar to the marker section configuration options. Every marker group has an unique ID and a name displayed in the web interface. You can also use an icon with a specific size (optional).
The actual markers are specified per world in an associative array with
the name markers
. You have to use as world name your world section
name.
The definition of markers is also done with associative arrays:
{"pos" : [42, 73, 64], "title" : "Steve's home"},
Here you can see a simple marker with the title Steve's home
and the
position 42, 73, 64
. The position is always specified as array in the
form of [x, z, y]
(x, z and then y because x and z are the horizontal
axes and y is the vertical axis).
Here are the available options for the markers:
pos
Required
This is the position of the marker in the form of
[x, z, y]
. Example:[12, 34, 64]
title
Required
This is the title of the marker you can see when you hover over the marker.
text
Default: Title of the marker
This is the text of the marker popup window. If you do not specify a text, the title of the marker is used as text.
icon
Default: Group icon
An override for the icon for this specific marker. If you do not specify an icon, the icon set at the group level is used. Or, if there is no group-level icon, the default icon is used.
This option may be used independently of the marker icon size override.
iconSize
Default: Group icon size
An override for the size of the icon for this specific marker. If you do not specify a size, the icon size set at the group level is used. Or, if there is no group-level icon size, the default icon size is used.
This option may be used independently of the marker icon override.
Custom Leaflet Marker Objects¶
Furthermore you can customize your markers by specifying a function which creates the actual Leaflet marker objects with the marker data. This function is called for every marker in the marker group and should return a marker-like object displayable by Leaflet. Please have a look at the Leaflet API to find out what you can do with Leaflet:
Here is a simple example which shows two areas on the map:
{
"id" : "test",
"name" : "Test",
"createMarker" : function(ui, groupInfo, markerInfo) {
var latlngs = [];
// use the ui.mcToLatLng-function to convert Minecraft coords to LatLngs
latlngs.push(ui.mcToLatLng(markerInfo.p1[0], markerInfo.p1[1], 64));
latlngs.push(ui.mcToLatLng(markerInfo.p2[0], markerInfo.p2[1], 64));
latlngs.push(ui.mcToLatLng(markerInfo.p3[0], markerInfo.p3[1], 64));
latlngs.push(ui.mcToLatLng(markerInfo.p4[0], markerInfo.p4[1], 64));
latlngs.push(ui.mcToLatLng(markerInfo.p1[0], markerInfo.p1[1], 64));
return L.polyline(latlngs, {"color" : markerInfo.color});
},
"markers" : {
"world" : [
{
"p1" : [42, 0],
"p2" : [0, 0],
"p3" : [0, 42],
"p4" : [42, 42],
"color" : "red",
},
{
"p1" : [73, -42],
"p2" : [-42, -42],
"p3" : [-42, 73],
"p4" : [73, 73],
"color" : "yellow",
},
],
},
},
As you can see you can use the ui.mcToLatLng
method to convert Minecraft
coordinates (x, z and then y) to Leaflet latitude/longitute coordinates.
You can also use arbitrary data in the associative marker arrays and access
them with the markerInfo
parameter of your function (same with groupInfo
and the fields of the marker group).
Minecraft Server¶
If you want player markers from your Minecraft Server on your map, please have a look at the mapcrafter-playermarkers project.
The plugin adds to your map animated markers of the players on your Minecraft Server.