首页 > 其他 > 详细

Minecraft 1.12.2 Mod开发笔记——进阶概述、规范和事件系统

时间:2020-03-05 19:05:42      阅读:75      评论:0      收藏:0      [点我收藏+]

进阶概述

逐渐发现,进阶的内容多而杂,很多零碎的点,比如在任何地方使用本地化、在地图中创建一个爆炸、给物品添加介绍信息等等,因为没有一个全面的API文档和注释,这些方法都要自己去源码里寻找。或许用一个具体的实践来综合一些小的点比较好。也有可能总结一下常用的API。

规范

一般来说,尽量在重写父类方法的时候才使用继承。如果只是创建一些没有特殊用法或只参与中间合成的物品/方块等,建议直接使用 new Item()new Block() 来创建实例,调用相应的 setter 方法设置其属性。

此外,也可以使用更好的管理注册表/非本地化等的方法。显然之前使用的一个大类一个 Loader 的方法过于繁琐。比如将所有物品/方块等加入集合,统一进行注册等。也可以手动创建一个基类,封装好注册名/非本地化名等基本操作。

一些概念

ItemBlock

这个前面写过,是Block对应的Item,本质就是Item的基础上添加了放置方块等基本操作。

ItemStack

这个前面也见过,在Minecraft中,每一个格子里放的都是ItemStack,它是物品的实例,拥有堆叠个数等属性。而Item规定了某一个物品类别,规定了所有属于这一类的ItemStack的共性,比如作用,比如最大堆叠个数。

就像一把耐久度为满的铁斧和一把只剩一半的铁斧,它们是不同的ItemStack,但都能用来砍树,因为它们都所属于ItemAxe这个Item。

特别的,空格子其实等效于Air这个Item,用ItemStack.Empty表示。

事件系统

前面已经用过很多了,Forge为原版Minecraft提供了一套比较完整的事件系统,Mod新添加的东西,还能够重写一些方法来得到新的行为。但要影响到原版写死了的功能,就要依靠事件,比如当生物受到攻击时、玩家死亡时等等。

如果一个事件定义了 @Cancelable,那么这个事件可以取消,取消后默认行为将不再进行。

Forge事件系统里的事件全部是void的,也有一些事件定义了 @HasResult,那么这个事件提供了Result方法来充当返回值,参与一些判断。

还可以设置事件的优先级......

常用的事件列表

待更新......

可参照 fmltutor的1.8.9开发教程,但因游戏版本问题,其中的一些事件并不一定准确。

也可在 net/minecraftforge/event/ 下自行查找需要的事件,或者直接查看 net/minecraftforge/fml/common/eventhandler/Event.java 类的继承树(IDEA中为打开某个类,点击菜单 Navigate-Type Hierarchy)

Minecraft 1.12.2 Mod开发笔记——进阶概述、规范和事件系统

原文:https://www.cnblogs.com/moonfan/p/12421670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!