北航开源软件开发导论课程第三次作业
选择一个开源项目进行分析
MinecraftForge
仓库地址
https://github.com/MinecraftForge/MinecraftForge
开源许可
LGPL 2.1 (详见https://github.com/MinecraftForge/MinecraftForge/blob/1.20.x/LICENSE.txt)
社区
所有人均可向仓库提起PR
闪光点
- 代码风格一致,阅读起来很舒服。
- 变量命名正规,能让人一眼看出来是做什么的。
- 注释写的很充足。
- 代码注释也很充足,如@NotNull和@Nullable,方便在利用Forge开发时IDE进行的检查。
具体功能的实现
Fluid(流体系统)
类似于Minecraft原版中的物品Item和ItemStack类,Forge中定义了FluidType和FluidStack类。以下是来自Harbinger(一个中文Minecraft Mod开发指南)中的一段话。https://harbinger.covertdragon.team/chapter-04/item-stack.html
Item 代表了物品的“类型”。两颗钻石因为“都是钻石”所以能叠加在一起。两块不同的金属锭因为类型不同所以不能叠加在一起。 有数量概念的是 ItemStack,一个 ItemStack 的实例代表了“一堆特定物品,数量不定”。Minecraft 中玩家背包里的东西都是 ItemStack。玩家手持的也是 ItemStack。在此基础上,ItemStack 还有携带一个 NBT 标签的能力,这允许 ItemStack 携带更多的自定义数据。
Minecraft 在这里采用了享元的概念:一种特定物品只对应一个 Item 实例。换言之,在 Modding 的过程中,我们可以直接通过 == 来判断两个物品是否为同一个种类。
Forge中的流体系统也是同样的道理,只不过把上述的Item换成FluidType,ItemStack换成FluidStack。
Energy(能源系统)
Forge中定义了IEnergyStorage接口,所有基于Forge的Mod中的能量需要实现或者利用这个接口中的内容来达到能量生产、传输、储存的效果。开发者可以自行实现接口的具体功能以达到不同能量生产传输效果,当然Forge提供了基础的实现类EnergyStorage和EmptyEnergyStorage方便开发者直接使用。