零、寫在前面

1.看這個系列需要什麼前提?
- ① 對Minecraft有一定的了解,知道模組、方塊、物品、實體等名詞的具體含義。
- ② 對java程式設計有一定了解,至少要學到容器。
- ③ 會編寫json代碼,(其實不會也可以,因為這個比較簡單,現敲現學都沒問題,尤其對于會JavaScript的同學而言。可以通過這個連結進行學習JSON菜鳥教程)
- ④ 安裝并配置好了forge1.12.2(不知道怎麼弄的可以參考這個forge安裝教程[IntelliJ IDEA])
2.我為什麼要開這個系列的坑?
- ① 模組開發比較繁瑣,雖然不像算法那樣要動腦子想,但是這個包裡放這個類,那個包裡放那個類,哪個目錄下又要放哪個json或者png檔案。真的把人弄得……用陝西話講,木亂的。我把這些東西寫到部落格裡,也算是給自己加強記憶。
- ② 網絡上關于模組開發的教學資料真的非常少,畢竟這玩意又不能拿去考研秋招或者是校招。沒有補課機構願意出教學,也沒有太多人願意去學。于是乎學習資料便很少了。那我就在這裡把我自己學習的經曆擺出來,後來者也能走走捷徑。
3.最後一點
沒啥可說的了其實,但是隻寫兩點太難看了,也就是說這一點是用來湊數的。廢話不多說了,我們開整。
二、建包
放mod的java檔案的包要放在…/src/main/java這個目錄裡面,一般都起名為com.你的Minecraft中用的名字.你這個mod的名字。例如com.darkill.examplemod 。
然後再建兩個包,分别為com.darkill.examplemod.util和com.darkill.examplemod.proxy和。結構如下(其他的包暫時不用管,也不用加入):
三、寫用來做參考檔案的Reference類
在com.darkill.examplemod.util(注意,包名因人而異,我這裡隻是為了舉例子)包裡面寫一個Reference類。這個類的作用其實就相當于一個properties配置檔案,它的裡面全部是常量。
package com.darkill.examplemod.util;
public class Reference {
public static final String MODID = "examplemod";
public static final String NAME = "Example Mod";
public static final String VERSION = "1.0";
public static final String ACCEPTED_VERSIONS = "[1.12.2]";
public static final String CLIENT_PROXY_CLASS = "com.darkill.tutorialmod.proxy.ClientProxy";
public static final String COMMON_PROXY_CLASS = "com.darkill.tutorialmod.proxy.CommonProxy";
}
- 逐一解釋這些常量的用意:
- MODID:相當于模組的身份證号,MODID必須全部為小寫字母,并且盡量不要太短,否則會和别人的mod混淆。
- NAME:就是你這個模組的名稱。
- VERSION:這個模組目前的版本。
- ACCEPTED_VERSIONS這個模組支援哪些Minecraft遊戲版本使用。
上面提到的這幾個都可以随意些,後面兩個變量必須是proxy包下面的這兩個類,不過這時這兩個類還沒寫呢,一會兒再寫。我們先接着寫Main檔案
四、寫Main類 — mod檔案運作的入口
在com.darkill.examplemod包裡面寫一個Main類。具體代碼如下:
package com.darkill.examplemod;
import com.darkill.examplemod.util.Reference;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@Mod(modid = Reference.MODID, name = Reference.NAME, version = Reference.VERSION)
public class Main {
@Instance
public static Main instance;
@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.COMMON_PROXY_CLASS)
public static CommonProxy proxy;
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
}
@EventHandler
public void init(FMLInitializationEvent event) {
ModRecipes.init();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
}
}
五、編寫ClientProxy與CommonProxy
我們在第三步寫的Reference類中可以注意到有兩個類的路徑我們并沒有寫任何java檔案,這一步的操作就是寫上他們。
package com.darkill.examplemod.proxy;
import net.minecraft.item.Item;
public class CommonProxy {
public void registerItemRenderer(Item item, int meta, String id) {}
}
package com.darkill.examplemod.proxy;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;
public class ClientProxy extends CommonProxy {
@Override
public void registerItemRenderer(Item item, int meta, String id) {
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
}
}
六、修改用來記錄模組資訊的info檔案
該檔案名為mcmod.info的位于…/src/main/resources目錄下,内容為:
[
{
"modid": "examplemod",
"name": "Example Mod",
"description": "Example placeholder mod.",
"version": "1.0",
"mcversion": "1.12.2",
"url": "",
"updateUrl": "",
"authorList": ["darkill"],
"credits": "The Forge and FML guys, for making this example",
"logoFile": "",
"screenshots": [],
"dependencies": []
}
]
- 内容分别為:
- modid:對應Reference中的MODID
- name:對應Reference中的NAME
- description:對模組内容的描述
- version:該模組目前的版本
- mcversion:模組使用的mc版本
- authorList:制作者名單
七、運作模組
現在這個模組充其量隻能算得上是一個空殼模組,沒有物品,沒有方塊,什麼都沒有。下面的張傑我們會逐一介紹,我們現在先講講如何運作模組。
if (you.usingIDE().equals(“eclipse”)) {
打開Main類。然後點這兒:
} else if (you.usingIDE().equals(“intellij IDEA”)) {
同樣打開Main類,先點這(或alt+u):
然後點這個(或alt+shift+f10):
然後再彈出的東西裡面點這個runClient:
} else { me.sugest(“用idea去吧”);}
然後我們就會發現mc自動運作了,打開左下角的Mods,就能找到我們寫的空殼模組了。