diff options
9 files changed, 129 insertions, 96 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index f1d6d2bb..2513fb82 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -865,6 +865,15 @@ public class SkyblockerConfig { public String dungeonScore300Message = "300 Score Reached!"; @SerialEntry + public boolean enableDungeonCryptsMessage = true; + + @SerialEntry + public int dungeonCryptsMessageThreshold = 250; + + @SerialEntry + public String dungeonCryptsMessage = "We only have [crypts] crypts out of 5, we need more!"; + + @SerialEntry public boolean enableScoreHUD = true; @SerialEntry diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index 9d6e1beb..06a904ba 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -231,6 +231,30 @@ public class DungeonsCategory { .controller(StringControllerBuilder::create) .build()) .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage.@Tooltip"))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonCryptsMessage, + () -> config.locations.dungeons.dungeonScore.enableDungeonCryptsMessage, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonCryptsMessage = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold.@Tooltip"))) + .binding(defaults.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold, + () -> config.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold, + newValue -> config.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold = newValue) + .controller(IntegerFieldControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage.@Tooltip"))) + .binding(defaults.locations.dungeons.dungeonScore.dungeonCryptsMessage, + () -> config.locations.dungeons.dungeonScore.dungeonCryptsMessage, + newValue -> config.locations.dungeons.dungeonScore.dungeonCryptsMessage = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.@Tooltip"), Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.deathMessagesNote"))) .binding(defaults.locations.dungeons.dungeonScore.enableScoreHUD, diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java index 10605d8b..9d610ccd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java @@ -56,6 +56,7 @@ public class DungeonScore { private static String currentFloor; private static boolean isCurrentFloorEntrance; private static boolean floorHasMimics; + private static boolean sentCrypts; private static boolean sent270; private static boolean sent300; private static boolean mimicKilled; @@ -112,6 +113,15 @@ public class DungeonScore { } sent270 = true; } + + int crypts = getCrypts(); + if (!sentCrypts && score >= SCORE_CONFIG.dungeonCryptsMessageThreshold && crypts < 5) { + if (SCORE_CONFIG.enableDungeonCryptsMessage) { + MessageScheduler.INSTANCE.sendMessageAfterCooldown("/pc " + Constants.PREFIX.get().getString() + SCORE_CONFIG.dungeonCryptsMessage.replaceAll("\\[crypts]", String.valueOf(crypts))); + } + sentCrypts = true; + } + if (!sent300 && score >= 300) { if (SCORE_CONFIG.enableDungeonScore300Message) { MessageScheduler.INSTANCE.sendMessageAfterCooldown("/pc " + Constants.PREFIX.get().getString() + SCORE_CONFIG.dungeonScore300Message.replaceAll("\\[score]", "300")); @@ -132,6 +142,7 @@ public class DungeonScore { currentFloor = ""; isCurrentFloorEntrance = false; floorHasMimics = false; + sentCrypts = false; sent270 = false; sent300 = false; mimicKilled = false; 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 4ce92de8..86a8e685 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; import java.util.stream.Stream; public class DwarvenHud { @@ -32,22 +31,22 @@ public class DwarvenHud { public static String glacitePowder = "0"; private static final List<Pattern> COMMISSIONS = Stream.of( - "(?:Titanium|Mithril|Hard Stone) Miner", - "(?:Glacite Walker|Golden Goblin|(?<!Golden )Goblin|Goblin Raid|Treasure Hoarder|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", - "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", - "Goblin Raid", - "(?:Star Sentry|Treasure Hoarder) Puncher", - "(?<!Lucky )Raffle", - "Lucky Raffle", - "2x Mithril Powder Collector", - "First Event", - "(?:Ruby|Amber|Sapphire|Jade|Amethyst|Topaz|Onyx|Aquamarine|Citrine|Peridot) Gemstone Collector", - "(?:Amber|Sapphire|Jade|Amethyst|Topaz) Crystal Hunter", - "(?:Umber|Tungsten|Glacite|Scrap) Collector", - "Mineshaft Explorer", - "(?:Chest|Corpse) Looter").map(s -> Pattern.compile("(" + s + "): (\\d+\\.?\\d*%|DONE)") - ).collect(Collectors.toList()); + "(?:Titanium|Mithril|Hard Stone) Miner", + "(?:Glacite Walker|Golden Goblin|(?<!Golden )Goblin|Goblin Raid|Treasure Hoarder|Automaton|Sludge|Team Treasurite Member|Yog|Boss Corleone|Thyst) Slayer", + "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Mithril", + "(?:Lava Springs|Cliffside Veins|Rampart's Quarry|Upper Mines|Royal Mines) Titanium", + "Goblin Raid", + "(?:Star Sentry|Treasure Hoarder) Puncher", + "(?<!Lucky )Raffle", + "Lucky Raffle", + "2x Mithril Powder Collector", + "First Event", + "(?:Ruby|Amber|Sapphire|Jade|Amethyst|Topaz|Onyx|Aquamarine|Citrine|Peridot) Gemstone Collector", + "(?:Amber|Sapphire|Jade|Amethyst|Topaz) Crystal Hunter", + "(?:Umber|Tungsten|Glacite|Scrap) Collector", + "Mineshaft Explorer", + "(?:Chest|Corpse) Looter").map(s -> Pattern.compile("(" + s + "): (\\d+\\.?\\d*%|DONE)") + ).toList(); private static final Pattern MITHRIL_PATTERN = Pattern.compile("Mithril: [0-9,]+"); private static final Pattern GEMSTONE_PATTERN = Pattern.compile("Gemstone: [0-9,]+"); private static final Pattern GLACITE_PATTERN = Pattern.compile("Glacite: [0-9,]+"); @@ -111,8 +110,9 @@ public class DwarvenHud { } context.drawTextWithShadow(CLIENT.textRenderer, - Text.literal(commission.commission + ": ").formatted(Formatting.AQUA) - .append(Text.literal(commission.progression).formatted(Colors.hypixelProgressColor(percentage))), + Text.literal(commission.commission + ": ").formatted(Formatting.AQUA).append( + Text.literal(commission.progression).withColor(Colors.pcntToCol(percentage)) + ), comHudX + 5, comHudY + y + 5, 0xFFFFFFFF); y += 20; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java index 69bc6f1c..b4d47617 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/AccessoriesHelper.java @@ -1,25 +1,5 @@ package de.hysky.skyblocker.skyblock.item.tooltip; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.OptionalInt; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.function.Predicate; -import java.util.function.ToIntFunction; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -import org.slf4j.Logger; - import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.logging.LogUtils; @@ -27,7 +7,6 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.util.UndashedUuid; - import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; @@ -42,6 +21,23 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.slot.Slot; +import org.slf4j.Logger; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.nio.file.Files; +import java.nio.file.NoSuchFileException; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.function.Predicate; +import java.util.function.ToIntFunction; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; public class AccessoriesHelper { private static final Logger LOGGER = LogUtils.getLogger(); @@ -95,7 +91,7 @@ public class AccessoriesHelper { } } - private static void collectAccessories(List<Slot> slots, int page) { + private static void collectAccessories(List<Slot> slots, int page) { //Is this even needed? if (!loaded.isDone()) return; @@ -107,14 +103,14 @@ public class AccessoriesHelper { String uuid = UndashedUuid.toString(MinecraftClient.getInstance().getSession().getUuidOrNull()); - COLLECTED_ACCESSORIES.computeIfAbsent(uuid, _uuid -> new Object2ObjectOpenHashMap<>()).computeIfAbsent(Utils.getProfileId(), profileId -> ProfileAccessoryData.createDefault()).pages() + COLLECTED_ACCESSORIES.computeIfAbsent(uuid, _uuid -> new Object2ObjectOpenHashMap<>()).computeIfAbsent(Utils.getProfileId(), profileId -> ProfileAccessoryData.createDefault()).pages() .put(page, new ObjectOpenHashSet<>(accessoryIds)); } static Pair<AccessoryReport, String> calculateReport4Accessory(String accessoryId) { if (!ACCESSORY_DATA.containsKey(accessoryId) || Utils.getProfileId().isEmpty()) return Pair.of(AccessoryReport.INELIGIBLE, null); - Accessory accessory = ACCESSORY_DATA.get(accessoryId); + Accessory accessory = ACCESSORY_DATA.get(accessoryId); String uuid = UndashedUuid.toString(MinecraftClient.getInstance().getSession().getUuidOrNull()); Set<Accessory> collectedAccessories = COLLECTED_ACCESSORIES.computeIfAbsent(uuid, _uuid -> new Object2ObjectOpenHashMap<>()).computeIfAbsent(Utils.getProfileId(), profileId -> ProfileAccessoryData.createDefault()).pages().values().stream() .flatMap(ObjectOpenHashSet::stream) @@ -122,8 +118,11 @@ public class AccessoriesHelper { .map(ACCESSORY_DATA::get) .collect(Collectors.toSet()); - //If the player has this accessory, and it doesn't belong to a family - if (collectedAccessories.contains(accessory) && accessory.family().isEmpty()) return Pair.of(AccessoryReport.HAS_HIGHEST_TIER, null); + // If the accessory doesn't belong to a family + if (accessory.family().isEmpty()) { + //If the player has this accessory or player doesn't have this accessory + return collectedAccessories.contains(accessory) ? Pair.of(AccessoryReport.HAS_HIGHEST_TIER, null) : Pair.of(AccessoryReport.MISSING, ""); + } Predicate<Accessory> HAS_SAME_FAMILY = accessory::hasSameFamily; Set<Accessory> collectedAccessoriesInTheSameFamily = collectedAccessories.stream() @@ -131,45 +130,43 @@ public class AccessoriesHelper { .filter(HAS_SAME_FAMILY) .collect(Collectors.toSet()); - //If the player doesn't have any collected accessories with same family - if (collectedAccessoriesInTheSameFamily.isEmpty()) return Pair.of(AccessoryReport.MISSING, null); - Set<Accessory> accessoriesInTheSameFamily = ACCESSORY_DATA.values().stream() .filter(HAS_FAMILY) .filter(HAS_SAME_FAMILY) .collect(Collectors.toSet()); - ///If the player has the highest tier accessory in this family - //Take the accessories in the same family as {@code accessory}, then get the one with the highest tier - Optional<Accessory> highestTierOfFamily = accessoriesInTheSameFamily.stream() - .max(Comparator.comparingInt(ACCESSORY_TIER)); - int maxTierInFamily = highestTierOfFamily.orElse(Accessory.EMPTY).tier(); + int highestTierInFamily = accessoriesInTheSameFamily.stream() + .mapToInt(ACCESSORY_TIER) + .max() + .orElse(0); - if (collectedAccessoriesInTheSameFamily.stream().anyMatch(ca -> ca.tier() == maxTierInFamily)) return Pair.of(AccessoryReport.HAS_HIGHEST_TIER, null); + //If the player hasn't collected any accessory in same family + if (collectedAccessoriesInTheSameFamily.isEmpty()) return Pair.of(AccessoryReport.MISSING, String.format("(%d/%d)", accessory.tier(), highestTierInFamily)); - //If this accessory is a higher tier than all the other collected accessories in the same family - OptionalInt highestTierOfAllCollectedInFamily = collectedAccessoriesInTheSameFamily.stream() + int highestTierCollectedInFamily = collectedAccessoriesInTheSameFamily.stream() .mapToInt(ACCESSORY_TIER) - .max(); + .max() + .getAsInt(); + + //If this accessory is the highest tier, and the player has the highest tier accessory in this family + //This accounts for multiple accessories with the highest tier + if (accessory.tier() == highestTierInFamily && highestTierCollectedInFamily == highestTierInFamily) return Pair.of(AccessoryReport.HAS_HIGHEST_TIER, null); - if (accessory.tier() > highestTierOfAllCollectedInFamily.getAsInt()) return Pair.of(AccessoryReport.IS_GREATER_TIER, String.format("(%d→%d/%d)", highestTierOfAllCollectedInFamily.orElse(0), accessory.tier(), maxTierInFamily)); + //If this accessory is a higher tier than all the other collected accessories in the same family + if (accessory.tier() > highestTierCollectedInFamily) return Pair.of(AccessoryReport.IS_GREATER_TIER, String.format("(%d→%d/%d)", highestTierCollectedInFamily, accessory.tier(), highestTierInFamily)); //If this accessory is a lower tier than one already obtained from same family - if (accessory.tier() < highestTierOfAllCollectedInFamily.getAsInt()) return Pair.of(AccessoryReport.OWNS_BETTER_TIER, String.format("(%d→%d/%d)", highestTierOfAllCollectedInFamily.orElse(0), accessory.tier(), maxTierInFamily)); + if (accessory.tier() < highestTierCollectedInFamily) return Pair.of(AccessoryReport.OWNS_BETTER_TIER, String.format("(%d→%d/%d)", highestTierCollectedInFamily, accessory.tier(), highestTierInFamily)); //If there is an accessory in the same family that has a higher tier - //Take the accessories in the same family, then check if there is an accessory whose tier is greater than {@code accessory} - boolean hasGreaterTierInFamily = accessoriesInTheSameFamily.stream() - .anyMatch(ca -> ca.tier() > accessory.tier()); + if (accessory.tier() < highestTierInFamily) return Pair.of(AccessoryReport.HAS_GREATER_TIER, String.format("(%d/%d)", highestTierCollectedInFamily, highestTierInFamily)); - if (hasGreaterTierInFamily) return Pair.of(AccessoryReport.HAS_GREATER_TIER, String.format("(%d/%d)", highestTierOfAllCollectedInFamily.orElse(0), maxTierInFamily)); - - return Pair.of(AccessoryReport.MISSING, null); + return Pair.of(AccessoryReport.MISSING, String.format("(%d/%d)", accessory.tier(), highestTierInFamily)); } static void refreshData(JsonObject data) { try { - ACCESSORY_DATA = Accessory.MAP_CODEC.parse(JsonOps.INSTANCE, data).result().orElseThrow(); + ACCESSORY_DATA = Accessory.MAP_CODEC.parse(JsonOps.INSTANCE, data).result().orElseThrow(); } catch (Exception e) { LOGGER.error("[Skyblocker Accessory Helper] Failed to parse data!", e); } @@ -178,11 +175,11 @@ public class AccessoriesHelper { private record ProfileAccessoryData(Int2ObjectOpenHashMap<ObjectOpenHashSet<String>> pages) { private static final Codec<ProfileAccessoryData> CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.unboundedMap(Codec.INT, Codec.STRING.listOf().xmap(ObjectOpenHashSet::new, ObjectArrayList::new)) - .xmap(Int2ObjectOpenHashMap::new, Int2ObjectOpenHashMap::new).fieldOf("pages").forGetter(ProfileAccessoryData::pages)) - .apply(instance, ProfileAccessoryData::new)); + .xmap(Int2ObjectOpenHashMap::new, Int2ObjectOpenHashMap::new).fieldOf("pages").forGetter(ProfileAccessoryData::pages) + ).apply(instance, ProfileAccessoryData::new)); private static final Codec<Object2ObjectOpenHashMap<String, Object2ObjectOpenHashMap<String, ProfileAccessoryData>>> SERIALIZATION_CODEC = Codec.unboundedMap(Codec.STRING, Codec.unboundedMap(Codec.STRING, CODEC) - .xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new)) - .xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new); + .xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new) + ).xmap(Object2ObjectOpenHashMap::new, Object2ObjectOpenHashMap::new); private static ProfileAccessoryData createDefault() { return new ProfileAccessoryData(new Int2ObjectOpenHashMap<>()); @@ -197,11 +194,10 @@ public class AccessoriesHelper { private static final Codec<Accessory> CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.fieldOf("id").forGetter(Accessory::id), Codec.STRING.optionalFieldOf("family").forGetter(Accessory::family), - Codec.INT.optionalFieldOf("tier", 0).forGetter(Accessory::tier)) - .apply(instance, Accessory::new)); + Codec.INT.optionalFieldOf("tier", 0).forGetter(Accessory::tier) + ).apply(instance, Accessory::new)); private static final Codec<Map<String, Accessory>> MAP_CODEC = Codec.unboundedMap(Codec.STRING, CODEC); - private static final Accessory EMPTY = new Accessory("", Optional.empty(), 0); - + private boolean hasFamily() { return family.isPresent(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index 7c3be9c9..ea24dc63 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -234,7 +234,7 @@ public class ItemTooltip { case IS_GREATER_TIER -> Text.literal("✦ Upgrade ").withColor(0x218bff).append(Text.literal(report.right()).withColor(0xf8f8ff)); case HAS_GREATER_TIER -> Text.literal("↑ Upgradable ").withColor(0xf8d048).append(Text.literal(report.right()).withColor(0xf8f8ff)); case OWNS_BETTER_TIER -> Text.literal("↓ Downgrade ").formatted(Formatting.GRAY).append(Text.literal(report.right()).withColor(0xf8f8ff)); - case MISSING -> Text.literal("✖ Missing").formatted(Formatting.RED); + case MISSING -> Text.literal("✖ Missing ").formatted(Formatting.RED).append(Text.literal(report.right()).withColor(0xf8f8ff)); //Should never be the case default -> Text.literal("? Unknown").formatted(Formatting.GRAY); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Colors.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Colors.java index 82b7ef11..025514e9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Colors.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/Colors.java @@ -1,6 +1,5 @@ package de.hysky.skyblocker.skyblock.tabhud.util; -import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; public class Colors { @@ -10,18 +9,6 @@ public class Colors { * @return an int representing a color, where 100% = green and 0% = red */ public static int pcntToCol(float pcnt) { - return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); - } - - public static Formatting hypixelProgressColor(float pcnt) { - if (pcnt < 25) { - return Formatting.RED; - } else if (pcnt < 50) { - return Formatting.GOLD; - } else if (pcnt < 75) { - return Formatting.YELLOW; - } else { - return Formatting.GREEN; - } + return MathHelper.hsvToRgb(pcnt / 300, 1, 1); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java index 5832f31e..44a06c99 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java @@ -1,7 +1,5 @@ package de.hysky.skyblocker.skyblock.tabhud.widget.hud; -import java.util.List; - import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import de.hysky.skyblocker.skyblock.tabhud.util.Colors; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; @@ -13,14 +11,15 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import java.util.List; + // this widget shows the status of the king's commissions. // (dwarven mines and crystal hollows) // USE ONLY WITH THE DWARVEN HUD! public class HudCommsWidget extends Widget { - private static final MutableText TITLE = Text.literal("Commissions").formatted(Formatting.DARK_AQUA, - Formatting.BOLD); + private static final MutableText TITLE = Text.literal("Commissions").formatted(Formatting.DARK_AQUA, Formatting.BOLD); private List<Commission> commissions; private boolean isFancy; @@ -59,9 +58,10 @@ public class HudCommsWidget extends Widget { comp = new ProgressComponent(Ico.BOOK, c, p, Colors.pcntToCol(p)); } else { comp = new PlainTextComponent( - Text.literal(comm.commission() + ": ") - .append(Text.literal(comm.progression()) - .formatted(Colors.hypixelProgressColor(p)))); + Text.literal(comm.commission() + ": ").append( + Text.literal(comm.progression()).withColor(Colors.pcntToCol(p)) + ) + ); } this.addComponent(comp); } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 42f0f505..0fb10e10 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -271,6 +271,12 @@ "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip": "Plays a sound when reaching %d score in dungeons.", "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage": "Dungeon Score %d Message", "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip": "Message which will be sent in the chat when reaching %d score in dungeons. The string \"[score]\" will be replaced with the dungeon score (%d).", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage": "Enable Dungeon Crypts Message", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage.@Tooltip": "After reaching threshold sends message in chat if less than 5 crypts found.", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold": "Dungeon Crypts Message Threshold", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold.@Tooltip": "Default 270 is intended for S+ runs when you enter at 300+ score - which is usually F5-F7 and M5-M7. \nIf you are running S runs (enter at 270 score) then you should consider lowering this to 250 or less, otherwise it will be useless", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage": "Dungeon Crypts Message", + "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage.@Tooltip": "Message which will be sent in the chat when reaching threshold score before getting 5+ crypts. The string \"[crypts]\" will be replaced with the amount of crypts.", "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD": "Enable Score HUD", "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.@Tooltip": "Displays the dungeon score in the HUD.", "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.deathMessagesNote": "\n\n\nNote: This only works correctly if death messages are enabled in your skyblock settings. If you want to hide death messages, use this mod's Hide Player Death Messages setting instead to allow further processing of death messages.", |