diff --git a/common/src/main/java/me/lucaslah/weatherchanger/mixin/WorldMixin.java b/common/src/main/java/me/lucaslah/weatherchanger/mixin/WorldMixin.java index 2d72945..1ea424b 100644 --- a/common/src/main/java/me/lucaslah/weatherchanger/mixin/WorldMixin.java +++ b/common/src/main/java/me/lucaslah/weatherchanger/mixin/WorldMixin.java @@ -2,14 +2,21 @@ package me.lucaslah.weatherchanger.mixin; import me.lucaslah.weatherchanger.WeatherChanger; import me.lucaslah.weatherchanger.config.WcMode; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import net.minecraft.world.dimension.DimensionType; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +@Environment(EnvType.CLIENT) @Mixin(World.class) public class WorldMixin { @Shadow @@ -21,6 +28,23 @@ public class WorldMixin { @Shadow protected float thunderGradient; + @Shadow @Final private RegistryEntry dimensionEntry; + + @Unique + private float weatherChanger$getRainGradientOg(float delta) { + return MathHelper.lerp(delta, this.rainGradientPrev, this.rainGradient); + } + + @Unique + private float weatherChanger$getThunderGradientOg(float delta) { + return MathHelper.lerp(delta, this.thunderGradientPrev, this.thunderGradient) * this.weatherChanger$getRainGradientOg(delta); + } + + @Unique + public DimensionType weatherChanger$getDimension() { + return this.dimensionEntry.value(); + } + @Inject(method = "getRainGradient", at = @At("HEAD"), cancellable = true) public void getRainGradient(float delta, CallbackInfoReturnable callback) { WcMode mode = WeatherChanger.getMode(); @@ -50,4 +74,22 @@ public class WorldMixin { callback.cancel(); } + + @Inject(method = "isRaining", at = @At("HEAD"), cancellable = true) + public void isRaining(CallbackInfoReturnable callback) { + callback.setReturnValue((double)this.weatherChanger$getRainGradientOg(1.0F) > 0.2); + callback.cancel(); + } + + @Inject(method = "isThundering", at = @At("HEAD"), cancellable = true) + public void isThundering(CallbackInfoReturnable callback) { + + if (this.weatherChanger$getDimension().hasSkyLight() && !(this.weatherChanger$getDimension().hasCeiling())) { + callback.setReturnValue((double)this.weatherChanger$getThunderGradientOg(1.0F) > 0.9); + } else { + callback.setReturnValue(false); + } + + callback.cancel(); + } } diff --git a/gradle.properties b/gradle.properties index 08d8e5b..a4c36a5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ yarn_mappings=1.21+build.7 enabled_platforms=fabric,forge # Mod Properties -mod_version = 1.1.0 +mod_version = 1.2.0 mod_id = weatherchanger maven_group = me.lucaslah.weatherchanger archives_base_name = weather-changer