commit 1862217941aed95dedf6a9fa635c8470ed204ef9 Author: yhy <1763917516@qq.com> Date: Tue Jun 2 14:41:11 2026 +0800 初始化项目 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d0414d --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +target/ +out/ +lib/ +libs/ +.vscode/ +.codex/ +.idea/ +*.iml +*.class +*.log +logs/ +*.db +*.sqlite +*.sqlite3 +.DS_Store +Thumbs.db \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c202c0a --- /dev/null +++ b/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + org.example + AuOnlineReward + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + + public-rpg + https://repo.aurora-pixels.com/repository/public-rpg/ + + + + + + org.spigotmc + spigot-api + 1.12.2 + + + me.Demon.DemonPlugin + DemonAPI + 2.3.3 + + + + \ No newline at end of file diff --git a/src/main/java/com/yaohun/onlinereward/AuOnlineReward.java b/src/main/java/com/yaohun/onlinereward/AuOnlineReward.java new file mode 100644 index 0000000..539e80a --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/AuOnlineReward.java @@ -0,0 +1,159 @@ +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().runTaskTimerAsynchronously(this, () -> { + RefreshData refreshData = DataRefreshUtil.getSetting("OnlineDaily"); + if(refreshData != null && !refreshData.isSameDayAsRecord()){ + refreshData.setRecordTime(System.currentTimeMillis()); + DataRefreshUtil.SaveRefreshDataRecord(refreshData); + // 每日数据刷新处理 + getPlayerManager().clearAllPlayerData(); + return; + } + if(TimeCheckUtil.isMonthlySettleAccounts()){ + getPlayerManager().clearAllPlayerData(); + return; + } + HashMap dataMap = getPlayerManager().getPlayerDataMap(); + if(!dataMap.isEmpty()) { + for (PlayerData playerData : dataMap.values()) { + playerData.updataOnlineData(); + } + } + }, 20L * 5, 1200L); + } + + @Override + public void onDisable() { + getPlayerManager().saveAllPlayerData(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if(args.length == 1 && args[0].equalsIgnoreCase("open")){ + 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()) { + hashMap.put(playerData.getPlayerName(),playerData.todayOnline); + } + 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 onlineTime = ranking.getRankingPlayer(rank, "value"); + sender.sendMessage("§a§l★ §7第 §e" + rank + " §7名: §e" + rankingPlayer + "§7累积在线: §e"+onlineTime+"分钟"); + } + sender.sendMessage(" "); + return true; + } + return false; + } + + public static AuOnlineReward inst() { + return instance; + } + + public static PlayerManager getPlayerManager() { + return playerManager; + } +} diff --git a/src/main/java/com/yaohun/onlinereward/api/OnlineAPI.java b/src/main/java/com/yaohun/onlinereward/api/OnlineAPI.java new file mode 100644 index 0000000..5c5799a --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/api/OnlineAPI.java @@ -0,0 +1,39 @@ +package com.yaohun.onlinereward.api; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.data.PlayerData; +import com.yaohun.onlinereward.manage.PlayerManager; + +public class OnlineAPI { +/** + * + public int totalOnline; // 单位: 秒 + public int monthOnline; // 单位: 秒 + public int todayOnline; // 单位: 秒 + + **/ + // 获取玩家今日在线 + public static int getTime(String playerName){ + return getTimeMinute(playerName,"default"); + } + + public static int getTimeMonth(String playerName){ + return getTimeMinute(playerName,"month"); + } + + public static int getTimeTotal(String playerName){ + return getTimeMinute(playerName,"total"); + } + + + public static int getTimeMinute(String playerName,String type){ + PlayerManager playerManager = AuOnlineReward.getPlayerManager(); + PlayerData playerData = playerManager.getPlayerData(playerName); + if("total".equalsIgnoreCase(type)){ + return playerData.totalOnline / 60; + } else if("month".equalsIgnoreCase(type)){ + return playerData.monthOnline / 60; + } + return playerData.todayOnline / 60; + } +} diff --git a/src/main/java/com/yaohun/onlinereward/config/Config.java b/src/main/java/com/yaohun/onlinereward/config/Config.java new file mode 100644 index 0000000..997ac64 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/config/Config.java @@ -0,0 +1,39 @@ +package com.yaohun.onlinereward.config; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.data.OnlineData; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.HashMap; + +public class Config { + + private static HashMap onlineDataMap = new HashMap<>(); + + public static void reloadConfig(AuOnlineReward plugin,boolean reload){ + if(reload){ + plugin.reloadConfig(); + plugin.saveConfig(); + } + FileConfiguration config = plugin.getConfig(); + loadRewardData(config); + } + + private static void loadRewardData(FileConfiguration config){ + ConfigurationSection section = config.getConfigurationSection("RewardData"); + if(section != null) { + for (String key : section.getKeys(false)) { + onlineDataMap.put(key, new OnlineData(key, section)); + } + } + } + + public static HashMap getOnlineDataMap() { + return onlineDataMap; + } + + public static OnlineData getOnlineData(String key) { + return onlineDataMap.get(key); + } +} diff --git a/src/main/java/com/yaohun/onlinereward/data/OnlineData.java b/src/main/java/com/yaohun/onlinereward/data/OnlineData.java new file mode 100644 index 0000000..2f57738 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/data/OnlineData.java @@ -0,0 +1,130 @@ +package com.yaohun.onlinereward.data; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.util.MessageUtil; +import me.Demon.DemonPlugin.DemonAPI; +import me.Demon.DemonPlugin.data.NbtItem; +import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class OnlineData { + + private String rewardKey; + public int slot; + public int needOnline; + public int needOnlineTime; + private ItemStack itemStack; + private List commands; + + public OnlineData(String rewardKey, ConfigurationSection section){ + this.rewardKey = rewardKey; + this.slot = section.getInt(rewardKey+".slot",10); + this.needOnline = section.getInt(rewardKey+".needOnline",30); + this.needOnlineTime = section.getInt(rewardKey+".needOnlineTime",60); + this.itemStack = section.getItemStack(rewardKey+".itemStack"); + if(!DemonAPI.itemIsNull(this.itemStack)){ + NbtItem nbtItem = new NbtItem(itemStack); + nbtItem.setString("onlineKey", rewardKey); + this.itemStack = nbtItem.getItem(); + } + this.commands = section.getStringList(rewardKey+".commands"); + } + + public String getRewardKey() { + return rewardKey; + } + + public boolean isReceivingConditions(long collectionTime){ + // 获取当前时间 + long now = System.currentTimeMillis(); + // 获取时间差 当前时间 - 上一次领取奖励时间 = 时间差额 + long lastTime = now - collectionTime; + // 是否已满足领取条件 + if(lastTime >= this.needOnline * 1000L){ + return true; + } + return false; + } + + public ItemStack getItemStack(PlayerData playerData) { + if(this.rewardKey.contains("MinuteReward_")) { + long collectionTime = playerData.collectionTime; + ItemStack stack = itemStack.clone(); + ItemMeta meta = itemStack.getItemMeta(); + List lore = meta.getLore(); + for (int i = 0; i < lore.size(); i++) { + String s = lore.get(i); + if (s.contains("%time%")) { + if(playerData.isPlayerMinuteRewardExit(this.rewardKey)) { + lore.set(i, MessageUtil.getLanguage("Received")); + break; + } + if (!playerData.currentReward.equalsIgnoreCase(this.rewardKey)) { + lore.set(i, MessageUtil.getLanguage("Not-Started")); + break; + } + if(isReceivingConditions(collectionTime)){ + lore.set(i, MessageUtil.getLanguage("Pending")); + } else { + long minute = needOnline - ((System.currentTimeMillis() - playerData.collectionTime) / 1000); + lore.set(i, s.replace("%time%", minute+"秒")); + } + break; + } + } + meta.setLore(lore); + stack.setItemMeta(meta); + // 若满足要求则添加nbt信息 方便直接领取奖励 + if(isReceivingConditions(collectionTime)){ + NbtItem nbtItem = new NbtItem(stack); + nbtItem.setString("onlineKey", this.rewardKey); + return nbtItem.getItem(); + } + return stack; + } else { + ItemStack stack = itemStack.clone(); + ItemMeta meta = itemStack.getItemMeta(); + List lore = meta.getLore(); + for (int i = 0; i < lore.size(); i++) { + String s = lore.get(i); + if(s.contains("%amounut%")){ + if(playerData.isPlayerPermanentRewardExit(this.rewardKey)){ + lore.set(i, MessageUtil.getLanguage("Received")); + break; + } + int signAmount = playerData.signAmount; + if(signAmount >= this.needOnline){ + lore.set(i, MessageUtil.getLanguage("Pending")); + } else { + lore.set(i, s.replace("%amounut%", (this.needOnline - signAmount)+"次")); + } + break; + } + } + meta.setLore(lore); + stack.setItemMeta(meta); + NbtItem nbtItem = new NbtItem(stack); + nbtItem.setString("rewardKey", this.rewardKey); + return nbtItem.getItem(); + } + } + + public void carryOut(Player player){ + String playerName = player.getName(); + String itemName = this.itemStack.getItemMeta().getDisplayName(); + for (String cmd : commands) { + cmd = cmd.replace("%player%", playerName); + cmd = cmd.replace("%itemName%", itemName); + if (cmd.contains("msg:")) { + player.sendMessage(cmd.replace("msg:","").replace("&","§")); + } else { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), cmd); + } + } + } +} diff --git a/src/main/java/com/yaohun/onlinereward/data/PlayerData.java b/src/main/java/com/yaohun/onlinereward/data/PlayerData.java new file mode 100644 index 0000000..1da6e9a --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/data/PlayerData.java @@ -0,0 +1,140 @@ +package com.yaohun.onlinereward.data; + +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; + +public class PlayerData { + + private String playerName; + public int totalOnline; // 单位: 秒 + public int monthOnline; // 单位: 秒 + public int todayOnline; // 单位: 秒 + public int totalSignAmount; + public int signAmount; + public String currentReward; + public long collectionTime; + public long loginTime = System.currentTimeMillis(); + public long offlineTime; + private List receivedList; + private List permanentReceivedList; + private File file; + private FileConfiguration configuration; + + public PlayerData(String playerName) { + this.playerName = playerName; + this.file = new File("plugins/AuData/AuOnlineReward", playerName + ".yml"); + if (!file.getParentFile().exists()) { + this.file.getParentFile().mkdirs(); + this.configuration = YamlConfiguration.loadConfiguration(file); + } else { + this.configuration = YamlConfiguration.loadConfiguration(file); + } + String path = "OnlineData."; + this.totalOnline = this.configuration.getInt(path+"totalOnline",60 * 60 *5); + this.monthOnline = this.configuration.getInt(path+"monthOnline",60 * 60 *3); + this.todayOnline = this.configuration.getInt(path+"todayOnline",0); + this.totalSignAmount = this.configuration.getInt(path+"totalSign",0); + this.signAmount = this.configuration.getInt(path+"signAmount",0); + this.currentReward = this.configuration.getString(path+"currentReward","MinuteReward_30"); + this.collectionTime = this.configuration.getLong(path+"collectionTime",System.currentTimeMillis() - (1000 * 60 * 30)); + this.offlineTime = this.configuration.getLong(path+"offlineTime",System.currentTimeMillis()); + this.receivedList = this.configuration.getStringList(path+"receivedList"); + this.permanentReceivedList = this.configuration.getStringList(path+"permanentReceived"); + } + + public void updataLoginTime() { + this.loginTime = System.currentTimeMillis(); + } + + public void updataOnlineData(){ + // 获取当前时间 - 上线时间 + long valueLong = (System.currentTimeMillis() - this.loginTime) / 1000; + this.loginTime = System.currentTimeMillis(); + this.todayOnline += (int) valueLong; + this.totalOnline += (int) valueLong; + this.monthOnline += (int) valueLong; + } + + public void SavePlayerData() { + this.configuration.set("OnlineData.todayOnline", this.todayOnline); + this.configuration.set("OnlineData.totalOnline", this.totalOnline); + this.configuration.set("OnlineData.monthOnline", this.monthOnline); + this.configuration.set("OnlineData.totalSign", this.totalSignAmount); + this.configuration.set("OnlineData.signAmount", this.signAmount); + this.configuration.set("OnlineData.currentReward", this.currentReward); + this.configuration.set("OnlineData.collectionTime", this.collectionTime); + this.configuration.set("OnlineData.offlineTime", this.offlineTime); + this.configuration.set("OnlineData.receivedList", this.receivedList); + this.configuration.set("OnlineData.permanentReceived", this.permanentReceivedList); + try { + this.configuration.save(this.file); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public String getPlayerName() { + return playerName; + } + + public void setOfflineTime(long offlineTime) { + this.offlineTime = offlineTime; + } + + public boolean isPlayerMinuteRewardExit(String rewardKey) { + if(this.receivedList.contains(rewardKey)){ + return true; + } + return false; + } + + public void addPlayerMinuteReward(String rewardKey) { + this.receivedList.add(rewardKey); + } + + + public boolean isPlayerPermanentRewardExit(String rewardKey) { + if(this.permanentReceivedList.contains(rewardKey)){ + return true; + } + return false; + } + + public void addPlayerPermanentReward(String rewardKey) { + this.permanentReceivedList.add(rewardKey); + } + + public void setplayerPermanentReward(List rewardList) { + this.permanentReceivedList = rewardList; + } + + public void setCurrentReward(){ + if(this.currentReward.equalsIgnoreCase("MinuteReward_30")){ + this.currentReward = "MinuteReward_60"; + } else if(this.currentReward.equalsIgnoreCase("MinuteReward_60")){ + this.currentReward = "MinuteReward_120"; + } else if(this.currentReward.equalsIgnoreCase("MinuteReward_120")){ + this.currentReward = "MinuteReward_240"; + } else if(this.currentReward.equalsIgnoreCase("MinuteReward_240")){ + this.currentReward = "MinuteReward_MAX"; + } + } + + public void refreshDailyData(){ + this.todayOnline = 0; + this.currentReward = "MinuteReward_30"; + this.collectionTime = System.currentTimeMillis(); + this.receivedList = new ArrayList<>(); + } + public void refreshMonthlyData(){ + this.monthOnline = 0; + } +} diff --git a/src/main/java/com/yaohun/onlinereward/event/OnlineRewardEvent.java b/src/main/java/com/yaohun/onlinereward/event/OnlineRewardEvent.java new file mode 100644 index 0000000..8c17c46 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/event/OnlineRewardEvent.java @@ -0,0 +1,40 @@ +package com.yaohun.onlinereward.event; + +import com.yaohun.onlinereward.data.OnlineData; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class OnlineRewardEvent extends Event { + + private static HandlerList handlers = new HandlerList(); + + private Player player; + private OnlineData onlineData; + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public OnlineRewardEvent(Player player, OnlineData rewardTime) { + this.player = player; + this.onlineData = rewardTime; + } + + public Player getPlayer() { + return player; + } + + public String getPlayerName() { + return player.getName(); + } + + public OnlineData getOnlineData() { + return onlineData; + } +} diff --git a/src/main/java/com/yaohun/onlinereward/gui/OnlineGui.java b/src/main/java/com/yaohun/onlinereward/gui/OnlineGui.java new file mode 100644 index 0000000..fbb5bbe --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/gui/OnlineGui.java @@ -0,0 +1,50 @@ +package com.yaohun.onlinereward.gui; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.config.Config; +import com.yaohun.onlinereward.data.OnlineData; +import com.yaohun.onlinereward.data.PlayerData; +import com.yaohun.onlinereward.manage.PlayerManager; +import com.yaohun.onlinereward.util.MessageUtil; +import com.yaohun.onlinereward.util.StackUtil; +import com.yaohun.onlinereward.util.TimeCheckUtil; +import me.Demon.DemonPlugin.DemonAPI; +import me.Demon.DemonPlugin.Util.DataRefreshUtil; +import me.Demon.DemonPlugin.settings.RefreshData; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import java.util.HashMap; + +public class OnlineGui { + + private static String invTitle = MessageUtil.getLanguage("Title"); + + public static void OpenGui(Player player){ + PlayerManager playerManager = AuOnlineReward.getPlayerManager(); + RefreshData refreshData = DataRefreshUtil.getSetting("OnlineDaily"); + if(refreshData != null && !refreshData.isSameDayAsRecord()){ + refreshData.setRecordTime(System.currentTimeMillis()); + DataRefreshUtil.SaveRefreshDataRecord(refreshData); + // 每日数据刷新处理 + playerManager.clearAllPlayerData(); + return; + } + if(!TimeCheckUtil.isAfter0020()){ + DemonAPI.sendMessage(player,"此系统受晚间数据保护§e[00:10]§a才能打开."); + return; + } + String playerName = player.getName(); + PlayerData playerData = playerManager.getPlayerData(playerName); + playerData.updataOnlineData(); + Inventory inv = Bukkit.createInventory(null, 36, invTitle); + inv.setItem(4, StackUtil.showSignStats(playerData)); + HashMap dataMap = Config.getOnlineDataMap(); + for (String key : dataMap.keySet()) { + OnlineData data = dataMap.get(key); + inv.setItem(data.slot,data.getItemStack(playerData)); + } + player.openInventory(inv); + } +} diff --git a/src/main/java/com/yaohun/onlinereward/listener/GuiClickListener.java b/src/main/java/com/yaohun/onlinereward/listener/GuiClickListener.java new file mode 100644 index 0000000..f8ed39d --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/listener/GuiClickListener.java @@ -0,0 +1,135 @@ +package com.yaohun.onlinereward.listener; + +import com.yaohun.onlinereward.config.Config; +import com.yaohun.onlinereward.data.OnlineData; +import com.yaohun.onlinereward.data.PlayerData; +import com.yaohun.onlinereward.event.OnlineRewardEvent; +import com.yaohun.onlinereward.gui.OnlineGui; +import com.yaohun.onlinereward.manage.PlayerManager; +import com.yaohun.onlinereward.util.MessageUtil; +import me.Demon.DemonPlugin.DemonAPI; +import me.Demon.DemonPlugin.Util.AreaType; +import me.Demon.DemonPlugin.data.NbtItem; +import org.bukkit.Bukkit; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; + +public class GuiClickListener implements Listener { + + private PlayerManager playerManager; + + public GuiClickListener(PlayerManager playerManager) { + this.playerManager = playerManager; + } + + private static String invTitle = MessageUtil.getLanguage("Title"); + + @EventHandler + public void onClick(InventoryClickEvent e){ + int rawSlot = e.getRawSlot(); + Player player = (Player) e.getWhoClicked(); + String playerName = player.getName(); + Inventory inventory = e.getInventory(); + if(e.getView().getTitle().equalsIgnoreCase(invTitle)){ + e.setCancelled(true); + ItemStack stack = e.getCurrentItem(); + if(!DemonAPI.itemIsNull(stack)){ + PlayerData playerData = playerManager.getPlayerData(playerName); + NbtItem nbtItem = new NbtItem(stack); + if(nbtItem.hasKey("rewardKey")){ + String onlineKey = nbtItem.getString("rewardKey"); + OnlineData onlineData = Config.getOnlineData(onlineKey); + // 获取玩家已累积打卡多少次 + int signAmount = playerData.signAmount; + // 获取领取此奖励需要累积领取奖励 + int needAmount = onlineData.needOnline; + if(signAmount < needAmount){ + int showAmount = needAmount - signAmount; + DemonAPI.sendMessage(player, MessageUtil.getLanguage("Reward-Progress").replace("%amount%",String.valueOf(showAmount)), Sound.ENTITY_VILLAGER_NO); + return; + } + // 判断玩家是否已领取该奖励 + if(playerData.isPlayerPermanentRewardExit(onlineKey)){ + DemonAPI.sendMessage(player,MessageUtil.getLanguage("Already-Claimed"), Sound.ENTITY_VILLAGER_NO); + return; + } + // 当玩家领取了 SignReward_Max 这个奖励时重置本轮 + if(onlineKey.equalsIgnoreCase("SignReward_Max")){ + playerData.signAmount = 0; + playerData.setplayerPermanentReward(new ArrayList<>()); + // 执行领取命令后重新打开Gui界面 + onlineData.carryOut(player); + } else { + // 添加玩家已领取印记 + playerData.addPlayerPermanentReward(onlineKey); + // 执行领取命令后重新打开Gui界面 + onlineData.carryOut(player); + } + playerData.SavePlayerData(); + OnlineGui.OpenGui(player); + player.playSound(player.getLocation(),Sound.ENTITY_EXPERIENCE_ORB_PICKUP,1,1); + OnlineRewardEvent onlineRewardEvent = new OnlineRewardEvent(player,onlineData); + Bukkit.getPluginManager().callEvent(onlineRewardEvent); + return; + } + if(nbtItem.hasKey("onlineKey")){ + String onlineKey = nbtItem.getString("onlineKey"); + OnlineData onlineData = Config.getOnlineData(onlineKey); + // 获取玩家是否已领取该奖励 + if(playerData.isPlayerMinuteRewardExit(onlineKey)){ + DemonAPI.sendMessage(player,MessageUtil.getLanguage("Already-Claimed"), Sound.ENTITY_VILLAGER_NO); + return; + } + // 判断玩家领取奖励和当前领取奖励是否一致 + if(!playerData.currentReward.equalsIgnoreCase(onlineKey)){ + DemonAPI.sendMessage(player,MessageUtil.getLanguage("Not-Available"), Sound.ENTITY_VILLAGER_NO); + return; + } + // 获取玩家举例上次领取奖励已经相差多少时间 + long receiveTime = (System.currentTimeMillis() - playerData.collectionTime) / 1000; + // 获取领取此奖励需要累积在线多少时间 + long needTime = onlineData.needOnline; // 30 + if(receiveTime < needTime){ + long showTime = needTime - receiveTime; + DemonAPI.sendMessage(player, MessageUtil.getLanguage("Wait-Time").replace("%time%",String.valueOf(showTime)),Sound.ENTITY_VILLAGER_NO); + return; + } + // 判断玩家今日在线是否达到要求 + // 获取玩家今日累积在线时长 单位: 秒 + int onlineTime = playerData.todayOnline; + // 获取要求累积在线时长 单位: 秒 + int needOnlineTime = onlineData.needOnlineTime; + if(onlineTime >= needOnlineTime){ + // 添加玩家领取印记 + playerData.signAmount += 1; + playerData.addPlayerMinuteReward(onlineKey); + // 设置相关参数 + playerData.setCurrentReward(); + if(DemonAPI.getAreaType() == AreaType.DEFAULT) { + if (player.getLevel() < 100) { + playerData.collectionTime = System.currentTimeMillis(); + } + } + // 执行命令并重新打开Gui界面 + onlineData.carryOut(player); + OnlineGui.OpenGui(player); + player.playSound(player.getLocation(),Sound.ENTITY_EXPERIENCE_ORB_PICKUP,1,1); + OnlineRewardEvent onlineRewardEvent = new OnlineRewardEvent(player,onlineData); + Bukkit.getPluginManager().callEvent(onlineRewardEvent); + }else { + int remainingTime = needOnlineTime - onlineTime; + DemonAPI.sendMessage(player,MessageUtil.getLanguage("Daily-Requirement").replace("%time%",String.valueOf(remainingTime)),Sound.ENTITY_VILLAGER_NO); + player.closeInventory(); + } + } + } + } + } +} diff --git a/src/main/java/com/yaohun/onlinereward/listener/PlayerListener.java b/src/main/java/com/yaohun/onlinereward/listener/PlayerListener.java new file mode 100644 index 0000000..22bb6a6 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/listener/PlayerListener.java @@ -0,0 +1,46 @@ +package com.yaohun.onlinereward.listener; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.data.PlayerData; +import com.yaohun.onlinereward.manage.PlayerManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class PlayerListener implements Listener { + + private PlayerManager playerManager; + + public PlayerListener(PlayerManager playerManager){ + this.playerManager = playerManager; + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e){ + Player player = e.getPlayer(); + String playerName = player.getName(); + new BukkitRunnable() { + @Override + public void run() { + PlayerData playerData = playerManager.getPlayerData(playerName); + playerData.updataLoginTime(); + } + }.runTaskLater(AuOnlineReward.inst(),20L); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + String playerName = player.getName(); + playerManager.removePlayerData(playerName); + } + +} diff --git a/src/main/java/com/yaohun/onlinereward/manage/PlayerManager.java b/src/main/java/com/yaohun/onlinereward/manage/PlayerManager.java new file mode 100644 index 0000000..c6d086b --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/manage/PlayerManager.java @@ -0,0 +1,144 @@ +package com.yaohun.onlinereward.manage; + +import com.yaohun.onlinereward.data.PlayerData; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class PlayerManager { + + private HashMap playerDataMap = new HashMap<>(); + + public void loadOnlineAllPlayer(){ + int count = 0; + for (Player player : Bukkit.getOnlinePlayers()){ + String playerName = player.getName(); + PlayerData playerData = getPlayerData(playerName); + playerData.updataLoginTime(); + playerData.updataOnlineData(); + count++; + } + Bukkit.getConsoleSender().sendMessage("[日志 - 在线福利] 已载入<"+count+"名>在线玩家数据"); + } + + public PlayerData getPlayerData(String playerName){ + PlayerData playerData = playerDataMap.get(playerName); + if(playerData == null){ + playerData = new PlayerData(playerName); + playerDataMap.put(playerName, playerData); + } + return playerData; + } + + public void clearAllPlayerData(){ + for (PlayerData playerData : playerDataMap.values()){ + playerData.SavePlayerData(); + } + playerDataMap.clear(); + } + + public void saveAllPlayerData(){ + for (PlayerData playerData : playerDataMap.values()){ + playerData.SavePlayerData(); + } + } + + public void removePlayerData(String playerName){ + getPlayerData(playerName).SavePlayerData(); + playerDataMap.remove(playerName); + } + + public void setPlayerData(String playerName, PlayerData playerData){ + playerDataMap.put(playerName, playerData); + } + + public HashMap getPlayerDataMap() { + return playerDataMap; + } + + public void refreshLocalPlayerData(TimeType timeType){ + String folderPath = "plugins/AuData/AuOnlineReward"; + File folder = new File(folderPath); + if (!folder.exists() || !folder.isDirectory()) { + return; + } + File[] files = folder.listFiles((dir, name) -> name.endsWith(".yml")); + if (files == null || files.length == 0) { + return; + } + long nowTime = System.currentTimeMillis(); + int count = 0; + // 2. 统计玩家今日在线总计时长 + HashMap integerHashMap = new HashMap<>(); + for (File file : files) { + String playerName = file.getName().replace(".yml", ""); + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + if(timeType.equals(TimeType.DAILY)){ + int todayOnline = config.getInt("OnlineData.todayOnline"); + if(todayOnline >= 600){ + integerHashMap.put(playerName, todayOnline); + } + config.set("OnlineData.todayOnline", 0); + config.set("OnlineData.currentReward", "MinuteReward_30"); + config.set("OnlineData.collectionTime", nowTime); + config.set("OnlineData.receivedList", new ArrayList<>()); + try { + config.save(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + count++; + } else if(timeType.equals(TimeType.MONTHLY)){ + int monthOnline = config.getInt("OnlineData.monthOnline"); + if(monthOnline >= 600 * 180){ + integerHashMap.put(playerName, monthOnline); + } + config.set("OnlineData.monthOnline", 0); + try { + config.save(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + count++; + } + } + if(timeType.equals(TimeType.DAILY)) { + Bukkit.getConsoleSender().sendMessage("[日志 - 在线福利] 昨日在线时长大于1小时的玩家:"); + for (String playerName : integerHashMap.keySet()) { + int value = integerHashMap.get(playerName); + Bukkit.getConsoleSender().sendMessage(" - " + playerName + ": " + (value / 60) + "分钟"); + } + Bukkit.getConsoleSender().sendMessage("[日志 - 在线福利] 每日在线数据已刷新<" + count + "名>玩家数据"); + } + if(timeType.equals(TimeType.MONTHLY)){ + Bukkit.getConsoleSender().sendMessage("[日志 - 在线福利] 上月在线时长大于180小时的玩家:"); + for (String playerName : integerHashMap.keySet()) { + int value = integerHashMap.get(playerName); + Bukkit.getConsoleSender().sendMessage(" - " + playerName + ": " + (value / 600) + "小时"); + } + Bukkit.getConsoleSender().sendMessage("[日志 - 在线福利] 每月在线数据已刷新<" + count + "名>玩家数据"); + } + // 重新载入在线玩家 + loadOnlineAllPlayer(); + } + + public void refreshLocalPlayerData(String playerName,TimeType timeType){ + PlayerData playerData = getPlayerData(playerName); + if(timeType.equals(TimeType.DAILY)) { + playerData.refreshDailyData(); + playerData.SavePlayerData(); + } else if(timeType.equals(TimeType.MONTHLY)){ + playerData.refreshMonthlyData(); + playerData.SavePlayerData(); + } + } +} diff --git a/src/main/java/com/yaohun/onlinereward/manage/TimeType.java b/src/main/java/com/yaohun/onlinereward/manage/TimeType.java new file mode 100644 index 0000000..94bf151 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/manage/TimeType.java @@ -0,0 +1,14 @@ +package com.yaohun.onlinereward.manage; + +public enum TimeType { + + DAILY("每日"), + WEEKLY("每周"), + MONTHLY("每月"); + + public final String name; + + TimeType(String name){ + this.name = name; + } +} diff --git a/src/main/java/com/yaohun/onlinereward/util/MessageUtil.java b/src/main/java/com/yaohun/onlinereward/util/MessageUtil.java new file mode 100644 index 0000000..eb2c767 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/util/MessageUtil.java @@ -0,0 +1,61 @@ +package com.yaohun.onlinereward.util; + +import com.yaohun.onlinereward.AuOnlineReward; +import org.bukkit.Sound; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.io.File; +import java.util.HashMap; + +public class MessageUtil { + + private static HashMap languageMap = new HashMap<>(); + + public static HashMap getLanguageMap() { + return languageMap; + } + + public static void init(AuOnlineReward plugin) { + File file = new File(plugin.getDataFolder(), "language.yml"); + if (!file.exists()) { + plugin.saveResource("language.yml", false); + } + FileConfiguration config = YamlConfiguration.loadConfiguration(file); + for (String key : config.getKeys(false)){ + ConfigurationSection section = config.getConfigurationSection(key); + for (String key2 : section.getKeys(false)){ + String message = section.getString(key2).replace("&","§"); + languageMap.put(key2,message); + } + } + } + + public static String getLanguage(String key){ + HashMap hashMap = MessageUtil.getLanguageMap(); + if(hashMap.containsKey(key)){ + return hashMap.get(key); + } + return "缺少参数.§7"+key; + } + + public static void sendMessageKey(CommandSender sender, String key, Sound sound){ + String message = getLanguage(key); + sender.sendMessage(message); + if(sender instanceof Player){ + Player player = (Player) sender; + player.playSound(player.getLocation(),sound,0.8f,1.2f); + } + } + + public static void sendMessage(CommandSender sender, String message, Sound sound){ + sender.sendMessage(message); + if(sender instanceof Player){ + Player player = (Player) sender; + player.playSound(player.getLocation(),sound,0.8f,1.2f); + } + } +} diff --git a/src/main/java/com/yaohun/onlinereward/util/StackUtil.java b/src/main/java/com/yaohun/onlinereward/util/StackUtil.java new file mode 100644 index 0000000..a13a151 --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/util/StackUtil.java @@ -0,0 +1,40 @@ +package com.yaohun.onlinereward.util; + +import com.yaohun.onlinereward.AuOnlineReward; +import com.yaohun.onlinereward.data.PlayerData; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class StackUtil { + + public static ItemStack showSignStats(PlayerData playerData){ + ItemStack stack = new ItemStack(Material.SIGN); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName("§6§l我的在线信息"); + List lore = new ArrayList<>(); + lore.add(MessageUtil.getLanguage("Total-Online").replace("%time%",formatOnlineTime(playerData.totalOnline))); + lore.add(MessageUtil.getLanguage("Monthly-Online").replace("%time%",formatOnlineTime(playerData.monthOnline))); + lore.add(MessageUtil.getLanguage("Daily-Online").replace("%time%",formatOnlineTime(playerData.todayOnline))); + lore.add(MessageUtil.getLanguage("Total-Rewards").replace("%amount%",String.valueOf(playerData.totalSignAmount))); + meta.setLore(lore); + stack.setItemMeta(meta); + return stack; + } + + public static String formatOnlineTime(int timeInSeconds) { + int minutes = timeInSeconds / 60; // 转换为分钟 + int seconds = timeInSeconds % 60; // 剩余秒数 + int hours = minutes / 60; // 如果超过60分钟,则转换为小时 + minutes = minutes % 60; // 剩余的分钟数 + if (hours > 0) { + return String.format("%d小时 %d分钟", hours, minutes); + } else { + return String.format("%d分钟 %d秒", minutes, seconds); + } + } + +} diff --git a/src/main/java/com/yaohun/onlinereward/util/TimeCheckUtil.java b/src/main/java/com/yaohun/onlinereward/util/TimeCheckUtil.java new file mode 100644 index 0000000..ae3382c --- /dev/null +++ b/src/main/java/com/yaohun/onlinereward/util/TimeCheckUtil.java @@ -0,0 +1,47 @@ +package com.yaohun.onlinereward.util; + +import me.Demon.DemonPlugin.Util.DataRefreshUtil; +import me.Demon.DemonPlugin.settings.RefreshData; +import org.bukkit.Bukkit; + +import java.time.*; + +public class TimeCheckUtil { + public static boolean isAfter0020() { + // 服务器本机时间 + LocalTime now = LocalTime.now(); + LocalTime target = LocalTime.of(0, 10); + return !now.isBefore(target); + } + + public static boolean isMonthlySettleAccounts() { + RefreshData refreshDataMonthly = DataRefreshUtil.getSetting("OnlineMonth"); + if (refreshDataMonthly == null) { + return false; + } + + ZoneId zone = ZoneId.systemDefault(); + LocalDate today = LocalDate.now(zone); + + long lastTs = refreshDataMonthly.getRecordTime(); + + if (lastTs <= 0) { + refreshDataMonthly.setRecordTime(System.currentTimeMillis()); + DataRefreshUtil.SaveRefreshDataRecord(refreshDataMonthly); + return true; + } + + LocalDate recordDate = Instant.ofEpochMilli(lastTs) + .atZone(zone) + .toLocalDate(); + + YearMonth thisMonth = YearMonth.from(today); + YearMonth recordedMonth = YearMonth.from(recordDate); + if (!thisMonth.equals(recordedMonth)) { + refreshDataMonthly.setRecordTime(System.currentTimeMillis()); + DataRefreshUtil.SaveRefreshDataRecord(refreshDataMonthly); + return true; + } + return false; + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..6ac44a9 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,261 @@ +RewardData: + MinuteReward_30: + slot: 10 + needOnline: 1800 + needOnlineTime: 1800 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: IRON_INGOT + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: §6§l 阶段奖励 I §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还差 §c%time% §7才能领取 + - §7§m §f<§a奖励§f>§7§m §r + - §e金币 §e*500 + - §d经验 §e*10,000 + - §b远古深海秘药 §e*1 + - §7[§a普通§7]§6灵宠果实 §e*1 + - §6斗魂积分§7[§b10-30§7] §e*1 + commands: + - eco give %player% 500 + - dlevel give %player% 10000 + - dpotion give 远古深海秘药 1 %player% + - dpet apple %player% 1 + - pvptitle %player% 10~30 + - ditem give 普通时装币 1 %player% + - bcm &c&l★ &a玩家 &e%player% &a领取了 &b在线阶段 I &a的奖励 + MinuteReward_60: + slot: 12 + needOnline: 1800 + needOnlineTime: 3600 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: GOLD_INGOT + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: §6§l 阶段奖励 II §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还差 §c%time% §7才能领取 + - §7§m §f<§a奖励§f>§7§m §r + - §d点券 §e*10 + - §e金币 §e*1,000 + - §d经验 §e*20,000 + - §d远古精灵秘药 §e*1 + - §e月牙灵石§c[绑定] §e*3 + - §b流萤枫影§6[活动] §e*1 + - §d时装币 §e*1 + - §a活动§f·§6百万凶兽密钥 §e*1 + commands: + - points give %player% 10 + - eco give %player% 1000 + - dlevel give %player% 20000 + - dpotion give 远古精灵的秘药 1 %player% + - ditem give 月牙灵石 3 %player% + - ditem give 流萤枫影 1 %player% + - ditem give 时装币 1 %player% + - acrusade give %player% 1 + - bcm &c&l★ &a玩家 &e%player% &a领取了 &b在线阶段 II &a的奖励 + MinuteReward_120: + slot: 14 + needOnline: 3600 + needOnlineTime: 7200 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: EMERALD + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: §6§l 阶段奖励 III §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还差 §c%time% §7才能领取 + - §7§m §f<§a奖励§f>§7§m §r + - §d点券 §e*30 + - §e金币 §e*2,000 + - §d经验 §e*30,000 + - §e圣辉陨母§c[绑定] §e*1 + - §b做梦抽奖箱 §e*2 + - §c灵环夺宝钥匙§c[绑定] §e*2 + - §a活动§f·§6百万凶兽密钥 §e*1 + commands: + - points give %player% 30 + - eco give %player% 2000 + - dlevel give %player% 30000 + - ditem give 圣辉陨母 1 %player% true + - ditem give 做梦抽奖箱 2 %player% + - ditem give 魂环抽奖箱钥匙 2 %player% true + - acrusade give %player% 1 + - bcm &c&l★ &a玩家 &e%player% &a领取了 &b在线阶段 III &a的奖励 + MinuteReward_240: + slot: 16 + needOnline: 3600 + needOnlineTime: 1440 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: DIAMOND + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: §6§l 阶段奖励 IV §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还差 §c%time% §7才能领取 + - §7§m §f<§a奖励§f>§7§m §r + - §d点券 §e*60 + - §e金币 §e*3,000 + - §d经验 §e*50,000 + - §e圣辉陨母§c[绑定] §e*1 + - §f银质增幅保护券§c[绑定] §e*1 + - §c灵环夺宝钥匙§c[绑定] §e*2 + - §b流萤枫影§6[活动] §e*1 + - §d时装币 §e*2 + - §c十万年挑战密钥§6[团本] §e*1 + - §7(密钥仅限当天有效) + commands: + - points give %player% 60 + - eco give %player% 3000 + - dlevel give %player% 50000 + - ditem give 圣辉陨母 1 %player% true + - ditem give 银质增幅保护券 1 %player% true + - ditem give 魂环抽奖箱钥匙 2 %player% true + - ditem give 流萤枫影 1 %player% + - ditem give 时装币 2 %player% + - dtitem give 十万年挑战密钥时效 1 %player% 1 + - bcm &c&l★ &a玩家 &e%player% &a领取了 &b在线阶段 Iv &a的奖励 + SignReward_15: + slot: 29 + needOnline: 25 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: CHEST + meta: + ==: ItemMeta + meta-type: TILE_ENTITY + display-name: §r §6§l累积打卡奖励 I §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还需领取 §c%amounut% §7奖励 + - §7§m §f<§a奖励§f>§7§m §r + - §e金币 §e*10,000 + - §d经验 §e*100,000 + - §e次元§5精灵§d秘药§c[绑定] §e*1 + - §d唐门绝学天赋点 §e*1 + - §e精§b美§e时§b装§e币 §e*2 + - §e灵环抽奖箱钥匙§c[绑定] §e*3 + - §b流萤枫影§6[活动] §e*1 + blockMaterial: CHEST + commands: + - eco give %player% 10000 + - dlevel give %player% 100000 + - autalent give %player% 1 + - dpotion give 次元精灵秘药 1 %player% + - ditem give 精美时装币 2 %player% + - ditem give 魂环抽奖箱钥匙 3 %player% + - ditem give 流萤枫影 1 %player% + SignReward_25: + slot: 30 + needOnline: 50 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: CHEST + meta: + ==: ItemMeta + meta-type: TILE_ENTITY + display-name: §r §6§l累积打卡奖励 II §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还需领取 §c%amounut% §7奖励 + - §7§m §f<§a奖励§f>§7§m §r + - §e金币 §e*15,000 + - §d经验 §e*300,000 + - §e次元§5精灵§d秘药§c[绑定] §e*1 + - §d唐门绝学天赋点 §e*1 + - §e精§b美§e时§b装§e币 §e*2 + - §e灵环抽奖箱钥匙§c[绑定] §e*5 + - §b流萤枫影§6[活动] §e*2 + blockMaterial: CHEST + commands: + - eco give %player% 15000 + - dlevel give %player% 300000 + - autalent give %player% 1 + - dpotion give 次元精灵秘药 1 %player% + - ditem give 精美时装币 2 %player% + - ditem give 魂环抽奖箱钥匙 5 %player% + - ditem give 流萤枫影 2 %player% + SignReward_40: + slot: 32 + needOnline: 75 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: CHEST + meta: + ==: ItemMeta + meta-type: TILE_ENTITY + display-name: §r §6§l累积打卡奖励 III §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还需领取 §c%amounut% §7奖励 + - §7§m §f<§a奖励§f>§7§m §r + - §e金币 §e*30,000 + - §d经验 §e*500,000 + - §e次元§5精灵§d秘药§c[绑定] §e*1 + - §d唐门绝学天赋点 §e*2 + - §e精§b美§e时§b装§e币 §e*3 + - §e灵环抽奖箱钥匙§c[绑定] §e*10 + - §e幸运夺宝箱钥匙§c[绑定] §e*1 + - §7[§b增幅§7]§e圣天使陨母§c[绑定] §e*1 + - §c十万年兽骨抽奖箱 §e*1 + - §b流萤枫影§6[活动] §e*3 + blockMaterial: CHEST + commands: + - eco give %player% 30000 + - dlevel give %player% 500000 + - autalent give %player% 2 + - dpotion give 次元精灵秘药 1 %player% + - ditem give 精美时装币 3 %player% + - ditem give 魂环抽奖箱钥匙 10 %player% + - ditem give 幸运夺宝钥匙 1 %player% + - ditem give 圣天使陨母 1 %player% true + - ditem give 十万兽骨抽奖箱 1 %player% true + - ditem give 流萤枫影 3 %player% + SignReward_Max: + slot: 33 + needOnline: 100 + itemStack: + ==: org.bukkit.inventory.ItemStack + type: CHEST + meta: + ==: ItemMeta + meta-type: TILE_ENTITY + display-name: §r §6§l累积打卡奖励 IV §r + lore: + - §7§m §f<§d信息§f>§7§m §r + - §c§l★ §7还需领取 §c%amounut% §7奖励 + - §7§m §f<§a奖励§f>§7§m §r + - §e金币 §e*50,000 + - §d经验 §e*800,000 + - §b§l终极§9精灵§b秘药§c[绑定] §e*1 + - §d唐门绝学天赋点 §e*2 + - §e精§b美§e时§b装§e币 §e*5 + - §e灵环抽奖箱钥匙§c[绑定] §e*20 + - §e幸运夺宝箱钥匙§c[绑定] §e*1 + - §7[§b增幅§7]§e圣天使陨母§c[绑定] §e*1 + - §c十万年灵环抽奖箱 §e*1 + - §b流萤枫影§6[活动] §e*3 + blockMaterial: CHEST + commands: + - eco give %player% 50000 + - dlevel give %player% 800000 + - autalent give %player% 2 + - dpotion give 终极精灵秘药 1 %player% + - ditem give 精美时装币 5 %player% + - ditem give 魂环抽奖箱钥匙 20 %player% + - ditem give 幸运夺宝钥匙 1 %player% + - ditem give 圣天使陨母 1 %player% true + - ditem give 十万魂环抽奖箱 1 %player% true + - ditem give 流萤枫影 3 %player% diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml new file mode 100644 index 0000000..61b55d7 --- /dev/null +++ b/src/main/resources/language.yml @@ -0,0 +1,15 @@ +Online-Gui: + Title: "§r日常福利 - 累积在线豪礼相赠" + Received: "§a§l★ §7领取状态: §a已领取" + Not-Started: "§c§l★ §7领取状态: §c未开始" + Pending: "§b§l★ §7领取状态: §b待领取" + Total-Online: "§7累积在线: §a%time%" + Monthly-Online: "§7本月在线: §a%time%" + Daily-Online: "§7今日在线: §a%time%" + Total-Rewards: "§7总计领取奖励: §a%amount%次" +Message: + Reward-Progress: "你还需要获取§e[%amount%次]§a阶段奖励才能领取奖励。" + Wait-Time: "您还需要等待§e[%time%秒]§a才能领取该奖励。" + Daily-Requirement: "你需要今日在线§e[%time%秒]§a才能领取该奖励。" + Already-Claimed: "你已经领取过这个累积奖励。" + Not-Available: "这个阶段奖励尚未开启,暂时无法领取。" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..363fc09 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,7 @@ +name: AuOnlineReward +main: com.yaohun.onlinereward.AuOnlineReward +version: 1.8.0 +depend: + - DemonAPI +commands: + auonline: \ No newline at end of file