Add dithered mode (floyd-steinberg)
Simplify mode names
In 2layer mode, ensure that the stone shadow strip isn't cut off at the top of the map
In 2layer mode, printing an image at the very edge of the map will no longer cut off the back layer
An important background note is that finalisers are run even when constructors throw exceptions - https://stackoverflow.com/questions/188693/is-the-destructor-called-if-the-constructor-throws-an-exception
What happened was that
a) new Bitmap() was called to decode the byte array
b) this would in turn call the static constructor of 'GDIPlus' class
c) since libgdiplus could not be loaded, a DllNotFoundException would get thrown
d) a TypeInitializationException would get thrown because the 'GDIPlus' class failed to initialise
However, Bitmap implements a finaliser, which meant that a bit later on the background thread
e) ~Image() was called
f) which in turn called Dispose(false)
g) which in turn calls 'if (GDIPlus.GdiPlusToken != 0 ..'
h) which in turn calls the static constructor of 'GDIPlus' class
i) which in turn throws a DllNotFoundException since libgdiplus was not found
j) which therefore throws a TypeInitializationException
k) ... which ends up being unhandled
l) ... and therefore takes down the process due to the exception being unhandled
So, the solution is to switch to using Image.LoadStream instead - the difference here is that
the first TypeInitializationException is thrown before an Image object is even created,
therefore no Image object gets finalised, sidestepping the issue altogether
Also fix exporting BLOB values via /server backup table, would generate invalid SQL that could not be subsequently imported again with /server import table
In detail:
1) BlockDB upgrader didn't convert time from local to UTC, which meant that times in /b were e.g. 10 hours off
2) Zone migrator accidentally set minX/maxX to imported minZ/maxZ and left minZ/maxZ as 0. Bug introduced four years ago in f1a8544308094586a3a1b5d61cd96d03391ad448
Note: The old password format was deprecated 18 months ago. Also, even if there are still some users/servers that haven't updated, all this will mean is that they have to set a password again, they won't be prevented from being able to verify their password