diff options
author | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-05-10 13:31:05 +0300 |
---|---|---|
committer | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-05-10 13:31:05 +0300 |
commit | 2af6c131cff70219bcc1147674c180615b0f6746 (patch) | |
tree | d7bff4f48aaeafea6dff03f5933d638f462e8fdb /src/main | |
parent | 7f36f53ebb632d6c1950bf2e9f9951f94a872ee1 (diff) | |
download | Skyblocker-2af6c131cff70219bcc1147674c180615b0f6746.tar.gz Skyblocker-2af6c131cff70219bcc1147674c180615b0f6746.tar.bz2 Skyblocker-2af6c131cff70219bcc1147674c180615b0f6746.zip |
Refactored config to work with the new config categorization
Changed formatting method From DecimalFormat to String#formatted to make it easier to configure. Also, the precision setting now applies instantly.
Diffstat (limited to 'src/main')
5 files changed, 86 insertions, 10 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java index c6936335..94ecbc9e 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java @@ -8,12 +8,15 @@ import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.*; +import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import java.awt.*; + public class UIAndVisualsCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() @@ -355,6 +358,49 @@ public class UIAndVisualsCategory { .build()) .build()) + //Compact Damage Numbers + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.enabled")) + .binding(defaults.uiAndVisuals.compactDamage.enabled, + () -> config.uiAndVisuals.compactDamage.enabled, + newValue -> config.uiAndVisuals.compactDamage.enabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.precision")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.precision.@Tooltip"))) + .binding(defaults.uiAndVisuals.compactDamage.precision, + () -> config.uiAndVisuals.compactDamage.precision, + newValue -> config.uiAndVisuals.compactDamage.precision = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1,3).step(1)) + .build()) + .option(Option.<Color>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.normalDamageColor")) + .binding(defaults.uiAndVisuals.compactDamage.normalDamageColor, + () -> config.uiAndVisuals.compactDamage.normalDamageColor, + newValue -> config.uiAndVisuals.compactDamage.normalDamageColor = newValue) + .controller(ColorControllerBuilder::create) + .build()) + .option(Option.<Color>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.critDamageGradientStart")) + .binding(defaults.uiAndVisuals.compactDamage.critDamageGradientStart, + () -> config.uiAndVisuals.compactDamage.critDamageGradientStart, + newValue -> config.uiAndVisuals.compactDamage.critDamageGradientStart = newValue) + .controller(ColorControllerBuilder::create) + .build()) + .option(Option.<Color>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.critDamageGradientEnd")) + .binding(defaults.uiAndVisuals.compactDamage.critDamageGradientEnd, + () -> config.uiAndVisuals.compactDamage.critDamageGradientEnd, + newValue -> config.uiAndVisuals.compactDamage.critDamageGradientEnd = newValue) + .controller(ColorControllerBuilder::create) + .build()) + .build() + ) + .build(); } } diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java index 267dde14..9a20bfa8 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -4,6 +4,7 @@ import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.minecraft.util.Formatting; +import java.awt.*; import java.util.ArrayList; import java.util.List; @@ -56,6 +57,9 @@ public class UIAndVisualsConfig { @SerialEntry public FlameOverlay flameOverlay = new FlameOverlay(); + @SerialEntry + public CompactDamage compactDamage = new CompactDamage(); + public static class ChestValue { @SerialEntry public boolean enableChestValue = true; @@ -247,4 +251,20 @@ public class UIAndVisualsConfig { public int flameOpacity = 100; } + public static class CompactDamage { + @SerialEntry + public boolean enabled = true; + + @SerialEntry + public int precision = 1; + + @SerialEntry + public Color normalDamageColor = new Color(0xFFFFFF); + + @SerialEntry + public Color critDamageGradientStart = new Color(0xFFFF55); + + @SerialEntry + public Color critDamageGradientEnd = new Color(0xFF5555); + } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index ce967c7c..95a28e37 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -107,7 +107,7 @@ public abstract class ClientPlayNetworkHandlerMixin { @Inject(method = "onEntityTrackerUpdate", at = @At("TAIL")) private void skyblocker$onEntityTrackerUpdate(EntityTrackerUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) { - if (!SkyblockerConfigManager.get().general.compactDamage.enabled || !(entity instanceof ArmorStandEntity armorStandEntity)) return; + if (!SkyblockerConfigManager.get().uiAndVisuals.compactDamage.enabled || !(entity instanceof ArmorStandEntity armorStandEntity)) return; try { //Prevent packet handling fails if something goes wrong so that entity trackers still update, just without compact damage numbers CompactDamage.compactDamage(armorStandEntity); } catch (Exception e) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java b/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java index 161ecf2e..6442f61d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/CompactDamage.java @@ -23,8 +23,6 @@ public class CompactDamage { private CompactDamage() { } - private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(SkyblockerConfigManager.get().general.compactDamage.format); - public static void compactDamage(ArmorStandEntity entity) { if (!entity.isInvisible() || !entity.hasCustomName() || !entity.isCustomNameVisible() || entity.getFireTicks() != -1 || !entity.shouldHideBasePlate()) return; //Dmg armor stands have no base plate and have a fire time of -1 (just one of these isn't enough to determine if it's a dmg armor stand) @@ -39,7 +37,7 @@ public class CompactDamage { String dmg = text.getString().replace(",", ""); if (!NumberUtils.isParsable(dmg)) return; //Sanity check String prettifiedDmg = prettifyDamageNumber(Long.parseLong(dmg)); - prettierCustomName = Text.literal("").append(Text.literal(prettifiedDmg).withColor(SkyblockerConfigManager.get().general.compactDamage.normalDamageColor.getRGB() & 0x00FFFFFF)).setStyle(customName.getStyle()); + prettierCustomName = Text.literal("").append(Text.literal(prettifiedDmg).withColor(SkyblockerConfigManager.get().uiAndVisuals.compactDamage.normalDamageColor.getRGB() & 0x00FFFFFF)).setStyle(customName.getStyle()); } else { //Crit damage String dmg = siblings.subList(1, siblings.size() - 1) //First and last sibling are the crit symbols .stream() @@ -54,8 +52,8 @@ public class CompactDamage { for (int i = 0; i < length; i++) { prettierCustomName.append(Text.literal(prettifiedDmg.substring(i, i + 1)).withColor( CustomArmorAnimatedDyes.interpolate( - SkyblockerConfigManager.get().general.compactDamage.critDamageGradientStart.getRGB() & 0x00FFFFFF, - SkyblockerConfigManager.get().general.compactDamage.critDamageGradientEnd.getRGB() & 0x00FFFFFF, + SkyblockerConfigManager.get().uiAndVisuals.compactDamage.critDamageGradientStart.getRGB() & 0x00FFFFFF, + SkyblockerConfigManager.get().uiAndVisuals.compactDamage.critDamageGradientEnd.getRGB() & 0x00FFFFFF, i / (length - 1.0) ) )); @@ -68,9 +66,13 @@ public class CompactDamage { private static String prettifyDamageNumber(long damage) { if (damage < 1_000) return String.valueOf(damage); - if (damage < 1_000_000) return DECIMAL_FORMAT.format(damage / 1_000.0) + "k"; - if (damage < 1_000_000_000) return DECIMAL_FORMAT.format(damage / 1_000_000.0) + "m"; - if (damage < 1_000_000_000_000L) return DECIMAL_FORMAT.format(damage / 1_000_000_000.0) + "b"; - return DECIMAL_FORMAT.format(damage / 1_000_000_000_000.0) + "t"; //This will probably never be reached + if (damage < 1_000_000) return format(damage / 1_000.0) + "k"; + if (damage < 1_000_000_000) return format(damage / 1_000_000.0) + "m"; + if (damage < 1_000_000_000_000L) return format(damage / 1_000_000_000.0) + "b"; + return format(damage / 1_000_000_000_000.0) + "t"; //This will probably never be reached + } + + private static String format(double number) { + return ("%." + SkyblockerConfigManager.get().uiAndVisuals.compactDamage.precision + "f").formatted(number); } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 283175d0..3e1c817c 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -504,6 +504,14 @@ "skyblocker.config.uiAndVisuals.chestValue.incompleteColor": "Incomplete Color", "skyblocker.config.uiAndVisuals.chestValue.incompleteColor.@Tooltip": "The color to display when the price data is incomplete.", + "skyblocker.config.uiAndVisuals.compactDamage": "Compact Damage", + "skyblocker.config.uiAndVisuals.compactDamage.enabled": "Enabled", + "skyblocker.config.uiAndVisuals.compactDamage.precision": "Precision", + "skyblocker.config.uiAndVisuals.compactDamage.precision.@Tooltip" : "The number of digits to display after the decimal point.", + "skyblocker.config.uiAndVisuals.compactDamage.normalDamageColor": "Normal Damage Color", + "skyblocker.config.uiAndVisuals.compactDamage.critDamageGradientStart": "Crit Damage Gradient Start Color", + "skyblocker.config.uiAndVisuals.compactDamage.critDamageGradientEnd": "Crit Damage Gradient End Color", + "skyblocker.config.uiAndVisuals.compactorDeletorPreview": "Enable Compactor/Deletor Preview", "skyblocker.config.uiAndVisuals.dontStripSkinAlphaValues": "Correct Transparent Skin Pixels", |