Skip to content

Instantly share code, notes, and snippets.

@Gesugao-san
Last active May 5, 2024 21:27
Show Gist options
  • Save Gesugao-san/d7141c79b684c39be4ccfae40d6aed91 to your computer and use it in GitHub Desktop.
Save Gesugao-san/d7141c79b684c39be4ccfae40d6aed91 to your computer and use it in GitHub Desktop.
  1. Install Python 3
  2. Install and use mod Map Writer
  3. Download the file
  4. Type this:

CLS && py mapwriter_sorter.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# cls && py mapwriter_sorter.py
import os
#from os import path
world_address = 'server_web_site_com_25565' # from 'server.web-site.com:25565'
# path.expandvars(r'%APPDATA%\\') == %SystemDrive%:\\Users\\%USERNAME%\\AppData\\Roaming\\
file_path = os.getenv('APPDATA') + '\\.minecraft\\saves\\mapwriter_mp_worlds\\' + world_address + '\\mapwriter.cfg'
output_file = 'mapwriter_sorted.txt'
data_dict = {}
meta_dict = {}
merged_dict = {}
sorted_dict = {}
deaths_dict = {}
indentation = ' ' * 4
marker_count = -1
debug = False
def main(file_path):
file_exists = (os.path.exists(file_path) and os.path.isfile(file_path))
print('path:', file_path)
print('file_exists:', file_exists)
f = open(file_path, 'r', encoding = 'utf8')
content = f.read()
f.close()
content = content.split('markers {')[1]
content = content.split('}')[0]
content = content.replace(indentation, '') #.strip()
content = content.split('\n')
content = list(filter(None, content))
for marker in content:
marker_splited = marker.split('=')
head = marker_splited[0]
data = marker_splited[1].split(':')
if (
(head[0] == 'I') or
('markerCount' in head) or
('visibleGroup' in head)
):
meta_dict[head] = data
else:
data_dict[head] = {
'name': data[0],
'coordinates': {
'x': data[1],
'y': data[2],
'z': data[3],
},
'unknown_param': data[4],
'color': data[5],
'group': data[6]
}
if ('playerDeaths' in data):
deaths_dict[head] = {
'date_time': data[0],
'coordinates': {
'x': data[1],
'y': data[2],
'z': data[3],
},
'unknown_param': data[4],
'color': data[5],
'group': data[6]
}
if not 'I:markerCount' in meta_dict:
return print('Error: No I:markerCount marker.')
marker_count = int(meta_dict['I:markerCount'][0])
print('marker_count:', marker_count) #, type(marker_count)
for x in range(0, marker_count):
_key = 'S:marker' + str(x)
sorted_dict[_key] = data_dict[_key]
merged_dict = {**sorted_dict, **meta_dict}
#print('\n' + 'content:', content)
#print('\n' + 'data_dict:', data_dict)
#print('\n' + 'meta_dict:', meta_dict)
print('\n' + 'data_dict (first):', data_dict['S:marker' + str(0)])
print('\n' + 'data_dict (last):', data_dict['S:marker' + str(meta_dict['I:markerCount'][0])])
#print('\n' + 'dict(sorted(data_dict.items())):', dict(sorted(data_dict.items())))
#print('\n' + 'dict(sorted(meta_dict.items())):', dict(sorted(meta_dict.items())))
#print('\n' + 'merged_dict:', merged_dict)
print('\n' + 'playerDeaths:', deaths_dict)
f = open(file_path.replace('mapwriter.cfg', output_file ), 'w', encoding = 'utf8')
f.write('markers {\n')
for marker_name in merged_dict.keys():
data_line = ''
#print('merged_dict[marker_name]:', merged_dict[marker_name])
#print('merged_dict[marker_name].keys():', merged_dict[marker_name].keys())
if debug: print('marker_name:', marker_name)
if (
(
(marker_name != 'I:markerCount') and
(marker_name != 'S:visibleGroup')
) or
(type(merged_dict[marker_name]) is dict)
):
for marker_header in merged_dict[marker_name].keys():
if (
(marker_header == 'coordinates') or
(type(merged_dict[marker_name][marker_header]) is dict)
):
for marker_subheader in merged_dict[marker_name][marker_header].keys():
#print('marker_subheader:', marker_subheader, merged_dict[marker_name][marker_header][marker_subheader])
data_line = data_line + merged_dict[marker_name][marker_header][marker_subheader] + ':'
else:
if debug: print(marker_name, marker_header)
data_line = data_line + merged_dict[marker_name][marker_header] + ':'
elif (type(marker_name) is list): #array
for marker_header in marker_name:
data_line = data_line + marker_header + ':'
else:
data_line = data_line + marker_name + ':'
data_line = data_line[:len(data_line) - 1] # Delete last symbol
current_line = marker_name + '=' + data_line #.replace(':\n', '\n')
#print('Writing: ' + current_line)
f.write(indentation + current_line + '\n')
f.write('}\n')
f.close()
print('\n' + 'Done, check file "' + output_file + '"')
main(file_path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment