diff --git a/gradle.properties b/gradle.properties index 7b9f48c..eddd72b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,13 +6,13 @@ org.gradle.parallel=true # check these on https://fabricmc.net/develop minecraft_version=1.21 yarn_mappings=1.21+build.9 -loader_version=0.15.11 +loader_version=0.16.2 # Mod Properties -mod_version=0.1.1+mc1.21.0 +mod_version=0.2.0+mc1.21.0 maven_group=tobinio.denseflowers archives_base_name=dense-flowers # Dependencies -fabric_version=0.100.8+1.21 -sodium_version=mc1.21-0.5.9 \ No newline at end of file +fabric_version=0.102.0+1.21 +sodium_version=mc1.21-0.6.0-beta.1-fabric \ No newline at end of file diff --git a/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRenderContextAccessor.java b/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRenderContextAccessor.java deleted file mode 100644 index fcaabcf..0000000 --- a/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRenderContextAccessor.java +++ /dev/null @@ -1,19 +0,0 @@ -package tobinio.denseflowers.mixin.sodium; - -import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderContext; -import org.joml.Vector3f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; - -/** - * Created: 31.07.24 - * - * @author Tobias Frischmann - */ -@Mixin (BlockRenderContext.class) -public interface BlockRenderContextAccessor { - @Mutable - @Accessor (remap = false) - void setOrigin(Vector3f origin); -} diff --git a/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java b/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java new file mode 100644 index 0000000..9b63bce --- /dev/null +++ b/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java @@ -0,0 +1,35 @@ +package tobinio.denseflowers.mixin.sodium; + +import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; +import net.minecraft.block.BlockState; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.util.math.BlockPos; +import org.joml.Vector3f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import tobinio.denseflowers.util.OffsetStorage; + +/** + * Created: 23.08.24 + * + * @author Tobias Frischmann + */ +@Mixin (BlockRenderer.class) +public class BlockRendererMixin { + @Shadow (remap = false) + @Final + private Vector3f posOffset; + + @Inject (method = "renderModel", at = @At (value = "INVOKE", target = "Lorg/joml/Vector3f;add(FFF)Lorg/joml/Vector3f;", remap = false), remap = false) + private void renderModel(BakedModel model, BlockState state, BlockPos pos, BlockPos origin, CallbackInfo ci) { + if (OffsetStorage.modelOffset != null) { + posOffset.add((float) OffsetStorage.modelOffset.getX(), + (float) OffsetStorage.modelOffset.getY(), + (float) OffsetStorage.modelOffset.getZ()); + } + } +} diff --git a/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java index 10656fb..5f799b3 100644 --- a/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java +++ b/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java @@ -1,22 +1,23 @@ package tobinio.denseflowers.mixin.sodium; import com.llamalad7.mixinextras.sugar.Local; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildContext; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; -import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderCache; -import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderContext; -import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask; -import me.jellysquid.mods.sodium.client.util.task.CancellationToken; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildContext; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderCache; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask; +import net.caffeinemc.mods.sodium.client.util.task.CancellationToken; +import net.caffeinemc.mods.sodium.client.world.LevelSlice; +import net.minecraft.block.BlockState; import net.minecraft.block.FlowerBlock; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import org.joml.Vector3f; -import org.joml.Vector3fc; 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 tobinio.denseflowers.OffsetGenerator; +import tobinio.denseflowers.util.OffsetStorage; /** * Created: 31.07.24 @@ -25,28 +26,19 @@ import tobinio.denseflowers.OffsetGenerator; */ @Mixin (value = ChunkBuilderMeshingTask.class, priority = 995) public class ChunkBuilderMeshingTaskMixin { - @Inject (method = "execute(Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lme/jellysquid/mods/sodium/client/util/task/CancellationToken;)Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At (value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer;renderModel(Lme/jellysquid/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderContext;Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers;)V", remap = false), remap = false) - private void execute(ChunkBuildContext buildContext, CancellationToken cancellationToken, - CallbackInfoReturnable cir, @Local BlockRenderContext ctx, - @Local ChunkBuildBuffers buffers, @Local BlockRenderCache cache) { - if (ctx.state().getBlock() instanceof FlowerBlock) { - Vector3fc origin = ctx.origin(); - var baseOffset = ctx.state().getModelOffset(ctx.world(), ctx.pos()); - - var context = (BlockRenderContextAccessor) ctx; - - for (Vec3d flowerOffset : OffsetGenerator.getFlowerOffsets(ctx.state(), ctx.world(), ctx.pos())) { - - var newOrigen = new Vector3f(origin); - newOrigen.sub((float) baseOffset.getX(), (float) baseOffset.getY(), (float) baseOffset.getZ()); - newOrigen.add((float) flowerOffset.getX(), (float) flowerOffset.getY(), (float) flowerOffset.getZ()); - context.setOrigin(newOrigen); - - cache.getBlockRenderer().renderModel((BlockRenderContext) context, buffers); + @Inject (method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At (value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer;renderModel(Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;)V", remap = false), remap = false) + private void execute(ChunkBuildContext buildContext, CancellationToken cancellationToken, + CallbackInfoReturnable cir, @Local BlockRenderCache cache, @Local LevelSlice slice, + @Local (ordinal = 0) BlockPos.Mutable pos, @Local (ordinal = 1) BlockPos.Mutable modelOffset, + @Local BlockState blockState, @Local BakedModel model) { + if (blockState.getBlock() instanceof FlowerBlock) { + for (Vec3d flowerOffset : OffsetGenerator.getFlowerOffsets(blockState, slice, pos)) { + + OffsetStorage.modelOffset = flowerOffset; + cache.getBlockRenderer().renderModel(model, blockState, pos, modelOffset); + OffsetStorage.modelOffset = null; } - - context.setOrigin((Vector3f) origin); } } } diff --git a/src/main/java/tobinio/denseflowers/util/OffsetStorage.java b/src/main/java/tobinio/denseflowers/util/OffsetStorage.java new file mode 100644 index 0000000..b89d10a --- /dev/null +++ b/src/main/java/tobinio/denseflowers/util/OffsetStorage.java @@ -0,0 +1,12 @@ +package tobinio.denseflowers.util; + +import net.minecraft.util.math.Vec3d; + +/** + * Created: 23.08.24 + * + * @author Tobias Frischmann + */ +public class OffsetStorage { + public static Vec3d modelOffset = null; +} diff --git a/src/main/resources/dense-flowers.mixins.json b/src/main/resources/dense-flowers.mixins.json index 0ccf3cd..d25f563 100644 --- a/src/main/resources/dense-flowers.mixins.json +++ b/src/main/resources/dense-flowers.mixins.json @@ -1,16 +1,14 @@ { - "required": true, - "package": "tobinio.denseflowers.mixin", - "compatibilityLevel": "JAVA_21", - "client": [ - "AbstractBlockAccessor", - "SectionBuilderMixin", - "sodium.ChunkBuilderMeshingTaskMixin" - ], - "injectors": { - "defaultRequire": 1 - }, - "mixins": [ - "sodium.BlockRenderContextAccessor" - ] + "required": true, + "package": "tobinio.denseflowers.mixin", + "compatibilityLevel": "JAVA_21", + "client": [ + "AbstractBlockAccessor", + "SectionBuilderMixin", + "sodium.ChunkBuilderMeshingTaskMixin", + "sodium.BlockRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } } \ No newline at end of file