aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorWanja <105125277+Manchick0@users.noreply.github.com>2024-12-21 06:38:35 +0100
committerGitHub <noreply@github.com>2024-12-21 00:38:35 -0500
commitbcfade25defa19ddde47d27ebd1f97447b32c4f6 (patch)
tree11c27788bfff656284478477e0966a1746e6129f /src/main/java/de
parent070c7bc6b07b0dd24a9ae4c724fd079a265a8885 (diff)
downloadSkyblocker-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/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/GameRendererMixin.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/NightVisionCommand.java40
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;
+ }
+}