From 7acbaf8d5549672303633d8508f3b3625f292edd Mon Sep 17 00:00:00 2001 From: Adubbz Date: Thu, 7 Mar 2024 17:06:17 +1100 Subject: [PATCH] Adjust getPrecipitationAt approach for better mod compatibility --- .../mixin/client/MixinBiomeClient.java | 31 +++++++++++++++++ .../mixin/client/MixinLevelRenderer.java | 34 ------------------- .../season/SeasonHooksClient.java | 28 --------------- .../main/resources/sereneseasons.mixins.json | 3 +- 4 files changed, 33 insertions(+), 63 deletions(-) create mode 100644 common/src/main/java/sereneseasons/mixin/client/MixinBiomeClient.java delete mode 100644 common/src/main/java/sereneseasons/season/SeasonHooksClient.java diff --git a/common/src/main/java/sereneseasons/mixin/client/MixinBiomeClient.java b/common/src/main/java/sereneseasons/mixin/client/MixinBiomeClient.java new file mode 100644 index 00000000..cc3687b8 --- /dev/null +++ b/common/src/main/java/sereneseasons/mixin/client/MixinBiomeClient.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright 2024, the Glitchfiend Team. + * All rights reserved. + ******************************************************************************/ +package sereneseasons.mixin.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; +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.CallbackInfoReturnable; +import sereneseasons.season.SeasonHooks; + +@Mixin(Biome.class) +public class MixinBiomeClient +{ + @Inject(method="getPrecipitationAt", at=@At("HEAD"), cancellable = true) + public void onGetPrecipitationAt(BlockPos pos, CallbackInfoReturnable cir) + { + Minecraft minecraft = Minecraft.getInstance(); + Level level = minecraft.level; + + if (level != null) + { + cir.setReturnValue(SeasonHooks.getPrecipitationAtSeasonal(level, level.getBiome(pos), pos)); + } + } +} diff --git a/common/src/main/java/sereneseasons/mixin/client/MixinLevelRenderer.java b/common/src/main/java/sereneseasons/mixin/client/MixinLevelRenderer.java index 448c0851..70053948 100644 --- a/common/src/main/java/sereneseasons/mixin/client/MixinLevelRenderer.java +++ b/common/src/main/java/sereneseasons/mixin/client/MixinLevelRenderer.java @@ -8,14 +8,12 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.biome.Biome; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import sereneseasons.season.SeasonHooks; -import sereneseasons.season.SeasonHooksClient; @Mixin(LevelRenderer.class) public class MixinLevelRenderer @@ -24,13 +22,6 @@ public class MixinLevelRenderer private Level renderSnowAndRain_level; @Unique private Holder renderSnowAndRain_biome; - @Unique - private BlockPos renderSnowAndRain_pos; - - @Unique - private Level tickRain_level; - @Unique - private Holder tickRain_biome; /* * renderSnowAndRain @@ -41,37 +32,12 @@ public Holder renderSnowAndRain_getBiome(Level level, BlockPos pos) { this.renderSnowAndRain_level = level; this.renderSnowAndRain_biome = level.getBiome(pos); - this.renderSnowAndRain_pos = pos; return this.renderSnowAndRain_biome; } - @Redirect(method="renderSnowAndRain", at=@At(value = "INVOKE", target = "Lnet/minecraft/world/level/biome/Biome;getPrecipitationAt(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/biome/Biome$Precipitation;")) - public Biome.Precipitation renderSnowAndRain_getPrecipitationAt(Biome biome, BlockPos pos) - { - return SeasonHooksClient.getPrecipitationAtLevelRendererHook(this.renderSnowAndRain_biome, pos); - } - @Redirect(method="renderSnowAndRain", at=@At(value = "INVOKE", target = "Lnet/minecraft/world/level/biome/Biome;hasPrecipitation()Z")) public boolean renderSnowAndRain_hasPrecipitation(Biome biome) { return SeasonHooks.hasPrecipitationSeasonal(this.renderSnowAndRain_level, this.renderSnowAndRain_biome); } - - /* - * tickRain - */ - - @Redirect(method="tickRain", at=@At(value = "INVOKE", target = "Lnet/minecraft/world/level/LevelReader;getBiome(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/core/Holder;")) - public Holder tickRain_getBiome(LevelReader level, BlockPos pos) - { - this.tickRain_level = (Level)level; - this.tickRain_biome = level.getBiome(pos); - return this.tickRain_biome; - } - - @Redirect(method="tickRain", at=@At(value = "INVOKE", target = "Lnet/minecraft/world/level/biome/Biome;getPrecipitationAt(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/biome/Biome$Precipitation;")) - public Biome.Precipitation tickRain_getPrecipitationAt(Biome biome, BlockPos pos) - { - return SeasonHooksClient.getPrecipitationAtLevelRendererHook(this.tickRain_biome, pos); - } } diff --git a/common/src/main/java/sereneseasons/season/SeasonHooksClient.java b/common/src/main/java/sereneseasons/season/SeasonHooksClient.java deleted file mode 100644 index f68477e4..00000000 --- a/common/src/main/java/sereneseasons/season/SeasonHooksClient.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright 2024, the Glitchfiend Team. - * All rights reserved. - ******************************************************************************/ -package sereneseasons.season; - -import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.Biome; - -public class SeasonHooksClient -{ - public static Biome.Precipitation getPrecipitationAtLevelRendererHook(Holder biome, BlockPos pos) - { - Level level = Minecraft.getInstance().level; - - if (!SeasonHooks.hasPrecipitationSeasonal(level, biome)) - { - return Biome.Precipitation.NONE; - } - else - { - return SeasonHooks.coldEnoughToSnowSeasonal(level, biome, pos) ? Biome.Precipitation.SNOW : Biome.Precipitation.RAIN; - } - } -} diff --git a/common/src/main/resources/sereneseasons.mixins.json b/common/src/main/resources/sereneseasons.mixins.json index 09789985..83162a85 100644 --- a/common/src/main/resources/sereneseasons.mixins.json +++ b/common/src/main/resources/sereneseasons.mixins.json @@ -10,7 +10,8 @@ "MixinServerLevel" ], "client": [ - "client.MixinLevelRenderer" + "client.MixinLevelRenderer", + "client.MixinBiomeClient" ], "injectors": { "defaultRequire": 1