实体
除了常规网络消息之外,还提供了各种其他系统来处理同步实体数据。
Spawn数据
一般来说,修改实体的产生由Forge单独处理。
提示
这意味着简单地继承一个原版实体类可能不会在这里继承它的所有行为。 您可能需要自己实现某些原版行为。
您可以通过实现以下接口向Forge发送的spawn数据包添加额外数据。
IEntityAdditionalSpawnData
如果您的实体具有客户端所需的数据,但不会随时间发生变化,则可以使用此接口将其添加到实体spawn数据包中。 writeSpawnData()
和readSpawnData()
,以类似于IMessage
中toBytes()
/fromBytes()
方法的方式控制数据如何与网络缓冲区进行/解码。
IThrowableEntity
这适用于“抛射物”类型的实体。 实现此接口将导致“源”实体的ID以及初始速度与spawn数据包一起发送到客户端。
静态数据
数据参数
这是用于将实体数据从服务器同步到客户端的主要原版系统。 因此,可以参考许多原版例子。
首先,您需要一个DataParameter<T>
来保存您希望保持同步的数据。 这应该存储为实体类中的静态final字段,通过调用EntityDataManager.createKey()
并为该类型的数据传递实体类和序列化器来获得。 可以在DataSerializers
类中找到可用的序列化器实现作为静态常量。
警告
您应该 仅 为您自己的实体创建数据参数,在该实体的class中。 向无法控制的实体添加参数会导致用于通过网络发送该数据的ID变得不同步,从而导致难以调试崩溃。
然后,覆盖entityInit()
并为每个数据参数调用this.dataManager.register()
,传递参数和要使用的初始值。 记得要先调用super.entityInit()
!
然后,您可以通过实体的dataManager
实例获取并设置这些值。 所做的更改将自动同步到客户端。