diff options
Diffstat (limited to 'src/main/java/io')
8 files changed, 148 insertions, 22 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java index 341fe9ea..99a48a36 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java @@ -33,6 +33,7 @@ import net.minecraft.event.ClickEvent; import net.minecraft.init.Items; import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -1356,6 +1357,23 @@ public class NEUEventListener { int profitLossBIN = totalValue - chestCost; + boolean kismetUsed = false; + // checking for kismet + Slot slot = (eventGui.inventorySlots.getSlot(50)); + if(slot.getHasStack()) { + String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(slot.getStack().getTagCompound()); + for (String line : lore) { + if (line.contains("You already rerolled a chest!")) { + kismetUsed = true; + break; + } + } + } + int kismetPrice = neu.manager.auctionManager.getLowestBin("KISMET_FEATHER"); + String kismetStr = EnumChatFormatting.RED + format.format(kismetPrice) + " coins"; + if(neu.config.dungeons.useKismetOnDungeonProfit) + profitLossBIN = kismetUsed ? profitLossBIN-kismetPrice : profitLossBIN; + String profitPrefix = EnumChatFormatting.DARK_GREEN.toString(); String lossPrefix = EnumChatFormatting.RED.toString(); String prefix = profitLossBIN >= 0 ? profitPrefix : lossPrefix; @@ -1384,16 +1402,20 @@ public class NEUEventListener { Utils.renderAlignedString(valueStringBIN1, valueStringBIN2, guiLeft + xSize + 4 + 10, guiTop + 14, 160); + if (neu.config.dungeons.useKismetOnDungeonProfit && kismetUsed) { + Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Kismet Feather: ", kismetStr, + guiLeft + xSize + 4 + 10, guiTop + 24, 160); + } if (totalValue >= 0) { Utils.renderAlignedString(EnumChatFormatting.YELLOW + "Profit/Loss: ", plStringBIN, - guiLeft + xSize + 4 + 10, guiTop + 24, 160); + guiLeft + xSize + 4 + 10, guiTop + (neu.config.dungeons.useKismetOnDungeonProfit ? (kismetUsed ? 34 : 24) : 24) , 160); } int index = 0; for (Map.Entry<String, Float> entry : itemValues.entrySet()) { Utils.renderAlignedString(entry.getKey(), prefix + format.format(entry.getValue().intValue()), - guiLeft + xSize + 4 + 10, guiTop + 29 + (++index) * 10, 160); + guiLeft + xSize + 4 + 10, guiTop + (neu.config.dungeons.useKismetOnDungeonProfit ? (kismetUsed ? 39 :29) : 29) + (++index) * 10, 160); } } } catch (Exception e) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java index 1cb06c52..4bd65acd 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java @@ -437,6 +437,10 @@ public class NEUConfig extends Config { put("Sapphire", 0); put("Topaz", 0); }}; + @Expose + public long dailyGemstonePowderCompleted = 0L; + @Expose + public long dailyMithrilPowerCompleted = 0L; } public HiddenLocationSpecific getLocationSpecific() { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java index 4e83410d..468cad81 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java @@ -77,6 +77,16 @@ public class Dungeons { @ConfigAccordionId(id = 1)
public int profitDisplayLoc = 0;
+ @Expose
+ @ConfigOption(
+ name = "Include Kismet Feather",
+ desc = "Include Kismet Feathers in the Profit Calculation after rerolling"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean useKismetOnDungeonProfit = true;
+
+
@ConfigOption(
name = "Dungeon Win Overlay",
desc = ""
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java index 2eca5b8e..aec7b326 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java @@ -39,10 +39,13 @@ public class MiscOverlays { "\u00a73Puzzler: \u00a7e13h", "\u00a73Fetchur: \u00a7e3h38m", "\u00a73Commissions: \u00a7e3h38m", - "\u00a73Experiments: \u00a7e3h38m"} + "\u00a73Experiments: \u00a7e3h38m", + "\u00a73Daily Mithril Powder: \u00a7e3h38m", + "\u00a73Daily Gemstone Powder: \u00a7e3h38m", + } ) @ConfigAccordionId(id = 0) - public List<Integer> todoText2 = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6)); + public List<Integer> todoText2 = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8)); @ConfigOption( name = "Show Only If Soon", @@ -136,6 +139,30 @@ public class MiscOverlays { ) public int godpotDisplay = 0; + @Expose + @ConfigOption( + name = "Daily Mithril Powder Display", + desc = "Change the way the daily mithril powder displays\n" + + "Only when ready, When very Soon, When soon, When kinda soon or always." + ) + @ConfigAccordionId(id = 1) + @ConfigEditorDropdown( + values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"} + ) + public int dailyMithrilPowderDisplay = 0; + + @Expose + @ConfigOption( + name = "Daily Gemstone Powder Display", + desc = "Change the way the daily gemstone powder displays\n" + + "Only when ready, When very Soon, When soon, When kinda soon or always." + ) + @ConfigAccordionId(id = 1) + @ConfigEditorDropdown( + values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"} + ) + public int dailyGemstonePowderDisplay = 0; + @ConfigOption( name = "Colours", desc = "" diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java index 2788b54c..ecb217d8 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/OverlayManager.java @@ -31,13 +31,18 @@ public class OverlayManager { "\u00a73Fetchur: \u00a7eReady!", "\u00a73Commissions: \u00a7eReady!", "\u00a73Experiments: \u00a7eReady!", + "\u00a73Daily Mithril Powder: \u00a7eReady", + "\u00a73Daily Gemstone Powder: \u00a7eReady", "\u00a73Cakes: \u00a7e1d21h", "\u00a73Cookie Buff: \u00a7e2d23h", "\u00a73Godpot: \u00a7e19h", "\u00a73Puzzler: \u00a7e13h", "\u00a73Fetchur: \u00a7e3h38m", "\u00a73Commissions: \u00a7e3h38m", - "\u00a73Experiments: \u00a7e3h38m"); + "\u00a73Experiments: \u00a7e3h38m", + "\u00a73Daily Mithril Powder: \u00a7e3h38m", + "\u00a73Daily Gemstone Powder: \u00a7e3h38m" + ); textOverlays.add(timersOverlay = new TimersOverlay(NotEnoughUpdates.INSTANCE.config.miscOverlays.todoPosition, () -> { List<String> strings = new ArrayList<>(); for (int i : NotEnoughUpdates.INSTANCE.config.miscOverlays.todoText2) { diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java index 44108682..da45304e 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TimersOverlay.java @@ -41,8 +41,8 @@ public class TimersOverlay extends TextOverlay { private static final Pattern PUZZLER_PATTERN = Pattern.compile("\u00a7r\u00a7dPuzzler\u00a7r\u00a76 gave you .+ \u00a7r\u00a76for solving the puzzle!\u00a7r"); private static final Pattern FETCHUR_PATTERN = Pattern.compile("\u00a7e\\[NPC] Fetchur\u00a7f: \u00a7rthanks thats probably what i needed\u00a7r"); private static final Pattern FETCHUR2_PATTERN = Pattern.compile("\u00a7e\\[NPC] Fetchur\u00a7f: \u00a7rcome back another time, maybe tmrw\u00a7r"); - - private final boolean hideGodpot = false; + private static final Pattern DAILY_MITHRIL_POWDER = Pattern.compile("\u00a7r\u00a79\u1805 \u00a7r\u00a7fYou've earned \u00a7r\u00a72.+ Mithril Powder \u00a7r\u00a7ffrom mining your first Mithril Ore of the day!\u00a7r"); + private static final Pattern DAILY_GEMSTONE_POWDER = Pattern.compile("\u00a7r\u00a79\u1805 \u00a7r\u00a7fYou've earned \u00a7r\u00a7d.+ Gemstone Powder \u00a7r\u00a7ffrom mining your first Gemstone of the day!\u00a7r"); @SubscribeEvent(priority = EventPriority.HIGHEST, receiveCanceled = true) public void onChatMessageReceived(ClientChatReceivedEvent event) { @@ -51,13 +51,11 @@ public class TimersOverlay extends TextOverlay { if (event.type == 0) { long currentTime = System.currentTimeMillis(); - Matcher cakeMatcher = CAKE_PATTERN.matcher(event.message.getFormattedText()); if (cakeMatcher.matches()) { hidden.firstCakeAte = currentTime; return; } - Matcher puzzlerMatcher = PUZZLER_PATTERN.matcher(event.message.getFormattedText()); if (puzzlerMatcher.matches()) { hidden.puzzlerCompleted = currentTime; @@ -75,7 +73,15 @@ public class TimersOverlay extends TextOverlay { hidden.fetchurCompleted = currentTime; return; } - + Matcher dailyGemstonePowder = DAILY_GEMSTONE_POWDER.matcher(event.message.getFormattedText()); + if (dailyGemstonePowder.matches()) { + hidden.dailyGemstonePowderCompleted = currentTime; + return; + } + Matcher dailyMithrilPowder = DAILY_MITHRIL_POWDER.matcher(event.message.getFormattedText()); + if (dailyMithrilPowder.matches()) { + hidden.dailyMithrilPowerCompleted = currentTime; + } } } @@ -132,7 +138,6 @@ public class TimersOverlay extends TextOverlay { //new ItemStack(Items.ender_pearl, 16, 0) }; } - long currentTime = System.currentTimeMillis(); ZonedDateTime currentTimeEST = ZonedDateTime.now(ZoneId.of("America/Atikokan")); @@ -154,6 +159,12 @@ public class TimersOverlay extends TextOverlay { case "Cookie Buff": icon = COOKIE_ICON; break; + case "Daily Mithril Powder": + icon = NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager.getItemInformation().get("MITHRIL_ORE")); + break; + case "Daily Gemstone Powder": + icon = NotEnoughUpdates.INSTANCE.manager.jsonToStack(NotEnoughUpdates.INSTANCE.manager.getItemInformation().get("PERFECT_AMETHYST_GEM")); + break; } if (icon != null) { @@ -169,6 +180,7 @@ public class TimersOverlay extends TextOverlay { super.renderLine(line, position, dummy); } + @Override public void update() { @@ -396,11 +408,11 @@ public class TimersOverlay extends TextOverlay { map.put(3, DARK_AQUA + "Puzzler: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] + Utils.prettyTime(puzzlerEnd)); } - long midnightReset = (currentTime - 18000000) / 86400000 * 86400000 + 18000000; - - long fetchurComplete = hidden.fetchurCompleted; - + long midnightReset = (currentTime - 18000000) / 86400000 * 86400000 + 18000000; // 12am est + long catacombsReset = currentTime / 86400000 * 86400000; // 7pm est long timeDiffMidnightNow = midnightReset + 86400000 - currentTime; + long catacombsDiffNow = catacombsReset + 86400000 - currentTime; + long fetchurComplete = hidden.fetchurCompleted; //Fetchur Display if (fetchurComplete < midnightReset) { @@ -439,17 +451,52 @@ public class TimersOverlay extends TextOverlay { map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"); } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.VERYSOON.ordinal() && (hidden.experimentsCompleted < (midnightReset - TimeEnums.HALFANHOUR.time))) { - map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] + Utils.prettyTime(catacombsReset)); } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.SOON.ordinal() && (hidden.experimentsCompleted < (midnightReset - TimeEnums.HOUR.time))) { - map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] + Utils.prettyTime(timeDiffMidnightNow)); + map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] + Utils.prettyTime(catacombsReset)); } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.KINDASOON.ordinal() && (hidden.experimentsCompleted < (midnightReset - (TimeEnums.HOUR.time * 3)))) { - map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] + Utils.prettyTime(catacombsReset)); } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.experimentationDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) { - map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] + Utils.prettyTime(timeDiffMidnightNow)); + map.put(6, DARK_AQUA + "Experiments: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] + Utils.prettyTime(catacombsReset)); + } + + // Daily Mithril Powder display + long mithrilPowderCompleted = hidden.dailyMithrilPowerCompleted + 1000 * 60 * 60 * 24 - currentTime; + + if (hidden.dailyMithrilPowerCompleted < midnightReset) { + map.put(7, DARK_AQUA + "Daily Mithril Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.VERYSOON.ordinal() && + (hidden.dailyMithrilPowerCompleted < (midnightReset - TimeEnums.HALFANHOUR.time))) { + map.put(7, DARK_AQUA + "Daily Mithril Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.SOON.ordinal() && + (hidden.dailyMithrilPowerCompleted < (midnightReset - TimeEnums.HOUR.time))) { + map.put(7, DARK_AQUA + "Daily Mithril Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.KINDASOON.ordinal() && + (hidden.dailyMithrilPowerCompleted < (midnightReset - (TimeEnums.HOUR.time * 3)))) { + map.put(7, DARK_AQUA + "Daily Mithril Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyMithrilPowderDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) { + map.put(7, DARK_AQUA + "Daily Mithril Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] + Utils.prettyTime(timeDiffMidnightNow)); } + // Daily Gemstone Powder Display + if (hidden.dailyGemstonePowderCompleted < midnightReset) { + map.put(8, DARK_AQUA + "Daily Gemstone Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.readyColour] + "Ready!"); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.VERYSOON.ordinal() && + (hidden.dailyGemstonePowderCompleted < (midnightReset - TimeEnums.HALFANHOUR.time))) { + map.put(8, DARK_AQUA + "Daily Gemstone Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.verySoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.SOON.ordinal() && + (hidden.dailyGemstonePowderCompleted < (midnightReset - TimeEnums.HOUR.time))) { + map.put(8, DARK_AQUA + "Daily Gemstone Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.soonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.KINDASOON.ordinal() && + (hidden.dailyGemstonePowderCompleted < (midnightReset - (TimeEnums.HOUR.time * 3)))) { + map.put(8, DARK_AQUA + "Daily Gemstone Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.kindaSoonColour] + Utils.prettyTime(timeDiffMidnightNow)); + } else if (NotEnoughUpdates.INSTANCE.config.miscOverlays.dailyGemstonePowderDisplay >= DISPLAYTYPE.ALWAYS.ordinal()) { + map.put(8, DARK_AQUA + "Daily Gemstone Powder: " + EnumChatFormatting.values()[NotEnoughUpdates.INSTANCE.config.miscOverlays.defaultColour] + Utils.prettyTime(timeDiffMidnightNow)); + } + + overlayStrings = new ArrayList<>(); for (int index : NotEnoughUpdates.INSTANCE.config.miscOverlays.todoText2) { if (map.containsKey(index)) { @@ -459,6 +506,10 @@ public class TimersOverlay extends TextOverlay { if (overlayStrings.isEmpty()) overlayStrings = null; } + public String compactRemaining(int amount) { + return (5-amount) + " remaining"; + } + private enum TimeEnums { DAY(86400000), HALFDAY(43200000), diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java index c3c68b9b..dd7fac79 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java @@ -911,6 +911,7 @@ public class GuiProfileViewer extends GuiScreen { "dungeons.dungeon_types.catacombs.experience"), 0); levelObjCata = ProfileViewer.getLevel(Utils.getElement(leveling, "catacombs").getAsJsonArray(), cataXp, 50, false); + levelObjCata.totalXp = cataXp; levelObjCatas.put(profileId, levelObjCata); } @@ -1369,15 +1370,20 @@ public class GuiProfileViewer extends GuiScreen { if (mouseX > x && mouseX < x + 120) { if (mouseY > y - 4 && mouseY < y + 13) { String levelStr; + String totalXpStr = null; if (levelObj.maxed) { levelStr = EnumChatFormatting.GOLD + "MAXED!"; + totalXpStr = EnumChatFormatting.GRAY + "Total XP: " + EnumChatFormatting.DARK_PURPLE + Utils.formatNumberWithDots((long) levelObj.totalXp); } else { int maxXp = (int) levelObj.maxXpForLevel; levelStr = EnumChatFormatting.DARK_PURPLE + shortNumberFormat(Math.round((level % 1) * maxXp), 0) + "/" + shortNumberFormat(maxXp, 0); } - - tooltipToDisplay = Utils.createList(levelStr); + if (totalXpStr != null) { + tooltipToDisplay = Utils.createList(levelStr, totalXpStr); + } else { + tooltipToDisplay = Utils.createList(levelStr); + } } } @@ -1502,7 +1508,7 @@ public class GuiProfileViewer extends GuiScreen { put("PET_ITEM_IRON_CLAWS_COMMON", new HashMap<String, Float>() {{ put("CRIT_DAMAGE", 1.4f); put("CRIT_CHANCE", 1.4f); }}); put("PET_ITEM_TEXTBOOK", new HashMap<String, Float>() {{ put("INTELLIGENCE", 2f); }}); }}; - + private int selectedPet = -1; private int petsPage = 0; private List<JsonObject> sortedPets = null; diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java index f1b106d9..bdffb42f 100644 --- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java +++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/ProfileViewer.java @@ -188,6 +188,7 @@ public class ProfileViewer { public float level = 0; public float maxXpForLevel = 0; public boolean maxed = false; + public double totalXp; } public static Level getLevel(JsonArray levelingArray, float xp, int levelCap, boolean cumulative) { |