MC中液体不能游泳和浮起的问题
在很多时候,Fabric的很多科技模组会有自己的液体,那些液体可以放出来,也可以流动
但玩家和实体进入液体中却不能游泳和浮起来,我不知道这是故意而为还是开发者没有在意......
但实际上,只需要将自定义的液体添加到 #minecraft:water 标签即可

假如我们有液体 "example:awa" 和流动的此液体 "example:flowing_awa"
此时在 resources 目录下新建 /data/minecraft/tags/fluids/water.json
内容如下:

这么做了以后,就可以在自定义液体中游泳和上浮下沉了

其根本原因是因为原版对液体的判断机制
在 Entity.checkWaterState 方法中(第1243行)可以看到对方法 updateMovementInFluid 的调用中传入了 FluidTags.WATER 参数

而在 updateMovementInFluid 中的第3076行可以看到,原版对流体进行了一个判读,使用 isIn 方法判断是否在特定标签中,而不在标签内的流体则会被忽略不管
此方法在原版传入的标签只有 FluidTags.WATER 和 FluidTags.LAVA 两种,亦可以通过mixin注入代码来使其可以处理带有自定义标签的流体

使用mixin注入的方式如下,修改speed参数决定在液体中的移动速度:

注入方法不只有这样一种,可以通过很多形式实现,在此不多举例