当前位置:首页 > CN2资讯 > 正文内容

我的世界java代源代码 我的世界javafml

13分钟前CN2资讯

Forge是什么

  • Minecraft是商业软件,源代码不公开
  • MCP项目反编译了Minecraft,为我们提供了Minecraft的“源代码”,即便并不是Mojang工作室写的那样
  • Forge是MinecraftForge和Forge Mod Loader(FML)的总称。MinecraftForge基于MCP,提供了Minecraft中的各种机制的实现接口,如事件系统,物品注册等等。而FML,顾名思义,Mod加载器,开始游戏加载界面右下角不断敲打的铁砧就是它了。

Side

Minecraft拥有双客户端/服务端的结构,具体来说,就是:

  • Minecraft有显然的物理客户端,即我们运行的Minecraft本体,还有显然的物理服务端,即多人服务器运行的server.jar。
  • 在每一个物理客户端内部,还有所谓的逻辑客户端和逻辑服务端,比如,所有的游戏逻辑放在逻辑服务端,而实体渲染等放在逻辑客户端。

事件

和 Java 中 AWT 和 Swing 类似,Minecraft 中的行为也是事件驱动的,我们需要为事件挂载事件监听器,当相应事件触发时,对应的监听器中的代码就会执行。

Mod开发中有两大类事件:

  • FML事件(FML 生命周期)
    主要分为 preinit,init 和 postinit 等,顾名思义,就是加载 Mod 的三个阶段,通常来讲,preinit 阶段进行物品、方块等的注册,init 阶段进行合成表的注册,postinit 进行 Mod 之间的关联处理。
  • Forge事件
    Forge 事件需要挂载到事件总线上,主要有:
    • 一般事件总线(MinecraftForge.EVENT_BUS)
    • 矿物生成总线(MinecraftForge.ORE_GEN_BUS)
    • 地形生成总线(MinecraftForge.TERRAIN_GEN_BUS)

    挂载方法:

    EventListener 类

    @SubscribeEvent public static void onSomeEventHappened(AEvent event) { // 当然这个 AEvent 要换成某个存在的事件。 } // 注册 MinecraftForge.EVENT_BUS.register(EventListener.class);

    或者

    @SubscribeEvent public void onSomeEventHappened(AEvent event) { // 当然这个 AEvent 要换成某个存在的事件。 } // 注册 MinecraftForge.EVENT_BUS.register(new EventListener());

    有没有感觉很熟悉呢?

    public void actionPerformed(ActionEvent e){ // TODO } new JButton().addActionListener(this);

    个人认为,Minecraft Forge 的事件系统就可以类比 AWT/Swing 里的监听器来理解。

    其中,注解 @SubscribeEvent 表明下面的方法是一个事件监听器,也就是说监听器方法的名字不是固定的,监听的事件由参数指定。

    此外,也可以这么写,用于将事件直接注册到 EVENT_BUS 上:

    // 这个注解的意思是“将这个类注册到事件总线中去,该事件监听器属于 mymod 这个 Mod” // 它相当于 MinecraftForge.EVENT_BUS.register(MyEventListener.class) @Mod.EventBusSubscriber(modid = "mymod") public final class MyEventListener { @SubscribeEvent public static void onEventFired(ACertainEvent event) { } }

    Mod的基本框架

  • 首先,在src/main/java/目录下新建项目所在包,比如 moonfan.mymod
  • 在mymod包内新建Java类,建议类名即Mod名的驼峰命名形式,这就是Mod的主类了,这里就是 MyMod.java 。
  • 复制以下代码,包名和modid自行修改。
    MyMod.java
  • @Mod(modid = MyMod.MODID, name = MyMod.NAME, version = MyMod.VERSION, acceptedMinecraftVersions = "1.12.2") public class MyMod { public static final String MODID = "mymod"; public static final String NAME = "My Mod"; public static final String VERSION = "1.0.0"; @Mod.Instance(MyMod.MODID) public static MyMod instance; @SidedProxy(clientSide = "moonfan.mymod.client.ClientProxy", serverSide = "moonfan.mymod.common.CommonProxy") public static CommonProxy proxy; @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { proxy.preInit(event); } @Mod.EventHandler public void init(FMLInitializationEvent event) { proxy.init(event); } @Mod.EventHandler public void postInit(FMLPostInitializationEvent event) { proxy.postInit(event); } }
    • @Mod 和 @Mod.Instance 注解对mod信息进行引用
    • 前面介绍了Forge中的Side概念,@SidedProxy即为对Common(Server)和Client的引用,这是之后要创建的两个类。
    • 前面介绍了Forge的事件系统,@Mod.EventHandler 则标识了三个FML事件,三个方法分别对应三个事件,调用proxy的对应方法。
  • 新建 moonfan.mymod.common.CommonProxy 和 moonfan.mymod.client.ClientProxy 类,且ClientProxy继承自CommonProxy:
    CommonProxy.java
  • public class CommonProxy { @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { // TODO } @Mod.EventHandler public void init(FMLInitializationEvent event) { // TODO } @Mod.EventHandler public void postInit(FMLPostInitializationEvent event) { // TODO } }

    ClientProxy.java

    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); } }

    这样,Mod的基本框架完成了。



      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/21389.html

      分享给朋友:

      “我的世界java代源代码 我的世界javafml” 的相关文章

      国外服务器推荐:提升您的在线业务效率的最佳选择

      在如今全球化的时代,选择合适的国外服务器显得尤为重要。互联网的快速发展让许多企业不仅仅局限于当地市场,跨国经营已成为常态。这种趋势使得大量用户开始寻找更为高效、灵活的服务器解决方案,以满足不同地区客户的需求。服务器不仅是维护在线业务的基础设施,还是保证用户体验的关键因素。 选择国外服务器时,不仅需要...

      选择DigitalVirt的KVM VPS服务,体验高性价比与稳定性

      DigitalVirt的成立是在2022年,这让我对他们的新起步感到兴奋。这家国人商家致力于提供高质量的KVM VPS服务,逐渐在市场上赢得了一席之地。就我个人的体验来看,DigitalVirt的使命似乎就是帮助用户实现在线业务的稳定与高效。特别是在快节奏的数字时代,能够找到一个可靠的服务提供商至关...

      探索宝塔的历史与文化:传承与创新的结合

      宝塔,这种在中国传统文化中扮演着重要角色的建筑,具有悠久而丰富的历史。我曾在一次旅行中惊叹于那些巍峨耸立的宝塔,仿佛它们在诉说着古老的故事。它们的起源可以追溯到佛教传入中国之前,实际上,宝塔最早的样式源自印度,梵语中称之为“窣堵坡”,主要用于供奉佛陀的舍利和进行宗教仪式。 在东汉时期,佛教逐步传入中...

      使用newcom598优惠码注册域名,享受超值价格

      什么是newcom598优惠码? 我想和大家分享一个超值的优惠信息,那就是newcom598优惠码。这是一个专为Namecheap的新用户设计的优惠码,意在帮助刚开始建立自己在线业务的人以超优惠的价格注册.COM域名。通过这个优惠码,新用户可以以仅$5.98的价格获得首年的.COM域名,这样算下来在...

      为小学生选择合适的VPS:安全、易用和高性价比的评测指南

      在这个数字化时代,网络安全受到越来越多人的重视。小朋友们在网络上探索新知识、与朋友沟通时,面对的不仅是丰富的学习资源,还有潜在的网络风险。此时,VPS(虚拟个人服务器)作为一个安全、稳定的网络环境,开始逐渐进入小学生的视野。家长和学校意识到,提供一个良好的网络环境,不仅能保护孩子免受不良信息的侵害,...

      全面解析服务器与主机:性能优化与选择策略

      1.1 服务器与主机的定义与基本概念 在信息技术的世界中,服务器和主机是两个不可或缺的概念。我常常将服务器视为一个强大的计算机,专门用于处理、存储和管理数据。它主要面向网络上的其他设备,承担着提供服务的重任。比如,网站的后台就是一个服务器,负责处理访问请求、存储用户数据等。而主机则是一个更广泛的术语...