diff options
| author | Wanja <105125277+Manchick0@users.noreply.github.com> | 2024-12-21 06:38:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-21 00:38:35 -0500 |
| commit | bcfade25defa19ddde47d27ebd1f97447b32c4f6 (patch) | |
| tree | 11c27788bfff656284478477e0966a1746e6129f /src/main/java | |
| parent | 070c7bc6b07b0dd24a9ae4c724fd079a265a8885 (diff) | |
| download | Skyblocker-bcfade25defa19ddde47d27ebd1f97447b32c4f6.tar.gz Skyblocker-bcfade25defa19ddde47d27ebd1f97447b32c4f6.tar.bz2 Skyblocker-bcfade25defa19ddde47d27ebd1f97447b32c4f6.zip | |
Add customizable night vision strength feature (#1078)
* Add customizable night vision strength feature
Introduced a `nightVision` subcommand to adjust night vision strength with options for `full` (= 100), `off` (= 0), and any other value between 0 and 100. Integrated the setting into the configuration menu and game rendering, with default strength set to 100. Updated localization to include feedback for strength changes.
* Update GameRendererMixin.java
Clamped the applied value to ensure it's not overflowing.
Although you can't put an invalid value in-game, it's still possible to do so directly via the config file.
* Update en_us.json
Added the missing translation for the night vision strength option.
* Add description tooltip for night vision strength option
A tooltip was added to the "Night Vision Strength" option to improve user understanding of its functionality. Unused import(s) were also removed, following the requested changes.
* Use clamp
* Apply suggestions from code review
---------
Co-authored-by: Manchick0 <endercreep109@gmail.com>
Co-authored-by: Kevin <92656833+kevinthegreat1@users.noreply.github.com>
Diffstat (limited to 'src/main/java')
4 files changed, 73 insertions, 1 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 5f8bdd3e..658c00bb 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java @@ -27,9 +27,17 @@ import java.awt.*; public class UIAndVisualsCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() - .name(Text.translatable("skyblocker.config.uiAndVisuals")) + .name(Text.translatable("skyblocker.config.uiAndVisuals")) //Ungrouped Options + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.nightVisionStrength")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.nightVisionStrength.@Tooltip"))) + .binding(defaults.uiAndVisuals.nightVisionStrength, + () -> config.uiAndVisuals.nightVisionStrength, + newValue -> config.uiAndVisuals.nightVisionStrength = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1)) + .build()) .option(Option.<Boolean>createBuilder() .name(Text.translatable("skyblocker.config.uiAndVisuals.compactorDeletorPreview")) .binding(defaults.uiAndVisuals.compactorDeletorPreview, 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 1d4301e0..55ec5094 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -11,6 +11,9 @@ import java.util.ArrayList; import java.util.List; public class UIAndVisualsConfig { + @SerialEntry + public int nightVisionStrength = 100; + @SerialEntry public boolean compactorDeletorPreview = true; diff --git a/src/main/java/de/hysky/skyblocker/mixins/GameRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/GameRendererMixin.java new file mode 100644 index 00000000..36c76c44 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/GameRendererMixin.java @@ -0,0 +1,21 @@ +package de.hysky.skyblocker.mixins; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.client.render.GameRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(GameRenderer.class) +public class GameRendererMixin { + + @ModifyReturnValue(method = "getNightVisionStrength", at = @At("RETURN")) + private static float onGetNightVisionStrength(float original) { + if (original == 1.0F && Utils.isOnSkyblock()) { + var strength = SkyblockerConfigManager.get().uiAndVisuals.nightVisionStrength; + return Math.clamp(strength / 100.0F, 0, 100); + } + return original; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/NightVisionCommand.java b/src/main/java/de/hysky/skyblocker/skyblock/NightVisionCommand.java new file mode 100644 index 00000000..7fa9d780 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/NightVisionCommand.java @@ -0,0 +1,40 @@ +package de.hysky.skyblocker.skyblock; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.context.CommandContext; +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.command.CommandRegistryAccess; +import net.minecraft.text.Text; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class NightVisionCommand { + + @Init + public static void init() { + ClientCommandRegistrationCallback.EVENT.register(NightVisionCommand::register); + } + + private static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess access) { + dispatcher.register(literal(SkyblockerMod.NAMESPACE) + .then(literal("nightVision") + .then(argument("strength", IntegerArgumentType.integer(0, 100)) + .executes(context -> NightVisionCommand.writeStrength(context, IntegerArgumentType.getInteger(context, "strength")))) + .then(literal("off").executes(context -> NightVisionCommand.writeStrength(context, 0))) + .then(literal("full").executes(context -> NightVisionCommand.writeStrength(context, 100))))); + } + + private static int writeStrength(CommandContext<FabricClientCommandSource> context, int strength) { + SkyblockerConfigManager.get().uiAndVisuals.nightVisionStrength = strength; + context.getSource().sendFeedback(Text.translatable("skyblocker.nightVision.success", strength)); + SkyblockerConfigManager.save(); + return 1; + } +} |
