From 07276f1378c6f98fbb0882a6d6f59dc685723351 Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 2 Mar 2025 23:27:52 -0500 Subject: Migrate to formatters (#1185) --- .../newyearcakes/NewYearCakesHelper.java | 7 ++-- .../skyblock/calculators/CalculatorCommand.java | 9 ++--- .../skyblock/calculators/SignCalculator.java | 7 ++-- .../chocolatefactory/ChocolateFactorySolver.java | 26 +++++--------- .../profittrackers/PowderMiningTracker.java | 5 +-- .../skyblocker/skyblock/end/EndHudWidget.java | 19 +++------- .../item/slottext/adders/EssenceShopAdder.java | 3 +- .../item/slottext/adders/EvolvingItemAdder.java | 6 ++-- .../item/slottext/adders/YourEssenceAdder.java | 9 ++--- .../skyblock/item/tooltip/adders/BitsHelper.java | 11 +++--- .../item/tooltip/adders/EssenceShopPrice.java | 7 ++-- .../adders/StackingEnchantProgressTooltip.java | 8 ++--- .../profileviewer/collections/GenericCategory.java | 9 +++-- .../profileviewer/dungeons/DungeonClassWidget.java | 4 +-- .../skyblock/profileviewer/inventory/Pet.java | 6 ++-- .../skyblock/profileviewer/skills/SkillWidget.java | 5 +-- .../profileviewer/slayers/SlayerWidget.java | 4 +-- .../profileviewer/utils/ProfileViewerUtils.java | 6 +--- .../skyblock/slayers/hud/SlayerHudWidget.java | 7 ++-- .../skyblock/tabhud/widget/PowderWidget.java | 11 ++---- .../java/de/hysky/skyblocker/utils/Formatters.java | 41 +++++++++++++--------- 21 files changed, 85 insertions(+), 125 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java index 4b3dbda8..253477b5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.accessories.newyearcakes; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import de.hysky.skyblocker.utils.container.SimpleContainerSolver; @@ -13,7 +14,6 @@ import net.minecraft.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.text.NumberFormat; import java.text.ParseException; import java.util.*; import java.util.regex.Matcher; @@ -23,8 +23,7 @@ public class NewYearCakesHelper extends SimpleContainerSolver { private static final Logger LOGGER = LoggerFactory.getLogger(NewYearCakesHelper.class); private static final Pattern NEW_YEAR_CAKE = Pattern.compile("New Year Cake \\(Year (?\\d+)\\)"); private static final Pattern NEW_YEAR_CAKE_PURCHASE = Pattern.compile("You purchased New Year Cake \\(Year (?\\d+)\\) for .+ coins!"); - private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US); - public static final NewYearCakesHelper INSTANCE = new NewYearCakesHelper(); + public static final NewYearCakesHelper INSTANCE = new NewYearCakesHelper(); private final Map cakes = new HashMap<>(); private NewYearCakesHelper() { @@ -40,7 +39,7 @@ public class NewYearCakesHelper extends SimpleContainerSolver { Matcher matcher = pattern.matcher(name); if (matcher.matches()) { try { - return NUMBER_FORMAT.parse(matcher.group("year")).intValue(); + return Formatters.INTEGER_NUMBERS.parse(matcher.group("year")).intValue(); } catch (ParseException e) { LOGGER.info("Failed to parse year from New Year Cake: " + name, e); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java index 2aa4ddf9..065016cc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/CalculatorCommand.java @@ -7,6 +7,7 @@ import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.utils.Calculator; import de.hysky.skyblocker.utils.Constants; +import de.hysky.skyblocker.utils.Formatters; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.client.MinecraftClient; @@ -15,18 +16,14 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import java.text.NumberFormat; -import java.util.Locale; - import static com.mojang.brigadier.arguments.StringArgumentType.getString; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class CalculatorCommand { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final NumberFormat FORMATTER = NumberFormat.getInstance(Locale.US); - @Init + @Init public static void init() { ClientCommandRegistrationCallback.EVENT.register(CalculatorCommand::calculate); } @@ -44,7 +41,7 @@ public class CalculatorCommand { private static int doCalculation(String calculation) { MutableText text = Constants.PREFIX.get(); try { - text.append(Text.literal(FORMATTER.format(Calculator.calculate(calculation))).formatted(Formatting.GREEN)); + text.append(Text.literal(Formatters.DOUBLE_NUMBERS.format(Calculator.calculate(calculation))).formatted(Formatting.GREEN)); } catch (UnsupportedOperationException e) { text.append(Text.translatable("skyblocker.config.uiAndVisuals.inputCalculator.invalidEquation").formatted(Formatting.RED)); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java index 0b52fde5..4a43dbff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java @@ -2,18 +2,15 @@ package de.hysky.skyblocker.skyblock.calculators; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Calculator; +import de.hysky.skyblocker.utils.Formatters; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.VisibleForTesting; -import java.text.NumberFormat; -import java.util.Locale; - public class SignCalculator { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final NumberFormat FORMATTER = NumberFormat.getInstance(Locale.US); private static String lastInput; private static double output; @@ -65,7 +62,7 @@ public class SignCalculator { if (output == -1) { text = Text.translatable("skyblocker.config.uiAndVisuals.inputCalculator.invalidEquation").formatted(Formatting.RED); } else { - text = Text.literal(input + " = " + FORMATTER.format(output)).formatted(Formatting.GREEN); + text = Text.literal(input + " = " + Formatters.DOUBLE_NUMBERS.format(output)).formatted(Formatting.GREEN); } context.drawCenteredTextWithShadow(CLIENT.textRenderer, text, renderX, renderY, 0xFFFFFFFF); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java index 9bc45670..0dbf1923 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java @@ -3,10 +3,7 @@ package de.hysky.skyblocker.skyblock.chocolatefactory; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; import de.hysky.skyblocker.skyblock.item.tooltip.adders.LineSmoothener; -import de.hysky.skyblocker.utils.ItemUtils; -import de.hysky.skyblocker.utils.RegexUtils; -import de.hysky.skyblocker.utils.RomanNumerals; -import de.hysky.skyblocker.utils.SkyblockTime; +import de.hysky.skyblocker.utils.*; import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import de.hysky.skyblocker.utils.container.SlotTextAdder; import de.hysky.skyblocker.utils.container.TooltipAdder; @@ -28,7 +25,6 @@ import org.apache.commons.lang3.math.NumberUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.text.NumberFormat; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,7 +42,6 @@ public class ChocolateFactorySolver extends SimpleContainerSolver implements Too private static final Pattern PRESTIGE_REQUIREMENT_PATTERN = Pattern.compile("Chocolate this Prestige: ([\\d,]+) +Requires (\\S+) Chocolate this Prestige!"); private static final Pattern TIME_TOWER_STATUS_PATTERN = Pattern.compile("Status: (ACTIVE|INACTIVE)"); private static final Pattern TIME_TOWER_MULTIPLIER_PATTERN = Pattern.compile("by \\+([\\d.]+)x for \\dh\\."); - private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); //Slots, for ease of maintenance rather than using magic numbers everywhere. private static final byte RABBITS_START = 28; @@ -75,11 +70,6 @@ public class ChocolateFactorySolver extends SimpleContainerSolver implements Too private static StraySound ding = StraySound.NONE; private static int dingTick = 0; - static { - DECIMAL_FORMAT.setMinimumFractionDigits(0); - DECIMAL_FORMAT.setMaximumFractionDigits(1); - } - public static final ChocolateFactorySolver INSTANCE = new ChocolateFactorySolver(); private ChocolateFactorySolver() { @@ -308,7 +298,7 @@ public class ChocolateFactorySolver extends SimpleContainerSolver implements Too if (requiredUntilNextPrestige > 0 && !canPrestige) { lines.add(Text.empty() .append(Text.literal("Chocolate until next prestige: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(requiredUntilNextPrestige)).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(requiredUntilNextPrestige)).formatted(Formatting.GOLD))); } lines.add(Text.empty() //Keep this outside of the `if` to match the format of the upgrade tooltips, that say "Time until upgrade: Now" when it's possible .append(Text.literal("Time until next prestige: ").formatted(Formatting.GRAY)) @@ -321,18 +311,18 @@ public class ChocolateFactorySolver extends SimpleContainerSolver implements Too lines.add(Text.literal("Current stats:").formatted(Formatting.GRAY)); lines.add(Text.empty() .append(Text.literal(" CPS increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(totalCps / totalCpsMultiplier * timeTowerMultiplier)).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(totalCps / totalCpsMultiplier * timeTowerMultiplier)).formatted(Formatting.GOLD))); lines.add(Text.empty() .append(Text.literal(" CPS when active: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps : totalCps / totalCpsMultiplier * (timeTowerMultiplier + totalCpsMultiplier))).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(isTimeTowerActive ? totalCps : totalCps / totalCpsMultiplier * (timeTowerMultiplier + totalCpsMultiplier))).formatted(Formatting.GOLD))); if (!isTimeTowerMaxed) { lines.add(Text.literal("Stats after upgrade:").formatted(Formatting.GRAY)); lines.add(Text.empty() .append(Text.literal(" CPS increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(totalCps / (totalCpsMultiplier) * (timeTowerMultiplier + 0.1))).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(totalCps / (totalCpsMultiplier) * (timeTowerMultiplier + 0.1))).formatted(Formatting.GOLD))); lines.add(Text.empty() .append(Text.literal(" CPS when active: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(isTimeTowerActive ? totalCps / totalCpsMultiplier * (totalCpsMultiplier + 0.1) : totalCps / totalCpsMultiplier * (timeTowerMultiplier + 0.1 + totalCpsMultiplier))).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(isTimeTowerActive ? totalCps / totalCpsMultiplier * (totalCpsMultiplier + 0.1) : totalCps / totalCpsMultiplier * (timeTowerMultiplier + 0.1 + totalCpsMultiplier))).formatted(Formatting.GOLD))); } return true; } @@ -343,11 +333,11 @@ public class ChocolateFactorySolver extends SimpleContainerSolver implements Too if (rabbit.slot == slot) { lines.add(Text.empty() .append(Text.literal("CPS Increase: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cpsIncrease)).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(rabbit.cpsIncrease)).formatted(Formatting.GOLD))); lines.add(Text.empty() .append(Text.literal("Cost per CPS: ").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(rabbit.cost / rabbit.cpsIncrease)).formatted(Formatting.GOLD))); + .append(Text.literal(Formatters.FLOAT_NUMBERS.format(rabbit.cost / rabbit.cpsIncrease)).formatted(Formatting.GOLD))); if (rabbit.slot == bestUpgrade) { if (rabbit.cost <= totalChocolate) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java index 8b49ee5c..4a41d9e7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/profittrackers/PowderMiningTracker.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.Unmodifiable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.file.Path; import java.text.NumberFormat; import java.util.Comparator; import java.util.List; @@ -326,9 +327,9 @@ public final class PowderMiningTracker extends AbstractProfitTracker { var set = INSTANCE.shownRewards.object2IntEntrySet(); for (Entry entry : set) { context.drawTextWithShadow(MinecraftClient.getInstance().textRenderer, entry.getKey(), 5, y, 0xFFFFFF); - context.drawTextWithShadow(MinecraftClient.getInstance().textRenderer, Text.of(NumberFormat.getInstance().format(entry.getIntValue())), 10 + MinecraftClient.getInstance().textRenderer.getWidth(entry.getKey()), y, 0xFFFFFF); + context.drawTextWithShadow(MinecraftClient.getInstance().textRenderer, Text.of(Formatters.INTEGER_NUMBERS.format(entry.getIntValue())), 10 + MinecraftClient.getInstance().textRenderer.getWidth(entry.getKey()), y, 0xFFFFFF); y += 10; } - context.drawTextWithShadow(MinecraftClient.getInstance().textRenderer, Text.translatable("skyblocker.powderTracker.profit", NumberFormat.getInstance().format(INSTANCE.profit)).formatted(Formatting.GOLD), 5, y + 10, 0xFFFFFF); + context.drawTextWithShadow(MinecraftClient.getInstance().textRenderer, Text.translatable("skyblocker.powderTracker.profit", Formatters.DOUBLE_NUMBERS.format(INSTANCE.profit)).formatted(Formatting.GOLD), 5, y + 10, 0xFFFFFF); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index 7cc24769..8767d580 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -6,6 +6,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.Location; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ProfileComponent; @@ -14,9 +15,8 @@ import net.minecraft.item.Items; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Util; -import java.text.NumberFormat; -import java.util.Locale; import java.util.Optional; import java.util.Set; @@ -26,17 +26,8 @@ public class EndHudWidget extends ComponentBasedWidget { private static EndHudWidget instance = null; - private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); - private static final ItemStack ENDERMAN_HEAD = new ItemStack(Items.PLAYER_HEAD); - private static final ItemStack POPPY = new ItemStack(Items.POPPY); - - static { - DECIMAL_FORMAT.setMinimumFractionDigits(0); - DECIMAL_FORMAT.setMaximumFractionDigits(2); - - ENDERMAN_HEAD.set(DataComponentTypes.PROFILE, new ProfileComponent(Optional.of("MHF_Enderman"), Optional.empty(), new PropertyMap())); - POPPY.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true); - } + private static final ItemStack ENDERMAN_HEAD = Util.make(new ItemStack(Items.PLAYER_HEAD), stack -> stack.set(DataComponentTypes.PROFILE, new ProfileComponent(Optional.of("MHF_Enderman"), Optional.empty(), new PropertyMap()))); + private static final ItemStack POPPY = Util.make(new ItemStack(Items.POPPY), stack -> stack.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true)); public EndHudWidget() { super(TITLE, Formatting.DARK_PURPLE.getColorValue(), "hud_end"); @@ -72,7 +63,7 @@ public class EndHudWidget extends ComponentBasedWidget { addComponent(new IcoTextComponent(ENDERMAN_HEAD, Text.literal("Zealots").formatted(Formatting.BOLD))); addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.zealotsSinceLastEye", endStats.zealotsSinceLastEye()))); addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.zealotsTotalKills", endStats.totalZealotKills()))); - String avg = endStats.eyes() == 0 ? "???" : DECIMAL_FORMAT.format((float) endStats.totalZealotKills() / endStats.eyes()); + String avg = endStats.eyes() == 0 ? "???" : Formatters.DOUBLE_NUMBERS.format((float) endStats.totalZealotKills() / endStats.eyes()); addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.avgKillsPerEye", avg))); } 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 index 03f37479..3ac2d026 100644 --- 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 @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RomanNumerals; import net.minecraft.item.ItemStack; @@ -46,6 +47,6 @@ public class EssenceShopAdder extends SimpleSlotTextAdder { String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); if (!essenceAmount.matches("-?\\d+")) return List.of(); - return SlotText.bottomRightList(Text.literal(YourEssenceAdder.COMPACT_NUMBER_FORMATTER.format(Integer.parseInt(essenceAmount))).withColor(SlotText.CREAM)); + return SlotText.bottomRightList(Text.literal(Formatters.SHORT_FLOAT_NUMBERS.format(Integer.parseInt(essenceAmount))).withColor(SlotText.CREAM)); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java index e36b19a0..6bb7b14c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RegexUtils; import net.minecraft.item.ItemStack; @@ -10,9 +11,7 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.text.NumberFormat; import java.util.List; -import java.util.Locale; import java.util.OptionalDouble; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -20,7 +19,6 @@ import java.util.regex.Pattern; // Evolving items are those that get upgraded after holding them in your inventory for a certain amount of time. public class EvolvingItemAdder extends SimpleSlotTextAdder { private static final Pattern BONUS_PATTERN = Pattern.compile("\\+?([\\d.]+)"); - private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US); public EvolvingItemAdder() { super(); @@ -56,7 +54,7 @@ public class EvolvingItemAdder extends SimpleSlotTextAdder { Text bonus = siblings.get(1); Matcher matcher = BONUS_PATTERN.matcher(bonus.getString()); OptionalDouble result = RegexUtils.findDoubleFromMatcher(matcher); - if (result.isPresent()) return SlotText.bottomLeftList(Text.literal(NUMBER_FORMAT.format(result.getAsDouble())).setStyle(bonus.getStyle())); + if (result.isPresent()) return SlotText.bottomLeftList(Text.literal(Formatters.DOUBLE_NUMBERS.format(result.getAsDouble())).setStyle(bonus.getStyle())); } } return List.of(); 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 index 4e0ca4e1..8e7f3518 100644 --- 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 @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext.adders; import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.ItemUtils; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -9,9 +10,7 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.text.NumberFormat; import java.util.List; -import java.util.Locale; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,11 +18,7 @@ import java.util.regex.Pattern; public class YourEssenceAdder extends SimpleSlotTextAdder { private static final Pattern YOUR_ESSENCE = Pattern.compile("You currently own (?[\\d,]+)"); private static final Pattern ESSENCE_GUIDE = Pattern.compile("Your \\w+ Essence: (?[\\d,]+)"); - public static final NumberFormat COMPACT_NUMBER_FORMATTER = NumberFormat.getCompactNumberInstance(Locale.CANADA, NumberFormat.Style.SHORT); - static { - COMPACT_NUMBER_FORMATTER.setMinimumFractionDigits(1); - } private static final ConfigInformation CONFIG_INFORMATION = new ConfigInformation( "your_essence", "skyblocker.config.uiAndVisuals.slotText.yourEssence"); @@ -38,7 +33,7 @@ public class YourEssenceAdder extends SimpleSlotTextAdder { return essenceAmountMatcher(ItemUtils.getLore(stack)).>map(essenceAmountMatcher -> { String essenceAmount = essenceAmountMatcher.group("essence").replace(",", ""); if (!essenceAmount.matches("-?\\d+")) return List.of(); - return SlotText.bottomRightList(Text.literal(COMPACT_NUMBER_FORMATTER.format(Integer.parseInt(essenceAmount))).withColor(SlotText.CREAM)); + return SlotText.bottomRightList(Text.literal(Formatters.SHORT_FLOAT_NUMBERS.format(Integer.parseInt(essenceAmount))).withColor(SlotText.CREAM)); }).orElse(List.of()); } return List.of(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BitsHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BitsHelper.java index d3de1cc8..16935dfb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BitsHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BitsHelper.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import com.mojang.logging.LogUtils; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.container.SimpleContainerSolver; import de.hysky.skyblocker.utils.container.TooltipAdder; @@ -22,7 +23,6 @@ import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; -import java.text.NumberFormat; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -33,7 +33,6 @@ public class BitsHelper extends SimpleContainerSolver implements TooltipAdder { private static final Pattern CATEGORY_PATTERN = Pattern.compile("Click to browse!"); @Language("RegExp") private static final String TITLE_PATTERN = ".*(?:Community Shop|Bits Shop).*"; - private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); private static final String LOGS_PREFIX = "[Skyblocker Bits Helper] "; //region Constants @@ -214,22 +213,22 @@ public class BitsHelper extends SimpleContainerSolver implements TooltipAdder { if (itemID.isEmpty()) { // a bit dirty, but basically if itemID is empty then it is normal item and NOT category lines.add(Text.empty() .append(Text.literal("Bits Cost: ").formatted(Formatting.AQUA)) - .append(Text.literal(DECIMAL_FORMAT.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); } else if (foundItemStack != null && isGreen) { lines.add(Text.empty() .append(Text.literal("Bits Cost: ").formatted(Formatting.AQUA)) - .append(Text.literal(DECIMAL_FORMAT.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); lines.add(Text.literal("From " + foundItemStack.getName().getString()).formatted(Formatting.GREEN)); } else if (foundItemStack != null) { lines.add(Text.empty() .append(Text.literal("Bits Cost: ").formatted(Formatting.AQUA)) - .append(Text.literal(DECIMAL_FORMAT.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); lines.add(Text.literal("From " + foundItemStack.getName().getString()).formatted(Formatting.DARK_AQUA)); } else { // if below so it won't clog logs with that cursed enchanted book if (!stack.getName().getString().equals("Stacking Enchants")) LOGGER.warn(LOGS_PREFIX + "ItemStack not found for {}", itemID); lines.add(Text.empty() .append(Text.literal("Bits Cost: ").formatted(Formatting.AQUA)) - .append(Text.literal(DECIMAL_FORMAT.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(coinsPerBit) + " Coins per bit").formatted(Formatting.DARK_AQUA))); lines.add(Text.literal("From " + itemID).formatted(Formatting.DARK_AQUA)); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java index e4a85ec1..283bd231 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/EssenceShopPrice.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder; import de.hysky.skyblocker.utils.BazaarProduct; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.RegexUtils; import it.unimi.dsi.fastutil.objects.Object2LongArrayMap; @@ -13,7 +14,6 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.jetbrains.annotations.Nullable; -import java.text.NumberFormat; import java.util.List; import java.util.Locale; import java.util.OptionalDouble; @@ -23,7 +23,6 @@ import java.util.regex.Pattern; public class EssenceShopPrice extends SimpleTooltipAdder { private static final Pattern ESSENCE_PATTERN = Pattern.compile("Cost (?[\\d,]+) (?[A-Za-z]+) Essence"); - private static final NumberFormat DECIMAL_FORMAT = NumberFormat.getInstance(Locale.US); private static final String[] ESSENCE_TYPES = {"WITHER", "SPIDER", "UNDEAD", "DRAGON", "GOLD", "DIAMOND", "ICE", "CRIMSON"}; private static final Object2LongArrayMap ESSENCE_PRICES = new Object2LongArrayMap<>(ESSENCE_TYPES, new long[8]); @@ -59,9 +58,9 @@ public class EssenceShopPrice extends SimpleTooltipAdder { lines.add(Text.empty() .append(Text.literal("Essence Cost: ").formatted(Formatting.AQUA)) - .append(Text.literal(DECIMAL_FORMAT.format(priceData * cost.getAsLong()) + " coins").formatted(Formatting.DARK_AQUA)) + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(priceData * cost.getAsLong()) + " coins").formatted(Formatting.DARK_AQUA)) .append(Text.literal(" (").formatted(Formatting.GRAY)) - .append(Text.literal(DECIMAL_FORMAT.format(priceData) + " each").formatted(Formatting.GRAY)) + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(priceData) + " each").formatted(Formatting.GRAY)) .append(Text.literal(")").formatted(Formatting.GRAY)) ); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/StackingEnchantProgressTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/StackingEnchantProgressTooltip.java index 1dabafe8..d3701ac4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/StackingEnchantProgressTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/StackingEnchantProgressTooltip.java @@ -1,10 +1,9 @@ package de.hysky.skyblocker.skyblock.item.tooltip.adders; -import java.text.NumberFormat; import java.util.List; -import java.util.Locale; import java.util.Set; +import de.hysky.skyblocker.utils.Formatters; import org.jetbrains.annotations.Nullable; import de.hysky.skyblocker.config.SkyblockerConfigManager; @@ -25,7 +24,6 @@ public class StackingEnchantProgressTooltip extends SimpleTooltipAdder { private static final StackingEnchantInfo CHAMPION_INFO = new StackingEnchantInfo("Champion", "champion_combat_xp", "Combat XP", 0, 50_000, 100_000, 250_000, 500_000, 1_000_000, 1_500_000, 2_000_000, 2_500_000, 3_000_000); private static final StackingEnchantInfo HECATOMB_INFO = new StackingEnchantInfo("Hecatomb", "hecatomb_s_runs", "S runs", 0, 2, 5, 10, 20, 30, 40, 60, 80, 100); private static final StackingEnchantInfo TOXOPHILITE_INFO = new StackingEnchantInfo("Toxophilite", "toxophilite_combat_xp", "Combat XP", 0, 50_000, 100_000, 250_000, 500_000, 1_000_000, 1_500_000, 2_000_000, 2_500_000, 3_000_000); - private static final NumberFormat FORMAT = NumberFormat.getInstance(Locale.ENGLISH); public StackingEnchantProgressTooltip(int priority) { super(priority); @@ -65,9 +63,9 @@ public class StackingEnchantProgressTooltip extends SimpleTooltipAdder { .append(Text.literal(stackingEnchantInfo.name() + " ").formatted(Formatting.GRAY)) .append(Text.translatable("enchantment.level." + (stackingEnchantLevel + 1)).formatted(Formatting.GRAY)) .append(Text.literal(": ").formatted(Formatting.GRAY)) - .append(Text.literal(FORMAT.format(progress)).formatted(Formatting.RED)) + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(progress)).formatted(Formatting.RED)) .append(Text.literal("/").formatted(Formatting.GRAY)) - .append(Text.literal(FORMAT.format(needed)).formatted(Formatting.RED)) + .append(Text.literal(Formatters.INTEGER_NUMBERS.format(needed)).formatted(Formatting.RED)) .append(Text.literal(" " + stackingEnchantInfo.unit()).formatted(Formatting.GRAY)); lines.add(text); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java index 12566f25..5d5399a0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/collections/GenericCategory.java @@ -6,6 +6,7 @@ import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerPage; import de.hysky.skyblocker.skyblock.profileviewer.ProfileViewerScreen; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.RomanNumerals; import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.client.MinecraftClient; @@ -29,8 +30,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import static de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils.COMMA_FORMATTER; - public class GenericCategory implements ProfileViewerPage { private final String category; private final LinkedList collections = new LinkedList<>(); @@ -90,10 +89,10 @@ public class GenericCategory implements ProfileViewerPage { lore.add(Text.empty()); if (hProfile.get("members").getAsJsonObject().keySet().size() > 1) { - lore.add(Text.literal("Personal: " + COMMA_FORMATTER.format(personalColl)).setStyle(style).formatted(Formatting.GOLD)); - lore.add(Text.literal("Co-op: " + COMMA_FORMATTER.format(totalCollection - personalColl)).setStyle(style).formatted(Formatting.AQUA)); + lore.add(Text.literal("Personal: " + Formatters.INTEGER_NUMBERS.format(personalColl)).setStyle(style).formatted(Formatting.GOLD)); + lore.add(Text.literal("Co-op: " + Formatters.INTEGER_NUMBERS.format(totalCollection - personalColl)).setStyle(style).formatted(Formatting.AQUA)); } - lore.add(Text.literal("Collection: " + COMMA_FORMATTER.format(totalCollection)).setStyle(style).formatted(Formatting.YELLOW)); + lore.add(Text.literal("Collection: " + Formatters.INTEGER_NUMBERS.format(totalCollection)).setStyle(style).formatted(Formatting.YELLOW)); lore.add(Text.empty()); lore.add(Text.literal("Collection Tier: " + collectionTier + "/" + tierRequirements.size()).setStyle(style).formatted(Formatting.LIGHT_PURPLE)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/dungeons/DungeonClassWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/dungeons/DungeonClassWidget.java index 659659df..d4a79f7f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/dungeons/DungeonClassWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/dungeons/DungeonClassWidget.java @@ -3,8 +3,8 @@ package de.hysky.skyblocker.skyblock.profileviewer.dungeons; import com.google.gson.JsonObject; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; -import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.render.RenderHelper; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -67,7 +67,7 @@ public class DungeonClassWidget { if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 12 && mouseY < y + 22){ List tooltipText = new ArrayList<>(); tooltipText.add(Text.literal(this.className).formatted(Formatting.GREEN)); - tooltipText.add(Text.literal("XP: " + ProfileViewerUtils.COMMA_FORMATTER.format(this.classLevel.xp)).formatted(Formatting.GOLD)); + tooltipText.add(Text.literal("XP: " + Formatters.INTEGER_NUMBERS.format(this.classLevel.xp)).formatted(Formatting.GOLD)); context.drawTooltip(textRenderer, tooltipText, mouseX, mouseY); } } 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 7e35d8bf..e1d67e64 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 @@ -4,8 +4,8 @@ import de.hysky.skyblocker.skyblock.item.PetInfo; import de.hysky.skyblocker.skyblock.item.SkyblockItemRarity; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; -import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.NEURepoManager; import io.github.moulberry.repo.constants.PetNumbers; import io.github.moulberry.repo.data.NEUItem; @@ -142,12 +142,12 @@ public class Pet { formattedLore.add(formattedLore.size() - 1, Text.empty()); } else { formattedLore.add(formattedLore.size() - 1, Text.literal("MAX LEVEL").setStyle(style).formatted(Formatting.AQUA, Formatting.BOLD)); - formattedLore.add(formattedLore.size() - 1, Text.literal("▸ " + ProfileViewerUtils.COMMA_FORMATTER.format((long) xp) + " XP").setStyle(style).formatted(Formatting.DARK_GRAY)); + formattedLore.add(formattedLore.size() - 1, Text.literal("▸ " + Formatters.INTEGER_NUMBERS.format((long) xp) + " XP").setStyle(style).formatted(Formatting.DARK_GRAY)); formattedLore.add(formattedLore.size() - 1, Text.empty()); } // Skin Head Texture - if (skinTexture.isPresent()) { + if (skinTexture.isPresent() && skin.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, skinTexture.get()); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/skills/SkillWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/skills/SkillWidget.java index 47d019c7..1ae6b0be 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/skills/SkillWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/skills/SkillWidget.java @@ -4,6 +4,7 @@ import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.render.RenderHelper; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMaps; @@ -101,8 +102,8 @@ public class SkillWidget { if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 10 && mouseY < y + 19){ List tooltipText = new ArrayList<>(); tooltipText.add(Text.literal(this.SKILL_NAME).formatted(Formatting.GREEN)); - tooltipText.add(Text.literal("XP: " + ProfileViewerUtils.COMMA_FORMATTER.format(this.SKILL_LEVEL.xp)).formatted(Formatting.GOLD)); + tooltipText.add(Text.literal("XP: " + Formatters.INTEGER_NUMBERS.format(this.SKILL_LEVEL.xp)).formatted(Formatting.GOLD)); context.drawTooltip(textRenderer, tooltipText, mouseX, mouseY); } } -} \ No newline at end of file +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/slayers/SlayerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/slayers/SlayerWidget.java index d2211c42..9c77c37b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/slayers/SlayerWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/slayers/SlayerWidget.java @@ -3,8 +3,8 @@ package de.hysky.skyblocker.skyblock.profileviewer.slayers; import com.google.gson.JsonObject; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.profileviewer.utils.LevelFinder; -import de.hysky.skyblocker.skyblock.profileviewer.utils.ProfileViewerUtils; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.render.RenderHelper; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -77,7 +77,7 @@ public class SlayerWidget { if (mouseX > x + 30 && mouseX < x + 105 && mouseY > y + 12 && mouseY < y + 22){ List tooltipText = new ArrayList<>(); tooltipText.add(Text.literal(this.slayerName).formatted(Formatting.GREEN)); - tooltipText.add(Text.literal("XP: " + ProfileViewerUtils.COMMA_FORMATTER.format(this.slayerLevel.xp)).formatted(Formatting.GOLD)); + tooltipText.add(Text.literal("XP: " + Formatters.INTEGER_NUMBERS.format(this.slayerLevel.xp)).formatted(Formatting.GOLD)); context.drawTooltip(textRenderer, tooltipText, mouseX, mouseY); } } 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 8dadedaf..a0884e91 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 @@ -8,15 +8,11 @@ import net.minecraft.component.type.ProfileComponent; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import java.text.NumberFormat; -import java.util.Locale; 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) { + public static ItemStack createSkull(String textureB64) { ItemStack skull = new ItemStack(Items.PLAYER_HEAD); try { PropertyMap map = new PropertyMap(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/slayers/hud/SlayerHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/slayers/hud/SlayerHudWidget.java index 9fcbfdeb..252366c9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/slayers/hud/SlayerHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/slayers/hud/SlayerHudWidget.java @@ -9,19 +9,18 @@ import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import de.hysky.skyblocker.utils.Formatters; import de.hysky.skyblocker.utils.Location; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import java.text.NumberFormat; import java.util.Set; @RegisterWidget public class SlayerHudWidget extends ComponentBasedWidget { private static SlayerHudWidget instance; private final MinecraftClient client = MinecraftClient.getInstance(); - private final NumberFormat numberFormat = NumberFormat.getInstance(); public SlayerHudWidget() { super(Text.literal("Slayer").formatted(Formatting.DARK_PURPLE, Formatting.BOLD), Formatting.DARK_PURPLE.getColorValue(), "hud_slayer"); @@ -82,12 +81,12 @@ public class SlayerHudWidget extends ComponentBasedWidget { } else { int nextMilestone = type.levelMilestones[level]; int currentXP = nextMilestone - SlayerManager.getSlayerQuest().xpRemaining; - addSimpleIcoText(Ico.EXPERIENCE_BOTTLE, "XP: ", Formatting.LIGHT_PURPLE, numberFormat.format(currentXP) + "/" + numberFormat.format(nextMilestone)); + addSimpleIcoText(Ico.EXPERIENCE_BOTTLE, "XP: ", Formatting.LIGHT_PURPLE, Formatters.INTEGER_NUMBERS.format(currentXP) + "/" + Formatters.INTEGER_NUMBERS.format(nextMilestone)); } } if (bossesNeeded > 0) { - addComponent(new IcoTextComponent(Ico.NETHER_STAR, Text.translatable("skyblocker.slayer.hud.levelUpIn", Text.literal(numberFormat.format(bossesNeeded)).formatted(Formatting.LIGHT_PURPLE)))); + addComponent(new IcoTextComponent(Ico.NETHER_STAR, Text.translatable("skyblocker.slayer.hud.levelUpIn", Text.literal(Formatters.INTEGER_NUMBERS.format(bossesNeeded)).formatted(Formatting.LIGHT_PURPLE)))); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PowderWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PowderWidget.java index b2c4c966..e995efce 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PowderWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PowderWidget.java @@ -3,16 +3,14 @@ package de.hysky.skyblocker.skyblock.tabhud.widget; import de.hysky.skyblocker.annotations.RegisterWidget; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import de.hysky.skyblocker.utils.Formatters; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Util; import org.apache.commons.lang3.math.NumberUtils; -import java.text.DecimalFormat; -import java.text.NumberFormat; import java.util.List; -import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -21,13 +19,8 @@ import java.util.regex.Pattern; @RegisterWidget public class PowderWidget extends TabHudWidget { private static final MutableText TITLE = Text.literal("Powders").formatted(Formatting.DARK_AQUA, Formatting.BOLD); - private static final DecimalFormat DECIMAL_FORMAT = (DecimalFormat) NumberFormat.getInstance(Locale.ENGLISH); private static final short UPDATE_INTERVAL = 2000; - static { - DECIMAL_FORMAT.setPositivePrefix("+"); // Causes the positive sign to be displayed for positive numbers, while the negative sign is always displayed for negative numbers. This removes the need to prepend a + if positive. - } - // Patterns to match the playerlist lines against private static final Pattern MITHRIL_PATTERN = Pattern.compile("Mithril: ([\\d,]+)"); private static final Pattern GEMSTONE_PATTERN = Pattern.compile("Gemstone: ([\\d,]+)"); @@ -109,7 +102,7 @@ public class PowderWidget extends TabHudWidget { } private MutableText getAppendix(int diff, Formatting formatting) { - return Text.literal(" (" + DECIMAL_FORMAT.format(diff) + ")").formatted(formatting); + return Text.literal(" (" + Formatters.DIFF_NUMBERS.format(diff) + ")").formatted(formatting); } // Decides whether the appendix should be appended to the line diff --git a/src/main/java/de/hysky/skyblocker/utils/Formatters.java b/src/main/java/de/hysky/skyblocker/utils/Formatters.java index eb063f36..50409430 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Formatters.java +++ b/src/main/java/de/hysky/skyblocker/utils/Formatters.java @@ -1,18 +1,18 @@ package de.hysky.skyblocker.utils; +import ca.weblite.objc.Client; +import com.ibm.icu.text.DateTimePatternGenerator; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.Util; + +import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Locale; -import com.ibm.icu.text.DateTimePatternGenerator; - -import ca.weblite.objc.Client; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.util.Util; - /** * Provides useful constants for formatting numbers and dates. If you need to make slight tweaks to a formatter * then {@link NumberFormat#clone()} the object and modify it as needed. @@ -20,37 +20,44 @@ import net.minecraft.util.Util; public class Formatters { /** * Formats numbers as integers with commas. - * + *

* Example: 100,000,000 */ public static final NumberFormat INTEGER_NUMBERS = NumberFormat.getIntegerInstance(Locale.US); /** * Formats numbers as floats with up to two digits of precision. - * + * This is closest to the default number format from {@link NumberFormat#getInstance()}. + *

* Example: 100,000.15 */ public static final NumberFormat DOUBLE_NUMBERS = Util.make(NumberFormat.getInstance(Locale.US), nf -> nf.setMaximumFractionDigits(2)); /** * Formats numbers as floats with up to one digit of precision. - * + *

* Example: 100,000.1 */ public static final NumberFormat FLOAT_NUMBERS = Util.make(NumberFormat.getInstance(Locale.US), nf -> nf.setMaximumFractionDigits(1)); /** * Formats integer numbers in a short format. - * + *

* Examples: 10B, 1M, and 5K. */ public static final NumberFormat SHORT_INTEGER_NUMBERS = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); /** * Formats float numbers in a short format. - * + *

* Examples: 17.3B, 1.5M, and 10.8K. */ public static final NumberFormat SHORT_FLOAT_NUMBERS = Util.make(NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT), nf -> nf.setMinimumFractionDigits(1)); + /** + * Formats numbers with a plus sign for positive numbers. + *

+ * Examples: +100, -100.123 + */ + public static final NumberFormat DIFF_NUMBERS = Util.make((DecimalFormat) NumberFormat.getNumberInstance(Locale.US), nf -> nf.setPositivePrefix("+")); /** * Formats dates to a standard format. - * + *

* Examples: Thu Jan 30 2025 2:00:10 PM, Thu Jan 30 2025 14:00:10 */ public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("E MMM d yyyy " + getTimeFormat(), Locale.US).withZone(ZoneId.systemDefault()); @@ -74,11 +81,11 @@ public class Formatters { } /** - * Determines whether to use the 12 or 24 hour clock for formatting time.

- * + * Determines whether to use the 12 or 24 hour clock for formatting time. + *

* On macOS this reads the preference for the system clock's time format which accounts for whether a user - * chooses 12 or 24 hour time in the System Settings.

- * + * chooses 12 or 24 hour time in the System Settings. + *

* On other platforms, the time format follows the default for the user's current locale. * * @see NSDateFormatter -- cgit