diff options
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.java | 62 |
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; |
