🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# :-: 主类,代理和Mod信息 ***** 在src.main.java里面创建一个包net.你的名称.Mod名称如net.xiaobang.bm或者com.你的名称.Mod名称如com.xiaobang.bm,并在其中新建一个类(强烈建议类名称与mod名称相符,当然其他也好),那么这就是你Mod的主类了。 把以下代码抄进mod的主类,下列代码中的//代表注释,有解释说明的作用,;符合代表一条语句的结束 `src/main/java/net/xiaobang/bm/bm.java`(这个不要抄,这是文件位置) ~~~java package net.xiaobang.bm;//package是导入包,这个你们应该都知道把(汗颜.jpg),后面是包的位置,自己写你自己包的位置啊 import net.xiaobang.bm.common.CommonProxy;//这个类暂时不存在先不要管它 import cpw.mods.fml.common.Mod;//import是导入类或导入整个包,这个也该都知道把,后面也是位置 import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @Mod(modid = "bm",name = "bm",version="1.0")//modid是Mod的唯一标识符(ID),name是Mod的名称,version是Mod的版本 public class bm{//主类 @Instance//前面有加@的是注解,这个作用是将生成该mod的实例注册到对应mod的id里面,也可以访问其他mod的,要注意这里的id和此mod的id相同 public static bm instance = new bm(); @EventHandler//在Forge找到主类后,会检查主类含有这个注解的函数,并通过函数的参数类型判断应该何时调用这些函数 public void preInit(FMLPreInitializationEvent event){//在所有mod初始化之前调用此函数,这里应该加载配置文件,实例化方块和物品,并注册它们 } @EventHandler public void Init(FMLInitializationEvent event){//在此mod初始化时调用此函数,这里应该注册合成表和烧练系统,并向其他mod发送交互信息,注意不要在这里注册方块和物品等等操作,forge支持在preInit函数执行 } @EventHandler public void postInit(FMLPostInitializationEvent event){//在所有mod初始化后调用此函数,这里应该接收其他mod发送的交互信息,并完成设置mod } } ~~~ 代理?我们知道,Minecraft(我的世界)有客户端和服务端两种使用方式,两种方式既足够大又足够小,使得Mod需要采取两种初始化方式,两种方式又使得Mod没必要制作客户端和服务端两种版本。这时候代理便起到了很大的作用,它会区别两种初始化方式。在单机客户端中,Minecraft也会生成一个本地服务端。客户端和服务端之间的差异十分复杂,其中服务端的代码,客户端往往会执行。 接下来在主类添加以下代码: `src/main/java/net/xiaobang/bm/bm.java` ~~~java @SidedProxy(clientSide = "net.xiaobang.bm.client.ClientProxy", //ClientProxy待会创建在src/main/java/net/xiaobang/bm/client目录下 serverSide = "net.xiaobang.bm.common.CommonProxy")//CommonProxy待会创建在src/main/java/net/xiaobang/bm/common目录下 public static CommonProxy proxy; ~~~ 当Forge在加载Mod的时候会自动使用上面的类名对这个代理进行实例化。 接下来我们要创建ClientProxy和CommonProxy 新建包net.xiaobang.bm.common,并在里面新建类CommonProxy: `src/main/java/net/xiaobang/bm/common/CommonProxy.java` ~~~ package net.xiaobang.bm.common; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; public class CommonProxy { public void preInit(FMLPreInitializationEvent event) { } public void init(FMLInitializationEvent event) { } public void postInit(FMLPostInitializationEvent event) { } } ~~~ 再新建包net.xiaobang.bm.client,并在里面新建类ClientProxy,并继承类CommonProxy: `src/main/java/net/xiaobang/bm/client/ClientProxy.java` ~~~ package net.xiaobang.bm.client; import net.xiaobang.bm.common.CommonProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; public class ClientProxy extends CommonProxy { @Override//声明该方法覆盖了父类方法,如果(拼写错误等)没有覆写,编译器会报错 public void preInit(FMLPreInitializationEvent event) { super.preInit(event);//调用父类的方法 } @Override public void init(FMLInitializationEvent event) { super.init(event); } @Override public void postInit(FMLPostInitializationEvent event) { super.postInit(event); } } ~~~ 主类的调整(不要直接复制粘贴把主类的代码搞没了): `src/main/java/net/xiaobang/bm/bm.java` ~~~ @EventHandler public void preInit(FMLPreInitializationEvent event) { proxy.preInit(event); } @EventHandler public void init(FMLInitializationEvent event) { proxy.init(event); } @EventHandler public void postInit(FMLPostInitializationEvent event) { proxy.postInit(event); } ~~~ 写到这里(复制粘贴),你现在应该知道当服务端运行时,CommonProxy类的函数会被调用,如果是客户端,ClientProxy的函数会被调用,这样我们就可以实现服务端和客户端之间的差异。 最后就是完善Mod信息了(啊激动终于可以偷懒了) Mod的信息一般都是在一个叫mcmod.info的文件夹里面,它通常保存在src/main/resources/里面,现在以文本的形式打开它来完善你的mod信息。(注意version和mcversion不应该去修改,它们会在Gradle构建mod的时候自动替换掉,如果真的要改应该更改build.gradle) 如本教程的mcmod.info是酱紫的: ~~~ [ { "modid": "bm", "name": "Bang's First Mod", "description": "Mod for DBC", "version": "${version}", "mcversion": "${mcversion}", "url": "", "updateUrl": "", "authorList": ["xiaobang"], "credits": "Notch, Cpw, etc.", "logoFile": "", "screenshots": [], "dependencies": [] } ] ~~~