白夜的github倉庫[https://github.com/Wzhrdx/XenoAge](https://github.com/Wzhrdx/XenoAge)
在這章開始前我們先修改一下信息打開`build.gradle`找到
~~~
version = "1.0"
group = "com.yourname.modid"
archivesBaseName = "modid"
~~~
* **version = '1.0'** :模組的[版本號](https://baike.baidu.com/item/%E7%89%88%E6%9C%AC%E5%8F%B7/7674145?fr=aladdin)(版本的標識號,[Maven的版本號規則](https://cwiki.apache.org/confluence/display/MAVENOLD/Versioning),[語義化版本](https://semver.org/lang/zh-CN/))。
* **group = 'com.yourname.modid'** :這是[GroupID](https://blog.csdn.net/iteye\_19209/article/details/82655261?utm\_medium=distribute.pc\_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel\_param&depth\_1-utm\_source=distribute.pc\_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel\_param),請遵循[命名規則](https://docs.oracle.com/javase/specs/jls/se6/html/packages.html#7.7)([Maven](http://maven.apache.org/guides/mini/guide-naming-conventions.html))。
* **archivesBaseName = 'modid'** :這個關聯到你最后導出的Jar文件名,直譯過來是“歸檔基本名稱”。
了解了意思,大家就應該知道要填什么了吧!
>[info] version = ' [這里填模組版本號] '
> group = ' [填GroupID,要根據你的文件夾填,在工程文件夾(MDK)下的src\main\java下] '
> archivesBaseName = ' [填模組ID] '
> * **group**:java文件夾下你可以找到`com\example\examplemod`,這是默認的,但我建議重命名為`com\[作者名]\[模組ID]`(這個不是一個文件夾的名稱,在com下的example文件夾重命名為[作者名],重命名后這個文件夾下的examplemod重命名為模組ID),比如我填的是`com.tangguo.pe`(每個文件夾名之間用點隔開)。tangguo就是我的名字,pe就是我的模組ID的縮寫。那么我的文件夾名就是`com\tangguo\pe`
> * **模組ID是什么**:該模組的唯一標識符,不要填寫出英文字母與一些半角符號(_)外的其他字符(空格替換為下劃線)。必須全小寫字母且不得超過64個字符。</p>
> ***(除了模組的本地化外都不要寫中文與特殊字符)***
修改為
~~~
version = "1.0"
group = "com.wzhrdx.xenoage"
archivesBaseName = "xenoage"
~~~
在這篇教程里我將哪出我寫的模組的一部分進行講解
那么廢話不多說,我們開始正題,本人使用的是IDEA
# 新建一個主類
這里我們直接雙擊`ipr`文件,然后IDEA就會導入工程了,這里在`scr/main/java/`下新建一個包`com.wzrdx.XenoAge`
然后創建一個java類`XenoAge`,代碼如下
~~~java
package com.wzhrdx.XenoAge;
import net.minecraft.init.Blocks;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import org.apache.logging.log4j.Logger;
@Mod(modid = XenoAge.MODID, name = XenoAge.NAME, version = XenoAge.VERSION, acceptedMinecraftVersions = "1.12.2")
public class XenoAge {
public static final String MODID = "xenoage";
public static final String NAME = "Xeno Age";
public static final String VERSION = "1.0.0";
private static Logger logger;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event)
{
logger = event.getModLog();
}
@Mod.EventHandler
public void init(FMLInitializationEvent event)
{
// some example code
logger.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
}
}
~~~
* @Mod(modid = "XenoAge",name = "XenoAge",version="1.0")//modid是Mod的唯一標識符(ID),name是Mod的名稱,version是Mod的版本
* @Mod.EventHandler 則標識了三個FML事件,三個方法分別對應三個事件,調用proxy的對應方法。
* * 含有`FMLPreInitializationEvent`參數的方法(這里是`preInit`)在所有Mod初始化之前調用,**這時候應該加載配置文件,實例化物品和方塊,并注冊它們**。
* * 含有`FMLInitializationEvent`參數的方法(這里是`init`)用于該Mod的初始化,**這時候應該為Mod進行設置,如注冊合成表和燒煉系統,并且向其他Mod發送交互信息**。
* * 含有`FMLPostInitializationEvent`參數的方法(這里是`postInit`)在所有Mod都初始化之后調用,**這時候應該接收其他Mod發送的交互信息,并完成對Mod的設置**。
這樣我們就完成第一步了
# 完善你的mod信息
打開`src/main/resources/mcmod.info`
~~~json
[
{
"modid": "examplemod",
"name": "Example Mod",
"description": "Example placeholder mod.",
"version": "${version}",
"mcversion": "${mcversion}",
"url": "",
"updateUrl": "",
"authorList": ["ExampleDude"],
"credits": "The Forge and FML guys, for making this example",
"logoFile": "",
"screenshots": [],
"dependencies": []
}
]
~~~
修改如下
~~~json
[
{
"modid": "xenoage",
"name": "Xeno Age",
"description": "It's a 1.12.2 mod",
"version": "${version}",
"mcversion": "${mcversion}",
"url": "",
"updateUrl": "",
"authorList": ["wzhrdx"],
"credits": "The Forge and FML guys, for making this example",
"logoFile": "",
"screenshots": [],
"dependencies": []
}
]
~~~