diff --git a/docs/config.rst b/docs/config.rst index 08cdafc..bda4af3 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -951,6 +951,16 @@ Other HTML/JS output options **Default:** ``#1a1a1a`` +``center`` + This is allows you to specify a list or a tuple of Minecraft world coordinates + that should be used as the map's default center, e.g. ``[800, 64, -334]``. + + You may also specify only two coordinates, in case they will be interpreted as + X and Z coordinates, and Y is assumed to be ``64`` (sea level). + + **Default:** The coordinates of your spawn, or ``[0, 64, 0]`` if the regionset + has no spawn. + Map update behavior ~~~~~~~~~~~~~~~~~~~ diff --git a/overviewer.py b/overviewer.py index b5b9a47..f549542 100755 --- a/overviewer.py +++ b/overviewer.py @@ -555,7 +555,7 @@ def main(): "name", "imgformat", "renderchecks", "rerenderprob", "bgcolor", "defaultzoom", "imgquality", "imglossless", "optimizeimg", "rendermode", "worldname_orig", "title", "dimension", "changelist", "showspawn", "overlay", "base", "poititle", "maxzoom", - "showlocationmarker", "minzoom"]) + "showlocationmarker", "minzoom", "center"]) tileSetOpts.update({"spawn": w.find_true_spawn()}) # TODO find a better way to do this for rset in rsets: tset = tileset.TileSet(w, rset, assetMrg, tex, tileSetOpts, tileset_dir) diff --git a/overviewer_core/assetmanager.py b/overviewer_core/assetmanager.py index 26ba9c3..f909029 100644 --- a/overviewer_core/assetmanager.py +++ b/overviewer_core/assetmanager.py @@ -128,7 +128,6 @@ top-level directory. dump['map']['debug'] = True dump['map']['cacheTag'] = str(int(time.time())) dump['map']['north_direction'] = 'lower-left' # only temporary - dump['map']['center'] = [-314, 67, 94] dump['map']['controls'] = { 'pan': True, 'zoom': True, diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index 59294cb..5de6fd4 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -422,8 +422,8 @@ overviewer.util = { myLayer["tileSetConfig"] = obj; - if (typeof(obj.spawn) == "object") { - var latlng = overviewer.util.fromWorldToLatLng(obj.spawn[0], obj.spawn[1], obj.spawn[2], obj); + if (typeof(obj.center) == "object") { + var latlng = overviewer.util.fromWorldToLatLng(obj.center[0], obj.center[1], obj.center[2], obj); overviewer.collections.centers[obj.world] = [ latlng, obj.defaultZoom ]; } else { overviewer.collections.centers[obj.world] = [ [0, 0], obj.defaultZoom ]; diff --git a/overviewer_core/settingsDefinition.py b/overviewer_core/settingsDefinition.py index 416a1c0..1e90751 100644 --- a/overviewer_core/settingsDefinition.py +++ b/overviewer_core/settingsDefinition.py @@ -93,6 +93,7 @@ renders = Setting(required=True, default=OrderedDict(), "minzoom": Setting(required=False, validator=validateInt, default=0), "manualpois": Setting(required=False, validator=validateManualPOIs, default=[]), "showlocationmarker": Setting(required=False, validator=validateBool, default=True), + "center": Setting(required=False, validator=validateCoords, default=None), # Remove this eventually (once people update their configs) "worldname": Setting(required=False, default=None, validator=error("The option 'worldname' is now called 'world'. Please update your config files")), diff --git a/overviewer_core/settingsValidators.py b/overviewer_core/settingsValidators.py index 41a29c3..3ae70f0 100644 --- a/overviewer_core/settingsValidators.py +++ b/overviewer_core/settingsValidators.py @@ -308,6 +308,20 @@ def validateManualPOIs(d): return d +def validateCoords(c): + if not isinstance(c, (list, tuple)): + raise ValidationException("Your coordinates '{}' are not a list or a tuple.".format(c)) + if len(c) not in [2, 3]: + raise ValidationException("'{}' is not a valid list or tuple of coordinates, " + "because we expect either 2 or 3 elements.".format(c)) + if len(c) == 2: + x, z = [validateInt(i) for i in c] + y = 64 + else: + x, y, z = [validateInt(i) for i in c] + return (x, y, z) + + def make_dictValidator(keyvalidator, valuevalidator): """Compose and return a dict validator -- a validator that validates each key and value in a dictionary. diff --git a/overviewer_core/tileset.py b/overviewer_core/tileset.py index 4128e5a..a2884cb 100644 --- a/overviewer_core/tileset.py +++ b/overviewer_core/tileset.py @@ -589,7 +589,9 @@ class TileSet(object): imgextension=self.imgextension, isOverlay=isOverlay, poititle=self.options.get("poititle"), - showlocationmarker=self.options.get("showlocationmarker") + showlocationmarker=self.options.get("showlocationmarker"), + center=(self.options.get("center") or self.options.get("spawn") + or [0, 64, 0]) ) d['maxZoom'] = self.options.get('maxzoom', self.treedepth) if d['maxZoom'] < 0: