零、写在前面

1.看这个系列需要什么前提?

  • ① 对Minecraft有一定的了解,知道模组、方块、物品、实体等名词的具体含义。
  • ② 对java编程有一定了解,至少要学到容器。
  • ③ 会编写json代码,(其实不会也可以,因为这个比较简单,现敲现学都没问题,尤其对于会JavaScript的同学而言。可以通过这个链接进行学习JSON菜鸟教程)
  • ④ 安装并配置好了forge1.12.2(不知道怎么弄的可以参考这个forge安装教程[IntelliJ IDEA])

2.我为什么要开这个系列的坑?

  • ① 模组开发比较繁琐,虽然不像算法那样要动脑子想,但是这个包里放这个类,那个包里放那个类,哪个目录下又要放哪个json或者png文件。真的把人弄得……用陕西话讲,木乱的。我把这些东西写到博客里,也算是给自己加强记忆。
  • ② 网络上关于模组开发的教学资料真的非常少,毕竟这玩意又不能拿去考研秋招或者是校招。没有补课机构愿意出教学,也没有太多人愿意去学。于是乎学习资料便很少了。那我就在这里把我自己学习的经历摆出来,后来者也能走走捷径。

3.最后一点

  没啥可说的了其实,但是只写两点太难看了,也就是说这一点是用来凑数的。废话不多说了,我们开整。

二、建包

  放mod的java文件的包要放在…/src/main/java这个目录里面,一般都起名为com.你的Minecraft中用的名字.你这个mod的名字。例如com.darkill.examplemod 。

  然后再建两个包,分别为com.darkill.examplemod.util和com.darkill.examplemod.proxy和。结构如下(其他的包暂时不用管,也不用加入):

三、写用来做参考文件的Reference类

  在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文件运行的入口

  在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 {@Instancepublic static Main instance;@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.COMMON_PROXY_CLASS)public static CommonProxy proxy;@EventHandlerpublic void preInit(FMLPreInitializationEvent event) {}@EventHandlerpublic void init(FMLInitializationEvent event) {ModRecipes.init();}@EventHandlerpublic void postInit(FMLPostInitializationEvent event) {}}

五、编写ClientProxy与CommonProxy

  我们在第三步写的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 {@Overridepublic void registerItemRenderer(Item item, int meta, String id) {ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));}}

六、修改用来记录模组信息的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:制作者名单

七、运行模组

  现在这个模组充其量只能算得上是一个空壳模组,没有物品,没有方块,什么都没有。下面的张杰我们会逐一介绍,我们现在先讲讲如何运行模组。

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

  打开Main类。然后点这儿:

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

  同样打开Main类,先点这(或alt+u):

  然后点这个(或alt+shift+f10):

  然后再弹出的东西里面点这个runClient:

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

  然后我们就会发现mc自动运行了,打开左下角的Mods,就能找到我们写的空壳模组了。

【Minecraft java edition 模组开发】(一):实现一个简单的模组相关推荐

  1. 电脑用java怎么编程,使用java编程从0到1实现一个简单计算器

    学习编程语言最重要的就是实践.很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践.那么,今天我们一起来动手做一个小计算器,回顾下学习过的知识,同时这也是很多大学计算机专 ...

  2. java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...

    自己实现了一个简单的LinkedList /** * Create by andy on 2018-07-03 11:44 * 根据 {@link java.util.LinkedList}源码 写了 ...

  3. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子

    我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置D ...

  4. java服务器向客户端发消息_java一个简单的客户端向服务端发送消息

    java一个简单的客户端向服务端发送消息 客户端代码: package com.chenghu.tcpip; import java.io.IOException; import java.io.Ou ...

  5. java如何做网页_java怎么做一个简单网页?网页包括什么?

    学了java程序之后,大家就可以将这些运用到生活中去,比如做一个简单的网页.正好也可以检测自己学了怎么样,那么接下来,我们就来给大家讲解一下这方面的内容. 用Java语言编写实现一个简单的WEB浏览器 ...

  6. 多人群聊聊天室java_#java 聊天室(一)—— 实现一个简单Telnet多人群聊聊天室...

    #java    聊天室(一)--  实现一个简单Telnet多人群聊聊天室 学习本文须要先准备的知识点:队列(或数组).类与对象.线程.InputStream和OutputStream的使用.jav ...

  7. 用java的事件监听机制实现一个简单的画板应用:通过选择图形按钮和颜色按钮来画出自己想画的图形:直线、空心矩形、圆形、折线、多边形、圆角矩形、弧线、曲线、喷枪

    今天做一个简单的画板,完整代码附在文章末尾处. - 功能:通过选择图形按钮和颜色按钮来画出自己想画的图形. - 界面展示: - 思路: 1.做一个可视化界面:创建JFrame对象,并设置Title.S ...

  8. iPhone开发初试锋芒 一个简单的iPhone播放器 --紫枫凝潇烟

    早就打算开始iPhone下的应用,最近才得以闲暇正式开始,先看了一本objective-c 2.0的书,然后动手写了一个简单的播放器熟悉一下iPhone开发.上几张截图留作纪念. Xcode是主要开发 ...

  9. java qq ui界面_java swing 创建一个简单的QQ界面教程

    记录自己用java swing做的第一个简易界面. LoginAction.java package com.QQUI0819; import javax.swing.*; import java.a ...

最新文章

  1. 文巾解题 LCP 07. 传递信息
  2. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
  3. IBM AIX服务器分区之间迁移IO设备以迁移HBA卡为例
  4. android 日期选择器
  5. Linux批量删除文件
  6. (IT)这个行当里你应该知道的10个小秘密
  7. mysql面试必会6题经典_经典sql面试题及答案第7期
  8. STM32 HAL库 时钟芯片RX8025T IIC的读写操作,入过的坑
  9. linux 桌面背景图,linux常用命令桌做成的桌面图片,可当背景图片
  10. der解码规则_使用openssl进行asn1结构的der数据解码
  11. Navicat建数据库时字符集与排序规则说明
  12. 安卓手机开机动画bootanimation.zip文件制作以及注意事项
  13. 【解决】iptables -P INPUT DROP后无法联网
  14. 【林达华】How To Get A Solution
  15. 华为数通笔记-ISIS基础
  16. GitHub 近 70K 星,命令行的艺术!
  17. (完结项目)fpga采集双路CCD摄像头1000帧图像上传到上位机显示
  18. 谷歌Android 9 Pie介绍及新功能
  19. windows开源工具大全
  20. 搜狗搜索:与网站权重相关的8个知识点

热门文章

  1. SQL无法修改数据类型-解决方法
  2. 就医160_健康160(原就医160)
  3. scatter函数绘制散点图——MATLAB
  4. 页面跳转与打开新窗口的方法---前端
  5. c语言小明今年16岁,五一C语言作业
  6. 王国纪元显示服务器无回应,王国纪元常见问题解答_王国纪元常见问题汇总_牛游戏网...
  7. NXP iMX7 异构双核心开发调试
  8. 关于 access 中如何使用 vba语言 判断表是否存在的两种方法
  9. 在c语言中sqrt如何用,sqrt在c语言中怎么用?
  10. c语言输入输出语句题目,C语言题目解答8程序填空,不要改变与输入输出有关的语句输入一个 爱问知识人...