A few weeks ago, I came across an old .rblx file of a Minecraft terrain generator I made over a year ago. I started working on it after I found this page on GitHub and abandoned it after getting to the water and lava part. Well, I decided to start over on it and try to make the code a lot cleaner, and after about 2 days I got the basic generation done. After spending the next 3 days fixing some bugs and adding support for textures, I found a tool to decompile and deobfuscate the Minecraft classic 0.30c jar file and started comparing my code to its code. I ended up porting Minecraft Perlin noise class to Lua, and after that, I found a node.js module called java-random, which is an implementation of java.util.Random, and I ported it too. After another 5 days of debugging and making sure my code worked the same way as Minecrafts code, I got this result:
(sorry for the low framerate, I don’t have a very good computer)
Compared to Minecraft:
In order to get the same world generated each time, I had to mod the game to use a default seed of 1. Since it uses a working implementation of the java.util.Random class, it can generate identical worlds.
It can generate worlds of any size, but I have it set to use the only sizes you can choose from Minecraft:
Small (128x128)
Normal (256x256)
Huge (512x512)
I would upload screenshots of these but the hard drive partition I saved them to get corrupted.
Currently, the only issue I’m facing is how low the fps get while rending all the blocks. I think this is happening because of how many SurfaceGuis are being rendered.
You should totally re-create Minecraft in Roblox. Just make the generation bigger, add block placement, destroying, first person, mobs, and you got yourself Minecraft!
I have added in a loading screen, and the fps/chunk updates counter, but I will probably need to disable textures because SurfaceGuis seems to make it way laggier than just using decals.
btw to resolve the lag issue you could raycast from each side of the blocks when a block is broken or placed, and if the side is covered by a block then don’t render it. similar to what Minecraft does already