From be638b2adeebecc03def003382940e4c70dee2b5 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 17 Dec 2025 01:36:07 +0900 Subject: [PATCH] Implement track export for bluemap, ignore for mapcrafter --- src/bluemap_exporter/exporter.py | 22 +++++++++++++++++++--- src/mapcrafter_exporter/exporter.py | 11 ++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/bluemap_exporter/exporter.py b/src/bluemap_exporter/exporter.py index e4dca80..a7c1a12 100644 --- a/src/bluemap_exporter/exporter.py +++ b/src/bluemap_exporter/exporter.py @@ -1,10 +1,10 @@ import json +from pathlib import Path from textwrap import indent from typing import Any -from pathlib import Path +from lib_marker import Point, Track from marker_sets import WORLDS -from lib_marker import Point def generate_bluemap_output(output_dir: Path): @@ -43,6 +43,7 @@ def convert_data_to_bluemap_structure() -> dict: for marker in marker_set.markers: if isinstance(marker, Point): + # https://bluemap.bluecolored.de/wiki/customization/Markers.html#poi-markers result[world_name][slug(marker_set.name)][slug(marker.name)] = { "type": "poi", "label": marker.name, @@ -52,6 +53,21 @@ def convert_data_to_bluemap_structure() -> dict: "z": marker.z, }, } + elif isinstance(marker, Track): + # https://bluemap.bluecolored.de/wiki/customization/Markers.html#line-markers + result[world_name][slug(marker_set.name)][slug(marker.name)] = { + "type": "line", + # TODO: Calculate the median point of the track for the label position + "position": { + "x": marker.points[0][0], + "y": marker.points[0][1], + "z": marker.points[0][2], + }, + "label": marker.name, + "line": [ + {"x": p[0], "y": p[1], "z": p[2]} for p in marker.points + ], + } else: raise NotImplementedError(f"Unknown marker type: {marker}") @@ -72,7 +88,7 @@ def to_hocon(x: Any) -> str: return f"[\n{'\n'.join(items)}\n]" elif isinstance(x, dict): items = [ - f' "{k}": {indent(to_hocon(v), ' ').removeprefix(' ')}' + f' "{k}": {indent(to_hocon(v), " ").removeprefix(" ")}' for k, v in x.items() ] return f"{{\n{'\n'.join(items)}\n}}" diff --git a/src/mapcrafter_exporter/exporter.py b/src/mapcrafter_exporter/exporter.py index 6444cc2..78a10ec 100644 --- a/src/mapcrafter_exporter/exporter.py +++ b/src/mapcrafter_exporter/exporter.py @@ -1,8 +1,8 @@ import json from pathlib import Path +from lib_marker import Area, Point, Track from marker_sets import WORLDS -from lib_marker import Point, Track, Area def generate_mapcrafter_output(output_dir: Path): @@ -30,6 +30,7 @@ def convert_data_to_mapcrafter_structure() -> dict: for world_name, world_marker_sets in WORLDS.items(): for marker_set in world_marker_sets: + # https://mapcrafter.readthedocs.io/en/latest/markers.html#manually-specifying-markers if marker_set.name not in result: result[marker_set.name] = { "id": marker_set.name.lower().replace(" ", "-"), @@ -46,10 +47,14 @@ def convert_data_to_mapcrafter_structure() -> dict: ) elif isinstance(marker, Track): - raise NotImplementedError("Track markers are not supported") + print( + f"Track markers are not natively supported in Mapcrafter, skipping '{marker.name}'..." + ) elif isinstance(marker, Area): - raise NotImplementedError("Area markers are not supported") + print( + f"Area markers are not natively supported in Mapcrafter, skipping '{marker.name}'..." + ) else: raise ValueError(f"Unknown marker type: {marker}")