diff --git a/build.gradle b/build.gradle index 1985b7c..9c14fab 100644 --- a/build.gradle +++ b/build.gradle @@ -106,7 +106,7 @@ def getMetadata() { id += "-dirty" } - metadata += "+${id}" + metadata += "+git.${id}" } return metadata diff --git a/gradle.properties b/gradle.properties index bfa3ccf..e9817aa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true # Mod Properties -mod_version=1.0.10 +mod_version=1.0.11 maven_group=me.tibinonest.mods archives_base_name=cauldron-dyeing diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 31eefa7..4748b02 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] -minecraft = "1.20" -quilt_mappings = "1.20+build.1" -fabric_loader = "0.14.21" +minecraft = "1.20.1" +quilt_mappings = "1.20.1+build.14" +fabric_loader = "0.14.22" -fabric_api = "0.83.0+1.20" -sodium = "mc1.20-0.4.10" +fabric_api = "0.87.0+1.20.1" +sodium = "mc1.20.1-0.5.1" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } @@ -16,5 +16,5 @@ sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" } [plugins] fabric_loom = { id = "fabric-loom", version = "1.2.+" } -loom_quiltflower = { id = "io.github.juuxel.loom-quiltflower", version = "1.10.+" } +loom_quiltflower = { id = "io.github.juuxel.loom-vineflower", version = "1.11.+" } grgit = { id = "org.ajoberstar.grgit", version = "5.2.+" } diff --git a/src/main/java/me/tibinonest/mods/cauldron_dyeing/CauldronDyeing.java b/src/main/java/me/tibinonest/mods/cauldron_dyeing/CauldronDyeing.java index e25b773..a466188 100644 --- a/src/main/java/me/tibinonest/mods/cauldron_dyeing/CauldronDyeing.java +++ b/src/main/java/me/tibinonest/mods/cauldron_dyeing/CauldronDyeing.java @@ -8,10 +8,12 @@ import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityT import net.minecraft.block.Blocks; import net.minecraft.block.entity.BlockEntityType; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.color.world.BiomeColors; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockRenderView; public class CauldronDyeing implements ModInitializer { public static final String MOD_ID = "cauldron_dyeing"; @@ -23,6 +25,16 @@ public class CauldronDyeing implements ModInitializer { Registry.register(Registries.BLOCK_ENTITY_TYPE, new Identifier(MOD_ID, "water_cauldron_entity"), WATER_CAULDRON_BLOCK_ENTITY); } + @Environment(EnvType.CLIENT) + public static int getColor(BlockRenderView world, BlockPos pos) { + var blockEntity = world.getBlockEntity(pos); + if (blockEntity instanceof WaterCauldronBlockEntity waterCauldron && waterCauldron.getColor() != -1) { + return waterCauldron.getColor(); + } + + return BiomeColors.getWaterColor(world, pos); + } + @Environment(EnvType.CLIENT) public static void rebuildBlock(BlockPos pos) { MinecraftClient.getInstance().worldRenderer.scheduleBlockRenders(pos.getX(), pos.getY(), pos.getZ(), pos.getX(), pos.getY(), pos.getZ()); diff --git a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BiomeColorsMixin.java b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BiomeColorsMixin.java deleted file mode 100644 index 175709f..0000000 --- a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BiomeColorsMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.tibinonest.mods.cauldron_dyeing.mixin; - -import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlockEntity; -import net.minecraft.client.color.world.BiomeColors; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockRenderView; -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; - -@Mixin(BiomeColors.class) -public class BiomeColorsMixin { - @Inject(method = "getWaterColor", at = @At("HEAD"), cancellable = true) - private static void cauldron_dyeing$modifyWaterColor(BlockRenderView world, BlockPos pos, CallbackInfoReturnable cir) { - var blockEntity = world.getBlockEntity(pos); - - if (blockEntity instanceof WaterCauldronBlockEntity waterCauldron && waterCauldron.getColor() != -1) { - cir.setReturnValue(waterCauldron.getColor()); - } - } -} diff --git a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BlockColorsMixin.java b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BlockColorsMixin.java new file mode 100644 index 0000000..9e98780 --- /dev/null +++ b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/BlockColorsMixin.java @@ -0,0 +1,18 @@ +package me.tibinonest.mods.cauldron_dyeing.mixin; + +import me.tibinonest.mods.cauldron_dyeing.CauldronDyeing; +import net.minecraft.block.Blocks; +import net.minecraft.client.color.block.BlockColors; +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 org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +@Mixin(BlockColors.class) +public class BlockColorsMixin { + @Inject(method = "create", at = @At("TAIL"), locals = LocalCapture.CAPTURE_FAILHARD) + private static void cauldron_dyeing$modifyCreate(CallbackInfoReturnable cir, BlockColors blockColors) { + blockColors.registerColorProvider((state, world, pos, tintIndex) -> world != null && pos != null ? CauldronDyeing.getColor(world, pos) : -1, Blocks.WATER_CAULDRON); + } +} diff --git a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/ColorProviderRegistryMixin.java b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/ColorProviderRegistryMixin.java new file mode 100644 index 0000000..1bf6556 --- /dev/null +++ b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/ColorProviderRegistryMixin.java @@ -0,0 +1,22 @@ +package me.tibinonest.mods.cauldron_dyeing.mixin.sodium; + +import me.jellysquid.mods.sodium.client.model.color.ColorProvider; +import me.jellysquid.mods.sodium.client.model.color.ColorProviderRegistry; +import me.jellysquid.mods.sodium.client.model.color.DefaultColorProviders; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +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.Redirect; + +@Mixin(ColorProviderRegistry.class) +public abstract class ColorProviderRegistryMixin { + @Shadow protected abstract void registerBlocks(ColorProvider resolver, Block... blocks); + + @Redirect(method = "installOverrides", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/model/color/ColorProviderRegistry;registerBlocks(Lme/jellysquid/mods/sodium/client/model/color/ColorProvider;[Lnet/minecraft/block/Block;)V", ordinal = 2)) + private void cauldron_dyeing$modifyOverrides(ColorProviderRegistry instance, ColorProvider resolver, Block... blocks) { + this.registerBlocks(DefaultColorProviders.WaterColorProvider.BLOCKS, Blocks.WATER, Blocks.BUBBLE_COLUMN); + } +} diff --git a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/SodiumBlockRendererMixin.java b/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/SodiumBlockRendererMixin.java deleted file mode 100644 index 9d45b0f..0000000 --- a/src/main/java/me/tibinonest/mods/cauldron_dyeing/mixin/sodium/SodiumBlockRendererMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.tibinonest.mods.cauldron_dyeing.mixin.sodium; - -import me.jellysquid.mods.sodium.client.model.quad.ModelQuadView; -import me.jellysquid.mods.sodium.client.model.quad.blender.ColorBlender; -import me.jellysquid.mods.sodium.client.model.quad.blender.ColorSampler; -import me.jellysquid.mods.sodium.client.model.quad.blender.FlatColorBlender; -import me.jellysquid.mods.sodium.client.render.chunk.compile.pipeline.BlockRenderer; -import me.tibinonest.mods.cauldron_dyeing.block.WaterCauldronBlockEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockRenderView; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(BlockRenderer.class) -public class SodiumBlockRendererMixin { - @Redirect(method = "renderQuadList", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/model/quad/blender/ColorBlender;getColors(Lnet/minecraft/world/BlockRenderView;Lnet/minecraft/util/math/BlockPos;Lme/jellysquid/mods/sodium/client/model/quad/ModelQuadView;Lme/jellysquid/mods/sodium/client/model/quad/blender/ColorSampler;Ljava/lang/Object;)[I")) - private int[] cauldron_dyeing$redirectGetColors(ColorBlender instance, BlockRenderView world, BlockPos pos, ModelQuadView quad, ColorSampler sampler, T state) { - var blockEntity = world.getBlockEntity(pos); - - if (blockEntity instanceof WaterCauldronBlockEntity) { - return new FlatColorBlender().getColors(world, pos, quad, sampler, state); - } - - return instance.getColors(world, pos, quad, sampler, state); - } -} diff --git a/src/main/resources/cauldron-dyeing.mixins.json b/src/main/resources/cauldron-dyeing.mixins.json index 8e1946a..ceab565 100644 --- a/src/main/resources/cauldron-dyeing.mixins.json +++ b/src/main/resources/cauldron-dyeing.mixins.json @@ -7,8 +7,8 @@ "CauldronBehaviorMixin" ], "client": [ - "BiomeColorsMixin", - "sodium.SodiumBlockRendererMixin" + "BlockColorsMixin", + "sodium.ColorProviderRegistryMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 19664da..a0278a8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,6 +29,6 @@ "fabric-object-builder-api-v1": ">=0.1" }, "breaks": { - "sodium": "<0.4.10" + "sodium": "<0.5.0" } }