Building a Large Minecraft Mod: An Overview of Immersive Geology
PROJECT


Introduction
Minecraft is a popular sandbox game that allows players to build and explore virtual worlds. One of the most exciting aspects of Minecraft is the ability to modify and customize the game through the use of mods. Mods are modifications created by players that add new features, mechanics, and content to the game.
Big thanks to all the help I had for a project of this scale!
Muddykats: Lead Developer
UnSchtalch: Research and Development, Model Artist
SteelBlue8: Artist and Main Texture Developer
CrimsonDragonRider: Team Founder Ideas Guy and a Professional Scope Creeper
Initial Setup
To develop a Minecraft modification, there are multiple methods that can be used; however, in this project, I wanted to take inspiration from an existing mod, Immersive Engineering. Hence, we used an existing community tool, Forge, a Minecraft modding API.
My choice of IDE was IntelliJ Community Edition due to its robust features and user-friendly interface, although I've previously used Eclipse for similar projects. Since Minecraft mods are primarily developed in Java, IntelliJ's support for Java development was advantageous.
To kickstart the modding process, I began by downloading the Minecraft Forge MDK and setting up my development environment. This involved extracting the Forge MDK and importing it as a Gradle project in IntelliJ IDEA.
Once the project was set up, I configured the Gradle build system to include Minecraft Forge dependencies and the Immersive Engineering API as well. This ensured that my mod would have access to the necessary libraries and APIs provided by Forge and have access to the features of the Immersive Engineering mod, allowing me to add new content.
Following the setup, I generated run configurations using Gradle tasks to prepare for testing and debugging my mod within the Minecraft environment. These configurations streamlined the process of launching the Minecraft client with my mod and its dependencies loaded.
Deciding the Features
About 70% of making a mod is having a solid, firm idea of what you want to add to the game. This mod was inspired by Immersive Engineering, specifically the cool machines styled around retro-futurism. However, something I always felt was missing was a more realistic method of processing ore and materials into ingots.
So I decided on a fairly straightforward idea: to look into which metals are more commonly used and research how they're refined from ore. I underestimated the complexity, but I don't regret it!
I put together a basic chart of where ore should be found:


The next thing to work out was how the processing chain should work.
After much thought, I settled on a few specific machines used in real-world processes. As most of these processes have byproducts, interesting choices can be made on how to handle them.
One interesting thing I found was that there were only a few specific methods used to process ores, although many a specialized machine exists to improve the efficiency for a specific ore. Below, I have a rough outline of how a player would process the ores they find throughout the world:


With the features decided, it's time to design the machine models, now that we know what machines and ores are needed.
Modeling the Machines
This is something that I needed help with, I wasn't ready to tackle advanced 3D modelling at the time, but I did have a good hand at fixing some of the Texture UV's or some of the smaller issues when creating the models, of course the free program Blender was used for this process.
Below, you can see some of the work in process models:







Of course, over time, we had some help to polish up the textures and models further



Implementation and Code
Now, so far the planning of the mod has gone without too much of a hitch, however here comes the hard part, we need to implement this into the game, and of course, this means we need a lot of different functionality, but most importantly, we need a way to implement new machines, processes and materials in a quick and easy manner.
When coding the mod, I implemented several interesting features. One key aspect was how we handled recipe chains, ensuring a logical progression from raw materials to finished products. This involved meticulous planning and implementation of crafting recipes for various machines and processes.
Additionally, the challenge of implementing multiblock models and the associated building process, allowing players to construct complex structures within the game world, luckily I can use the Immersive Engineering API to handle most of that for me, as long as I provide the needed information, which includes, the model .obj, and the pattern for the block placements so the game knows how to identify a complete multiblock.
Another notable feature was the inclusion of a guide book, providing players with in-game documentation and guidance on how to utilize the mod's features effectively, again, the Immersive Engineering API came in handy, and I was able to add my documentation into a special section in the Immersive Engineering Guidebook.
So, the method I settled on for handling the materials and how to implement the needed information for recipe chains was to utilize a multiple Enums to handle the implementation of materials.
Each material entry in the Enum corresponded to a specialized class, like 'MaterialTitanium' and 'MaterialIlmenite.' These classes not only stored information about the material's forms within the game (such as ore, powder, or crystal) but also contained processing information and links to the machines required for transforming the material. This approach provided a scalable and organized method for managing a wide range of materials and their associated properties and processing chains.


Implementing Multiblocks
It took some trial and error, however implementing a multiblock was with the help of the Immersive Engineering API, a lot easier than I'd initially thought, although it does take a fair amount of prep work.
Below is a small snip of the code used to handle the formed multiblock:


With some more work on the classes to handle the recipes and other bits of nitty gritty work, I was finally able to add a new multiblock to the game.
Although, the first few attempts had some issues:






Eventually, after some further work, I was able to fix these issues, and complete the main machines of the mod, the processing chains worked as expected and the of course, the ores and items had been added in, which was a much easier process.






Conclusion
Implementing a mod of this scale, was quite challenging, from planning, designing, modeling, texturing and coding.
However I am very please with the end result, and of course the experience of working on a Java project of this scale, helped test my skills, especially when I had to ensure that everything worked with multiplayer in mind!
If you're interested in getting into the nitty gritty of the coding, you can access the public repository for Immersive Geology here