diff options
author | nmccullagh <narhanael64@gmail.com> | 2024-07-07 19:32:13 +0100 |
---|---|---|
committer | nmccullagh <narhanael64@gmail.com> | 2024-07-07 19:32:13 +0100 |
commit | a8f0b5815e566ed94ec0dac59795b4a353e7f1a5 (patch) | |
tree | 6e905a3d921880b21b766c0bd45e971cf0ebedbe /src/main/java/de | |
parent | d02a1fcd973da0125e744546e9fd87ec07fc99c9 (diff) | |
download | Skyblocker-a8f0b5815e566ed94ec0dac59795b4a353e7f1a5.tar.gz Skyblocker-a8f0b5815e566ed94ec0dac59795b4a353e7f1a5.tar.bz2 Skyblocker-a8f0b5815e566ed94ec0dac59795b4a353e7f1a5.zip |
fix highlights and colours
Diffstat (limited to 'src/main/java/de')
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 |