Files
AuOnlineReward/src/main/java/com/yaohun/onlinereward/AuOnlineReward.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;
}
}