700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Minecraft Mod 开发:2-Hello Minecraft Mod World!

Minecraft Mod 开发:2-Hello Minecraft Mod World!

时间:2023-09-14 19:02:31

相关推荐

Minecraft Mod 开发:2-Hello  Minecraft Mod World!

这节我们来在Minecraft日志中输出“Hello, Minecraft Mod World!”

2.1.新建一个主类

新建一个包(这里是com.rycb.etech),并在其中新建一个类(强烈建议这个类的类名与你的Mod名称相同),这就是Mod的主类了。

src/main/java/com/rycb/etech/EasyTech.java:

package com.rycb.etech;import com.rycb.etech.init.ModRecipes;import com.rycb.monProxy;import com.rycb.etech.tabs.ETechTab;import com.rycb.etech.util.Reference;import com.rycb.etech.world.ModWorldGen;import net.minecraft.creativetab.CreativeTabs;import net.mon.Mod;import net.mon.SidedProxy;import net.mon.event.FMLInitializationEvent;import net.mon.event.FMLPostInitializationEvent;import net.mon.event.FMLPreInitializationEvent;import net.mon.registry.GameRegistry;/*** @author RYCBStudio*/@Mod(modid = Reference.MOD_ID, name = Reference.NAME, version = Reference.VERSION, acceptedMinecraftVersions = Reference.MC_VERSION)public class EasyTech {@Mod.Instance(Reference.MOD_ID)public static EasyTech instance;@Mod.EventHandlerpublic void preInit(FMLPreInitializationEvent event) {proxy.preInit(event);}@Mod.EventHandlerpublic void Init(FMLInitializationEvent event) {proxy.Init(event);}@Mod.EventHandlerpublic void postInit(FMLPostInitializationEvent event) {proxy.postInit(event);}@SidedProxy(clientSide = Reference.PROXY_CLIENT, serverSide = Reference.PROXY_SERVER)public static CommonProxy proxy;}

package,import显而易见,这里就不多赘述。

(其实package,import都不用打,IDEA会自动导入的)

读到这里,你可能会发现,在这些代码中,出现了Reference。这个是什么,后面会慢慢讲述。

modid指的是该Mod的唯一标识符name指的是该Mod的名称version指的是该Mod的版本号acceptedMinecraftVersions指的是Mod接受的Minecraft版本,当版本不对时,FML会优雅地抛出一个错误而不是继续加载这个Mod

@instance注解的作用是将生成的该Mod的实例,注册到对应的Mod的id,同时,也可以访问其他Mod的id对应的实例,当然,这里的id要和本Mod的id相同

2.2.来点代理!

众所周知,Minecraft Mod有客户端(Client)和服务端(Server)两种使用方式,而两种方式的差异足够大得使Mod需要采用两种初始化方式,而两种方式的差异又足够小得使Mod没有必要制作客户端和服务端两个版本。这时代理便起到了区别两种初始化方式的作用。在单机运行时,Minecraft也会生成一个本地服务端。服务端和客户端之间的差异十分复杂,甚至很多都只是经验之谈,然而有一点往往是通用的,服务端的代码,往往客户端都会执行

这时,主类中的

@SidedProxy(clientSide = "com.rycb.etech.proxy.ClientProxy", serverSide = "com.rycb.monProxy")public static CommonProxy proxy;

就有用了。

Forge会在加载Mod的时候自动使用上面的类名对这个代理进行实例化。(⚠注意⚠:因为这里用到的类不是引用的,而是以字符串形式存在,故若你要修改代理的位置,请不要忘记修改这个!)(有一次我就是因为这个Debug了半天)

新建包proxy,并新建一个类CommonProxy

src/main/java/com/rycb/etech/proxy/CommonProxy.java

