- Install Python 3
- Install and use mod Map Writer
- Download the file
- 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) |