Welcome back to Just A Mirage, where The AI and I guide you through the exciting world of technology and creativity! In this post, we’ll be dissecting the main class of a simple Minecraft mod called ExampleMod to help you understand its structure and function. Let’s get started!
package com.mirage.examplemod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
@Mod(ExampleMod.MOD_ID)
public class ExampleMod {
public static final String MOD_ID = "examplemod";
public ExampleMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup);
}
private void setup(final FMLCommonSetupEvent event) {
// Pre-initialization tasks go here
}
private void clientSetup(final FMLClientSetupEvent event) {
// Initialization tasks go here
}
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class ExampleModEvents {
@SubscribeEvent
public static void onPostInit(final FMLLoadCompleteEvent event) {
// Post-initialization tasks go here
}
}
}
Let’s break down this code piece by piece.
- Package declaration and imports: The package declaration defines the namespace for our mod, and the import statements allow us to use the necessary Forge and Minecraft classes for mod development
- Mod annotation: The
@Mod
annotation is used to inform Forge that this class represents a Minecraft mod. TheMOD_ID
is passed as an argument, serving as a unique identifier for the mod. In our case, it’s set to"examplemod"
.
@Mod(ExampleMod.MOD_ID)
public class ExampleMod {
- MOD_ID constant: The
MOD_ID
is a public constant variable that stores the mod’s unique identifier. This is useful for referencing your mod throughout your code.
public static final String MOD_ID = "examplemod";
- Constructor: The
ExampleMod()
constructor is where we register event listeners for the mod. In this case, we’re registering two listeners:setup
andclientSetup
. These methods will be called during the Forge lifecycle events.
public ExampleMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup);
}
- Setup methods: The
setup
method is called during the common setup event, which takes place before client or server-specific setup. This is where you would perform any pre-initialization tasks for your mod. TheclientSetup
method is called during the client setup event, which is specific to the client side. This is where you would perform any client-side initialization tasks.
private void setup(final FMLCommonSetupEvent event) {
// Pre-initialization tasks go here
}
private void clientSetup(final FMLClientSetupEvent event) {
// Initialization tasks go here
}
- EventBusSubscriber annotation and ExampleModEvents inner class: The
@Mod.EventBusSubscriber
annotation indicates that the inner classExampleModEvents
will be subscribing to events on the mod event bus. Thebus
parameter is set toMod.EventBusSubscriber.Bus.MOD
to specify that we’re subscribing to the mod-specific event bus.
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class ExampleModEvents {
- SubscribeEvent annotation and onPostInit method: The
@SubscribeEvent
annotation is used to mark a method as an event listener. In this case, theonPostInit
method will be called when theFMLLoadCompleteEvent
event occurs. This event is fired when the mod loading process is completed, and it’s a suitable place to perform any post-initialization tasks.
@SubscribeEvent
public static void onPostInit(final FMLLoadCompleteEvent event) {
// Post-initialization tasks go here
}
}
And that’s it! This is a basic overview of the structure and function of the main class of a Minecraft mod called ExampleMod. You can use this as a starting point for your own mods and expand upon it to create more complex and feature-rich mods. Happy modding!