结冰的离季
本帖最后由 结冰的离季 于 2022-6-12 15:09 编辑

Bukkit.getOfflinePlayer 可以获取一个离线玩家,即使这个玩家不存在
大概看了下源码发现不存在的玩家也会创建GameProfile 源码
我想知道服务器会不会为这个不存在的玩家创建数据 比如xxx.dat

实测不会创建 xxx.dat文件,但是会在usercache.json 中缓存,不过存在过期机制(默认一个月),
所以判断玩家是否登陆过的方式是 Bukkit.getOfflinePlayer("test").hasPlayedBefore() ?

如果会能不能删除 如果不会那没事了
因为 如果命令的作用是获取离线玩家并对玩家操作的话,可能会有输错名字或者uuid的情况,这样可能长久积累会占用空间,
而我想的另一个办法是先判断这个玩家存不存在,实现方法是Bukkit.getOfflinePlayers() 然后遍历 ,但这样貌似资源占用挺多的。

所以问题的关键是,Bukkit.getOfflinePlayer是否会创建文件 和 如何判断一个玩家名字或者uuid先前登陆过服务器 (仅使用bukkit api,排除遍历所有OfflinePlayer)



‮tcejorPoiK
不会
你完全可以写个插件自己试一下,就不用等回复了

OfflinePlayer#hasPlayedBefore()

结冰的离季
‮tcejorPoiK 发表于 2022-6-11 17:55
不会
你完全可以写个插件自己试一下,就不用等回复了

因为我刚刚在外面,回来测了下貌似不会产生数据