neocturne/MinedMap

Very inefficient region finding.

Closed this issue · 1 comments

my world contains the following region files

r.0.0.mca
r.0.-1.mca
r.0.1.mca
r.0.-2.mca
r.0.2.mca
r.0.-3.mca
r.0.3.mca
r.0.-4.mca
r.0.-5.mca
r.0.-6.mca
r.0.-7.mca
r.0.-8.mca
r.0.-9.mca
r.-1.0.mca
r.1.0.mca
r.-1.-1.mca
r.-1.1.mca
r.1.-1.mca
r.1.1.mca
r.-1.-2.mca
r.-1.2.mca
r.1.-2.mca
r.1.2.mca
r.-1.-3.mca
r.-1.3.mca
r.1.-3.mca
r.-1.-4.mca
r.1.-4.mca
r.-1.-5.mca
r.1.-5.mca
r.-1.-6.mca
r.-1.-7.mca
r.-1.-8.mca
r.-1.-9.mca
r.-2.0.mca
r.2.0.mca
r.-2.-1.mca
r.-2.1.mca
r.2.-1.mca
r.2.1.mca
r.-2.-2.mca
r.-2.2.mca
r.2.-2.mca
r.2.2.mca
r.23640.-16106.mca
r.-2.-3.mca
r.-2.3.mca
r.2.-3.mca
r.-2.-4.mca
r.2.-4.mca
r.25273.33690.mca
r.-2.-5.mca
r.-2.-6.mca
r.-2.-7.mca
r.-2.-8.mca
r.-2.-9.mca
r.-3.0.mca
r.3.0.mca
r.-3.-1.mca
r.3.-1.mca
r.3.1.mca
r.-3.-2.mca
r.3.2.mca
r.-3.-3.mca
r.-3.-4.mca
r.-3.-5.mca
r.-3.-6.mca
r.-3.-7.mca
r.-3.-8.mca
r.-3.-9.mca
r.-4.0.mca
r.-4.-1.mca
r.-4.-2.mca
r.-4.-3.mca
r.-4.-4.mca
r.-4.-5.mca
r.-4.-6.mca
r.-4.-7.mca
r.-4.-8.mca
r.-5.0.mca
r.-5.-1.mca
r.-5.-2.mca
r.-5.-3.mca
r.-5.-4.mca
r.-5.-5.mca
r.-5.-6.mca
r.-5.-7.mca
r.-5.-8.mca
r.-6.0.mca
r.-6.-1.mca
r.-6.-2.mca
r.-6.-3.mca
r.-6.-4.mca
r.-6.-5.mca
r.-6.-6.mca
r.-6.-7.mca
r.-7.0.mca
r.-7.-1.mca
r.-7.-2.mca
r.-7.-3.mca
r.-7.-4.mca
r.-7.-5.mca
r.-7.-6.mca
r.-8.0.mca
r.-8.-1.mca
r.-8.-2.mca
r.-8.-3.mca
r.-8.-4.mca
r.-8.-5.mca
r.-8.-6.mca
r.-9.0.mca
r.-9.-1.mca
r.-9.-2.mca
r.-9.-3.mca

and as you can see there is r.25273.33690.mca and r.23640.-16106.mca which sadly push the boundingBox for the world quite far outward.

Now... after wondering why MinedMap didn't complete, or at least wrote a message about new tile rendered, i started to dig around what is happening and ended up using strace to see what the process ist doing..

…
stat("/data/Brave/region/r.2713.12406.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
stat("/data/Brave/region/r.2713.12407.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
stat("/data/Brave/region/r.2713.12408.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
stat("/data/Brave/region/r.2713.12409.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
stat("/data/Brave/region/r.2713.12410.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
stat("/data/Brave/region/r.2713.12411.mca", 0x7ffe6b57a170) = -1 ENOENT (No such file or directory)
…

After seeing this, i took a look into https://github.com/NeoRaider/MinedMap/blob/master/src/MinedMap.cpp#L360 i realized how minedmap iterates.

Wouldn't it be better to just iterate over all the region files available, instead of guessing regions files by iterating over each coordinate in the map bounding box?

Yes, this makes sense. The info.json format will need to be adjusted as well to avoid creating an enormous array containing false for each missing region.

I should be able to have a look at this soon.