Blocktopograph is an app I released on the Google Play store in the beginning of June 2016; and it has reached 200.000+ downloads since then! The main functionality is to provide a “Google Maps”-like view for Minecraft Pocket Edition worlds, while building the map on-the-fly from world data (in contrast to Google Maps, which just loads preprocessed images).
It is open-source on GitHub, I shared it under GPL v3 at the start of my first university year (begin September 2016) to enable others to crowd-source new features, as I didn’t have the time to handle feature-requests myself. A fair warning though: the codebase was written in a hackaton-style manner; functionality, design and features were all developed on-the-fly, not expecting that the use-case would grow to become so large.
Note: Blocktopograph is currently not available on the app store anymore, as it is not compatible with the seemingly continuously changing Minecraft PE save-file format (Blocktopograph supports MCPE version 0.8 to 1.2). An archive of the Play Store page can be found here: Blocktopograph on Google Play
The main challenges of developing this app were loading-times and performance, since mobile phones do not perform as well when loading and rendering the huge amounts of world-data. This was solved by forking and updating the JNI (Java Native Interface) powered library android-leveldb, which outperforms the Java alternatives.
Another problem arose in the initial development of Blocktopograph; the Google Maps v3 android API does NOT work well with different number systems, especially square tiles with coordinates in the range of tens of millions. This was solved by using the TileView library, which has less fancy features, but supports very large coordinate systems without rounding issues. Some features which Google-Maps provided had to be implemented by myself, such as different terrain types (or parallel detail-levels as I like to call them). These features are open-sourced in my TileView fork.
Not only tile rendering but also markers had to be multithreaded (which TileView leaves as an exercise for the dev.): this was the second most challenging feature. This was solved by hooking the marker-renderer to the tile renderer, and forking the thread by starting asynchronous tasks for loading the different types of markers.
Blocktopograph includes different useful features for Minecraft Pocket Edition players, both for the average player and for the more technical players.
A Google-maps like experience is provided for the users who just want to see their world; they can:
- Zoom with dynamic level-of-detail (LOD)
- Pan, supporting a coordinate range of -30.000.000 to 30.000.000 in both X and Y directions.
- Teleport the camera to arbitrary coordinates.
- Teleport the player to a position on screen.
- Change the terrain-type; about 10 different terrain-types, such as “Satellite”, “Caves” and “Biomes”.
- Switch between the different Minecraft dimensions, while scaling the coordinate system.
- Add your their own custom markers, which can be used to teleport to with a few taps.
Some players - coming from the more advanced PC edition - do more with their worlds besides looking up their position; the more advanced set of features include:
- Named Binary Tag (better known as NBT) editor; for World, Player, Entity and Tile-Entity data.
- “Slime-chunk” algorithm emulation. This algorithm was reversed by me by reading the disassembled (ARM-v7 assembly) MCPE code; fun thing is that it was implemented wrongly by the MCPE developers (it differs from PC edition).
- Less commonly used map-types such as heightmap and voliage-color data.