diff --git a/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/BlockDustParticleMixin.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/BlockDustParticleMixin.java index 07cec8658..adf333509 100644 --- a/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/BlockDustParticleMixin.java +++ b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/BlockDustParticleMixin.java @@ -19,7 +19,9 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Slice; @@ -38,6 +40,9 @@ abstract class BlockDustParticleMixin extends SpriteBillboardParticle { @Final private BlockPos blockPos; + @Unique + private boolean fabric_disableTintCheck; + private BlockDustParticleMixin() { super(null, 0, 0, 0); } @@ -50,9 +55,12 @@ private BlockDustParticleMixin() { from = @At(value = "FIELD", target = "Lnet/minecraft/client/particle/BlockDustParticle;blue:F", ordinal = 0), to = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isOf(Lnet/minecraft/block/Block;)Z") ), - allow = 1, - // Prevent crash on never Forge versions, allowing FML to show the mod error screen - require = 0 + allow = 1 + ) + @Group( + name = "unintable_particles", + min = 1, + max = 1 ) private BlockState removeUntintableParticles(BlockState state) { if (!ParticleRenderEvents.ALLOW_BLOCK_DUST_TINT.invoker().allowBlockDustTint(state, world, blockPos)) { @@ -62,4 +70,44 @@ private BlockState removeUntintableParticles(BlockState state) { return state; } + + @ModifyVariable( + method = "(Lnet/minecraft/client/world/ClientWorld;DDDDDDLnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)V", + at = @At("LOAD"), + argsOnly = true, + slice = @Slice( + from = @At(value = "FIELD", target = "Lnet/minecraft/client/particle/BlockDustParticle;blue:F", ordinal = 0), + to = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/extensions/common/IClientBlockExtensions;of(Lnet/minecraft/block/BlockState;)Lnet/minecraftforge/client/extensions/common/IClientBlockExtensions;") + ), + allow = 1 + ) + @Group( + name = "unintable_particles", + min = 1, + max = 1 + ) + private BlockState removeUntintableParticlesNewForge(BlockState state) { + if (!ParticleRenderEvents.ALLOW_BLOCK_DUST_TINT.invoker().allowBlockDustTint(state, world, blockPos)) { + // As of 1.20.1, vanilla hardcodes grass block particles to not get tinted. + fabric_disableTintCheck = true; + return Blocks.GRASS_BLOCK.getDefaultState(); + } + fabric_disableTintCheck = false; + return state; + } + + @ModifyVariable( + method = "(Lnet/minecraft/client/world/ClientWorld;DDDDDDLnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)V", + at = @At("LOAD"), + argsOnly = true, + slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/extensions/common/IClientBlockExtensions;of(Lnet/minecraft/block/BlockState;)Lnet/minecraftforge/client/extensions/common/IClientBlockExtensions;"), + to = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/extensions/common/IClientBlockExtensions;areBreakingParticlesTinted(Lnet/minecraft/block/BlockState;Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/util/math/BlockPos;)Z") + ), + allow = 1, + require = 0 + ) + private BlockState removeUntintableParticlesNewForgeSecondary(BlockState state) { + return fabric_disableTintCheck ? Blocks.GRASS_BLOCK.getDefaultState() : state; + } } diff --git a/gradle.properties b/gradle.properties index 45d3f0ea6..3c7684b6a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,7 +66,7 @@ fabric-client-tags-api-v1-version=1.1.1 # FFAPI Properties loom.platform=forge -forge_version=1.20.1-47.1.3 +forge_version=1.20.1-47.2.6 pack_format=15 -forgified_version=1.9.33 +forgified_version=1.10.0 forge_fabric_loader_version=2.5.2+0.14.21+1.20.1 diff --git a/gradle/ffapi-setup.gradle b/gradle/ffapi-setup.gradle index 23f6599b9..9f6cb40df 100644 --- a/gradle/ffapi-setup.gradle +++ b/gradle/ffapi-setup.gradle @@ -441,9 +441,7 @@ abstract class GenerateForgeModMetadata extends DefaultTask { { modId "forge" mandatory true - // TODO Remove in 1.20.2 - // Cap forge on 47.1.3 to avoid issues that occur in later version - versionRange "[${forgeVersionString.get()}]" + versionRange "[47.1.3,)" ordering "NONE" side "BOTH" },