Fluidlogged API

Fluidlogged API

356k Downloads

Aqua Acrobatics compat.

Carvercarver1 opened this issue ยท 8 comments

commented

embeddedt/aquaacrobatics#62

Creating an issue here for the compat bug.

commented

@jbredwards Here's some more information if you have any ideas. There appear to be two issues here: the bubble column not rendering the fluid face despite extending BlockStaticLiquid, and water coloring being different.

  • The source code for the bubble column block is here.
  • Because a lot of 1.12 mods made the (correct at the time) assumption that the minecraft:water_still is blue, replacing it with the 1.13-style white one causes a lot of compatibility issues. What I wound up doing is using a blue 1.13 water texture for minecraft:water_still and manually overriding BlockFluidRenderer so it uses aquaacrobatics:water_still, which can be recolored. I assume one of your ASM tweaks undoes that override and that's what causes the color change.

As you know, I'm quite impressed by your mod, so I'm happy to add compatibility where needed.

commented

@Carvercarver1 This mod does not change any textures, or any block colors. One thing this mod does do though is change the vanilla fluid rendering system to the one used by modded fluids, which causes light & shading to behave how it would with normal blocks (this is not the main reason I do this, but is probably what the described change in water color is).

@embeddedt As mentioned above, this mod bypasses BlockFluidRenderer by generating a new forge ModelFluid for each BlockLiquid, and by changing the render type to EnumBlockRenderType.MODEL. My best guess on what's causing the issue is that your blockstate & mapper could be clashing with my generated ones during runtime. Try removing them and see if that works, this shouldn't cause any issues (while also fixing this one), as they're not used by BlockFluidRenderer.

commented

One thing this mod does do though is change the vanilla fluid rendering system to the one used by modded fluids

There's a problem here and I'm not sure how to fix it.

A lot of 1.12 mods assume that the water texture is blue (like it was in vanilla 1.12). Even though Forge fluids have an option for specifying the color, a lot of mods don't respect that in the case of water. They just render the texture assuming it already has a color.

The only solution I found to preserve mod compatibility was to replace the vanilla texture with an already-colored blue one from 1.13, and modify BlockFluidRenderer to use a separate texture. However, this now causes issues with your mod, as you're pulling the original minecraft:water_still texture from the Forge fluid (correctly), and while modifying the Forge fluid to use the aquaacrobatics:water_still texture and appropriate colors would fix the issue, it would break all the other mods.

I suppose one option is for me to modify ModelFluid to use different textures if the fluid is water. This may end up being the path I take.

commented

Why not replace the FluidRegistry.WATER texture strings directly? That's what I did with NJARM for its 1.13 water colors.

commented

A lot of mods don't respect the color I put in FluidRegistry.WATER. If I put a white texture there, and set the color field to be blue, some mods just render the texture and don't actually use the color I provided.

commented

Don't use the color field, instead use the BiomeColor.GetWaterColor event.

commented

Just did some testing, and there is definitely a problem with the water colors. I also found the actual cause of the missing model, and it's this. The forge fluid rendering system relies on some special block state properties to work correctly (these are normally handled by BlockLiquidBase). I've come up with a fix for the missing model that can be implemented, sorry for being stupid :p

@Nonnull
   @Override
   protected BlockStateContainer createBlockState() {
      return Loader.isModLoaded("fluidlogged_api")
              ? new BlockStateContainer.Builder(this).add(LEVEL, DRAG).add(BlockFluidBase.FLUID_RENDER_PROPS.toArray(new IUnlistedProperty<?>[0])).build()
              : new BlockStateContainer.Builder(this).add(LEVEL, DRAG).build();
   }
commented

I've come up with a fix for the missing model that can be implemented, sorry for being stupid :p

Thank you! I was also able to fix the coloring issue by adjusting which texture the Forge fluid renderer uses.