即使播放器断开连接,org.bukkit.entity.Player对象是否仍然加载了块?

时间:2017-05-17 15:39:33

标签: bukkit

我听说org.bukkit.entity.Player对象在某处加载了块,即使播放器已断开连接,因此它们不应用于数据存储。我的问题是:这是真的,如果是的话,我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

  

我听说org.bukkit.entity.Player对象在某处加载了块,即使播放器已断开连接......我的问题是:这是真的

没有。每当玩家退出或意外断开连接时,播放器将从PlayerChunkMap移除,从而允许移除相关的块,前提是它们不在其他玩家或插件的范围内,故意保持加载块。块保留在内存中,直到服务器可以保存它们。

  

...所以它们不应该用于数据存储......如果是,我应该做什么呢?

要在播放器会话或服务器重新启动之间保留数据,播放器的数据 - 无论可能是什么 - 应该键入其UUID,可以通过getUniqueId()检索。

例如,PlayerQuitEvent的事件侦听器检索播放器数据及其UUID,将数据保存到YAML文件或数据库表。相应的PlayerJoinEvent事件处理程序获取播放器的UUID,读取或查询关联数据并根据需要应用。在Mojang切换到UUID之前,使用播放器的名称也是如此,当时该名称是唯一的,无法更改。

Player对象仅在玩家的会话期间是唯一的。虽然它可以用作映射,查找表或其他数据结构的键,但您应该始终使用播放器的UUID。此外,应该提到的是,getUniqueId()返回的玩家的UUID与getEntityId()返回的玩家的实体ID不同。玩家每次加入时都会有不同的实体ID。

答案 1 :(得分:2)

只需存储播放器的UUID:

player.getUniqueId()

然后让玩家:

Bukkit.getPlayer(uuid)