我的世界Minecraft Mod開發學習筆記 - Mod開發環境設置和Hello World示例


概述

本文通過一個簡單的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, grouparchivesBaseName

  version = "1.0.0"
  group= "minecraftfun"
  archivesBaseName = "helloWorldMod"

修改 {mcmod.info}

編輯 mcmod.info以修改modid, namedescription.

  "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文件也可以從這里下載.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM