<基于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源码,后者存放要用到的资源,现在开始具体介绍:

  1. 首先,你需要一个用@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)
    { ...... }
    }
  2. 然后你需要对你的mod做一个描述,这部分内容在上图中的mcmod.info里面完成。里面的modid、name、description等等都是顾名思义的,填上就行。需要注意version、mcversion别动,看得出那是占位符吧,是由gradle搞定的,不需要你写。另外,如果想要输中文并正常显示的话,需要把文件编码调整为GBK而不是UTF-8,有点奇怪对吧,所以建议别用中文,除非你想让外国友人看到乱码。

  3. 现在你的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的组织结构的更多相关文章

  1. C# 线程手册 第三章 使用线程 实现一个数据库连接池(实战篇)

    在企业级软件开发过程中,为了改善应用程序的性能需要通常使用对象池来控制对象的实例化.例如,在我们每次需要连接一个数据库时都需要创建一个数据库连接,而数据库连接是非常昂贵的对象.所以,为了节省为每次数据 ...

  2. 《windows程序设计》第三章学习心得

    第三章是基于对一个windows窗口的学习,来达到对windows程序运行机制的理解. 从语言的角度看消息机制,Windows给程序发消息的本质就是调用"窗口过程"函数. Don' ...

  3. 第三章 C#循环与方法

    第一节1-For循环入门 语法: for(条件表达式) { 执行语句 } 练习: 第三章作业1.写一个程序打印100到200的值;2.写一个程序从10打印到1:3.写一个程序打印10到30之间的所有偶 ...

  4. JS复习:第三章&第四章

    第三章 一.把一个值转换成字符串的两种方法: 1.使用每个值都有的toString( )方法.这个方法唯一要做的就是返回相应值的字符串表现.例如: var age = 11 ; var ageAsSt ...

  5. 第三章 用SDK编译出第一个在Linux下的软件界面

    第三章 用SDK编译出第一个在Linux下的软件界面 先创建一个工程目录“mkdir project1”,进入目录,创建main.cpp文件,编写代码如下: 代码内容暂时可以先不理解,先让程序跑起来再 ...

  6. [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)

    本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章   创建一个分组报表 1.     建立数据模型 数据模型用于 ...

  7. [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】

    第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...

  8. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

  9. 《Metasploit魔鬼训练营》第三章

    p85 使用nmap探测目标主机的操作系统版本那里有问题,我探测不了NAT服务器的! msf > nmap -sT 10.10.10.254 [*] exec: nmap -sT 10.10.1 ...

随机推荐

  1. http请求的cookie

    Cookie的作用: Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取. HTTP请求,Cookie的使用过程 1.server通过HTTP Response中的& ...

  2. ArcGis(01)——地图切片以及发布底图服务

    ArcGis(01)——地图切片以及发布底图服务 环境 操作系统:win10_x64 Gis版本:Arcis server 10.2 准备 1.tif格式地图资源 2.Arcis server 10. ...

  3. RedHat9上安装jdk

    1.先在windows下载jdk:jdk-6-dlj-linux-i586.bin 2.用ftp上传给linux下 3.chmod 777 jdk-6-dlj-linux-i586.bin 4.将jd ...

  4. java保留两位小数的方法

    01.import java.math.BigDecimal; 02.import java.text.DecimalFormat; 03.import java.text.NumberFormat; ...

  5. js Math函数

    1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.fl ...

  6. JQUERY1.9学习笔记 之内容过滤器(四) parent选择器

    描述:选择至少包含一个子节点的元素(一个标签或是文本). 例:找出所有有子元素的td标签,包含文本. <!doctype html><html lang="en" ...

  7. [Python笔记]第二篇:运算符、基本数据类型

    本篇主要内容有:运算符 基本数据类型等 一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 6.身份运算 7.位运算 8.运算符优先级 二.基本数据类型 1.整数:int ...

  8. JS之路——数组对象

    String字符串对象 concat() 返回一个由两个数组合并组成的新数组 join() 返回一个由数组中的所有元素连接在一起的String对象 pop() 删除数组中最后一个元素 并返回该值 pu ...

  9. spring xml配置标签详解

    <!-- 指定类的名称 在对bean进行定义时,除了使用id属性来指定名称之外,为了提供多个名称,可以使用alias标签来指定. --> <alias name="&quo ...

  10. CLOUDSTACK接管VCENTER,意外频出,但最终搞定

    没办法,第一次吃螃蟹,总是经常住. 还好,我有一颗不肯媚俗的心~~ 但二级存储,和 存储的性能,也必须纳入考虑范围了.