feat: 合并多次购买

Signed-off-by: 502647092 <admin@yumc.pw>
master
502647092 2016-08-16 08:56:32 +08:00
parent 92a839ce5d
commit 46760c331e
7 changed files with 114 additions and 113 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>cn.citycraft</groupId> <groupId>cn.citycraft</groupId>
<artifactId>LuckLottery</artifactId> <artifactId>LuckLottery</artifactId>
<version>1.3</version> <version>1.3.1</version>
<build> <build>
<finalName>${project.name}</finalName> <finalName>${project.name}</finalName>
<resources> <resources>

View File

@ -12,8 +12,9 @@ import cn.citycraft.LuckLottery.runnable.LotteryReward;
import cn.citycraft.LuckLottery.utils.ChatUtils; import cn.citycraft.LuckLottery.utils.ChatUtils;
import cn.citycraft.LuckLottery.utils.LotteryUtils; import cn.citycraft.LuckLottery.utils.LotteryUtils;
import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.config.FileConfig;
import cn.citycraft.PluginHelper.utils.VersionChecker;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import pw.yumc.YumCore.statistic.Statistics;
import pw.yumc.YumCore.update.SubscribeTask;
public class LuckLottery extends JavaPlugin { public class LuckLottery extends JavaPlugin {
public static Economy economy = null; public static Economy economy = null;
@ -59,7 +60,8 @@ public class LuckLottery extends JavaPlugin {
this.getLogger().info("彩票系统已开启..."); this.getLogger().info("彩票系统已开启...");
pm.registerEvents(new PlayerListen(this), this); pm.registerEvents(new PlayerListen(this), this);
new LuckLotteryCommand(); new LuckLotteryCommand();
new VersionChecker(this); new Statistics();
new SubscribeTask(true, true);
} }
@Override @Override

View File

@ -1,8 +1,6 @@
package cn.citycraft.LuckLottery.config; package cn.citycraft.LuckLottery.config;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
@ -16,7 +14,7 @@ import cn.citycraft.LuckLottery.utils.LotteryUtils;
import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.config.FileConfig;
public class PlayerData { public class PlayerData {
public static Map<String, List<List<String>>> playerLottery = new HashMap<String, List<List<String>>>(); public static Map<String, Map<String, Integer>> playerLottery = new HashMap<>();
public static FileConfig playerdata = new FileConfig(LuckLottery.plugin, "playerdate.yml"); public static FileConfig playerdata = new FileConfig(LuckLottery.plugin, "playerdate.yml");
public static void addCount() { public static void addCount() {
@ -25,15 +23,15 @@ public class PlayerData {
playerdata.save(); playerdata.save();
} }
public static List<List<String>> addLottery(final Player player, final List<String> lottery) { public static Map<String, Integer> addLottery(final Player player, final String lottery) {
List<List<String>> playerhas = playerLottery.get(player.getName()); Map<String, Integer> playerhas = playerLottery.get(player.getName());
if (playerhas == null) { if (playerhas == null) {
playerhas = new ArrayList<List<String>>(); playerhas = new HashMap<>();
} }
if (!player.isOnline()) { if (!player.isOnline()) {
return playerhas; return playerhas;
} }
playerhas.add(lottery); playerhas.put(lottery, playerhas.containsKey(lottery) ? playerhas.get(lottery) + 1 : 1);
playerLottery.put(player.getName(), playerhas); playerLottery.put(player.getName(), playerhas);
playerdata.set(player.getName(), playerhas); playerdata.set(player.getName(), playerhas);
addCount(); addCount();
@ -41,7 +39,7 @@ public class PlayerData {
} }
public static void clearLottery() { public static void clearLottery() {
for (final Entry<String, List<List<String>>> pl : playerLottery.entrySet()) { for (final Entry<String, Map<String, Integer>> pl : playerLottery.entrySet()) {
final String p = pl.getKey(); final String p = pl.getKey();
if (p != null && !"".equals(p)) { if (p != null && !"".equals(p)) {
playerdata.set(p, null); playerdata.set(p, null);
@ -51,15 +49,15 @@ public class PlayerData {
playerdata.save(); playerdata.save();
} }
public static Map<String, List<List<String>>> getPlayerLottery() { public static Map<String, Map<String, Integer>> getPlayerLottery() {
return playerLottery; return playerLottery;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static void loadPlayerLottery(final Player p) { public static void loadPlayerLottery(final String p) {
final List<?> pl = playerdata.getList(p.getName()); final Map<String, Integer> pl = (Map<String, Integer>) playerdata.get(p);
if (pl != null) { if (pl != null) {
playerLottery.put(p.getName(), (List<List<String>>) pl); playerLottery.put(p, pl);
} }
} }
@ -67,27 +65,23 @@ public class PlayerData {
int nc = 0; int nc = 0;
int np = 0; int np = 0;
int ncc = 0; int ncc = 0;
for (final List<List<String>> lls : playerLottery.values()) { for (final Map<String, Integer> lls : playerLottery.values()) {
nc += lls.size(); for (final Entry<String, Integer> a : lls.entrySet()) {
np += LotteryUtils.getPrice(); nc += a.getValue();
for (final List<String> a : lls) { np += LotteryUtils.getPrice() * a.getValue();
ncc += LuckLottery.plugin.getConfig().getInt("Reward." + LotteryUtils.getSameNumber(a), 200); 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张", 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("§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("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() { public static void reloadPlayerLottery() {
final Set<String> apl = playerdata.getKeys(false); final Set<String> apl = playerdata.getKeys(false);
for (final String p : apl) { for (final String p : apl) {
final List<?> pl = playerdata.getList(p); loadPlayerLottery(p);
if (pl != null) {
playerLottery.put(p, (List<List<String>>) pl);
}
} }
} }
@ -97,9 +91,9 @@ public class PlayerData {
} }
public static void saveLottery() { public static void saveLottery() {
for (final Entry<String, List<List<String>>> pl : playerLottery.entrySet()) { for (final Entry<String, Map<String, Integer>> pl : playerLottery.entrySet()) {
final String p = pl.getKey(); final String p = pl.getKey();
final List<List<String>> l = pl.getValue(); final Map<String, Integer> l = pl.getValue();
playerdata.set(p, l); playerdata.set(p, l);
} }
playerdata.save(); playerdata.save();
@ -108,11 +102,13 @@ public class PlayerData {
public static void showAllPlayerLottery(final CommandSender sender) { public static void showAllPlayerLottery(final CommandSender sender) {
ChatUtils.sendMessage(sender, "§c正在检索玩家彩票数据..."); ChatUtils.sendMessage(sender, "§c正在检索玩家彩票数据...");
boolean has = false; boolean has = false;
for (final Entry<String, List<List<String>>> phas : playerLottery.entrySet()) { for (final Entry<String, Map<String, Integer>> phas : playerLottery.entrySet()) {
ChatUtils.sendMessage(sender, "§6玩家: §a" + phas.getKey() + "§6购买的彩票有"); ChatUtils.sendMessage(sender, "§6玩家: §a" + phas.getKey() + "§6购买的彩票有");
for (final List<String> lry : phas.getValue()) { final Map<String, Integer> pls = phas.getValue();
for (final String lry : pls.keySet()) {
has = true; has = true;
ChatUtils.sendMessage(sender, "§a" + lry.toString()); final int count = pls.get(lry);
ChatUtils.sendMessage(sender, "§a" + lry + (count > 1 ? "*" + count : ""));
} }
} }
if (!has) { if (!has) {
@ -121,11 +117,12 @@ public class PlayerData {
} }
public static void showPlayerLottery(final Player p) { public static void showPlayerLottery(final Player p) {
final List<List<String>> playerhas = playerLottery.get(p.getName()); final Map<String, Integer> playerhas = playerLottery.get(p.getName());
if (playerhas != null && !playerhas.isEmpty()) { if (playerhas != null && !playerhas.isEmpty()) {
ChatUtils.sendMessage(p, "§6您当前购买的彩票有:"); ChatUtils.sendMessage(p, "§6您当前购买的彩票有:");
for (final List<String> lry : playerhas) { for (final String lry : playerhas.keySet()) {
ChatUtils.sendMessage(p, "§a" + lry.toString()); final int count = playerhas.get(lry);
ChatUtils.sendMessage(p, "§a" + lry + (count > 1 ? "*" + count : ""));
} }
} else { } else {
ChatUtils.sendMessage(p, "§c您当前没有购买的彩票"); ChatUtils.sendMessage(p, "§c您当前没有购买的彩票");

View File

@ -50,7 +50,7 @@ public class PlayerListen implements Listener {
p.closeInventory(); p.closeInventory();
return; return;
} }
final List<String> lottery = InvUtils.getLotteryNumber(inv); final String lottery = InvUtils.getLotteryNumber(inv);
PlayerData.addLottery(p, lottery); PlayerData.addLottery(p, lottery);
ChatUtils.sendMessage(p, "§6您当前购买的彩票号码为: " + ChatColor.GREEN + lottery.toString()); ChatUtils.sendMessage(p, "§6您当前购买的彩票号码为: " + ChatColor.GREEN + lottery.toString());
ChatUtils.howToShow(p); ChatUtils.howToShow(p);
@ -68,11 +68,7 @@ public class PlayerListen implements Listener {
} }
break; break;
} }
if (InvUtils.selectFinish(inv)) { inv.setItem(53, InvUtils.selectFinish(inv) ? InvUtils.Creat : InvUtils.CantCreat);
inv.setItem(53, InvUtils.Creat);
} else {
inv.setItem(53, InvUtils.CantCreat);
}
} }
} }

View File

@ -1,6 +1,6 @@
package cn.citycraft.LuckLottery.runnable; package cn.citycraft.LuckLottery.runnable;
import java.util.List; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.bukkit.Bukkit; 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.GOLD + "本轮彩票开奖: " + ChatColor.RED + LotteryUtils.getSystemLottery().toString());
ChatUtils.broadcastMessage(ChatColor.BLUE + "使用命令: " + ChatColor.RED + "/ll" + ChatColor.BLUE + " 或闹钟菜单可以购买彩票!"); ChatUtils.broadcastMessage(ChatColor.BLUE + "使用命令: " + ChatColor.RED + "/ll" + ChatColor.BLUE + " 或闹钟菜单可以购买彩票!");
int priceTotal = 0; int priceTotal = 0;
for (final Entry<String, List<List<String>>> players : PlayerData.playerLottery.entrySet()) { for (final Entry<String, Map<String, Integer>> players : PlayerData.playerLottery.entrySet()) {
final OfflinePlayer p = Bukkit.getOfflinePlayer(players.getKey()); final OfflinePlayer p = Bukkit.getOfflinePlayer(players.getKey());
final List<List<String>> pl = players.getValue(); final Map<String, Integer> pl = players.getValue();
if (pl != null && !pl.isEmpty()) { if (pl != null && !pl.isEmpty()) {
for (final List<String> playerlottery : pl) { for (final String playerlottery : pl.keySet()) {
final int win = LotteryUtils.getSameNumber(playerlottery); final int win = LotteryUtils.getSameNumber(playerlottery);
int winprices = 0; int winprices = 0;
winprices = plugin.getConfig().getInt("Reward." + win, 200); winprices = plugin.getConfig().getInt("Reward." + win, 200) * pl.get(playerlottery);
if (winprices > 0) { if (winprices > 0) {
priceTotal += winprices; priceTotal += winprices;
ChatUtils.broadcastMessage( ChatUtils.broadcastMessage(

View File

@ -184,13 +184,14 @@ public class InvUtils {
return null; return null;
} }
public static List<String> getLotteryNumber(final Inventory inv) { public static String getLotteryNumber(final Inventory inv) {
final List<String> lty = new ArrayList<String>(); final StringBuffer lty = new StringBuffer();
for (int i = 45; i < 51; i++) { 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))); lty.append(getItemNumber(inv.getItem(52)));
return lty; return lty.toString();
} }
public static boolean isLotteryGUI(final Inventory inv) { public static boolean isLotteryGUI(final Inventory inv) {

View File

@ -1,6 +1,7 @@
package cn.citycraft.LuckLottery.utils; package cn.citycraft.LuckLottery.utils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
@ -67,6 +68,10 @@ public class LotteryUtils {
return samenum; return samenum;
} }
public static int getSameNumber(final String lottery) {
return getSameNumber(Arrays.asList(lottery.split("-")), systemLottery);
}
public static List<String> getSystemLottery() { public static List<String> getSystemLottery() {
return systemLottery; return systemLottery;
} }