diff --git a/build.gradle b/build.gradle index 72a6c36..1705cce 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. diff --git a/gradle.properties b/gradle.properties index cbd69f8..0c3cbda 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,6 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop minecraft_version=1.21.11 -yarn_mappings=1.21.11+build.1 loader_version=0.18.2 # Mod Properties diff --git a/src/main/java/tobinio/denseflowers/OffsetGenerator.java b/src/main/java/tobinio/denseflowers/OffsetGenerator.java index c627c6a..32d18d8 100644 --- a/src/main/java/tobinio/denseflowers/OffsetGenerator.java +++ b/src/main/java/tobinio/denseflowers/OffsetGenerator.java @@ -1,12 +1,12 @@ package tobinio.denseflowers; -import net.minecraft.block.BlockState; -import net.minecraft.block.FlowerBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.BlockView; -import tobinio.denseflowers.mixin.AbstractBlockAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.BlockGetter; +import tobinio.denseflowers.mixin.BlockBehaviourAccessor; import java.util.ArrayList; import java.util.List; @@ -18,22 +18,22 @@ import java.util.List; */ public class OffsetGenerator { - public static List getFlowerOffsets(BlockState blockState, BlockView world, BlockPos flowerPos) { - var baseLocation = blockState.getModelOffset(flowerPos); - AbstractBlockAccessor flower = (AbstractBlockAccessor) blockState.getBlock(); + public static List getFlowerOffsets(BlockState blockState, BlockGetter world, BlockPos flowerPos) { + var baseLocation = blockState.getOffset(flowerPos); + BlockBehaviourAccessor flower = (BlockBehaviourAccessor) blockState.getBlock(); - var allLocations = new ArrayList(); + var allLocations = new ArrayList(); allLocations.add(baseLocation); - var locations = new ArrayList(); + var locations = new ArrayList(); outer: for (int i = 0; i < getNumberOfSurroundingFlowers(world, flowerPos); i++) { - var newLocation = blockState.getModelOffset(flowerPos.add((i + 1) * 5, 0, (i + 1) * 3)) - .multiply(0.45 / flower.callGetMaxHorizontalModelOffset()); + var newLocation = blockState.getOffset(flowerPos.offset((i + 1) * 5, 0, (i + 1) * 3)) + .scale(0.45 / flower.callGetMaxHorizontalOffset()); - for (Vec3d location : allLocations) { + for (Vec3 location : allLocations) { double rotation = Math.atan2(newLocation.x - location.x, newLocation.z - location.z); if (location.distanceTo(newLocation) <= 0.4 || is45Degrees(rotation)) { @@ -48,12 +48,12 @@ public class OffsetGenerator { return locations; } - private static int getNumberOfSurroundingFlowers(BlockView world, BlockPos flowerPos) { + private static int getNumberOfSurroundingFlowers(BlockGetter world, BlockPos flowerPos) { var count = 0; Direction[] directions = {Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST}; for (Direction dir : directions) { - if (world.getBlockState(flowerPos.add(dir.getOffsetX(), 0, dir.getOffsetZ())) + if (world.getBlockState(flowerPos.offset(dir.getStepX(), 0, dir.getStepZ())) .getBlock() instanceof FlowerBlock) { count++; } diff --git a/src/main/java/tobinio/denseflowers/mixin/AbstractBlockAccessor.java b/src/main/java/tobinio/denseflowers/mixin/BlockBehaviourAccessor.java similarity index 54% rename from src/main/java/tobinio/denseflowers/mixin/AbstractBlockAccessor.java rename to src/main/java/tobinio/denseflowers/mixin/BlockBehaviourAccessor.java index 41e622c..4292cd5 100644 --- a/src/main/java/tobinio/denseflowers/mixin/AbstractBlockAccessor.java +++ b/src/main/java/tobinio/denseflowers/mixin/BlockBehaviourAccessor.java @@ -1,6 +1,6 @@ package tobinio.denseflowers.mixin; -import net.minecraft.block.AbstractBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @@ -9,8 +9,8 @@ import org.spongepowered.asm.mixin.gen.Invoker; * * @author Tobias Frischmann */ -@Mixin (AbstractBlock.class) -public interface AbstractBlockAccessor { +@Mixin (BlockBehaviour.class) +public interface BlockBehaviourAccessor { @Invoker - float callGetMaxHorizontalModelOffset(); + float callGetMaxHorizontalOffset(); } diff --git a/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java b/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java index 59102e0..a3836b0 100644 --- a/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java +++ b/src/main/java/tobinio/denseflowers/mixin/sodium/BlockRendererMixin.java @@ -2,10 +2,10 @@ package tobinio.denseflowers.mixin.sodium; import com.llamalad7.mixinextras.sugar.Local; import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; -import net.minecraft.block.BlockState; -import net.minecraft.client.render.model.BlockStateModel; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -28,13 +28,13 @@ public class BlockRendererMixin { @Inject (method = "renderModel", at = @At (value = "INVOKE", target = "Lorg/joml/Vector3f;add(FFF)Lorg/joml/Vector3f;"), remap = false) private void denseflowers$renderModel(BlockStateModel model, BlockState state, BlockPos pos, BlockPos origin, CallbackInfo ci, - @Local Vec3d modelOffset) { + @Local Vec3 modelOffset) { - Vec3d offset = OffsetStorage.offsets.get(pos); + Vec3 offset = OffsetStorage.offsets.get(pos); if (offset != null) { - posOffset.sub((float) modelOffset.getX(), (float) modelOffset.getY(), (float) modelOffset.getZ()); - posOffset.add((float) offset.getX(), (float) offset.getY(), (float) offset.getZ()); + posOffset.sub((float) modelOffset.x(), (float) modelOffset.y(), (float) modelOffset.z()); + posOffset.add((float) offset.x(), (float) offset.y(), (float) offset.z()); } } } diff --git a/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java index bf09ae5..85f5377 100644 --- a/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java +++ b/src/main/java/tobinio/denseflowers/mixin/sodium/ChunkBuilderMeshingTaskMixin.java @@ -7,11 +7,11 @@ import net.caffeinemc.mods.sodium.client.render.chunk.compile.pipeline.BlockRend 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.BlockStateModel; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,13 +28,13 @@ import tobinio.denseflowers.util.OffsetStorage; @Mixin (value = ChunkBuilderMeshingTask.class, priority = 1020) public class ChunkBuilderMeshingTaskMixin { - @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/BlockStateModel;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;)V")) + @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/renderer/block/model/BlockStateModel;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/BlockPos;)V")) private void denseflowers$onRenderModel(ChunkBuildContext buildContext, CancellationToken cancellationToken, CallbackInfoReturnable cir, @Local BlockRenderer blockRenderer, @Local LevelSlice slice, - @Local (ordinal = 0) BlockPos.Mutable pos, @Local (ordinal = 1) BlockPos.Mutable modelOffset, + @Local (ordinal = 0) BlockPos.MutableBlockPos pos, @Local (ordinal = 1) BlockPos.MutableBlockPos modelOffset, @Local BlockState blockState, @Local BlockStateModel model) { if (blockState.getBlock() instanceof FlowerBlock) { - for (Vec3d flowerOffset : OffsetGenerator.getFlowerOffsets(blockState, slice, pos)) { + for (Vec3 flowerOffset : OffsetGenerator.getFlowerOffsets(blockState, slice, pos)) { OffsetStorage.offsets.put(new BlockPos(pos.getX(), pos.getY(), pos.getZ()), flowerOffset); blockRenderer.renderModel(model, blockState, pos, modelOffset); diff --git a/src/main/java/tobinio/denseflowers/util/OffsetStorage.java b/src/main/java/tobinio/denseflowers/util/OffsetStorage.java index f4b9f92..522a109 100644 --- a/src/main/java/tobinio/denseflowers/util/OffsetStorage.java +++ b/src/main/java/tobinio/denseflowers/util/OffsetStorage.java @@ -1,7 +1,7 @@ package tobinio.denseflowers.util; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; import java.util.concurrent.ConcurrentHashMap; @@ -11,5 +11,5 @@ import java.util.concurrent.ConcurrentHashMap; * @author Tobias Frischmann */ public class OffsetStorage { - public static final ConcurrentHashMap offsets = new ConcurrentHashMap<>(); + public static final ConcurrentHashMap offsets = new ConcurrentHashMap<>(); } diff --git a/src/main/resources/dense-flowers.mixins.json b/src/main/resources/dense-flowers.mixins.json index 4a2e552..0b5ffe4 100644 --- a/src/main/resources/dense-flowers.mixins.json +++ b/src/main/resources/dense-flowers.mixins.json @@ -3,7 +3,7 @@ "package": "tobinio.denseflowers.mixin", "compatibilityLevel": "JAVA_21", "client": [ - "AbstractBlockAccessor", + "BlockBehaviourAccessor", "sodium.BlockRendererMixin", "sodium.ChunkBuilderMeshingTaskMixin" ],