Java 存储特定于播放器的数据

Java 存储特定于播放器的数据,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在开发一个bukkit插件,我需要在玩家退出时保存数据。我写了一个系统,它工作得很好,但它是基于玩家的名字,如果玩家改变他们的名字,它将丢失数据。所以我的问题是:是否有任何属性,例如:玩家每次登录时,id都是相同的?您可以使用玩家的UUID,或通用唯一标识符。要获取播放器的UUID,可以使用player.getUniqueId。你也可以用线下球员 存储玩家何时通过UUID退出的示例方法如下: @EventHandler public void playerQuit(PlayerQuitEve

我正在开发一个bukkit插件,我需要在玩家退出时保存数据。我写了一个系统,它工作得很好,但它是基于玩家的名字,如果玩家改变他们的名字,它将丢失数据。所以我的问题是:是否有任何属性,例如:玩家每次登录时,id都是相同的?

您可以使用玩家的UUID,或通用唯一标识符。要获取播放器的UUID,可以使用player.getUniqueId。你也可以用线下球员

存储玩家何时通过UUID退出的示例方法如下:

@EventHandler
public void playerQuit(PlayerQuitEvent e){
    String uuid = e.getPlayer().getUniqueId().toString(); // get the user's UUID
    long time = System.currentTimeMillis() / 1000; // get the current number of seconds
    plugin.getConfig().set(uuid, time); // set the UUID in the config to the current # of seconds
}
然后,为了得到他们最后一次玩的那一天:

public Date getLastPlayedDate(String p){
    String uuid = Bukkit.getOfflinePlayer(p).getUniqueId().toString(); // get the uuid from the OfflinePlayer
    long time = plugin.getConfig().getLong(uuid); // get the time associated with the uuid
    Date date = new Date(time * 1000); // convert the time to the date
    return date; // return the date
}

:注意:UUID代表通用唯一标识符。@单面体它可以代表许多东西。不过,在大多数情况下,当使用Minecraft播放器时,它是通用的用户标识符,因为它只与用户打交道。如果我们做的是类似于Minecraft mobs的事情,它将是一个通用唯一标识符,因为我们没有对用户做任何事情。通用唯一标识符是OSF创造并提出的术语。如果你能给我指一个资源,它清楚地说明了你刚才所说的,那将是惊人的。否则