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;