package com.yaohun.onlinereward; import com.yaohun.onlinereward.config.Config; import com.yaohun.onlinereward.data.PlayerData; import com.yaohun.onlinereward.gui.OnlineGui; import com.yaohun.onlinereward.listener.GuiClickListener; import com.yaohun.onlinereward.listener.PlayerListener; import com.yaohun.onlinereward.manage.PlayerManager; import com.yaohun.onlinereward.manage.TimeType; import com.yaohun.onlinereward.util.MessageUtil; import com.yaohun.onlinereward.util.TimeCheckUtil; import me.Demon.DemonPlugin.DemonAPI; import me.Demon.DemonPlugin.Util.DataRefreshUtil; import me.Demon.DemonPlugin.Util.Ranking; import me.Demon.DemonPlugin.settings.RefreshData; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.HashMap; public class AuOnlineReward extends JavaPlugin { private static AuOnlineReward instance; private static PlayerManager playerManager; @Override public void onEnable() { instance = this; saveDefaultConfig(); Config.reloadConfig(this,false); MessageUtil.init(this); playerManager = new PlayerManager(); getServer().getPluginManager().registerEvents(new GuiClickListener(playerManager), this); getServer().getPluginManager().registerEvents(new PlayerListener(playerManager), this); DataRefreshUtil.createRefreshDataRecord("OnlineDaily"); DataRefreshUtil.createRefreshDataRecord("OnlineMonth"); Bukkit.getScheduler().runTaskLater(this, this::startOnlineTimeTask, 20L * 5); Bukkit.getScheduler().runTaskLater(this, () -> { getPlayerManager().loadOnlineAllPlayer(); }, 20L * 10); } public void startOnlineTimeTask() { Bukkit.getScheduler().runTaskTimer(this, () -> { RefreshData refreshData = DataRefreshUtil.getSetting("OnlineDaily"); if(refreshData != null && !refreshData.isSameDayAsRecord()){ refreshData.setRecordTime(System.currentTimeMillis()); DataRefreshUtil.SaveRefreshDataRecord(refreshData); // 每日数据刷新处理 getPlayerManager().refreshLocalPlayerData(TimeType.DAILY); return; } if(TimeCheckUtil.isMonthlySettleAccounts()){ getPlayerManager().refreshLocalPlayerData(TimeType.MONTHLY); return; } HashMap dataMap = getPlayerManager().getPlayerDataMap(); if(!dataMap.isEmpty()) { for (PlayerData playerData : dataMap.values()) { playerData.updataOnlineData(); } } }, 20L * 5, 1200L); } @Override public void onDisable() { getPlayerManager().clearAllPlayerData(); } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if(args.length == 1 && args[0].equalsIgnoreCase("open")){ if(!(sender instanceof Player)){ sender.sendMessage("§c该命令只能由玩家执行."); return true; } OnlineGui.OpenGui((Player) sender); return true; } if(!sender.isOp()) { return true; } if(args.length==0){ sender.sendMessage(""); sender.sendMessage("§e------- ======= §6在线福利 §e======= -------"); sender.sendMessage("§2/"+label+" open §f- §2打开界面"); sender.sendMessage("§2/"+label+" topDay §f- §2获取今日在线排行"); sender.sendMessage("§2/"+label+" info §e[玩家] §f- §2查看玩家数据"); sender.sendMessage("§2/"+label+" dayrefresh §f- §2刷新每日数据"); sender.sendMessage("§2/"+label+" dayrefresh §e[玩家] §f- §2刷新数据"); sender.sendMessage("§2/"+label+" reload §f- §2重载配置文件"); sender.sendMessage("§e------- ======= §6在线福利 §e======= -------"); sender.sendMessage(""); return true; } String prefix = "§f[§c在线§f] §a"; if(args.length==1 && args[0].equalsIgnoreCase("reload")){ MessageUtil.init(this); Config.reloadConfig(this,true); sender.sendMessage(prefix+"配置文件已重载."); return true; } if("dayrefresh".equalsIgnoreCase(args[0])){ if(args.length == 1) { getPlayerManager().refreshLocalPlayerData(TimeType.DAILY); sender.sendMessage("§f[§c在线§f] §a每日数据已清理."); return true; } if(args.length == 2){ String name = args[1]; getPlayerManager().refreshLocalPlayerData(name,TimeType.DAILY); sender.sendMessage("§f[§c在线§f] §a玩家 §e"+name+" §a每日数据已清理."); } return true; } if("info".equalsIgnoreCase(args[0]) || "look".equalsIgnoreCase(args[0])){ String playerName = sender.getName(); if(args.length == 2){ playerName = args[1]; } PlayerData playerData = getPlayerManager().getPlayerData(playerName); sender.sendMessage("§r累积在线: §b"+ playerData.totalOnline+"秒"); sender.sendMessage("§r本月在线: §b"+ playerData.monthOnline+"秒"); sender.sendMessage("§r今日在线: §b"+ playerData.todayOnline+"秒"); sender.sendMessage("§r总计满勤打卡: §b"+ playerData.totalSignAmount+"次"); sender.sendMessage("§r满勤打卡: §b"+ playerData.signAmount+"次"); sender.sendMessage("§r最后一次上线时间: §e"+ DemonAPI.LongToStringData(playerData.offlineTime,"yyyy-MM-dd HH:mm")); return true; } if("top".equalsIgnoreCase(args[0]) || "topDay".equalsIgnoreCase(args[0])){ HashMap hashMap = new HashMap<>(); for (PlayerData playerData : getPlayerManager().getPlayerDataMap().values()) { if ("topDay".equalsIgnoreCase(args[0])) { hashMap.put(playerData.getPlayerName(), playerData.todayOnline / 60); } else { hashMap.put(playerData.getPlayerName(), playerData.totalOnline / 60); } } Ranking ranking = new Ranking(hashMap); sender.sendMessage(" "); sender.sendMessage("§e§l★ §a"+DemonAPI.getTime("yyyy-MM-dd")+"在线排行榜 §7(不定时更新数据)"); for (int rank = 1; rank < 15; rank++) { String rankingPlayer = ranking.getRankingPlayer(rank, "name"); String valueString = ranking.getRankingPlayer(rank, "value"); if(valueString.contains("§")){ sender.sendMessage("§a§l★ §7第 §e" + rank + " §7名: §e" + rankingPlayer + "§7累积在线: §e" + valueString); continue; } if ("topDay".equalsIgnoreCase(args[0])) { sender.sendMessage("§a§l★ §7第 §e" + rank + " §7名: §e" + rankingPlayer + "§7累积在线: §e" + valueString + "分钟"); } else { int onlineTime = Integer.parseInt(valueString); sender.sendMessage("§a§l★ §7第 §e" + rank + " §7名: §e" + rankingPlayer + "§7累积在线: §e" + (onlineTime/60) + "小时"); } } sender.sendMessage(" "); return true; } return false; } public static AuOnlineReward inst() { return instance; } public static PlayerManager getPlayerManager() { return playerManager; } }