教程/模组开发/我的世界1.12.2Forge模组开发
阅读
2021-02-08更新
最新编辑:自己在家战争
阅读:
更新日期:2021-02-08
最新编辑:自己在家战争
介绍
本教程用来帮助您学习我的世界Forge的模组开发,但Forge涉及的知识点过多,本人并不能全部了解,希望读者能够发挥自己的想象学习。
要求
1.要具有一定量的java编程知识,如果您对java并不是很熟悉或者对于java的知识点有些遗忘,请先学习或复习一下关于java编程的知识点。
2.非常熟悉Minecraft这款游戏,如果不熟悉Minecraft,建议您先玩一玩游戏。(要来看这个教程的,想必对Minecraft非常了解吧)
3.要具有耐心,不要三天打鱼两天晒网。
部署开发环境
JDK下载
查看 |
---|
(1)打开浏览器,进入网站 https://www.oracle.com/java/technologies/javase-downloads.html ,下拉找到Java SE 8,如图所示: (2)进入网站找到Java SE 8后,点击 JDK Download 进入JDK下载界面,如图所示: (3)进去新页面后,下拉找到下载列表,如图所示: (4)在下载列表中,要根据计算机硬件和系统选择适当的版本进行下载。本人的电脑系统是64位,所以我选择下载jdk-8u271-windows-x64.exe。 |
JDK安装
查看 |
---|
(1)双击刚刚下载的安装文件,会弹出欢迎对话框,点击‘下一步’,如图所示: (2)在弹出的对话框中,能够选择安装的功能组件,建议选择默认设置,如图所示: (3)安装文件夹选择默认,无需更改 (4)点击‘下一步’开始安装JDK。在安装的中途会自动安装JRE,点击‘下一步’即可,如图所示: (5)安装完成关闭。 |
配置环境变量
查看 |
---|
(1)右键‘计算机’图标,点击‘属性’,弹出属性对话框,点击‘高级系统设置’,打开‘高级’栏,单击‘环境变量按钮’,如图所示: (2)单击‘环境变量按钮’,将会弹出‘环境变量对话框’,单击‘系统变量’栏下的‘新建’按钮,创建新的系统变量,如图所示: (3)弹出‘新建系统变量’对话框,输入变量名“JAVA_HOME”和变量值“C:\Program Files\Java\jdk1.8.0_271”(如果修改安装路径,则输入安装路径),如图所示: (4)接下来在‘系统变量’中找到“CLASSPATH”,没有就“新建”,变量名为“CLASSPATH”变量值“.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”,如图所示: (5)找到Path,对其双击进行编辑,加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”,如图所示 (6)最后打开cmd,输入java验证环境是否搭建成功。如图所示: |
下载安装Eclipse
查看 |
---|
(1)进入网站 https://www.eclipse.org/ ,点击Download按钮,进入界面下载,如图所示: (2)打开下载的安装包,进入主界面,选择安装第一个IDE,根据引导进行安装,如图所示: |
下载安装IDEA
查看 |
---|
(1)进入IDEA的官网 https://www.jetbrains.com/idea/ 进入如图所示的网页: (2)点击 "Download" 按钮进入下载界面,如图所示: (3)下载 “Community” 版本的IDEA,如图所示 (4)下载完成后,点击安装,安装过程中勾选如图所示内容,即可: |
下载安装Forge
查看 |
---|
(1)下载Forge离线包:由于外网下载Forge速度慢,所以到大佬帖子里下载离线包:https://www.mcbbs.net/forum.php?mod=viewthread&tid=896542
|
配置Forge工作环境
新建Mod开发项目
新建IDEA项目
Mod主类
添加主类
创建完Mod开发项目后,新建一个类来作为Mod主类。 然后在主类前添加注释
@Mod( modid="模组的唯一id", name="模组的名称", verison="模组版本" ) public class MyMod{ @Mod.Instance public static MyMod INSTANCE; //省略部分代码 }
这是模组主类的基本格式。
但是主类我更倾向于以下这样编码,因为我们在接下来的Mod开发中,我们会频繁地用到modid,接下来我也会用这个编码来写mod开发教程。
@Mod( modid = MODID, name = NAME, version = VERSION ) public class ExampleMod{ public static final String MODID="mymod"; public static final String NAME="ExampleMod"; public static final String VERSION ="1.0"; @Mod.Instance public static MyMod INSTANCE; }
添加入口方法
有了入口类,怎么能缺少入口方法呢?那么接下来开始添加入口方法。
Mod加载分为六个阶段,每个阶段都有一个事件,
本次教程只介绍四个常用事件:(按照时间的先后顺序排列):
•FMLPreInitializationEvent
•FMLInitializationEvent
•FMLInterModComms.IMCEvent
•FMLPostIntializationEvent
接下来我们在主类订阅这四个事件:
@Mod( modid = MODID, name = NAME, version = VERSION ) public class ExampleMod{ public static final String MODID="mymod"; public static final String NAME="ExampleMod"; public static final String VERSION ="1.0"; @Mod.Instance public static final MyMod INSTANCE; @Mod.EventHandler public static void PreLoad(FMLPreInitializationEvent event){ //该方法负责监听预初始化事件,并可以用event对象调用相应的方法完成一些工作 } @Mod.EventHandler public static void InitLoad(FMLInitializationEvent event){ //该方法负责监听初始化事件,并可以用该事件对象调用相应方法完成一些工作,你可以在这里注册你的合成表 } @Mod.EventHandler public static void PostLoad(FMLPostIntializationEvent event){ //该方法负责监听后初始化事件,并可以用该事件对象调用相应方法完成一些工作 } }
事件
物品
第一个物品
我们先要用RegisteryEvent.Resister<Item>事件注册我们的第一个物品。 具体代码如下:
package com.example.RegisterItem; import com.example.examplemod.ExampleMod; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.Map; @Mod.EventBusSubscriber() public class RegisterItem { public static final CreativeTabs EXAMPLE_CREATIVE_TAB = new CreativeTabs("example_tab") { @Override public ItemStack getTabIconItem() { return new ItemStack(Items.DIAMOND); } }; public static Map<String,Item> ItemMap; @SubscribeEvent public static void registerItem(RegistryEvent.Register<Item> event){ event.getRegistry().registerAll(new Item().setCreativeTab(EXAMPLE_CREATIVE_TAB).setRegistryName("examplemod:first_item")); } }