177 lines
7.8 KiB
Java
177 lines
7.8 KiB
Java
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<String, PlayerData> 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<String,Integer> 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;
|
|
}
|
|
}
|