aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java73
1 files changed, 63 insertions, 10 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java b/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java
index cde93ddf..fc5d3e38 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/util/XPInformation.java
@@ -37,7 +37,8 @@ public class XPInformation {
private static Splitter SPACE_SPLITTER = Splitter.on(" ").omitEmptyStrings().trimResults();
private static Pattern SKILL_PATTERN = Pattern.compile("\\+(\\d+(?:,\\d+)*(?:\\.\\d+)?) (.+) \\((\\d+(?:,\\d+)*(?:\\.\\d+)?)/(\\d+(?:,\\d+)*(?:\\.\\d+)?)\\)");
- private static Pattern SKILL_PATTERN_ALT = Pattern.compile("\\+(\\d+(?:,\\d+)*(?:\\.\\d+)?) (.+) \\((\\d\\d?(?:\\.\\d\\d?)?)%\\)");
+ private static Pattern SKILL_PATTERN_MULTIPLIER = Pattern.compile("\\+(\\d+(?:,\\d+)*(?:\\.\\d+)?) (.+) \\((\\d+(?:,\\d+)*(?:\\.\\d+)?)/(\\d+(?:k|m|b))\\)");
+ private static Pattern SKILL_PATTERN_PERCENTAGE = Pattern.compile("\\+(\\d+(?:,\\d+)*(?:\\.\\d+)?) (.+) \\((\\d\\d?(?:\\.\\d\\d?)?)%\\)");
public HashMap<String, SkillInfo> getSkillInfoMap() {
return skillInfoMap;
@@ -47,13 +48,22 @@ public class XPInformation {
return skillInfoMap.get(skillName.toLowerCase());
}
+ private String lastActionBar = null;
+
@SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true)
public void onChatReceived(ClientChatReceivedEvent event) {
if(event.type == 2) {
JsonObject leveling = Constants.LEVELING;
if(leveling == null) return;
- List<String> components = SPACE_SPLITTER.splitToList(StringUtils.cleanColour(event.message.getUnformattedText()));
+ String actionBar = StringUtils.cleanColour(event.message.getUnformattedText());
+
+ if(lastActionBar != null && lastActionBar.equalsIgnoreCase(actionBar)) {
+ return;
+ }
+ lastActionBar = actionBar;
+
+ List<String> components = SPACE_SPLITTER.splitToList(actionBar);
for(String component : components) {
Matcher matcher = SKILL_PATTERN.matcher(component);
@@ -83,14 +93,57 @@ public class XPInformation {
skillInfoMap.put(skillS.toLowerCase(), skillInfo);
return;
- }
- matcher = SKILL_PATTERN_ALT.matcher(component);
- if(matcher.matches()) {
- String skillS = matcher.group(2);
- String xpPercentageS = matcher.group(3).replace(",","");
-
- float xpPercentage = Float.parseFloat(xpPercentageS);
- updateWithPercentage.put(skillS.toLowerCase(), xpPercentage);
+ } else {
+ matcher = SKILL_PATTERN_PERCENTAGE.matcher(component);
+ if(matcher.matches()) {
+ String skillS = matcher.group(2);
+ String xpPercentageS = matcher.group(3).replace(",","");
+
+ float xpPercentage = Float.parseFloat(xpPercentageS);
+ updateWithPercentage.put(skillS.toLowerCase(), xpPercentage);
+ } else {
+ matcher = SKILL_PATTERN_MULTIPLIER.matcher(component);
+
+ if(matcher.matches()) {
+ String skillS = matcher.group(2);
+ String currentXpS = matcher.group(3).replace(",","");
+ String maxXpS = matcher.group(4).replace(",","");
+
+ float maxMult = 1;
+ if(maxXpS.endsWith("k")) {
+ maxMult = 1000;
+ maxXpS = maxXpS.substring(0, maxXpS.length()-1);
+ } else if(maxXpS.endsWith("m")) {
+ maxMult = 1000000;
+ maxXpS = maxXpS.substring(0, maxXpS.length()-1);
+ } else if(maxXpS.endsWith("b")) {
+ maxMult = 1000000000;
+ maxXpS = maxXpS.substring(0, maxXpS.length()-1);
+ }
+
+ float currentXp = Float.parseFloat(currentXpS);
+ float maxXp = Float.parseFloat(maxXpS) * maxMult;
+
+ SkillInfo skillInfo = new SkillInfo();
+ skillInfo.currentXp = currentXp;
+ skillInfo.currentXpMax = maxXp;
+ skillInfo.totalXp = currentXp;
+
+ JsonArray levelingArray = leveling.getAsJsonArray("leveling_xp");
+ for(int i=0; i<levelingArray.size(); i++) {
+ float cap = levelingArray.get(i).getAsFloat();
+ if(maxXp > 0 && maxXp <= cap) {
+ break;
+ }
+
+ skillInfo.totalXp += cap;
+ skillInfo.level++;
+ }
+
+ skillInfoMap.put(skillS.toLowerCase(), skillInfo);
+ return;
+ }
+ }
}
}
}