我打算做一个挂机部分信息发送的实现。我之前是创建一个类给定一个Timer实例对象,但是经过测试,似乎保存在该类之中无法将其左右于玩家,那么应该如何实现这个呢。。。还是通过存储玩家对象进行多线程发送。。。。
任何时候都别存玩家对象
很有可能玩家下线了什么的
请存储UUID,名字也少存,尽量都用uuid
很有可能玩家下线了什么的
请存储UUID,名字也少存,尽量都用uuid
直接开一个BukkitRunnable好了
用单独的类继承bkrunnable
然后实现你的逻辑
或者可以是比如说构造函数直接传入玩家uuid
然后每一个挂机玩家都有一个自己的runnable
可以避免什么循环这样的操作实现一定的解耦合而且也符合面向对象的思想
如果是定时执行循环遍历玩家列表,再如何如何,那就是面向过程的写法
(我就喜欢面向过程
用单独的类继承bkrunnable
然后实现你的逻辑
或者可以是比如说构造函数直接传入玩家uuid
然后每一个挂机玩家都有一个自己的runnable
可以避免什么循环这样的操作实现一定的解耦合而且也符合面向对象的思想
如果是定时执行循环遍历玩家列表,再如何如何,那就是面向过程的写法
(我就喜欢面向过程
William_Shi 发表于 2020-6-8 21:07
任何时候都别存玩家对象
很有可能玩家下线了什么的
请存储UUID,名字也少存,尽量都用uuid ...
emmm,是考虑到性能问题嘛。。。还是什么的。。。
ZeroArchive 发表于 2020-6-8 21:22
emmm,是考虑到性能问题嘛。。。还是什么的。。。
玩家下线之后玩家对象就不存在了
而且不可能直接对着整个玩家对象equals吧
肯定是用名字或者是uuid
本帖最后由 ZeroArchive 于 2020-6-8 22:28 编辑
UUID不是根据硬件编码和时间戳来生成的嘛。。。那么应该根据什么来指向玩家对象呢。。。十分感谢。。。我还以为是需要通过Java的UUID类去自行生成一个UUID数据。。。
William_Shi 发表于 2020-6-8 21:29
玩家下线之后玩家对象就不存在了
而且不可能直接对着整个玩家对象equals吧
肯定是用名字或者是uuid ...
UUID不是根据硬件编码和时间戳来生成的嘛。。。那么应该根据什么来指向玩家对象呢。。。十分感谢。。。我还以为是需要通过Java的UUID类去自行生成一个UUID数据。。。
ZeroArchive 发表于 2020-6-8 22:15
UUID不是根据硬件编码和时间戳来生成的嘛。。。那么应该根据什么来指向玩家对象呢。。。 ...
应该是存 UUID 或者玩家名的, 考虑到正版服可能在过程中玩家突然改名下线重进的极端情况, 所以建议直接存唯一的 UUID.
存 UUID 之后通过方法 Bukkit.getPlayer(UUID uuid) 来获得玩家实例这样
ZeroArchive 发表于 2020-6-8 22:15
UUID不是根据硬件编码和时间戳来生成的嘛。。。那么应该根据什么来指向玩家对象呢。。。十分感谢。。。我 ...
Bukkit#getOfflinePlayer(UUID)
记得判断isOnline再转成玩家对象(getPlayer)
但是isOnline本质上就是getPlayer是不是null?
当然也可以Bukkit#getPlayer
ZeroArchive 发表于 2020-6-8 22:15
UUID不是根据硬件编码和时间戳来生成的嘛。。。那么应该根据什么来指向玩家对象呢。。。十分感谢。。。我 ...
对于正版服务器、正版玩家来说
每一个正版玩家都有不变的uuid
在购买账号的时候就是他
改名了也是这个uuid
所以使用uuid不需要自己生成的
顶顶顶顶顶顶顶顶顶顶顶顶顶
William_Shi 发表于 2020-6-8 21:07
任何时候都别存玩家对象
很有可能玩家下线了什么的
请存储UUID,名字也少存,尽量都用uuid ...
你这个头像很想HY的某主播,被封杀了。