diff options
Diffstat (limited to 'src/main/java')
20 files changed, 230 insertions, 26 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java index 2cf0ea9d..9ca9953b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.dwarven; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.MiningConfig; import de.hysky.skyblocker.events.HudRenderEvents; import de.hysky.skyblocker.mixins.accessors.PlayerListHudAccessor; import de.hysky.skyblocker.skyblock.tabhud.util.Colors; @@ -164,7 +165,9 @@ public class DwarvenHud { public static void update() { if (CLIENT.player == null || CLIENT.getNetworkHandler() == null - || !SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder + || !SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions + && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder + && SkyblockerConfigManager.get().mining.commissionWaypoints.mode == MiningConfig.CommissionWaypointMode.OFF || !Utils.isInCrystalHollows() && !Utils.isInDwarvenMines()) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java index b845e07a..5837ea20 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java @@ -135,7 +135,7 @@ public class FarmingHud { } public enum CounterType { - NONE("", "No Counter: "), + NONE("", "No Counter"), COUNTER("mined_crops", "Counter: "), CULTIVATING("farmed_cultivating", "Cultivating Counter: "); @@ -146,5 +146,8 @@ public class FarmingHud { this.nbtKey = nbtKey; this.text = text; } + public boolean matchesText(String textToMatch) { + return this.text.equals(textToMatch); + } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index c413ad44..84013f0b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -66,7 +66,10 @@ public class FarmingHudWidget extends Widget { String cropItemId = FARMING_TOOLS.get(ItemUtils.getItemId(farmingToolStack)); ItemStack cropStack = ItemRepository.getItemStack(ItemTooltip.getNeuName(cropItemId, cropItemId)); // The cropItemId is being used as the api id in the second parameter because the skyblock id and api id are the same for all crops. - addSimpleIcoText(cropStack, FarmingHud.counterText(), Formatting.YELLOW, FarmingHud.NUMBER_FORMAT.format(FarmingHud.counter())); + String counterText = FarmingHud.counterText(); + String counterNumber = FarmingHud.NUMBER_FORMAT.format(FarmingHud.counter()); + if (FarmingHud.CounterType.NONE.matchesText(counterText)) counterNumber = ""; + addSimpleIcoText(cropStack, counterText, Formatting.YELLOW, counterNumber); float cropsPerMinute = FarmingHud.cropsPerMinute(); addSimpleIcoText(cropStack, "Crops/min: ", Formatting.YELLOW, FarmingHud.NUMBER_FORMAT.format((int) cropsPerMinute / 10 * 10)); addSimpleIcoText(Ico.GOLD, "Coins/h: ", Formatting.GOLD, getPriceText(cropItemId, cropsPerMinute)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java index 18131527..d3941d77 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java @@ -13,6 +13,7 @@ import java.util.List; public class SlotTextManager { private static final SlotTextAdder[] adders = new SlotTextAdder[]{ + new EssenceShopAdder(), new EnchantmentLevelAdder(), new MinionLevelAdder(), new PetLevelAdder(), @@ -26,7 +27,10 @@ public class SlotTextManager { new PrehistoricEggAdder(), new PotionLevelAdder(), new CollectionAdder(), - new CommunityShopAdder() + new CommunityShopAdder(), + new YourEssenceAdder(), + new PowerStonesGuideAdder(), + new StatsTuningAdder() }; private static final ArrayList<SlotTextAdder> currentScreenAdders = new ArrayList<>(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java index 811677d7..81f543f8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/AttributeShardAdder.java @@ -85,8 +85,8 @@ public class AttributeShardAdder extends SlotTextAdder { String attributeInitials = ID_2_SHORT_NAME.getOrDefault(attributeId, ""); return List.of( - SlotText.bottomRight(Text.literal(String.valueOf(attributeLevel)).withColor(0x34eb77)), - SlotText.topLeft(Text.literal(attributeInitials).formatted(Formatting.AQUA)) + SlotText.bottomRight(Text.literal(String.valueOf(attributeLevel)).withColor(0xFFDDC1)), + SlotText.topLeft(Text.literal(attributeInitials).withColor(0xCFF8F8)) ); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java index da12e867..6c99ebf9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CatacombsLevelAdder.java @@ -44,7 +44,7 @@ public class CatacombsLevelAdder { level = String.valueOf(RomanNumerals.romanToDecimal(roman)); } - return List.of(SlotText.bottomLeft(Text.literal(level).formatted(Formatting.RED))); + return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } default -> { return List.of(); @@ -65,7 +65,7 @@ public class CatacombsLevelAdder { case 11, 12, 13, 14, 15 -> { String level = getBracketedLevelFromName(slot.getStack()); if (!NumberUtils.isDigits(level)) return List.of(); - return List.of(SlotText.bottomLeft(Text.literal(level).formatted(Formatting.RED))); + return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } default -> { return List.of(); @@ -86,7 +86,7 @@ public class CatacombsLevelAdder { case 29, 30, 31, 32, 33 -> { String level = getBracketedLevelFromName(slot.getStack()); if (!NumberUtils.isDigits(level)) return List.of(); - return List.of(SlotText.bottomLeft(Text.literal(level).formatted(Formatting.RED))); + return List.of(SlotText.bottomLeft(Text.literal(level).withColor(0xFFDDC1))); } default -> { return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java index e577f0d8..207190c2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java @@ -6,7 +6,6 @@ import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -26,7 +25,7 @@ public class CollectionAdder extends SlotTextAdder { Matcher matcher = COLLECTION.matcher(stack.getName().getString()); if (matcher.matches()) { int level = RomanNumerals.romanToDecimal(matcher.group("level")); - return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).formatted(Formatting.YELLOW))); + return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); } return List.of(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java index 9c85ae61..5530035d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EnchantmentLevelAdder.java @@ -31,11 +31,11 @@ public class EnchantmentLevelAdder extends SlotTextAdder { NbtCompound enchantments = nbt.getCompound("enchantments"); if (enchantments.getSize() != 1) return List.of(); //Only makes sense to display the level when there's one enchant. int level = enchantments.getInt(enchantments.getKeys().iterator().next()); - return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(level)).formatted(Formatting.GREEN))); + return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); } else { //In bazaar, the books have the enchantment level in the name int level = getEnchantLevelFromString(name); if (level == 0) return List.of(); - return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(level)).formatted(Formatting.GREEN))); + return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java new file mode 100644 index 00000000..65574a5a --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EssenceShopAdder.java @@ -0,0 +1,51 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.RomanNumerals; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; + +import java.text.NumberFormat; +import java.util.List; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class EssenceShopAdder extends SlotTextAdder { + private static final Pattern ESSENCELEVEL = Pattern.compile("^[\\w ]+ (?<level>[IVXLCDM]+)$"); + private static final Pattern UNLOCKED = Pattern.compile("UNLOCKED"); + private static final Pattern ESSENCE = Pattern.compile("Your \\w+ Essence: (?<essence>[\\d,]+)"); + + public EssenceShopAdder() { + super("Essence Shop"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + + Matcher essenceLevelMatcher = ESSENCELEVEL.matcher(stack.getName().getString()); + Matcher essenceAmountMatcher = ItemUtils.getLoreLineIfMatch(stack, ESSENCE); + + if (essenceLevelMatcher.matches()) { + int level = RomanNumerals.romanToDecimal(essenceLevelMatcher.group("level")); + Matcher unlockedMatcher = ItemUtils.getLoreLineIfMatch(stack, UNLOCKED); + if (unlockedMatcher == null) { + level -= 1; + } + return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); + } + if (essenceAmountMatcher == null) return List.of(); + String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); + if (!essenceAmount.matches("-?\\d+")) return List.of(); + NumberFormat NUMBER_FORMATTER_S = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); + NUMBER_FORMATTER_S.setMinimumFractionDigits(1); + int amount = Integer.parseInt(essenceAmount); + + return List.of(SlotText.bottomRight(Text.literal(NUMBER_FORMATTER_S.format(amount)).withColor(0xFFDDC1))); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java index b9fe130f..fc46f153 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/MinionLevelAdder.java @@ -29,6 +29,6 @@ public class MinionLevelAdder extends SlotTextAdder { String romanNumeral = matcher.group(1); if (!RomanNumerals.isValidRomanNumeral(romanNumeral)) return List.of(); int level = RomanNumerals.romanToDecimal(romanNumeral); - return List.of(SlotText.topRight(Text.literal(String.valueOf(level)).formatted(Formatting.AQUA))); + return List.of(SlotText.topRight(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java index 3813563a..88d48fbf 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PetLevelAdder.java @@ -23,6 +23,7 @@ public class PetLevelAdder extends SlotTextAdder { if (!itemStack.isOf(Items.PLAYER_HEAD)) return List.of(); String level = CatacombsLevelAdder.getBracketedLevelFromName(itemStack); if (!NumberUtils.isDigits(level)) return List.of(); - return List.of(SlotText.topLeft(Text.literal(level).formatted(Formatting.GOLD))); + if ("100".equals(level) || "200".equals(level)) return List.of(); + return List.of(SlotText.topLeft(Text.literal(level).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java index 457d2964..1c3ef4bc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PotionLevelAdder.java @@ -8,7 +8,6 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -18,9 +17,15 @@ public class PotionLevelAdder extends SlotTextAdder { public @NotNull List<SlotText> getText(Slot slot) { final ItemStack stack = slot.getStack(); NbtCompound customData = ItemUtils.getCustomData(stack); - if (customData.contains("potion_level", NbtElement.INT_TYPE)) { - int level = customData.getInt("potion_level"); - return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).formatted(Formatting.AQUA))); + String title = stack.getName().getString(); + if (customData.contains("potion_level", NbtElement.INT_TYPE) && !title.contains("Healer Class") && !title.contains("Class Passives")) { + if (title.contains("Healer Level ")){ + String level = title.replaceAll("[^0-9]", ""); + return List.of(SlotText.bottomRight(Text.literal(level).withColor(0xFFFFFF))); + } else { + int level = customData.getInt("potion_level"); + return List.of(SlotText.bottomRight(Text.literal(String.valueOf(level)).withColor(0xFFDDC1))); + } } return List.of(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java new file mode 100644 index 00000000..0bb37165 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PowerStonesGuideAdder.java @@ -0,0 +1,38 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PowerStonesGuideAdder extends SlotTextAdder { + private static final Pattern LEARNED = Pattern.compile("Learned: (Yes|Not Yet) (?<symbol>[✖✔])"); + + public PowerStonesGuideAdder() { + super("^Power Stones Guide"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + + Matcher match = ItemUtils.getLoreLineIfMatch(stack, LEARNED); + if (match == null) return List.of(); + String symbol = match.group("symbol"); + Text text; + if (symbol.equals("✖")) { + text = Text.literal("✖").withColor(0xFF7276); + } else { + text = Text.literal("✔").withColor(0x90ee90); + } + + return List.of(SlotText.bottomRight(text)); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java index a157efee..ce29297e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/PrehistoricEggAdder.java @@ -29,6 +29,6 @@ public class PrehistoricEggAdder extends SlotTextAdder { else if (walked < 10000) walkedstr = String.format("%.1fk", walked/1000.0f); else walkedstr = walked / 1000 + "k"; - return List.of(SlotText.bottomLeft(Text.literal(walkedstr).formatted(Formatting.GOLD))); + return List.of(SlotText.bottomLeft(Text.literal(walkedstr).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java index 1f92fb8a..7de5a5be 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/RancherBootsSpeedAdder.java @@ -31,6 +31,6 @@ public class RancherBootsSpeedAdder extends SlotTextAdder { if (matcher == null) return List.of(); String speed = matcher.group(2); if (speed == null) speed = matcher.group(1); //2nd group only matches when the speed cap is set to a number beyond the player's actual speed cap. - return List.of(SlotText.bottomLeft(Text.literal(speed).formatted(Formatting.GREEN))); + return List.of(SlotText.bottomLeft(Text.literal(speed).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java index 095982af..07b8dd9b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkillLevelAdder.java @@ -24,7 +24,7 @@ public class SkillLevelAdder extends SlotTextAdder { if (lastIndex == -1) return List.of(SlotText.bottomLeft(Text.literal("0").formatted(Formatting.LIGHT_PURPLE))); //Skills without any levels don't display any roman numerals. Probably because 0 doesn't exist. String romanNumeral = name.substring(lastIndex + 1); //+1 because we don't need the space itself //The "romanNumeral" might be a latin numeral, too. There's a skyblock setting for this, so we have to do it this way V - return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(RomanNumerals.isValidRomanNumeral(romanNumeral) ? RomanNumerals.romanToDecimal(romanNumeral) : Integer.parseInt(romanNumeral))).formatted(Formatting.LIGHT_PURPLE))); + return List.of(SlotText.bottomLeft(Text.literal(String.valueOf(RomanNumerals.isValidRomanNumeral(romanNumeral) ? RomanNumerals.romanToDecimal(romanNumeral) : Integer.parseInt(romanNumeral))).withColor(0xFFDDC1))); } default -> { return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java index 8b528508..0fc07922 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/SkyblockLevelAdder.java @@ -22,8 +22,8 @@ public class SkyblockLevelAdder extends SlotTextAdder { if (lore.isEmpty()) return List.of(); List<Text> siblings = lore.getFirst().getSiblings(); if (siblings.size() < 3) return List.of(); - Text levelText = siblings.get(2); //The 3rd child is the level text itself - if (!NumberUtils.isDigits(levelText.getString())) return List.of(); - return List.of(SlotText.bottomLeft(levelText)); + String levelText = siblings.get(2).getString(); //The 3rd child is the level text itself + if (!NumberUtils.isDigits(levelText)) return List.of(); + return List.of(SlotText.bottomLeft(Text.literal(levelText).withColor(0xFFDDC1))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java new file mode 100644 index 00000000..3079d8f2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/StatsTuningAdder.java @@ -0,0 +1,42 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class StatsTuningAdder extends SlotTextAdder { + private static final Pattern STATHAS = Pattern.compile("Stat has: (?<points>\\d+) (points|point)"); + private static final Pattern UNASSIGNEDPOINTS = Pattern.compile("Unassigned Points: (?<points>\\d+)!!!"); + + public StatsTuningAdder() { + super("^Stats Tuning"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + + Matcher statMatcher = ItemUtils.getLoreLineIfMatch(stack, STATHAS); + Matcher unassignedMatcher = ItemUtils.getLoreLineIfMatch(stack, UNASSIGNEDPOINTS); + + if (stack.getName().getString().equals("Stats Tuning")) { + if (unassignedMatcher == null) return List.of(); + String unassignedPoints = unassignedMatcher.group("points"); + return List.of(SlotText.bottomRight(Text.literal(unassignedPoints).withColor(0xFFDDC1))); + } + + if (statMatcher == null) return List.of(); + String assignedPoints = statMatcher.group("points"); + if (assignedPoints.equals("0")) return List.of(); + return List.of(SlotText.bottomRight(Text.literal(assignedPoints).withColor(0xFFDDC1))); + + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java new file mode 100644 index 00000000..ec1bd561 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/YourEssenceAdder.java @@ -0,0 +1,46 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SlotTextAdder; +import de.hysky.skyblocker.utils.ItemUtils; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import net.minecraft.text.Text; +import org.jetbrains.annotations.NotNull; + +import java.text.NumberFormat; +import java.util.List; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class YourEssenceAdder extends SlotTextAdder { + private static final Pattern ESSENCE = Pattern.compile("You currently own (?<essence>[\\d,]+)"); + + public YourEssenceAdder() { + super("^Your Essence"); + } + + @Override + public @NotNull List<SlotText> getText(Slot slot) { + final ItemStack stack = slot.getStack(); + String name = stack.getName().getString(); + if (name.contains("Essence")) { + List<Text> lore = ItemUtils.getLore(stack); + if (lore.isEmpty()) return List.of(); + String essenceAmountText = lore.getFirst().getString(); + + Matcher essenceAmountMatcher = ESSENCE.matcher(essenceAmountText); + if (essenceAmountMatcher.find()) { + String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); + if (!essenceAmount.matches("-?\\d+")) return List.of(); + NumberFormat NUMBER_FORMATTER_S = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); + NUMBER_FORMATTER_S.setMinimumFractionDigits(1); + int amount = Integer.parseInt(essenceAmount); + + return List.of(SlotText.bottomRight(Text.literal(NUMBER_FORMATTER_S.format(amount)).withColor(0xFFDDC1))); + } + } + return List.of(); + } +}
\ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index 88f09496..d82b2682 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -1,6 +1,9 @@ package de.hysky.skyblocker.skyblock.item.tooltip; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonReader; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; @@ -8,6 +11,7 @@ import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; +import java.io.StringReader; import java.net.http.HttpHeaders; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -160,7 +164,12 @@ public enum TooltipInfoType implements Runnable { if (this.hash == hash) return; else this.hash = hash; } - data = SkyblockerMod.GSON.fromJson(Http.sendGetRequest(address), JsonObject.class); + String response = Http.sendGetRequest(address); + if (response.trim().startsWith("<!DOCTYPE") || response.trim().startsWith("<html")) { + ItemTooltip.LOGGER.warn("[Skyblocker] Received HTML content for " + this.name() + ". Expected JSON."); + return; + } + data = SkyblockerMod.GSON.fromJson(response, JsonObject.class); if (callback != null) callback.accept(data); } catch (Exception e) { |