Got any resources on this? As a kid I never thought about it but as a programmer, I always wondered how you scaled up these kind of problems.
It's fundamentally just a big array of one item per block space. When they moved to infinite worlds, they split up the world into chunks and used one array per chunk. When they doubled the world height from 128 to 256, they also split it into vertical chunks, but only for storage (logically it was still a 256 block tall array). It was never too big for an average computer to handle - otherwise Minecraft wouldn't have been able to exist yet (maybe that's why it didn't exist until 2009ish) but they've gotten a lot less efficient since then, in the name of flexibility. My source is the code itself, but you could also use the wiki's documentation about the on-disk data format.
I set up two old computers to play some Minecraft with my youngest kid. Unfortunately it turns out recent versions are much slower than old ones. I have not bothered to bisect it to figure out exactly what version(s) killed performance. My weakest old computer can run the latest version with 1-2 fps. It can run 1.12 with at least around 30-40 fps, which is more than enough for me to be able to enjoy the game (being old enough to have grown up in an era when we were happily playing flight sims at 5-10 fps). Anyway it is nice that the launcher makes it possible and easy to go back and play older versions. I much prefer drm-free games, but at least supporting old versions like this is better than 99% of games.
Re:Java Minecraft in the Browser
by pidgeon_lover on Tuesday April 01, 2025 @08:31AM
(#43545978)
Older versions of Minecraft are better; they've added too much junk to newer versions. I stick to 1.6.3, 1.7.10, 1.12.2. Heard they added a bunch of telemetry and ban capabilities in 1.18+, for which mods are needed.
DRM-free Minecraft launchers exist, mostly forks of MultiMC5. Now if only offline installers existed...
Now, it doesn't even use block IDs any more. It uses one whole object per block type, one pointer to one of those objects per block space, and has a lot more block types. The on-disk format stores the entire string name of the block, once per 16x16x16 region it occurs in.