package com.rycb.etech.proxy;import net.minecraft.item.Item;import net.mon.event.FMLInitializationEvent;import net.mon.event.FMLPostInitializationEvent;import net.mon.event.FMLPreInitializationEvent;/*** @author RYCBStudio* Create Time: /1/28* Location:Easy-Tech/com.rycb.etech.proxy/CommonProxy.java* Use the IntelliJ IDEA*/public class CommonProxy {public void preInit(FMLPreInitializationEvent event) {//TODO}public void Init(FMLInitializationEvent event) {//TODO}public void postInit(FMLPostInitializationEvent event) {//TODO}public void registerItemRender(Item item, int meta, String id) {//TODO}}

也是在这个包下,再新建一个类ClientProxy,并继承类CommonProxy

package com.rycb.etech.proxy;import net.minecraft.client.renderer.block.model.ModelResourceLocation;import net.minecraft.item.Item;import net.minecraftforge.client.model.ModelLoader;import net.mon.event.FMLInitializationEvent;import net.mon.event.FMLPostInitializationEvent;import net.mon.event.FMLPreInitializationEvent;/*** @author RYCBStudio* Create Time: /1/28* Location:Easy-Tech/com.rycb.etech.proxy/ClientProxy.java* Use the IntelliJ IDEA*/public class ClientProxy extends CommonProxy{/*@Overridepublic void preInit(FMLPreInitializationEvent event){super.preInit(event);}@Overridepublic void Init(FMLInitializationEvent event){super.Init(event);}@Overridepublic void postInit(FMLPostInitializationEvent event){super.postInit(event);}*/@Overridepublic void registerItemRender(Item item, int meta, String id) {ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));}}

(这里用块注释(/**/之间的部分)注释掉了的代码是可用可不用的,可以根据需要酌情添加)

2.3.Mod索引文件(Reference.java)

看了这么久,你是否还记得主类中的Reference呢?别急,我们马上实现它。

com.rycb.etech包(即根目录)下新建包,名为util,并继续新建一个类Reference

src/main/java/com/rycb/etech/util/Reference.java

package com.rycb.etech.util;/*** @author RYCBStudio/Java Department* <p>Create Time: /7/29 16:14</p>* <p>Use the IntelliJ IDEA</p>* <p>Location: EasyTech/com.rycb.etech.util/Reference.java</p>* <h1><center>Reference</center></h1>*/public class Reference {public static final String MOD_ID = "etech";public static final String NAME = "Easy Tech";public static final String VERSION = "0.0.1";public static final String MC_VERSION = "[1.12.2]";public static final String PROXY_CLIENT = "com.rycb.etech.proxy.ClientProxy";public static final String PROXY_SERVER = "com.rycb.monProxy";}

这下再回到EasyTech.java(主类),导入标红的地方就可以啦~

2.4.完善你的Mod信息

一个Mod的信息在src/main/resources/mcmod.info中,填写一些信息即可。

比如,本教程的mcmod.info是这样的:

src/main/resources/mcmod.info

[{"modid": "etech","name": "Easy Tech","description": "A simple, convenient, useful and surrealistic industrial mod","version": "${version}","mcversion": "${mcversion}","url": "/RYCBStudio/EasyTech","updateUrl": "","authorList": ["RYCBStudio"],"logoFile": "Etech_logo.png","screenshots": [],"dependencies": []}]

modid前面已说过,这里就不多赘述。name是Mod的名称,比如这里就是Easy Tech(简单科技)description是Mod的描述,比如这里就是A simple, convenient, useful and surrealistic industrial mod(一个简单、方便、有用且超现实的工业Mod)version是你Mod的版本,不建议填写,但若出现以下这种情况,还是建议填写:mcversion是你的Mod所适用的Minecraft版本,这个不应修改,因为Gradle在构建时会自动注入url是你的Mod的网站,一般设置为源码存放站点(适用于开源Mod,比如Github链接)或官方网站(适用于闭源Mod和比较大型的Mod)updateUrl是你的Mod检查更新的网址,若是开源Mod又将源码存放于Github上,就可以填写成/你的名字或组织名字/你自定义的项目名称/tagsauthorList是你的Mod的作者,比如这里就是RYCBStudio一般未被修改的mcmod.info里面还会有credits的键,这是荣誉(自己去翻译吧),这其实没什么用,删掉也不会报错logoFile是你的Mod的Logo文件存放地址,比如这里就是Etech_logo.png,若你想把它放在不同的文件夹,请使用[相对路径]screenshots是你的Mod的截图dependencies是你的Mod的依赖,若是独立Mod,不写即可。

2.5.Hello, Minecraft Mod World!

最后,为了验证我们的Mod是否真的配置好了,我们就在Minecraft控制台中输出“Hello, Minecraft Mod World!”这句话吧!

在你的主类中添加这样一条语句即可:

src/main/java/com/rycb/etech/EasyTech.java(节选):

@Mod.EventHandlerpublic void Init(FMLInitializationEvent event) {System.out.println("Hello, Minecraft Mod World!");proxy.Init(event);}

IDEA中直接打sout即可。

那么,代码写好了,怎么运行呢?

很简单,在IDEA的界面左上角有一个绿色的锤子,旁边就是运行游戏。

结果如下:(找不到的可以在日志中按Ctrl+F查找)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。