概述
本文通過一個簡單的Helll World Mod示例, 介紹了使用Forge MDK (Mod Development Kit)開發Minecraft Mod的基本環境設置和過程.
運行環境
-
Java 1.8 JDK
-
Minecraft Java Edition 1.12.2
安裝Forge和MDK
-
從Minecraft Forge官網下載Minecraft Forge - MC 1.12.2 installer和Mod Development Kit (MDK)包.
-
運行Forge installer安裝Forge
-
將MDK壓縮包解壓的指定目錄, 例如
C:\mdk
.
設置MDK
在MDK目錄下, 運行如下命令
gradlew setupDecompWorkspace
項目文件結構
MDK設置完畢后會生成以下的項目文件結構
mdk/
├── build/
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── src/
│ ├── main/
│ ├── java/
│ └── resources/
│ ├── mcmod.info
│ └── pack.mcmeta
├── build.gradle
├── gradlew
└── gradlew.bat
設置Gradle build文件
編輯build.gradle
並修改version
, group
和archivesBaseName
version = "1.0.0"
group= "minecraftfun"
archivesBaseName = "helloWorldMod"
修改 {mcmod.info}
編輯 mcmod.info
以修改modid
, name
和description
.
"modid": "helloworldmod",
"name": "Hello World Mod",
"description": "Hello World",
提示: modid
只能使用小寫字母.
創建mod Java類
src/main/java/minecraftfun/HelloWorldMod.java
package minecraftfun;
import org.apache.logging.log4j.Logger;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@Mod(modid = HelloWorldMod.MODID, name = HelloWorldMod.NAME, version = HelloWorldMod.VERSION)
public class HelloWorldMod {
public static final String MODID = "helloworldmod";
public static final String NAME = "Hello World Mod";
public static final String VERSION = "1.0.0";
private static Logger logger;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
logger = event.getModLog();
}
@EventHandler
public void init(FMLInitializationEvent event)
{
logger.info("Mod initlialised :" + NAME);
}
}
創建一個Java類用於處理放下Block的事件
src/main/java/minecraftfun/BlockPlaceHandler.java
package minecraftfun;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.event.world.BlockEvent.PlaceEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
public class BlockPlaceHandler {
@SubscribeEvent
public void onPlaceEvent(PlaceEvent event) {
event.getPlayer().sendMessage(
new TextComponentString("You placed a block : " + event.getPlacedBlock().getBlock().getLocalizedName()));
}
}
使用@SubscribeEvent
標記處理放下Block事件的方法.
在Mod類的init方法中注冊事件處理類.
@EventHandler
public void init(FMLInitializationEvent event)
{
logger.info("Mod initlialised :" + NAME);
MinecraftForge.EVENT_BUS.register(new BlockPlaceHandler());
}
編譯Mod
運行如下命令以編譯Mod
gradlew build.
該命令在build/libs
目錄下生成[archivesBaseName]-[version].jar
文件.
測試Mod
將編譯生成的mod jar文件放入Minecraft mods目錄(在Windows下為 %appdata%.minecraft\mods), 運行Minecraft.
當玩家放下一個Block時, 該mod會顯示一條對話消息並輸出放下的Block的名稱.
小結
對Minecraft Mod開發感興趣的朋友不妨試一試, 所有源代碼和mod jar文件也可以從這里下載.