aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornmccullagh <narhanael64@gmail.com>2024-07-07 20:36:04 +0100
committernmccullagh <narhanael64@gmail.com>2024-07-07 22:12:25 +0100
commit45579f64b14096a632df5799a9528eda810c219a (patch)
tree721290d905953873bd1a5b293fb0375429ce7108
parenta8f0b5815e566ed94ec0dac59795b4a353e7f1a5 (diff)
downloadSkyblocker-45579f64b14096a632df5799a9528eda810c219a.tar.gz
Skyblocker-45579f64b14096a632df5799a9528eda810c219a.tar.bz2
Skyblocker-45579f64b14096a632df5799a9528eda810c219a.zip
pet xp in tooltip
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerTextWidget.java17
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java42
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/LevelFinder.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/ProfileViewerUtils.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java2
5 files changed, 60 insertions, 31 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerTextWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerTextWidget.java
index 4ee2dbba..58c238f8 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerTextWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/ProfileViewerTextWidget.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.profileviewer;
import com.google.gson.JsonObject;
+import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
@@ -36,20 +37,8 @@ public class ProfileViewerTextWidget {
context.drawText(textRenderer, "§n"+PROFILE_NAME, root_x + 14, root_y + 3, Colors.WHITE, true);
context.drawText(textRenderer, "§aLevel:§r " + SKYBLOCK_LEVEL, root_x + 2, root_y + 6 + ROW_GAP, Colors.WHITE, true);
- context.drawText(textRenderer, "§6Purse:§r " + formatCoins(PURSE), root_x + 2, root_y + 6 + ROW_GAP * 2, Colors.WHITE, true);
- context.drawText(textRenderer, "§6Bank:§r " + formatCoins(BANK), root_x + 2, root_y + 6 + ROW_GAP * 3, Colors.WHITE, true);
+ context.drawText(textRenderer, "§6Purse:§r " + ProfileViewerUtils.numLetterFormat(PURSE), root_x + 2, root_y + 6 + ROW_GAP * 2, Colors.WHITE, true);
+ context.drawText(textRenderer, "§6Bank:§r " + ProfileViewerUtils.numLetterFormat(BANK), root_x + 2, root_y + 6 + ROW_GAP * 3, Colors.WHITE, true);
context.drawText(textRenderer, "§6NW:§r " + "Soon™", root_x + 2, root_y + 6 + ROW_GAP * 4, Colors.WHITE, true );
}
-
- private String formatCoins(double amount) {
- if (amount >= 1_000_000_000) {
- return String.format("%.4gB", amount / 1_000_000_000);
- } else if (amount >= 1_000_000) {
- return String.format("%.4gM", amount / 1_000_000);
- } else if (amount >= 1_000) {
- return String.format("%.4gK", amount / 1_000);
- } else {
- return String.valueOf((int)(amount));
- }
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java
index b6aebe2f..a44f166b 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java
@@ -25,13 +25,14 @@ import net.minecraft.util.Identifier;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.text.Normalizer;
import java.util.*;
-import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import static de.hysky.skyblocker.skyblock.itemlist.ItemStackBuilder.SKULL_TEXTURE_PATTERN;
+import static de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils.numLetterFormat;
public class Pet {
private final String name;
@@ -41,6 +42,9 @@ public class Pet {
private final Optional<String> skin;
private final Optional<String> skinTexture;
private final int level;
+ private final double perecentageToLevel;
+ private final long levelXP;
+ private final long nextLevelXP;
private final ItemStack icon;
private final Pattern statsMatcher = Pattern.compile("\\{[A-Za-z_]+}");
@@ -63,13 +67,17 @@ public class Pet {
)));
public Pet(PetCache.PetInfo petData) {
+ LevelFinder.LevelInfo info = LevelFinder.getLevelInfo(petData.type().equals("GOLDEN_DRAGON") ? "PET_GREG" : "PET_" + petData.tier(), (long) petData.exp());
this.name = petData.type();
this.xp = petData.exp();
this.heldItem = petData.item();
this.skin = petData.skin();
this.skinTexture = calculateSkinTexture();
this.tier = petData.tier();
- this.level = LevelFinder.getLevelInfo(this.name.equals("GOLDEN_DRAGON") ? "PET_GREG" : "PET_" + this.tier, (long) xp).level;
+ this.level = info.level;
+ this.perecentageToLevel = info.fill;
+ this.levelXP = info.levelXP;
+ this.nextLevelXP = info.nextLevelXP;
this.icon = createIcon();
}
@@ -138,12 +146,7 @@ public class Pet {
Identifier itemId = Identifier.of(ItemFixerUpper.convertItemId(item.getMinecraftItemId(), item.getDamage()));
ItemStack petStack = new ItemStack(Registries.ITEM.get(itemId)).copy();
- List<Text> formattedLore = !(name.equals("GOLDEN_DRAGON") && level < 101) ? processLore( item.getLore()) : buildGoldenDragonEggLore( item.getLore());
-
- if (heldItem != null) {
- formattedLore.set(formattedLore.size() - 2, Text.of("§r§6Held Item: " + heldItem.getName().getString()));
- formattedLore.add(formattedLore.size() - 1, Text.empty());
- }
+ List<Text> formattedLore = !(name.equals("GOLDEN_DRAGON") && level < 101) ? processLore(item.getLore(), heldItem) : buildGoldenDragonEggLore(item.getLore());
// Skin Head Texture
if (skinTexture.isPresent()) {
@@ -172,10 +175,12 @@ public class Pet {
/**
* Iterates through a Pet's lore injecting interpolated stat numbers based on pet level
- * @param lore the lore data stored in NEU Repo
+ *
+ * @param lore the lore data stored in NEU Repo
+ * @param heldItem
* @return Formatted lore with injected stats
*/
- private List<Text> processLore(List<String> lore) {
+ private List<Text> processLore(List<String> lore, ItemStack heldItem) {
Map<String, Map<Rarity, PetNumbers>> petNums = NEURepoManager.NEU_REPO.getConstants().getPetNumbers();
Rarity rarity = Rarity.values()[getTier()];
PetNumbers data = petNums.get(getName()).get(rarity);
@@ -206,6 +211,21 @@ public class Pet {
formattedLore.add(Text.of(formattedLine));
}
+
+ if (heldItem != null) {
+ formattedLore.set(formattedLore.size() - 2, Text.of("§r§6Held Item: " + heldItem.getName().getString()));
+ formattedLore.add(formattedLore.size() - 1, Text.empty());
+ }
+
+ if (level != 100 && level != 200) {
+ Style style = Style.EMPTY.withItalic(false);
+ String progress = "Progress to Level " + this.level + ": §e" + fixDecimals(this.perecentageToLevel * 100, true) + "%";
+ formattedLore.add(formattedLore.size() - 1, Text.literal(progress).setStyle(style).formatted(Formatting.GRAY));
+ String string = "§a§m ".repeat((int) Math.round(perecentageToLevel * 30)) + "§f§m ".repeat(30 - (int) Math.round(perecentageToLevel * 30));
+ formattedLore.add(formattedLore.size() - 1, Text.literal(string + "§r§e " + numLetterFormat(levelXP) + "§6/§e" + numLetterFormat(nextLevelXP)).setStyle(style));
+ formattedLore.add(formattedLore.size() - 1, Text.empty());
+ }
+
return formattedLore;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/LevelFinder.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/LevelFinder.java
index 9b0fdfb1..f53df0f5 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/LevelFinder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/LevelFinder.java
@@ -8,16 +8,20 @@ public class LevelFinder {
public long xp;
public int level;
public double fill;
+ public long levelXP;
+ public long nextLevelXP;
public LevelInfo(long xp, int level) {
this.xp = xp;
this.level = level;
}
- public LevelInfo(long xp, int level, double fill) {
+ public LevelInfo(long xp, int level, double fill, double levelXP, double nextLevelXP) {
this.xp = xp;
this.level = level;
this.fill = fill;
+ this.levelXP = (long) levelXP;
+ this.nextLevelXP = (long) nextLevelXP;
}
}
@@ -256,16 +260,20 @@ public class LevelFinder {
for (int i = boundaries.size() - 1; i >= 0 ; i--) {
if (xp >= boundaries.get(i).xp) {
double fill;
+ double xpInCurrentLevel;
+ double levelXPRange;
if (i < boundaries.getLast().level) {
double currentLevelXP = boundaries.get(i).xp;
double nextLevelXP = boundaries.get(i + 1).xp;
- double levelXPRange = nextLevelXP - currentLevelXP;
- double xpInCurrentLevel = xp - currentLevelXP;
+ levelXPRange = nextLevelXP - currentLevelXP;
+ xpInCurrentLevel = xp - currentLevelXP;
fill = xpInCurrentLevel / levelXPRange;
} else {
fill = 1.0;
+ xpInCurrentLevel = xp - boundaries.getLast().xp;
+ levelXPRange = boundaries.getLast().xp - boundaries.get(boundaries.size()-2).xp;
}
- return new LevelInfo(xp, boundaries.get(i).level, fill);
+ return new LevelInfo(xp, boundaries.get(i).level, fill, xpInCurrentLevel, levelXPRange);
}
}
return new LevelInfo(0L, 0);
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/ProfileViewerUtils.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/ProfileViewerUtils.java
index dca4dd85..8dadedaf 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/ProfileViewerUtils.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/ProfileViewerUtils.java
@@ -14,6 +14,8 @@ import java.util.Optional;
import java.util.UUID;
public class ProfileViewerUtils {
+ public static final NumberFormat COMMA_FORMATTER = NumberFormat.getNumberInstance(Locale.US);
+
public static ItemStack createSkull(String textureB64) {
ItemStack skull = new ItemStack(Items.PLAYER_HEAD);
try {
@@ -27,5 +29,15 @@ public class ProfileViewerUtils {
return skull;
}
- public static final NumberFormat COMMA_FORMATTER = NumberFormat.getNumberInstance(Locale.US);
+ public static String numLetterFormat(double amount) {
+ if (amount >= 1_000_000_000) {
+ return String.format("%.4gB", amount / 1_000_000_000);
+ } else if (amount >= 1_000_000) {
+ return String.format("%.4gM", amount / 1_000_000);
+ } else if (amount >= 1_000) {
+ return String.format("%.4gK", amount / 1_000);
+ } else {
+ return String.valueOf((int)(amount));
+ }
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java b/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java
index 02fdb1be..5f65c336 100644
--- a/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java
+++ b/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java
@@ -86,7 +86,7 @@ public class ApiAuthentication {
}
} else {
//The Minecraft Services API is probably down so we will retry in 5 minutes, either that or your access token has expired (game open for 24h) and you need to restart.
- logErrorAndScheduleRetry(Text.translatable("skyblocker.api.token.noProfileKeys"), 20, "[Skyblocker Api Auth] Failed to fetch profile keys! Some features may not work temporarily :( (Has your game been open for more than 24 hours? If so restart.)");
+ logErrorAndScheduleRetry(Text.translatable("skyblocker.api.token.noProfileKeys"), 300 * 20, "[Skyblocker Api Auth] Failed to fetch profile keys! Some features may not work temporarily :( (Has your game been open for more than 24 hours? If so restart.)");
}
}).exceptionally(throwable -> {
//Try again in 1 minute