neocturne / MinedMap

Minecraft map renderer and viewer
MIT License
99 stars 13 forks source link

Slow mapping on savegame with custom biomes #29

Closed laszlostark closed 1 year ago

laszlostark commented 1 year ago

I ran into an issue today when trying to map a savegame (about 1gb) that had custom biomes added by a datapack (Terralith in this instance). The renderer would spit out a literal ton of warnings concerning the unknown biomes. Mapping would happen, though very slowly. For reference I created one world each with vanilla terrain and with the Terralith datapack where I generated the spawn area with a render-distance of 10 chunks. I then utilized a small script to render both savegames into maps and compare the time it takes for each attempt. I discovered that, for the vanilla savegame (12.9mb), it took about 3 seconds. The savegame with Terralith terrain (16.2mb) on the other hand took 15 seconds. This process generated 7669 warnings about unknown biomes. I attached both the entire command line output of the script and the log that was generated by piping the script into tee (which for some reason omitted the warning messages). The code for the powershell script I used reads as follows:

Get-Date -Format "HH:mm:ss.ff"
.\MinedMap.exe vanilla data | tee vanilla.log  
Get-Date -Format "HH:mm:ss.ff"  
.\MinedMap.exe terralith data2 | tee terralith.log  
Get-Date -Format "HH:mm:ss.ff"

MinedMap.log out.log

neocturne commented 1 year ago

Hmm, as a quick solution to fix the slowness, it would make sense to collect warnings about unknown biome types and print them only once per region (or even only once per run of MinedMap). This still wouldn't add proper support for custom biomes - they would use default biome colors.

In the long term, I'd like to add proper support for custom biome data, but that will require replacing MinedMap's storage format for biome data, as that is still based on the numeric pre-Minecraft-1.18 biome IDs for now.

Regarding the missing warning messages: The | will only pipe stdout, not stderr, into tee by default. On Bash and a few other shells, you can use |& to pipe both, but I don't know if this is true for PowerShell as well.

neocturne commented 1 year ago

The new MinedMap 2.0.0 release should fix the slowness by printing the message only once per chunk section rather than once per block. Full support for custom biomes is now tracked in #31.