欢迎来到我的世界玩家社区Wiki!如需参与编辑,请每一位编辑者务必仔细阅读Wiki方针
全站通知:

教程/模组开发/我的世界1.12.2Forge模组开发

阅读

    

2021-02-08更新

    

最新编辑:自己在家战争

阅读:

  

更新日期:2021-02-08

  

最新编辑:自己在家战争

来自我的世界玩家社区WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
大78-aa
我是绵羊Yang_g
原版-书与笔.png
本页面内容并不完整,可能有错误或者遗漏的地方
我的世界玩家社区WIKI 欢迎您帮助我们完善这个页面

介绍

本教程用来帮助您学习我的世界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
(2)下载完成后,可以看到以下内容:

配置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"));
    }
    
    
}

方块

实体

命令

物品&方块&实体模型

药水效果

粒子特效