diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 5ee47586..86d415a7 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -513,6 +513,9 @@ public class CarpetSettings @Rule(desc = "placing blocks cause block updates", category = CREATIVE) public static boolean interactionUpdates = true; + @Rule(desc = "Disables breaking of blocks caused by flowing liquids", category = CREATIVE) + public static boolean liquidDamageDisabled = false; + @Rule( desc = "smooth client animations with low tps settings", extra = "works only in SP, and will slow down players", diff --git a/src/main/java/carpet/mixins/FlowableFluid_liquidDamageDisabledMixin.java b/src/main/java/carpet/mixins/FlowableFluid_liquidDamageDisabledMixin.java new file mode 100644 index 00000000..1b345e8f --- /dev/null +++ b/src/main/java/carpet/mixins/FlowableFluid_liquidDamageDisabledMixin.java @@ -0,0 +1,34 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.fluid.FlowableFluid; +import net.minecraft.fluid.Fluid; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; +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(FlowableFluid.class) +public class FlowableFluid_liquidDamageDisabledMixin +{ + @Inject( + method = "canFill", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Material;blocksMovement()Z" + ), + cancellable = true + ) + private void stopBreakingBlock(BlockView world, BlockPos pos, BlockState state, Fluid fluid, CallbackInfoReturnable cir) + { + if (CarpetSettings.liquidDamageDisabled) + { + Material material = state.getMaterial(); + cir.setReturnValue(material == Material.AIR || material.isLiquid()); + } + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index b1cb8d4f..a0839af2 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -25,6 +25,8 @@ "Structure_fillUpdatesMixin", "ServerPlayNetworkHandler_interactionUpdatesMixin", + "FlowableFluid_liquidDamageDisabledMixin", + "ServerMetadata_motdMixin", "MinecraftServer_pingPlayerSampleLimit",