aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java62
1 files changed, 39 insertions, 23 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java
index 96412db6..b32aad61 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/PlayerStats.java
@@ -25,17 +25,24 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.util.Constants;
+import io.github.moulberry.notenoughupdates.util.JsonUtils;
import io.github.moulberry.notenoughupdates.util.Utils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.util.AbstractMap;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.JsonToNBT;
-import net.minecraft.nbt.NBTException;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumChatFormatting;
@@ -653,33 +660,42 @@ public class PlayerStats {
if (inventoryInfo == null || !inventoryInfo.has("talisman_bag") || !inventoryInfo.get("talisman_bag").isJsonArray()) {
return -1;
}
- JsonArray accessories = inventoryInfo.get("talisman_bag").getAsJsonArray();
+
+ Map<String, Integer> accessories = JsonUtils.getJsonArrayAsStream(inventoryInfo.get("talisman_bag").getAsJsonArray())
+ .map(o -> {
+ try {
+ return JsonToNBT.getTagFromJson(o.getAsJsonObject().get("nbttag").getAsString());
+ } catch (Exception ignored) {
+ return null;
+ }
+ }).filter(Objects::nonNull).map(tag -> {
+ NBTTagList loreTagList = tag.getCompoundTag("display").getTagList("Lore", 8);
+ String lastElement = loreTagList.getStringTagAt(loreTagList.tagCount() - 1);
+ if (lastElement.contains(EnumChatFormatting.OBFUSCATED.toString())) {
+ lastElement = lastElement.substring(lastElement.indexOf(' ')).trim().substring(4);
+ }
+ JsonArray lastElementJsonArray = new JsonArray();
+ lastElementJsonArray.add(new JsonPrimitive(lastElement));
+ return new AbstractMap.SimpleEntry<>(
+ tag.getCompoundTag("ExtraAttributes").getString("id"),
+ Utils.getRarityFromLore(lastElementJsonArray)
+ );
+ }).sorted(Comparator.comparingInt(e -> -e.getValue())).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1,v2)->v1, LinkedHashMap::new));
+
+ Set<String> ignoredTalismans = new HashSet<>();
int powderAmount = 0;
- for (JsonElement element : accessories) {
- if (element == null || !element.isJsonObject()) {
+ for (Map.Entry<String, Integer> entry : accessories.entrySet()) {
+ if (ignoredTalismans.contains(entry.getKey())) {
continue;
}
- JsonObject accessory = element.getAsJsonObject();
- NBTTagCompound tag;
- try {
- tag = JsonToNBT.getTagFromJson(accessory.get("nbttag").getAsString());
- } catch (NBTException ignored) {
- continue;
- }
-
- NBTTagList loreTagList = tag.getCompoundTag("display").getTagList("Lore", 8);
- String id = tag.getCompoundTag("ExtraAttributes").getString("id");
- String lastElement = loreTagList.getStringTagAt(loreTagList.tagCount() - 1);
- //strip information that suggests the rarity has been upgraded (obfuscated char)
- if (lastElement.contains("§k")) {
- lastElement = lastElement.substring(lastElement.indexOf(' ')).trim().substring(4);
+ JsonArray children = Utils.getElementOrDefault(Constants.PARENTS, entry.getKey(), new JsonArray()).getAsJsonArray();
+ for (JsonElement child : children) {
+ ignoredTalismans.add(child.getAsString());
}
- JsonArray lastElementJsonArray = new JsonArray();
- lastElementJsonArray.add(new JsonPrimitive(lastElement));
- if (id.equals("HEGEMONY_ARTIFACT")) {
- switch (Utils.getRarityFromLore(lastElementJsonArray)) {
+ if (entry.getKey().equals("HEGEMONY_ARTIFACT")) {
+ switch (entry.getValue()) {
case 4:
powderAmount += 16;
break;
@@ -688,7 +704,7 @@ public class PlayerStats {
break;
}
}
- switch (Utils.getRarityFromLore(lastElementJsonArray)) {
+ switch (entry.getValue()) {
case 0:
case 6:
powderAmount += 3;