aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Pet.java87
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java2
4 files changed, 52 insertions, 41 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
index 2b9961a9..126c55ec 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/Inventory.java
@@ -85,7 +85,7 @@ public class Inventory implements ProfileViewerPage {
context.drawItem(containerList.get(startIndex + i), x, y);
context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y);
- if (mouseX > x && mouseX < x + 16 && mouseY > y && mouseY < y + 16) {
+ if (mouseX > x -1 && mouseX < x + 16 && mouseY > y - 1 && mouseY < y + 16) {
tooltip = containerList.get(startIndex + i).getTooltip(Item.TooltipContext.DEFAULT, MinecraftClient.getInstance().player, TooltipType.BASIC);
}
}
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 e6be9884..b6aebe2f 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
@@ -23,7 +23,6 @@ import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
-import java.awt.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.Normalizer;
@@ -59,7 +58,8 @@ public class Pet {
2, Formatting.BLUE, // RARE
3, Formatting.DARK_PURPLE, // EPIC
4, Formatting.GOLD, // LEGENDARY
- 5, Formatting.LIGHT_PURPLE // MYTHIC
+ 5, Formatting.LIGHT_PURPLE, // MYTHIC
+ 6, Formatting.AQUA // DIVINE (future proofing, because why not)
)));
public Pet(PetCache.PetInfo petData) {
@@ -138,16 +138,49 @@ public class Pet {
Identifier itemId = Identifier.of(ItemFixerUpper.convertItemId(item.getMinecraftItemId(), item.getDamage()));
ItemStack petStack = new ItemStack(Registries.ITEM.get(itemId)).copy();
- List<String> lore = item.getLore();
- List<Text> formattedLore = new ArrayList<>();
+ 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());
+ }
+
+ // Skin Head Texture
+ if (skinTexture.isPresent()) {
+ formattedLore.set(0, Text.of(formattedLore.getFirst().getString() + ", " + Formatting.strip(NEURepoManager.NEU_REPO.getItems().getItems().get("PET_SKIN_" + skin.get()).getDisplayName())));
+ petStack.set(DataComponentTypes.PROFILE, new ProfileComponent(
+ Optional.of(item.getSkyblockItemId()), Optional.of(UUID.randomUUID()),
+ ItemUtils.propertyMapWithTexture(this.skinTexture.get())));
+ } else {
+ Matcher skullTexture = SKULL_TEXTURE_PATTERN.matcher(item.getNbttag());
+ if (skullTexture.find()) {
+ petStack.set(DataComponentTypes.PROFILE, new ProfileComponent(
+ Optional.of(item.getSkyblockItemId()), Optional.of(UUID.randomUUID()),
+ ItemUtils.propertyMapWithTexture(skullTexture.group(1))));
+ }
+ }
+
+ Style style = Style.EMPTY.withItalic(false);
+ formattedLore.set(formattedLore.size() - 1, Text.literal(Rarity.values()[getTier() + (boosted() ? 1 : 0)].toString()).setStyle(style).formatted(Formatting.BOLD, RARITY_COLOR_MAP.get(getTier() + (boosted() ? 1 : 0))));
+
+ // Update the lore and name
+ petStack.set(DataComponentTypes.LORE, new LoreComponent(formattedLore));
+ String displayName = Formatting.strip(item.getDisplayName()).replace("[Lvl {LVL}]", "§7[Lvl " + this.level + "]§r");
+ petStack.set(DataComponentTypes.CUSTOM_NAME, Text.literal(displayName).setStyle(style).formatted(RARITY_COLOR_MAP.get(this.getTier() + (boosted() ? 1 : 0))));
+ return petStack;
+ }
+ /**
+ * Iterates through a Pet's lore injecting interpolated stat numbers based on pet level
+ * @param lore the lore data stored in NEU Repo
+ * @return Formatted lore with injected stats
+ */
+ private List<Text> processLore(List<String> lore) {
Map<String, Map<Rarity, PetNumbers>> petNums = NEURepoManager.NEU_REPO.getConstants().getPetNumbers();
Rarity rarity = Rarity.values()[getTier()];
PetNumbers data = petNums.get(getName()).get(rarity);
+ List<Text> formattedLore = new ArrayList<>();
- if (name.equals("GOLDEN_DRAGON") && level < 101) {
- formattedLore = buildGoldenDragonLore(lore);
- } else {
for (String line : lore) {
if (line.contains("Right-click to add this") || line.contains("pet menu!")) continue;
@@ -155,6 +188,7 @@ public class Pet {
Matcher stats = statsMatcher.matcher(formattedLine);
Matcher other = numberMatcher.matcher(formattedLine);
+
while (stats.find()) {
String placeholder = stats.group();
String statKey = placeholder.substring(1, placeholder.length() - 1);
@@ -171,39 +205,16 @@ 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());
- }
- // Skin Head Texture
- if (skinTexture.isPresent()) {
- formattedLore.set(0, Text.of(formattedLore.getFirst().getString() + ", " + Formatting.strip(NEURepoManager.NEU_REPO.getItems().getItems().get("PET_SKIN_" + skin.get()).getDisplayName())));
- petStack.set(DataComponentTypes.PROFILE, new ProfileComponent(
- Optional.of(item.getSkyblockItemId()), Optional.of(UUID.randomUUID()),
- ItemUtils.propertyMapWithTexture(this.skinTexture.get())));
- } else {
- Matcher skullTexture = SKULL_TEXTURE_PATTERN.matcher(item.getNbttag());
- if (skullTexture.find()) {
- petStack.set(DataComponentTypes.PROFILE, new ProfileComponent(
- Optional.of(item.getSkyblockItemId()), Optional.of(UUID.randomUUID()),
- ItemUtils.propertyMapWithTexture(skullTexture.group(1))));
- }
- }
-
- Style style = Style.EMPTY.withItalic(false);
- formattedLore.set(formattedLore.size()-1, Text.literal(Rarity.values()[getTier() + (boosted() ? 1 : 0)].toString()).setStyle(style).formatted(Formatting.BOLD, RARITY_COLOR_MAP.get(getTier() + (boosted() ? 1 : 0))));
-
- // Update the lore and name
- petStack.set(DataComponentTypes.LORE, new LoreComponent(formattedLore));
- petStack.set(DataComponentTypes.CUSTOM_NAME, Text.of(item.getDisplayName().formatted(RARITY_COLOR_MAP.get(this.getTier() + (boosted() ? 1 : 0))).replace("{LVL}", String.valueOf(this.level))));
-
- return petStack;
+ return formattedLore;
}
- private List<Text> buildGoldenDragonLore(List<String> lore) {
+ /**
+ * NEU Repo doesn't distinguish between the Egg and the hatched GoldenDragon pet so hardcoded lore :eues:
+ * @param lore the existing lore
+ * @return Fully formatted GoldenDragonEgg Lore
+ */
+ private List<Text> buildGoldenDragonEggLore(List<String> lore) {
List<Text> formattedLore = new ArrayList<>();
Style style = Style.EMPTY.withItalic(false);
@@ -214,7 +225,7 @@ public class Pet {
formattedLore.add(Text.empty());
formattedLore.add(Text.literal("Hatches at level §b100").setStyle(style).formatted(Formatting.GRAY));
formattedLore.add(Text.empty());
- formattedLore.add(Text.of("Legendary"));
+ formattedLore.add(Text.of(lore.getLast()));
return formattedLore;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
index abfd3b67..e210ca9a 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/inventory/PlayerInventory.java
@@ -74,7 +74,7 @@ public class PlayerInventory implements ProfileViewerPage {
context.drawItem(containerList.get(startIndex + i), x, y);
context.drawItemInSlot(textRenderer, containerList.get(startIndex + i), x, y);
- if (mouseX > x && mouseX < x + 16 && mouseY > y && mouseY < y + 16) {
+ if (mouseX > x -1 && mouseX < x + 16 && mouseY > y - 1 && mouseY < y + 16) {
tooltip = containerList.get(startIndex + i).getTooltip(Item.TooltipContext.DEFAULT, MinecraftClient.getInstance().player, TooltipType.BASIC);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java b/src/main/java/de/hysky/skyblocker/utils/ApiAuthentication.java
index 5f65c336..02fdb1be 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"), 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.)");
+ 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.)");
}
}).exceptionally(throwable -> {
//Try again in 1 minute