天天看點

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

零、寫在前面

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

1.看這個系列需要什麼前提?

  • ① 對Minecraft有一定的了解,知道模組、方塊、物品、實體等名詞的具體含義。
  • ② 對java程式設計有一定了解,至少要學到容器。
  • ③ 會編寫json代碼,(其實不會也可以,因為這個比較簡單,現敲現學都沒問題,尤其對于會JavaScript的同學而言。可以通過這個連結進行學習JSON菜鳥教程)
  • ④ 安裝并配置好了forge1.12.2(不知道怎麼弄的可以參考這個forge安裝教程[IntelliJ IDEA])

2.我為什麼要開這個系列的坑?

  • ① 模組開發比較繁瑣,雖然不像算法那樣要動腦子想,但是這個包裡放這個類,那個包裡放那個類,哪個目錄下又要放哪個json或者png檔案。真的把人弄得……用陝西話講,木亂的。我把這些東西寫到部落格裡,也算是給自己加強記憶。
  • ② 網絡上關于模組開發的教學資料真的非常少,畢竟這玩意又不能拿去考研秋招或者是校招。沒有補課機構願意出教學,也沒有太多人願意去學。于是乎學習資料便很少了。那我就在這裡把我自己學習的經曆擺出來,後來者也能走走捷徑。

3.最後一點

  沒啥可說的了其實,但是隻寫兩點太難看了,也就是說這一點是用來湊數的。廢話不多說了,我們開整。

二、建包

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  放mod的java檔案的包要放在…/src/main/java這個目錄裡面,一般都起名為com.你的Minecraft中用的名字.你這個mod的名字。例如com.darkill.examplemod 。

  然後再建兩個包,分别為com.darkill.examplemod.util和com.darkill.examplemod.proxy和。結構如下(其他的包暫時不用管,也不用加入):

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

三、寫用來做參考檔案的Reference類

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  在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檔案運作的入口

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  在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

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  我們在第三步寫的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檔案

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的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:制作者名單

七、運作模組

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  現在這個模組充其量隻能算得上是一個空殼模組,沒有物品,沒有方塊,什麼都沒有。下面的張傑我們會逐一介紹,我們現在先講講如何運作模組。

if (you.usingIDE().equals(“eclipse”)) {

  打開Main類。然後點這兒:

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

} else if (you.usingIDE().equals(“intellij IDEA”)) {

  同樣打開Main類,先點這(或alt+u):

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  然後點這個(或alt+shift+f10):

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

  然後再彈出的東西裡面點這個runClient:

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組

} else { me.sugest(“用idea去吧”);}

  然後我們就會發現mc自動運作了,打開左下角的Mods,就能找到我們寫的空殼模組了。

【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組
【Minecraft java edition 模組開發】(一):實作一個簡單的模組零、寫在前面二、建包三、寫用來做參考檔案的Reference類四、寫Main類 — mod檔案運作的入口五、編寫ClientProxy與CommonProxy六、修改用來記錄模組資訊的info檔案七、運作模組