概述
本文使用Forge MDK (Mod Development Kit)實現一個簡單的命令Mod用於顯示用戶輸入.
運行環境
-
Java 1.8 JDK
-
Minecraft Java Edition 1.12.2
-
Forge and MDK 1.12.2
安裝Forge和MDK
-
從Minecraft Forge官網下載Minecraft Forge - MC 1.12.2 installer和Mod Development Kit (MDK)包.
-
運行Forge installer安裝Forge
-
將MDK壓縮包解壓的指定目錄, 例如
C:\mdk
.
設置Mod項目
在MDK目錄下, 運行gradlew setupDecompWorkspace
命令以創建如下Mod項目結構
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 = "echo-cmd-mod"
修改 mod 信息
編輯 mcmod.info
以修改modid
, name
和description
.
"modid": "echocmdmod",
"name": "Echo Command Mod",
"description": "A command mod echoes user inputs",
提示: modid
只能使用小寫字母.
創建command Java類
src/main/java/minecraftfun/EchoCommand.java
package minecraftfun;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting;
public class EchoCommand extends CommandBase {
@Override
public void execute(MinecraftServer server, ICommandSender sender, String[] params) throws CommandException {
EchoCommandMod.logger.info("execute called");
if (params != null && params.length > 0) {
for (String param : params) {
String message = "Echo : " + param;
TextComponentString text = new TextComponentString(message);
text.getStyle().setColor(TextFormatting.RED);
sender.sendMessage(text);
}
}
}
@Override
public String getName() {
return "echo";
}
@Override
public String getUsage(ICommandSender sender) {
return "command.echo.usage";
}
}
getUsage
方法的返回字符串對應語言文件中的鍵值.
創建mod Java類
src/main/java/minecraftfun/EchoCommandMod.java
package minecraftfun;
import org.apache.logging.log4j.Logger;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
@Mod(modid = EchoCommandMod.MODID, name = EchoCommandMod.NAME, version = EchoCommandMod.VERSION)
public class EchoCommandMod {
public static final String MODID = "echocmdmod";
public static final String NAME = "Echo Command Mod";
public static final String VERSION = "1.0.0";
public static Logger logger;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
logger = event.getModLog();
}
@EventHandler
public void init(FMLServerStartingEvent event)
{
logger.info("initalise FMLServerStartingEvent :" + NAME);
event.registerServerCommand(new EchoCommand());
}
}
設置resource目錄結構
在src/main/resources
目錄下, 創建如下目錄和文件, 將MODID
替換為EchoCommandMod.MODID
src/main/resources/assets/
└── <MODID>/
└── lang/
└── en_us.lang
修改mod語言文件
src/main/resources/assets/echocmdmod/lang/en_us.lang
command.echo.usage=/echo <MESSAGE>
運行如下命令以編譯Mod
gradlew build
該命令在build/libs
目錄下生成[archivesBaseName]-[version].jar
文件.
測試Mod
將編譯生成的mod jar文件放入Minecraft mods目錄(在Windows下為 %appdata%.minecraft\mods), 運行Minecraft, 輸入命令/echo some message here
.
小結
對Minecraft Mod開發感興趣的朋友不妨試一試, 所有源代碼和mod jar文件也可以從這里下載.