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 | |
| 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>
6 files changed, 79 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; + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 5e5d64f7..9efb4c68 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -718,6 +718,9 @@ "skyblocker.config.uiAndVisuals": "UI & Visuals", + "skyblocker.config.uiAndVisuals.nightVisionStrength": "Night Vision Strength", + "skyblocker.config.uiAndVisuals.nightVisionStrength.@Tooltip": "Determines the strength of the Night Vision effect.", + "skyblocker.config.uiAndVisuals.backpackPreviewWithoutShift": "View backpack preview without holding Shift", "skyblocker.config.uiAndVisuals.hideStatusEffectOverlay": "Hide Status Effect Overlay", @@ -991,6 +994,8 @@ "skyblocker.waypoints.deleteQuestion": "Are you sure you want to remove this waypoint?", "skyblocker.waypoints.deleteWarning": "Waypoint '%s' will be lost forever! (A long time!)", + "skyblocker.nightVision.success": "Changed the strength of night vision to %d.", + "skyblocker.customItemNames.removed": "§fRemoved this item's custom name.", "skyblocker.customItemNames.neverHad": "§fThis item doesn't have a custom name set, but why not add one? ;)", "skyblocker.customItemNames.added": "§fSet a custom name for your currently held item!", diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index ac9624f6..0720400a 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -18,6 +18,7 @@ "EntityMixin", "EntityRenderDispatcherMixin", "FarmlandBlockMixin", + "GameRendererMixin", "GenericContainerScreenHandlerMixin", "HandledScreenMixin", "HandledScreenProviderMixin", |
