diff --git a/AdvancedCore/Resources/Rewards/ExampleAdvanced.yml b/AdvancedCore/Resources/Rewards/ExampleAdvanced.yml index 75a773a265..45c77e2948 100644 --- a/AdvancedCore/Resources/Rewards/ExampleAdvanced.yml +++ b/AdvancedCore/Resources/Rewards/ExampleAdvanced.yml @@ -202,4 +202,17 @@ ActionBar: Message: '&cThis is an actionbar!' # Delay until action bar goes away (in ticks) Delay: 30 + +OnlyOneLucky: false +# The example below would give a 1 in 10 chance of receiving an extra $100, and a 1 in 50 chance of an extra $1000. +Lucky: + '10': + Messages: + Plyaer: 'You were lucky and received an extra $100!' + Money: 100 + '50': + Messages: + Plyaer: 'You were lucky and received an extra $1000!' + Money: 1000 + \ No newline at end of file diff --git a/AdvancedCore/pom.xml b/AdvancedCore/pom.xml index fa7e538c89..6c3facd0f5 100644 --- a/AdvancedCore/pom.xml +++ b/AdvancedCore/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.Ben12345rocks AdvancedCore - 2.8.1 + 2.8.2 jar AdvancedCore diff --git a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/Reward.java b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/Reward.java index 5bbaf47237..4038d2c2a1 100644 --- a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/Reward.java +++ b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/Reward.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; @@ -43,7 +44,7 @@ public class Reward { /** The reward type. */ private String rewardType; - + private boolean forceOffline; /** The delay enabled. */ @@ -232,9 +233,13 @@ public class Reward { private int effectRadius; private ArrayList javascripts; - + private ArrayList priority; + private HashMap luckyRewards; + + private boolean onlyOneLucky; + /** * @return the name */ @@ -331,8 +336,8 @@ public boolean checkDelayed(User user) { public boolean checkRandomChance() { return MiscUtils.getInstance().checkChance(getRandomChance(), 100); } - - public void givePriorityReward(User user, final HashMap placeholders) { + + public void givePriorityReward(User user, final HashMap placeholders) { for (String str : getPriority()) { Reward reward = RewardHandler.getInstance().getReward(str); if (reward.canGiveReward(user)) { @@ -341,7 +346,7 @@ public void givePriorityReward(User user, final HashMap placehold } } } - + public boolean canGiveReward(User user) { if (hasPermission(user)) { return true; @@ -1093,6 +1098,32 @@ public void giveRewardReward(User user, boolean online, HashMap } } + public void giveLucky(User user, HashMap placeholders) { + HashMap map = new LinkedHashMap(); + for (Entry entry : luckyRewards.entrySet()) { + if (MiscUtils.getInstance().checkChance(1, entry.getKey())) { + // new RewardBuilder(getConfig().getData(), + // entry.getValue()).withPlaceHolder(placeholders).send(user); + map.put(entry.getValue(), entry.getKey()); + } + } + + map = ArrayUtils.getInstance().sortByValuesStr(map, false); + if (map.size() > 0) { + if (isOnlyOneLucky()) { + for (Entry entry : map.entrySet()) { + new RewardBuilder(getConfig().getData(), entry.getKey()).withPlaceHolder(placeholders).send(user); + return; + } + + } else { + for (Entry entry : map.entrySet()) { + new RewardBuilder(getConfig().getData(), entry.getKey()).withPlaceHolder(placeholders).send(user); + } + } + } + } + /** * Give reward user. * @@ -1114,7 +1145,7 @@ public void giveRewardUser(User user, HashMap phs) { Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); phs.put("CurrentDate", "" + new SimpleDateFormat("EEE, d MMM yyyy HH:mm").format(date)); final HashMap placeholders = new HashMap(phs); - givePriorityReward(user,placeholders); + givePriorityReward(user, placeholders); giveRandom(user, true, placeholders); runJavascript(user, true, placeholders); int money = getMoneyToGive(); @@ -1132,6 +1163,7 @@ public void giveRewardUser(User user, HashMap phs) { sendMessage(user, money, exp, placeholders); checkChoiceRewards(user); sendFirework(user); + giveLucky(user, placeholders); plugin.debug("Gave " + user.getPlayerName() + " reward " + name); @@ -1298,7 +1330,7 @@ public void load(File folder, String reward) { public void loadValues() { setRewardType(getConfig().getRewardType()); - + forceOffline = getConfig().getForceOffline(); setDelayEnabled(getConfig().getDelayedEnabled()); @@ -1391,8 +1423,36 @@ public void loadValues() { effectData = getConfig().getEffectData(); effectParticles = getConfig().getEffectParticles(); effectRadius = getConfig().getEffectRadius(); - + priority = getConfig().getPriority(); + + luckyRewards = new HashMap(); + + for (String str : getConfig().getLuckyRewards()) { + if (StringUtils.getInstance().isInt(str)) { + int num = Integer.parseInt(str); + if (num > 0) { + String path = getConfig().getLuckyRewardsPath(num); + luckyRewards.put(num, path); + } + } + } + + onlyOneLucky = getConfig().getOnlyOneLucky(); + } + + /** + * @return the luckyRewards + */ + public HashMap getLuckyRewards() { + return luckyRewards; + } + + /** + * @return the onlyOneLucky + */ + public boolean isOnlyOneLucky() { + return onlyOneLucky; } /** @@ -1403,7 +1463,8 @@ public boolean isForceOffline() { } /** - * @param forceOffline the forceOffline to set + * @param forceOffline + * the forceOffline to set */ public void setForceOffline(boolean forceOffline) { this.forceOffline = forceOffline; diff --git a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/RewardFileData.java b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/RewardFileData.java index 1935753911..86fb937576 100644 --- a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/RewardFileData.java +++ b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Objects/RewardFileData.java @@ -293,6 +293,22 @@ public ArrayList getFireworkColorsFadeOut() { return (ArrayList) getData().getList("Firework.FadeOutColor", new ArrayList()); } + public Set getLuckyRewards() { + if (getData().getConfigurationSection("Lucky") != null) { + return getData().getConfigurationSection("Lucky").getKeys(false); + } else { + return new HashSet(); + } + } + + public boolean getOnlyOneLucky() { + return getData().getBoolean("OnlyOneLucky"); + } + + public String getLuckyRewardsPath(int num) { + return "Lucky." + num; + } + /** * Gets the firework enabled. * diff --git a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/TimeChecker/TimeChecker.java b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/TimeChecker/TimeChecker.java index 9398c6d609..029b7f7ef5 100644 --- a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/TimeChecker/TimeChecker.java +++ b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/TimeChecker/TimeChecker.java @@ -6,8 +6,6 @@ import java.time.temporal.WeekFields; import java.util.Locale; -import org.bukkit.Bukkit; - import com.Ben12345rocks.AdvancedCore.AdvancedCoreHook; import com.Ben12345rocks.AdvancedCore.Data.ServerData; import com.Ben12345rocks.AdvancedCore.Listeners.DateChangedEvent; @@ -96,37 +94,33 @@ public boolean hasWeekChanged() { * Update. */ public void update() { - Bukkit.getScheduler().runTaskAsynchronously(plugin.getPlugin(), new Runnable() { - - @Override - public void run() { - boolean dayChanged = false; - boolean weekChanged = false; - boolean monthChanged = false; - if (hasDayChanged()) { - plugin.debug("Day changed"); - dayChanged = true; - } - if (hasWeekChanged()) { - plugin.debug("Week Changed"); - weekChanged = true; - } - if (hasMonthChanged()) { - plugin.debug("Month Changed"); - monthChanged = true; - } - - if (dayChanged) { - forceChanged(TimeType.DAY); - } - if (weekChanged) { - forceChanged(TimeType.WEEK); - } - if (monthChanged) { - forceChanged(TimeType.MONTH); - } - } - }); + + boolean dayChanged = false; + boolean weekChanged = false; + boolean monthChanged = false; + if (hasDayChanged()) { + plugin.debug("Day changed"); + dayChanged = true; + } + if (hasWeekChanged()) { + plugin.debug("Week Changed"); + weekChanged = true; + } + if (hasMonthChanged()) { + plugin.debug("Month Changed"); + monthChanged = true; + } + + if (dayChanged) { + forceChanged(TimeType.DAY); + } + if (weekChanged) { + forceChanged(TimeType.WEEK); + } + if (monthChanged) { + forceChanged(TimeType.MONTH); + } + } public void forceChanged(TimeType time) { diff --git a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/ArrayUtils.java b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/ArrayUtils.java index 21c81f18cd..a924e08a5e 100644 --- a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/ArrayUtils.java +++ b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/ArrayUtils.java @@ -452,6 +452,32 @@ public int compare(Entry o1, Entry o2) { return sortedMap; } + public HashMap sortByValuesStr(HashMap unsortMap, final boolean order) { + + List> list = new LinkedList>(unsortMap.entrySet()); + + // Sorting the list based on values + Collections.sort(list, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + if (order) { + return o1.getValue().compareTo(o2.getValue()); + } else { + return o2.getValue().compareTo(o1.getValue()); + + } + } + }); + + // Maintaining insertion order with the help of LinkedList + HashMap sortedMap = new LinkedHashMap(); + for (Entry entry : list) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + return sortedMap; + } + public HashMap sortByValuesLong(HashMap unsortMap, final boolean order) { List> list = new LinkedList>(unsortMap.entrySet()); diff --git a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/MiscUtils.java b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/MiscUtils.java index 569b3e1c01..cc95cab585 100644 --- a/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/MiscUtils.java +++ b/AdvancedCore/src/com/Ben12345rocks/AdvancedCore/Util/Misc/MiscUtils.java @@ -64,7 +64,7 @@ public boolean checkChance(double chance, double outOf) { double randomNum = ThreadLocalRandom.current().nextDouble(outOf); - plugin.debug("Chance: " + chance + ", RandomNum: " + randomNum); + plugin.debug("Chance Required: " + chance + ", RandomNum: " + randomNum); if (randomNum <= chance) { return true;