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.
The best alternative would be a Texture, but it would need to have a property like ImageLabel.ResampleMode, or else you get something like this:
While I need something like this:
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