多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
白夜的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": [] } ] ~~~