diff --git a/pom.xml b/pom.xml index cfda483..9603114 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 cn.citycraft LuckLottery - 1.3 + 1.3.1 ${project.name} diff --git a/src/main/java/cn/citycraft/LuckLottery/LuckLottery.java b/src/main/java/cn/citycraft/LuckLottery/LuckLottery.java index 528cdb2..aeb5216 100644 --- a/src/main/java/cn/citycraft/LuckLottery/LuckLottery.java +++ b/src/main/java/cn/citycraft/LuckLottery/LuckLottery.java @@ -12,8 +12,9 @@ import cn.citycraft.LuckLottery.runnable.LotteryReward; import cn.citycraft.LuckLottery.utils.ChatUtils; import cn.citycraft.LuckLottery.utils.LotteryUtils; import cn.citycraft.PluginHelper.config.FileConfig; -import cn.citycraft.PluginHelper.utils.VersionChecker; import net.milkbowl.vault.economy.Economy; +import pw.yumc.YumCore.statistic.Statistics; +import pw.yumc.YumCore.update.SubscribeTask; public class LuckLottery extends JavaPlugin { public static Economy economy = null; @@ -59,7 +60,8 @@ public class LuckLottery extends JavaPlugin { this.getLogger().info("彩票系统已开启..."); pm.registerEvents(new PlayerListen(this), this); new LuckLotteryCommand(); - new VersionChecker(this); + new Statistics(); + new SubscribeTask(true, true); } @Override diff --git a/src/main/java/cn/citycraft/LuckLottery/config/PlayerData.java b/src/main/java/cn/citycraft/LuckLottery/config/PlayerData.java index 3196039..fe2ed1c 100644 --- a/src/main/java/cn/citycraft/LuckLottery/config/PlayerData.java +++ b/src/main/java/cn/citycraft/LuckLottery/config/PlayerData.java @@ -1,8 +1,6 @@ package cn.citycraft.LuckLottery.config; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -16,7 +14,7 @@ import cn.citycraft.LuckLottery.utils.LotteryUtils; import cn.citycraft.PluginHelper.config.FileConfig; public class PlayerData { - public static Map>> playerLottery = new HashMap>>(); + public static Map> playerLottery = new HashMap<>(); public static FileConfig playerdata = new FileConfig(LuckLottery.plugin, "playerdate.yml"); public static void addCount() { @@ -25,15 +23,15 @@ public class PlayerData { playerdata.save(); } - public static List> addLottery(final Player player, final List lottery) { - List> playerhas = playerLottery.get(player.getName()); + public static Map addLottery(final Player player, final String lottery) { + Map playerhas = playerLottery.get(player.getName()); if (playerhas == null) { - playerhas = new ArrayList>(); + playerhas = new HashMap<>(); } if (!player.isOnline()) { return playerhas; } - playerhas.add(lottery); + playerhas.put(lottery, playerhas.containsKey(lottery) ? playerhas.get(lottery) + 1 : 1); playerLottery.put(player.getName(), playerhas); playerdata.set(player.getName(), playerhas); addCount(); @@ -41,7 +39,7 @@ public class PlayerData { } public static void clearLottery() { - for (final Entry>> pl : playerLottery.entrySet()) { + for (final Entry> pl : playerLottery.entrySet()) { final String p = pl.getKey(); if (p != null && !"".equals(p)) { playerdata.set(p, null); @@ -51,15 +49,15 @@ public class PlayerData { playerdata.save(); } - public static Map>> getPlayerLottery() { + public static Map> getPlayerLottery() { return playerLottery; } @SuppressWarnings("unchecked") - public static void loadPlayerLottery(final Player p) { - final List pl = playerdata.getList(p.getName()); + public static void loadPlayerLottery(final String p) { + final Map pl = (Map) playerdata.get(p); if (pl != null) { - playerLottery.put(p.getName(), (List>) pl); + playerLottery.put(p, pl); } } @@ -67,27 +65,23 @@ public class PlayerData { int nc = 0; int np = 0; int ncc = 0; - for (final List> lls : playerLottery.values()) { - nc += lls.size(); - np += LotteryUtils.getPrice(); - for (final List a : lls) { - ncc += LuckLottery.plugin.getConfig().getInt("Reward." + LotteryUtils.getSameNumber(a), 200); + for (final Map lls : playerLottery.values()) { + for (final Entry a : lls.entrySet()) { + nc += a.getValue(); + np += LotteryUtils.getPrice() * a.getValue(); + ncc += LuckLottery.plugin.getConfig().getInt("Reward." + LotteryUtils.getSameNumber(a.getKey()), 200) * a.getValue(); } } ChatUtils.sendMessage(sender, String.format("§a本轮当前售出彩票 §e%s §a张", nc)); ChatUtils.sendMessage(sender, String.format("§a本轮预计回收金额 §e%s§a(总: §e%s §a中奖返还: §e%s§a) §a元", np - ncc, np, ncc)); ChatUtils.sendMessage(sender, String.format("§d总计出售彩票 §e%s §d张", playerdata.getInt("Count", 0))); - ChatUtils.sendMessage(sender, String.format("§d总计回收金额 §e%s §d元", playerdata.getInt("PriceTotal", 0))); + ChatUtils.sendMessage(sender, String.format("§d总计回收金额 §e%s §d元", playerdata.getInt("PriceTotal", 0) - ncc)); } - @SuppressWarnings("unchecked") public static void reloadPlayerLottery() { final Set apl = playerdata.getKeys(false); for (final String p : apl) { - final List pl = playerdata.getList(p); - if (pl != null) { - playerLottery.put(p, (List>) pl); - } + loadPlayerLottery(p); } } @@ -97,9 +91,9 @@ public class PlayerData { } public static void saveLottery() { - for (final Entry>> pl : playerLottery.entrySet()) { + for (final Entry> pl : playerLottery.entrySet()) { final String p = pl.getKey(); - final List> l = pl.getValue(); + final Map l = pl.getValue(); playerdata.set(p, l); } playerdata.save(); @@ -108,11 +102,13 @@ public class PlayerData { public static void showAllPlayerLottery(final CommandSender sender) { ChatUtils.sendMessage(sender, "§c正在检索玩家彩票数据..."); boolean has = false; - for (final Entry>> phas : playerLottery.entrySet()) { + for (final Entry> phas : playerLottery.entrySet()) { ChatUtils.sendMessage(sender, "§6玩家: §a" + phas.getKey() + "§6购买的彩票有"); - for (final List lry : phas.getValue()) { + final Map pls = phas.getValue(); + for (final String lry : pls.keySet()) { has = true; - ChatUtils.sendMessage(sender, "§a" + lry.toString()); + final int count = pls.get(lry); + ChatUtils.sendMessage(sender, "§a" + lry + (count > 1 ? "*" + count : "")); } } if (!has) { @@ -121,11 +117,12 @@ public class PlayerData { } public static void showPlayerLottery(final Player p) { - final List> playerhas = playerLottery.get(p.getName()); + final Map playerhas = playerLottery.get(p.getName()); if (playerhas != null && !playerhas.isEmpty()) { ChatUtils.sendMessage(p, "§6您当前购买的彩票有:"); - for (final List lry : playerhas) { - ChatUtils.sendMessage(p, "§a" + lry.toString()); + for (final String lry : playerhas.keySet()) { + final int count = playerhas.get(lry); + ChatUtils.sendMessage(p, "§a" + lry + (count > 1 ? "*" + count : "")); } } else { ChatUtils.sendMessage(p, "§c您当前没有购买的彩票!"); diff --git a/src/main/java/cn/citycraft/LuckLottery/listen/PlayerListen.java b/src/main/java/cn/citycraft/LuckLottery/listen/PlayerListen.java index 840e257..e73af18 100644 --- a/src/main/java/cn/citycraft/LuckLottery/listen/PlayerListen.java +++ b/src/main/java/cn/citycraft/LuckLottery/listen/PlayerListen.java @@ -22,77 +22,73 @@ import cn.citycraft.LuckLottery.utils.InvUtils; import cn.citycraft.LuckLottery.utils.LotteryUtils; public class PlayerListen implements Listener { - LuckLottery plugin; + LuckLottery plugin; - public PlayerListen(final LuckLottery luckLottery) { - this.plugin = luckLottery; - } + public PlayerListen(final LuckLottery luckLottery) { + this.plugin = luckLottery; + } - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onInventoryClick(final InventoryClickEvent e) { - if (InvUtils.isLotteryGUI(e.getInventory())) { - e.setCancelled(true); - final Player p = (Player) e.getWhoClicked(); - final ItemStack ci = e.getCurrentItem(); - final Inventory inv = e.getInventory(); - final int solt = e.getRawSlot(); - if (ci == null || ci.getType() == Material.AIR) { - return; - } - if (!ci.getItemMeta().hasDisplayName()) { - return; - } - final String clickName = ci.getItemMeta().getDisplayName(); - switch (clickName) { - case InvUtils.Create: - if (!LuckLottery.economy.hasAccount(p) || !LuckLottery.economy.has(p, LotteryUtils.getPrice())) { - ChatUtils.sendMessage(p, ChatColor.GOLD + "你没有足够的金钱购买彩票,每张彩票" + ChatColor.RED + LotteryUtils.getPrice() + ChatColor.GOLD + "元!"); - p.closeInventory(); - return; - } - final List lottery = InvUtils.getLotteryNumber(inv); - PlayerData.addLottery(p, lottery); - ChatUtils.sendMessage(p, "§6您当前购买的彩票号码为: " + ChatColor.GREEN + lottery.toString()); - ChatUtils.howToShow(p); - LuckLottery.economy.withdrawPlayer(p, LotteryUtils.getPrice()); - p.closeInventory(); - break; - case InvUtils.ReSet: - inv.setContents(InvUtils.getGui()); - break; - default: - if (solt < 36 && InvUtils.isLotteryItem(ci)) { - if (setSelect(inv, ci)) { - inv.setItem(solt, InvUtils.A); - } - } - break; - } - if (InvUtils.selectFinish(inv)) { - inv.setItem(53, InvUtils.Creat); - } else { - inv.setItem(53, InvUtils.CantCreat); - } - } - } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onInventoryClick(final InventoryClickEvent e) { + if (InvUtils.isLotteryGUI(e.getInventory())) { + e.setCancelled(true); + final Player p = (Player) e.getWhoClicked(); + final ItemStack ci = e.getCurrentItem(); + final Inventory inv = e.getInventory(); + final int solt = e.getRawSlot(); + if (ci == null || ci.getType() == Material.AIR) { + return; + } + if (!ci.getItemMeta().hasDisplayName()) { + return; + } + final String clickName = ci.getItemMeta().getDisplayName(); + switch (clickName) { + case InvUtils.Create: + if (!LuckLottery.economy.hasAccount(p) || !LuckLottery.economy.has(p, LotteryUtils.getPrice())) { + ChatUtils.sendMessage(p, ChatColor.GOLD + "你没有足够的金钱购买彩票,每张彩票" + ChatColor.RED + LotteryUtils.getPrice() + ChatColor.GOLD + "元!"); + p.closeInventory(); + return; + } + final String lottery = InvUtils.getLotteryNumber(inv); + PlayerData.addLottery(p, lottery); + ChatUtils.sendMessage(p, "§6您当前购买的彩票号码为: " + ChatColor.GREEN + lottery.toString()); + ChatUtils.howToShow(p); + LuckLottery.economy.withdrawPlayer(p, LotteryUtils.getPrice()); + p.closeInventory(); + break; + case InvUtils.ReSet: + inv.setContents(InvUtils.getGui()); + break; + default: + if (solt < 36 && InvUtils.isLotteryItem(ci)) { + if (setSelect(inv, ci)) { + inv.setItem(solt, InvUtils.A); + } + } + break; + } + inv.setItem(53, InvUtils.selectFinish(inv) ? InvUtils.Creat : InvUtils.CantCreat); + } + } - @EventHandler(priority = EventPriority.HIGH) - public void onPlayerInteract(final PlayerJoinEvent e) { - final Player p = e.getPlayer(); - final List messages = plugin.getOfflineData().getMessage(p.getName()); - if (messages != null && !messages.isEmpty()) { - Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(LuckLottery.plugin, new LaterShow(p, messages), 5); - plugin.getOfflineData().clearMessage(p.getName()); - } - } + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerInteract(final PlayerJoinEvent e) { + final Player p = e.getPlayer(); + final List messages = plugin.getOfflineData().getMessage(p.getName()); + if (messages != null && !messages.isEmpty()) { + Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(LuckLottery.plugin, new LaterShow(p, messages), 5); + plugin.getOfflineData().clearMessage(p.getName()); + } + } - private boolean setSelect(final Inventory inv, final ItemStack is) { - for (int i = 45; i < 53; i++) { - if (inv.getItem(i) == null) { - inv.setItem(i, is); - return true; - } - } - return false; - } + private boolean setSelect(final Inventory inv, final ItemStack is) { + for (int i = 45; i < 53; i++) { + if (inv.getItem(i) == null) { + inv.setItem(i, is); + return true; + } + } + return false; + } } diff --git a/src/main/java/cn/citycraft/LuckLottery/runnable/LotteryReward.java b/src/main/java/cn/citycraft/LuckLottery/runnable/LotteryReward.java index f852155..6e6f363 100644 --- a/src/main/java/cn/citycraft/LuckLottery/runnable/LotteryReward.java +++ b/src/main/java/cn/citycraft/LuckLottery/runnable/LotteryReward.java @@ -1,6 +1,6 @@ package cn.citycraft.LuckLottery.runnable; -import java.util.List; +import java.util.Map; import java.util.Map.Entry; import org.bukkit.Bukkit; @@ -31,14 +31,14 @@ public class LotteryReward implements Runnable { ChatUtils.broadcastMessage(ChatColor.GOLD + "本轮彩票开奖: " + ChatColor.RED + LotteryUtils.getSystemLottery().toString()); ChatUtils.broadcastMessage(ChatColor.BLUE + "使用命令: " + ChatColor.RED + "/ll" + ChatColor.BLUE + " 或闹钟菜单可以购买彩票!"); int priceTotal = 0; - for (final Entry>> players : PlayerData.playerLottery.entrySet()) { + for (final Entry> players : PlayerData.playerLottery.entrySet()) { final OfflinePlayer p = Bukkit.getOfflinePlayer(players.getKey()); - final List> pl = players.getValue(); + final Map pl = players.getValue(); if (pl != null && !pl.isEmpty()) { - for (final List playerlottery : pl) { + for (final String playerlottery : pl.keySet()) { final int win = LotteryUtils.getSameNumber(playerlottery); int winprices = 0; - winprices = plugin.getConfig().getInt("Reward." + win, 200); + winprices = plugin.getConfig().getInt("Reward." + win, 200) * pl.get(playerlottery); if (winprices > 0) { priceTotal += winprices; ChatUtils.broadcastMessage( diff --git a/src/main/java/cn/citycraft/LuckLottery/utils/InvUtils.java b/src/main/java/cn/citycraft/LuckLottery/utils/InvUtils.java index c0fd368..77630a6 100644 --- a/src/main/java/cn/citycraft/LuckLottery/utils/InvUtils.java +++ b/src/main/java/cn/citycraft/LuckLottery/utils/InvUtils.java @@ -184,13 +184,14 @@ public class InvUtils { return null; } - public static List getLotteryNumber(final Inventory inv) { - final List lty = new ArrayList(); + public static String getLotteryNumber(final Inventory inv) { + final StringBuffer lty = new StringBuffer(); for (int i = 45; i < 51; i++) { - lty.add(getItemNumber(inv.getItem(i))); + lty.append(getItemNumber(inv.getItem(i))); + lty.append("-"); } - lty.add(getItemNumber(inv.getItem(52))); - return lty; + lty.append(getItemNumber(inv.getItem(52))); + return lty.toString(); } public static boolean isLotteryGUI(final Inventory inv) { diff --git a/src/main/java/cn/citycraft/LuckLottery/utils/LotteryUtils.java b/src/main/java/cn/citycraft/LuckLottery/utils/LotteryUtils.java index e56a71f..19797f2 100644 --- a/src/main/java/cn/citycraft/LuckLottery/utils/LotteryUtils.java +++ b/src/main/java/cn/citycraft/LuckLottery/utils/LotteryUtils.java @@ -1,6 +1,7 @@ package cn.citycraft.LuckLottery.utils; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Random; @@ -67,6 +68,10 @@ public class LotteryUtils { return samenum; } + public static int getSameNumber(final String lottery) { + return getSameNumber(Arrays.asList(lottery.split("-")), systemLottery); + } + public static List getSystemLottery() { return systemLottery; }