From 8115922b37e375285c2a72dbdbb5d83fd942e27c Mon Sep 17 00:00:00 2001 From: kr45732 <52721908+kr45732@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:00:04 -0400 Subject: PV Overhaul (#708) Co-authored-by: Lulonaut --- .../profileviewer/ProfileViewerUtils.java | 65 +++++++++++++++++----- 1 file changed, 52 insertions(+), 13 deletions(-) (limited to 'src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewerUtils.java') diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewerUtils.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewerUtils.java index 66164688..5c7e4b29 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewerUtils.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewerUtils.java @@ -48,34 +48,30 @@ import java.util.stream.Collectors; public class ProfileViewerUtils { - public static JsonObject readInventoryInfo(JsonObject profileInfo, String bagName) { - JsonObject inventoryInfo = new JsonObject(); - JsonElement element = Utils.getElement(profileInfo, bagName + ".data"); + public static JsonArray readInventoryInfo(JsonObject profileInfo, String bagName) { + String bytes = Utils.getElementAsString(Utils.getElement(profileInfo, bagName + ".data"), "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); - String bytes = Utils.getElementAsString(element, "Hz8IAAAAAAAAAD9iYD9kYD9kAAMAPwI/Gw0AAAA="); - NBTTagCompound inv_contents_nbt; + NBTTagCompound nbt; try { - inv_contents_nbt = CompressedStreamTools.readCompressed( + nbt = CompressedStreamTools.readCompressed( new ByteArrayInputStream(Base64.getDecoder().decode(bytes)) ); } catch (IOException e) { e.printStackTrace(); return null; } - NBTTagList items = inv_contents_nbt.getTagList("i", 10); + + NBTTagList items = nbt.getTagList("i", 10); JsonArray contents = new JsonArray(); NEUManager manager = NotEnoughUpdates.INSTANCE.manager; for (int j = 0; j < items.tagCount(); j++) { - JsonObject item = manager.getJsonFromNBTEntry(items.getCompoundTagAt(j)); - contents.add(item); + contents.add(manager.getJsonFromNBTEntry(items.getCompoundTagAt(j))); } - inventoryInfo.add(bagName, contents); - return inventoryInfo; + return contents; } - public static int getMagicalPower(JsonObject inventoryInfo, JsonObject profileInfo) { - JsonArray talismanBag = inventoryInfo.get("talisman_bag").getAsJsonArray(); + public static int getMagicalPower(JsonArray talismanBag, JsonObject profileInfo) { Map accessories = JsonUtils.getJsonArrayAsStream(talismanBag).map(o -> { try { return JsonToNBT.getTagFromJson(o.getAsJsonObject().get("nbttag").getAsString()); @@ -153,4 +149,47 @@ public class ProfileViewerUtils { } return powerAmount; } + + public static int getLevelingCap(JsonObject leveling, String skillName) { + JsonElement capsElement = Utils.getElement(leveling, "leveling_caps"); + return capsElement != null && capsElement.isJsonObject() && capsElement.getAsJsonObject().has(skillName) + ? capsElement.getAsJsonObject().get(skillName).getAsInt() + : 50; + } + + public static ProfileViewer.Level getLevel(JsonArray levelingArray, float xp, int levelCap, boolean cumulative) { + ProfileViewer.Level levelObj = new ProfileViewer.Level(); + levelObj.totalXp = xp; + levelObj.maxLevel = levelCap; + + for (int level = 0; level < levelingArray.size(); level++) { + float levelXp = levelingArray.get(level).getAsFloat(); + + if (levelXp > xp) { + if (cumulative) { + float previous = level > 0 ? levelingArray.get(level - 1).getAsFloat() : 0; + levelObj.maxXpForLevel = (levelXp - previous); + levelObj.level = 1 + level + (xp - levelXp) / levelObj.maxXpForLevel; + } else { + levelObj.maxXpForLevel = levelXp; + levelObj.level = level + xp / levelXp; + } + + if (levelObj.level > levelCap) { + levelObj.level = levelCap; + levelObj.maxed = true; + } + + return levelObj; + } else { + if (!cumulative) { + xp -= levelXp; + } + } + } + + levelObj.level = Math.min(levelingArray.size(), levelCap); + levelObj.maxed = true; + return levelObj; + } } -- cgit