aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIBeHunting <63562753+IBeHunting@users.noreply.github.com>2024-07-29 11:34:35 -0700
committerGitHub <noreply@github.com>2024-07-30 02:34:35 +0800
commit5ed3e8846659a92e788454ec4419a07d88c46130 (patch)
tree47a272c6767b9bf81bf47a811e18838a0c5a0fa3
parent9625ea40cfa3728c5ea2ceb92ba88f4004b77eab (diff)
downloadSkyblocker-5ed3e8846659a92e788454ec4419a07d88c46130.tar.gz
Skyblocker-5ed3e8846659a92e788454ec4419a07d88c46130.tar.bz2
Skyblocker-5ed3e8846659a92e788454ec4419a07d88c46130.zip
Option to increase fog radius when in the Crimson Isles (#856)
* Add option to increase fog radius when in the Crimson Isles
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java42
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json3
-rw-r--r--src/main/resources/skyblocker.mixins.json1
5 files changed, 59 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java
index e8127a0e..1e35db1e 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java
@@ -143,6 +143,16 @@ public class CrimsonIsleCategory {
.build())
.build())
+ // Extend nether fog
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.crimsonIsle.extendNetherFog"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.extendNetherFog.@Tooltip")))
+ .binding(config.crimsonIsle.extendNetherFog,
+ () -> config.crimsonIsle.extendNetherFog,
+ newValue -> config.crimsonIsle.extendNetherFog = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+
.build();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java
index 451d1983..6645b88d 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java
@@ -10,6 +10,9 @@ public class CrimsonIsleConfig {
@SerialEntry
public Dojo dojo = new Dojo();
+ @SerialEntry
+ public boolean extendNetherFog = true;
+
public static class Kuudra {
@SerialEntry
diff --git a/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java
new file mode 100644
index 00000000..02eacdfa
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixins/BackgroundRendererMixin.java
@@ -0,0 +1,42 @@
+package de.hysky.skyblocker.mixins;
+
+import com.llamalad7.mixinextras.sugar.Local;
+import com.mojang.blaze3d.systems.RenderSystem;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.CrimsonIsleConfig;
+import de.hysky.skyblocker.utils.Utils;
+import net.minecraft.block.enums.CameraSubmersionType;
+import net.minecraft.client.render.BackgroundRenderer;
+import net.minecraft.client.render.Camera;
+import net.minecraft.client.render.FogShape;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(BackgroundRenderer.class)
+public abstract class BackgroundRendererMixin {
+
+ /**
+ * Moves fog farther away from the player when in the crimson isles.
+ * This sets it to be the same distance as what you would see in the overworld (every other skyblock island)
+ */
+ @Inject(method = "applyFog", at = @At("RETURN"))
+ private static void applyFogModifyDistance(CallbackInfo ci, @Local(argsOnly = true) Camera camera, @Local(argsOnly = true) BackgroundRenderer.FogType fogType, @Local(argsOnly = true, ordinal = 0) float viewDistance, @Local(argsOnly = true) boolean thickFog) {
+ final CameraSubmersionType cameraSubmersionType = camera.getSubmersionType();
+ CrimsonIsleConfig config = SkyblockerConfigManager.get().crimsonIsle;
+
+ if (Utils.isOnSkyblock() && config.extendNetherFog && cameraSubmersionType == CameraSubmersionType.NONE && thickFog) {
+ float start;
+ if (fogType == BackgroundRenderer.FogType.FOG_SKY) {
+ start = 0.0f;
+ } else {
+ start = viewDistance - Math.clamp(viewDistance / 10.0f, 4.0f, 64.0f);
+ }
+
+ RenderSystem.setShaderFogStart(start);
+ RenderSystem.setShaderFogEnd(viewDistance);
+ RenderSystem.setShaderFogShape(FogShape.CYLINDER);
+ }
+ }
+}
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index f7980d1a..129381a2 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -36,6 +36,9 @@
"skyblocker.config.crimsonIsle": "Crimson Isle",
+ "skyblocker.config.crimsonIsle.extendNetherFog": "Extend Nether Fog",
+ "skyblocker.config.crimsonIsle.extendNetherFog.@Tooltip": "When in the Crimson Isle, prevents fog from appearing closer to the player as it does in vanilla nether biomes.",
+
"skyblocker.config.crimsonIsle.kuudra": "Kuudra",
"skyblocker.config.crimsonIsle.kuudra.arrowPoisonThreshold": "Arrow Poison Warning Threshold",
diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json
index 685758f7..fdbd84f0 100644
--- a/src/main/resources/skyblocker.mixins.json
+++ b/src/main/resources/skyblocker.mixins.json
@@ -5,6 +5,7 @@
"compatibilityLevel": "JAVA_21",
"client": [
"AbstractInventoryScreenMixin",
+ "BackgroundRendererMixin",
"BatEntityMixin",
"ClientPlayerEntityMixin",
"ClientPlayNetworkHandlerMixin",