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

零、写在前面

在这里插入图片描述

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 {

	@Instance
	public static Main instance;

	@SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.COMMON_PROXY_CLASS)
	public static CommonProxy proxy;

	@EventHandler
	public void preInit(FMLPreInitializationEvent event) {

	}

	@EventHandler
	public void init(FMLInitializationEvent event) {
		ModRecipes.init();
	}

	@EventHandler
	public 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 {

	@Override
	public 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类。然后点这儿:

eclipse

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

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

Run

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

在这里插入图片描述

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

在这里插入图片描述

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

  然后我们就会发现mc自动运行了,打开左下角的Mods,就能找到我们写的空壳模组了。
在这里插入图片描述
在这里插入图片描述

  • 33
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
好的,我会尽力回答你的问题。首先,你需要了解以下几个知识点: 1. Minecraft Forge:Minecraft Forge 是一个用于 Minecraft模组框架,可以帮助开发者更轻松地创建和管理模组。 2. Java 编程语言:Java 是一种广泛使用的面向对象编程语言,可以用于编写 Minecraft 模组。 3. Eclipse 集成开发环境:Eclipse 是一个流行的 Java 集成开发环境,可以帮助开发者更轻松地编写、调试和测试 Java 代码。 下面是一个简单的示例代码,它创建了一个新的方块,并且在玩家放置该方块时输出一条信息: ```java package com.example.examplemod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) public class ExampleMod { public static final String MODID = "examplemod"; public static final String VERSION = "1.0"; public static Block exampleBlock; @EventHandler public void init(FMLInitializationEvent event) { exampleBlock = new Block(Material.rock) .setHardness(2.0f) .setResistance(10.0f) .setUnlocalizedName("example_block") .setCreativeTab(CreativeTabs.tabBlock); GameRegistry.registerBlock(exampleBlock, "example_block"); GameRegistry.addShapelessRecipe(new ItemStack(exampleBlock), new ItemStack(Blocks.dirt)); GameRegistry.addSmelting(Blocks.stone, new ItemStack(exampleBlock), 0.1f); ItemBlock itemBlock = new ItemBlock(exampleBlock); itemBlock.setRegistryName(exampleBlock.getRegistryName()); GameRegistry.registerItem(itemBlock, itemBlock.getUnlocalizedName()); } } ``` 这段代码创建了一个名为 "example_block" 的新方块,它的贴图和材质与基岩块相同。在玩家放置该方块时,控制台会输出一条信息。该代码还注册了一个熔炉配方和一个无序合成配方,以及一个用于在创造模式下找到方块的创造标签。最后,该代码还注册了一个 ItemBlock,用于将方块添加到游戏中。 需要注意的是,这只是一个简单的示例代码,实际的 Minecraft 模组开发涉及到更多的知识和技能。如果你想深入了解 Minecraft 模组开发,建议你查阅相关的文档和教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九死九歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值