diff options
| author | IBeHunting <63562753+IBeHunting@users.noreply.github.com> | 2024-07-29 11:34:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-30 02:34:35 +0800 |
| commit | 5ed3e8846659a92e788454ec4419a07d88c46130 (patch) | |
| tree | 47a272c6767b9bf81bf47a811e18838a0c5a0fa3 | |
| parent | 9625ea40cfa3728c5ea2ceb92ba88f4004b77eab (diff) | |
| download | Skyblocker-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
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", |
