第三章:真正弄清楚一个Mod的组织结构
<基于1.8 Forge的Minecraft mod制作经验分享>
首先看看一个mod的文件结构,懂Java的应该都看得懂:
src/main/
--java/com.xxxxxxxx.xxx/
----block/
----item/
......
----xxx.java
--resources/assets/xxx/
----blockstates/
----lang/
----models/
----textures/
----mcmod.info
可以看到在main文件夹下,有java、resources两个文件夹,前者放Java源码,后者存放要用到的资源,现在开始具体介绍:
首先,你需要一个用@Mod(modid = xxxx, version = xxxx)这个注解标识的Java主类作为入口,对应上图的xxx.java。Forge会根据这个注解识别到它。modid是你的mod的Id,即一个唯一标识你的mod的字符串,记得小写,version是版本号,一个形如1.0.0的String。一般建议把这两个String作为常量定义主类里,方便随后的调用。
然后,你需要用@EventHandler注解标注几个方法,使这个主类能够真正的在Forge运行时做一些事情。这个注解是根据其标注的方法的参数来工作的,这里有三个基本的参数:FMLPreInitializationEvent、FMLInitializationEvent、FMLPostInitializationEvent。这三个参数其实是三个事件,Forge会在MC开始时依次执行这三个事件。关于它们的具体分工我发现很难说清楚,还是在之后用到的时候再细说吧。
在我的斗罗大(大)陆(坑)mod里,主类是长这样的:
@Mod(modid = DouroMod.MODID, version = DouroMod.VERSION)
public class DouroMod
{
/**ModInfo*/
public static final String MODID = "douromod";
public static final String VERSION = "0.0.0"; ......
...... @EventHandler
public void preInit(FMLPreInitializationEvent event)
{ ...... } @EventHandler
public void init(FMLInitializationEvent event)
{ ...... } @EventHandler
public void postInit(FMLPostInitializationEvent event)
{ ...... }
}然后你需要对你的mod做一个描述,这部分内容在上图中的mcmod.info里面完成。里面的modid、name、description等等都是顾名思义的,填上就行。需要注意version、mcversion别动,看得出那是占位符吧,是由gradle搞定的,不需要你写。另外,如果想要输中文并正常显示的话,需要把文件编码调整为GBK而不是UTF-8,有点奇怪对吧,所以建议别用中文,除非你想让外国友人看到乱码。
现在你的mod主类已经建立,并且用@Mod申明了mod的Id和Version,也为你的mod添加了描述信息。但你还需要在build.gradle里面同步的修改它们。在工程目录下找到build.gradle并打开,可以看到里面其实写的很详细,你需要改什么,不应该动什么。关键是把version = ""里面改为你的mod版本号,group = ""里面写你的包名com.xxxxxxxx.xxx,archivesBaseName = ""里面写mod的Id。
好了,运行试试看,在mod选项里是不是已经看到了你的mod以及的描述信息了呢?我的Github链接https://github.com/zhengxiaoyao0716/DouroMod,快来一起做啊
第三章:真正弄清楚一个Mod的组织结构
第三章:真正弄清楚一个Mod的组织结构的更多相关文章
- C# 线程手册 第三章 使用线程 实现一个数据库连接池(实战篇)
在企业级软件开发过程中,为了改善应用程序的性能需要通常使用对象池来控制对象的实例化.例如,在我们每次需要连接一个数据库时都需要创建一个数据库连接,而数据库连接是非常昂贵的对象.所以,为了节省为每次数据 ...
- 《windows程序设计》第三章学习心得
第三章是基于对一个windows窗口的学习,来达到对windows程序运行机制的理解. 从语言的角度看消息机制,Windows给程序发消息的本质就是调用"窗口过程"函数. Don' ...
- 第三章 C#循环与方法
第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...
- JS复习:第三章&第四章
第三章 一.把一个值转换成字符串的两种方法: 1.使用每个值都有的toString( )方法.这个方法唯一要做的就是返回相应值的字符串表现.例如: var age = 11 ; var ageAsSt ...
- 第三章 用SDK编译出第一个在Linux下的软件界面
第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
- [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】
第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- 《Metasploit魔鬼训练营》第三章
p85 使用nmap探测目标主机的操作系统版本那里有问题,我探测不了NAT服务器的! msf > nmap -sT 10.10.10.254 [*] exec: nmap -sT 10.10.1 ...
随机推荐
- DOM中的node与element的区别
先看document的两个常见method. document.createTextNode Constructor: Text document.createElement Constructor: ...
- Linux shell日常命令和技巧
转自:http://www.vaikan.com/linux-shell-tips-and-tricks/ 原文:http://www.techbar.me/linux-shell-tips/ 使用L ...
- qt实现类似QQ伸缩窗口--鼠标事件应用
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38678305,qq:1269122125. 上一章 ...
- Nginx配置文件nginx.conf详细说明
Nginx配置文件nginx.conf详细说明 #worker_processes 8; #worker_cpu_affinity 00000001 00000010 00000100 0000100 ...
- JavaScript设计模式之工厂模式
一.工厂模式概念 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子类可以重写接口方法以便创建的时候指定自己的对象类型(抽象工厂). 这个模 ...
- 浅析a标签的4个伪类 .
关于伪类,大家最熟悉的还是a标签的4个伪类::link 有链接属性时:visited 链接地址已被访问过:active 被用户激活(在鼠标点击与释放之间发生的事件):hov ...
- IOS--UIAlertView的使用方法详细
IOS--UIAlertView的使用方法详细 // UIAlertView的常用方法 // 标准样式 UIAlertView *oneAlertView = [[UIAlertView allo ...
- 获取上海地区AQI质量数据Python脚本
一个获取上海地区AQI质量的Python脚本 https://github.com/yanyueoo7/Raspberrypi/blob/master/GetPmData_Shanghai.py #! ...
- 一】Maven入门
一.简单pom.xml配置文件解析 <?xml version="1.0" encoding = "utf-8"?> <project xml ...
- SCALA表达示简例
作了解,感觉比一般的差距有点大哟. package com.hengheng.scala class HelloScala { } object HelloScala { def main(args: ...