1. 首页 > 游戏攻略一

探索Fabric模组开发:方块实体的初识与基础实践

理解方块实体
当我们谈论 Minecraft 中的“方块”时,我们实际上是在谈论一个复杂的概念。

为了深入理解这个概念,我们需要从头开始,首先讨论什么是“[方块]Block”。



什么是[方块]Block?
你可能会认为在你的物品栏中的草方块、铁块和工作台就是`[方块]Block`,但实际上并非如此。

由于它们存在于你的物品栏中,所以它们实际上是`[物品]Item`,更准确地说是`[物品栈]ItemStack`。

这些栈内包含的是`[方块物品]BlockItem`,而真正的`[方块]Block`则在这个`[方块物品]BlockItem`里面。



当你右键放置方块时,实际会调用`[方块物品]BlockItem`类中的`useOnBlock`方法,在世界中放置相应的方块。然而,这并不意味着你现在看到的就是`[方块]Block`。实际上,你在世界中操作的是`[方块状态]BlockState`,可以看作是`[方块]Block`在世界中的具体表现形式。大多数对方块的操作最终都会调用到`[方块]Block`的方法。

那么,什么是[方块实体]BlockEntity?

如果你需要向方块内部存储一些数据,自然应该存储在具体的`[方块状态]BlockState`中。如果将数据存放在`[方块]Block`中,当一个方块的状态改变时(例如含水或不含有水),所有该类型的方块都将受到影响。

原版 Minecraft 中的含水方块就是一个例子:如果含水数据存储在`[方块]Block`中,一旦一个方块变成含水状态,所有同类方块都将变为含水状态。同样,原版熔炉也是一个很好的例子:每个熔炉的数据都是不同的(所含物和燃烧时间),因此不可能在`[方块]Block`中实现。

对于含水方块的情况,其解决方案是使用`[方块状态]BlockState`的`Property`。而对于熔炉等具有独特数据的方块,则需要使用`[方块实体]BlockEntity`来实现。

虽然本篇文章只是简单地介绍了这个概念,但希望它能帮助你更好地理解 Minecraft 中的方块实体。