From f166cc1c2a9e331290d909fd6e1bb079143006d2 Mon Sep 17 00:00:00 2001 From: tobinio Date: Mon, 2 Jun 2025 10:21:37 +0200 Subject: [PATCH] use save world access - #14 --- .../bettersnowcoverage/BetterSnowChecker.java | 20 ++++++------------- .../mixin/SectionBuilderMixin.java | 6 +++--- .../sodium/ChunkBuilderMeshingTaskMixin.java | 2 +- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/main/java/tobinio/bettersnowcoverage/BetterSnowChecker.java b/src/main/java/tobinio/bettersnowcoverage/BetterSnowChecker.java index c7ccb6a..5927cbb 100644 --- a/src/main/java/tobinio/bettersnowcoverage/BetterSnowChecker.java +++ b/src/main/java/tobinio/bettersnowcoverage/BetterSnowChecker.java @@ -1,13 +1,12 @@ package tobinio.bettersnowcoverage; import net.minecraft.block.*; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.world.ClientWorld; import net.minecraft.registry.tag.BlockTags; import net.minecraft.registry.tag.TagKey; import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; +import net.minecraft.world.BlockView; import tobinio.bettersnowcoverage.config.Config; import java.util.ArrayList; @@ -31,15 +30,8 @@ public class BetterSnowChecker { NONE, WITH_LAYER, WITHOUT_LAYER, } - public static SnowState shouldHaveSnow(BlockPos pos) { - ClientWorld world = MinecraftClient.getInstance().world; - - if (world == null) { - BetterSnowCoverage.LOGGER.warn("no player found"); - return SnowState.NONE; - } - - var state = world.getBlockState(pos); + public static SnowState shouldHaveSnowAboveBlock(BlockView world, BlockPos pos) { + var state = world.getBlockState(pos.up()); if (state.isSideSolidFullSquare(world, pos, @@ -51,7 +43,7 @@ public class BetterSnowChecker { return SnowState.NONE; } - if (hasSnowNeighbor(pos, world)) { + if (hasSnowNeighbor(world, pos)) { if (isExcludedBlock(state)) { return SnowState.WITHOUT_LAYER; } @@ -78,7 +70,7 @@ public class BetterSnowChecker { return false; } - private static boolean hasSnowNeighbor(BlockPos pos, ClientWorld world) { + private static boolean hasSnowNeighbor(BlockView world, BlockPos pos) { var directionCheckers = new ArrayList(); directionCheckers.add(new DirectionChecker(Direction.NORTH, pos.down())); directionCheckers.add(new DirectionChecker(Direction.EAST, pos.down())); @@ -134,7 +126,7 @@ public class BetterSnowChecker { this.lastPos = pos; } - public Optional next(ClientWorld world, Config config) { + public Optional next(BlockView world, Config config) { lastPos = lastPos.add(direction.getOffsetX(), 0, direction.getOffsetZ()); var maxDepth = config.maxVerticalDistance; diff --git a/src/main/java/tobinio/bettersnowcoverage/mixin/SectionBuilderMixin.java b/src/main/java/tobinio/bettersnowcoverage/mixin/SectionBuilderMixin.java index 8379e3b..dc396df 100644 --- a/src/main/java/tobinio/bettersnowcoverage/mixin/SectionBuilderMixin.java +++ b/src/main/java/tobinio/bettersnowcoverage/mixin/SectionBuilderMixin.java @@ -39,7 +39,7 @@ public class SectionBuilderMixin { @Local BlockState blockState, @Local (ordinal = 2) BlockPos blockPos, @Local MatrixStack matrixStack, @Local BufferBuilder bufferBuilder, @Local Random random) { - var snowState = BetterSnowChecker.shouldHaveSnow(blockPos.up()); + var snowState = BetterSnowChecker.shouldHaveSnowAboveBlock(renderRegion ,blockPos.up()); if (snowState == BetterSnowChecker.SnowState.WITH_LAYER) { matrixStack.push(); @@ -50,8 +50,8 @@ public class SectionBuilderMixin { } @ModifyVariable (method = "build", at = @At ("STORE"), ordinal = 0) - private BlockState betterSnowCoverage$setGrassState(BlockState state, @Local (ordinal = 2) BlockPos blockPos) { - var snowState = BetterSnowChecker.shouldHaveSnow(blockPos.up()); + private BlockState betterSnowCoverage$setGrassState(BlockState state, @Local (ordinal = 2) BlockPos blockPos, @Local (argsOnly = true) ChunkRendererRegion renderRegion) { + var snowState = BetterSnowChecker.shouldHaveSnowAboveBlock(renderRegion, blockPos.up()); if (snowState != BetterSnowChecker.SnowState.NONE) { return BetterSnowChecker.getSnowState(state); diff --git a/src/main/java/tobinio/bettersnowcoverage/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/src/main/java/tobinio/bettersnowcoverage/mixin/sodium/ChunkBuilderMeshingTaskMixin.java index 09fa565..4cc7f29 100644 --- a/src/main/java/tobinio/bettersnowcoverage/mixin/sodium/ChunkBuilderMeshingTaskMixin.java +++ b/src/main/java/tobinio/bettersnowcoverage/mixin/sodium/ChunkBuilderMeshingTaskMixin.java @@ -30,7 +30,7 @@ public class ChunkBuilderMeshingTaskMixin { CallbackInfoReturnable cir, @Local BlockRenderCache cache, @Local LevelSlice slice, @Local (ordinal = 0) BlockPos.Mutable pos, @Local (ordinal = 1) BlockPos.Mutable modelOffset, @Local LocalRef blockState) { - BetterSnowChecker.SnowState snowState = BetterSnowChecker.shouldHaveSnow(pos.up()); + BetterSnowChecker.SnowState snowState = BetterSnowChecker.shouldHaveSnowAboveBlock(slice, pos); if (snowState != BetterSnowChecker.SnowState.NONE) { blockState.set(BetterSnowChecker.getSnowState(blockState.get())); -- 2.51.2