Accessing a local Mythruna world map from Java is fairly straight forward for someone who knows Java. I won't describe how to do this in a multiplayer game as a) it's dangerous, b) setup is difficult, and c) that will certainly be clamped down at some point as eventually the remote world database implementations will not allow direct modification at all (except through separate commands).
Anyway, to access a mythruna.db you will need the game .jar files. For Windows these are tied up in the .exe so it's better to download the Linux version for this. The only difference between the Linux version and the Windows version is how the games are launched.
(Note: interfaces and implementations are subject to change though these should be pretty stable. Note also, the game code itself is copyrighted and cannot be used in other games without permission.)
The best way to access world data is through the WorldDatabase interface. It provides built in caching and a way to save back changes. All of the below classes can be found in the mythruna.db package.
// Create the actual file I/O layer for "leaf" data
DefaultLeafDatabase leafDb = new DefaultLeafDatabase( new File("mythruna.db") );
// Create the factory that generates the world data
ColumnFactory colFactory = WorldUtils.createDefaultColumnFactory();
// Create the world database
WorldDatabase worldDb = new LocalWorldDatabase( leafDb, colFactory );
At this point I'm not really prepared to provide javadocs for the WorldDatabase or related interfaces but a clever Java program can figure out the callable methods from their IDE or by using javap.
The Mythruna world is divided into 1024x1024 meter "nodes". These nodes are sub-divided into equal size "leafs". A leaf is 32x32x32 blocks/cells. So a node is 32x32x5 leafs.
Should it ever matter, the mythruna.Coordinates class has methods for translating from world coordinates to node, leaf, cell, etc..
All WorldDatabase methods take world coordinates in x,y,z where x,y are a map location and z is the elevation.
The most interesting and straight forward methods on WorldDatabase are getCellType() and setCellType(). These can be used to query or change the values of blocks in the world. Though if you will be querying and changing a lot of blocks then there are better ways.
getColumnInfo() returns a ColumnInfo data structure for an entire stack of leafs at an x,y location. This includes elevation and surface type information used to generate maps, for example. This data structure is the most likely to evolve of any.
getLeaf() returns a LeafData object that contains the raw 32x32x32 data for a leaf. If changes are made to this leaf then WorldDatabase.markChanged(leaf) can be called to save it again. (Note: if changes are made through this approach then lighting will not be recalculated. Set LeafData.getInfo().lit to false and it will be relit the next time it is loaded.)
For the most part, that's about all of the support I can provide other than answering some questions. I have a game to write after all.
I will add that directly mucking with the LeafInfo fields (as retrieved by leafData.getInfo()) is pretty dangerous. This API was not designed for safety but for internal speed and ease of use. Modifying those fields directly may totally hose your world database (except in the case of the lit flag mentioned above and even that "may" cause issues with lighting.)