Resurrecting Minecraft's long-dead isometric level previewer
A long long time ago, Minecraft had an isometric level previewer.
This feature was added in Infdev update 20100616-21, during the early phase in mid-2010 where infinite level support was developed.
It lived at minecraft.net/infdev/preview.jsp
, and according to the Wayback Machine, that page disappeared between the 14th and 26th of September 2010, the same time as Infdev itself.
However, it remained hidden in the game’s code for a while after - and I got it running in the later versions it remained in.
The level previewer is implemented as an applet, for embedding in a webpage. This means it can’t be run directly, and no browser supports applets anymore. Fortunately, it is really easy to write a wrapper for applets: since they’re just AWT components, you can shove them in any AWT or in this case Swing window:
import java.applet.Applet;
import javax.swing.JFrame;
public class App {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("net.minecraft.isom.IsomPreviewApplet");
Applet applet = (Applet) clazz.newInstance();
JFrame frame = new JFrame("Previewer");
frame.add(applet);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1280, 720);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
applet.start();
}
}
Compile this, and run it with the version of Minecraft you wish to use it with on the classpath:
java -classpath ~/.local/share/PrismLauncher/libraries/com/mojang/minecraft/b1.2_02/minecraft-b1.2_02-client.jar App
and the isometric previewer should open.
It starts without any world loaded, but the controls displayed at the bottom of the window tell you what to do.
Worlds are loaded from the .minecraft/saves
directory, using the World1-5 naming used by versions before Beta 1.3.
Here’s what it looks like on the version after it was introduced, 20100617-1. Double-clicking toggles between two zoom levels (defaulting to zoomed in), and the number keys change the ambient brightness. I played for a couple minutes, building a crappy little house and placing some torches. You can pan the map by dragging it with the mouse. I have not been able to reproduce the supposed bug where it deletes your inventory, maybe it was fixed in the following day’s release.
Here’s a winter world generated in Alpha 1.1.2_01. There are a few things interesting in this screenshot, the first being that the chunks on the edge of the world don’t have snow, and the second being that the grass is actually being rendered as brown, as a change from alpha 1.0.4 means the grass block uses its side texture on all faces. The latter can be seen in game if you use an inventory editor to obtain the grass block.
The addition of biomes in Alpha 1.2.0 means that leaves are now grey, since in-game the colours in their texture is multiplied to adjust the leaves’ colour based on the biome - but the abandonded isometric previewer isn’t aware of that.
Here’s an adventure map called “Adrift”, for Beta 1.2. Note how as I pan, chunks are loaded and unloaded. The number of chunks seems to be limited vertically - I believe the isometric viewer was designed for a much smaller resolution than the one I’m running it at.
Beta 1.2 was also the last version where the previewer worked reliably. Beginning with Beta 1.3, there is a high chance that rendering any given chunk will throw an exception, though I’m not sure what exactly causes it to fail. Chunk rendering is spread across eight threads, and a thread throwing an exception will cause that thread to die. Eventually, all of the renderers will throw exceptions, and new chunks will stop being rendered entirely.
Then in Beta 1.8 (as early as the pre-releases), it breaks entirely.
The first thing the previewer does is paint the screen with red for a single frame - but starting with this version, a NullPointerException
happens immediately after, so it never gets any further.
…until snapshot 12w07a for release 1.2.1, where it starts working again. Sort of… the controls will render, but it’s actually unusable - attempting to load a world will throw an exception with the message Old Chunk Storage is no longer supported
, as with the addition of the Anvil level format, the Alpha level format was removed, which the isometric viewer tries to loads worlds as.
It is possible to mod it into being able to load Anvil worlds2, but it still spews errors deeper in the codebase and fails to render anything.
Then in snapshot 12w18a for release 1.3.1 , it was removed entirely, likely a victim of the giant refactor that made singleplayer run a local server. That snapshot was released on the 3rd of May 2012, meaning the isometric preview was kept in the source code for a little under two years. However, if the page to access it was removed in September like mentioned above, that means it was actually only officially accessible for three months. And if Alpha was totally separate to Infdev and had no way of accessing the preview, that means it had a useful lifespan of two weeks (exactly 14 days), since Alpha was released on the 30th of June 2010.
Something to note is that it was still updated to some degree, as it uses Minecraft’s level code directly, which changed over those two years. There would have definitely been compile errors in the previewer’s code that were fixed by Mojang’s programmers in that time.
This feature is a fairly obscure aspect of Minecraft history, and I don’t see it mentioned a lot, even amongst the corners of the internet that is interested in this stuff. But it has a legacy in plugins like Dynmap, which to this day provide an isometric world map. And at the very least, I think it’s a really neat thing to have built-in… even if it only lasted a couple of weeks.
-
Although only the first update of that day has been found as of writing, it’s missing from that version and appears in the first update of the following day, so this seems accurate. ↩
-
In 12w16a, I swapped the constructor for class
el
forajo
inux
(obfuscated names, bleh - the MCP names areSaveHandler
,AnvilSaveHandler
, andCanvasIsomPreview
respectively). I’m tempted to try and fix it further - the latest version of Minecraft with the isometric viewer that is supported by MCP is release 1.2.3 - but it’s unlikely, I know nothing about software rendering, and all the constants are missing! ↩