如何获取玩家当日在线时长,最好是bukkit的如果有的话,获取的是tick还是秒
如果没有的话有没有轮子?
如果没有的话有没有轮子?
写个BukkitRunnable,再弄个Map储存每个玩家的在线时长
每Tick耗损有点大,我们可以改成1s就是20tick
每20tick就遍历增加一次Map的值
大概就能弄到玩家当日在线时长了
每Tick耗损有点大,我们可以改成1s就是20tick
每20tick就遍历增加一次Map的值
大概就能弄到玩家当日在线时长了
监听PlayerJoinEvent和PlayerQuitEvent吧,跨天的情况专门判断一下
每天0:00记录一下总在线时长,当天在线时常=当前总在线时长-上次记录的在线时长
总在线时常可以通过查统计信息获取
总在线时常可以通过查统计信息获取
本帖最后由 a8105 于 2020-4-22 19:05 编辑
监听PlayerJoinEvent
获取当前系统时间:
System.currentTimeMillis();
储存玩家与当前系统时间到Map或其他当中
监听PlayerQuitEvent
再次获取当前系统时间 减去 获取玩家加入时储存的系统时间
最终结果为玩家从加入到退出的在线毫秒数
接下来就是你的回合了,已经有从在线到退出的毫秒数了,判断当前天数等等以及储存到什么地方都是你的事了
代码:
private Map<UUID,Long> joinTimes=new HashMap<>();
@EventHander
public void join(PlayerJoinEvent e)
{
joinTimes.put(e.getPlayer().getUniqueId(),System.currentTimeMillis());
}
@EventHandler
public void quit(PlayerQuitEvent e)
{
Long final=System.currentTimeMillis()-joinTimes.get(e.getPlayer().getUniqueId()); //最终在线毫秒数(本次)
}
监听PlayerJoinEvent
获取当前系统时间:
System.currentTimeMillis();
储存玩家与当前系统时间到Map或其他当中
监听PlayerQuitEvent
再次获取当前系统时间 减去 获取玩家加入时储存的系统时间
最终结果为玩家从加入到退出的在线毫秒数
接下来就是你的回合了,已经有从在线到退出的毫秒数了,判断当前天数等等以及储存到什么地方都是你的事了
代码:
private Map<UUID,Long> joinTimes=new HashMap<>();
@EventHander
public void join(PlayerJoinEvent e)
{
joinTimes.put(e.getPlayer().getUniqueId(),System.currentTimeMillis());
}
@EventHandler
public void quit(PlayerQuitEvent e)
{
Long final=System.currentTimeMillis()-joinTimes.get(e.getPlayer().getUniqueId()); //最终在线毫秒数(本次)
}
a8105 发表于 2020-4-22 19:02
监听PlayerJoinEvent
获取当前系统时间:
System.currentTimeMillis();
我倒是想如果玩家游戏时长到了某个值了之后就干点什么,应该怎么做
AdvancedMical 发表于 2020-4-22 21:11
我倒是想如果玩家游戏时长到了某个值了之后就干点什么,应该怎么做
参考PlayerQuitEvent内获取玩家在线的毫秒数的代码
配合BukkitRunnable定期检测或者其他调用方式后检测玩家在线时间后再干点什么
BukkitRunnable实例:
class MyTask extends BukkitRunnable{.....}
new MyTask().runTaskTimer(插件对象,第一次运行间隔,每次运行间隔)
间隔的时间单位都是刻