11package mekanism .common .registration .impl ;
22
3+ import com .mojang .blaze3d .shaders .FogShape ;
4+ import com .mojang .blaze3d .systems .RenderSystem ;
35import java .util .Collection ;
46import java .util .function .BiFunction ;
57import java .util .function .Consumer ;
68import java .util .function .UnaryOperator ;
9+ import mekanism .client .render .MekanismRenderer ;
710import mekanism .common .Mekanism ;
811import mekanism .common .base .IChemicalConstant ;
912import mekanism .common .registration .MekanismDeferredRegister ;
1013import net .minecraft .Util ;
14+ import net .minecraft .client .Camera ;
1115import net .minecraft .client .Minecraft ;
16+ import net .minecraft .client .multiplayer .ClientLevel ;
17+ import net .minecraft .client .renderer .FogRenderer ;
1218import net .minecraft .core .BlockPos ;
1319import net .minecraft .core .Holder ;
1420import net .minecraft .core .dispenser .BlockSource ;
4551import net .neoforged .neoforge .registries .NeoForgeRegistries ;
4652import org .jetbrains .annotations .NotNull ;
4753import org .jetbrains .annotations .Nullable ;
54+ import org .joml .Vector3f ;
4855
4956public class FluidDeferredRegister {
5057
5158 private static final ResourceLocation OVERLAY = ResourceLocation .withDefaultNamespace ("block/water_overlay" );
52- private static final ResourceLocation RENDER_OVERLAY = ResourceLocation .withDefaultNamespace ("misc/underwater" );
59+ private static final ResourceLocation RENDER_OVERLAY = ResourceLocation .withDefaultNamespace ("textures/ misc/underwater.png " );
5360 private static final ResourceLocation LIQUID = Mekanism .rl ("liquid/liquid" );
5461 private static final ResourceLocation LIQUID_FLOW = Mekanism .rl ("liquid/liquid_flow" );
5562 //Copy of/based off of vanilla's lava/water bucket dispense behavior
@@ -279,11 +286,13 @@ public boolean isVaporizedOnPlacement(Level level, BlockPos pos, FluidStack stac
279286 @ Override
280287 public void initializeClient (Consumer <IClientFluidTypeExtensions > consumer ) {
281288 consumer .accept (new IClientFluidTypeExtensions () {
289+ @ NotNull
282290 @ Override
283291 public ResourceLocation getStillTexture () {
284292 return stillTexture ;
285293 }
286294
295+ @ NotNull
287296 @ Override
288297 public ResourceLocation getFlowingTexture () {
289298 return flowingTexture ;
@@ -300,6 +309,28 @@ public ResourceLocation getRenderOverlayTexture(Minecraft mc) {
300309 return renderOverlayTexture ;
301310 }
302311
312+ @ NotNull
313+ @ Override
314+ public Vector3f modifyFogColor (@ NotNull Camera camera , float partialTick , @ NotNull ClientLevel level , int renderDistance , float darkenWorldAmount ,
315+ @ NotNull Vector3f fluidFogColor ) {
316+ return new Vector3f (MekanismRenderer .getRed (color ), MekanismRenderer .getGreen (color ), MekanismRenderer .getBlue (color ));
317+ }
318+
319+ @ Override
320+ public void modifyFogRender (@ NotNull Camera camera , @ NotNull FogRenderer .FogMode mode , float renderDistance , float partialTick , float nearDistance ,
321+ float farDistance , @ NotNull FogShape shape ) {
322+ //Copy of logic for water except always treating it as if it was a player who has no water vision
323+ // and does not take the biome's closer water fog into account
324+ farDistance = 24F ;
325+ if (farDistance > renderDistance ) {
326+ farDistance = renderDistance ;
327+ shape = FogShape .CYLINDER ;
328+ }
329+ RenderSystem .setShaderFogStart (-8 );
330+ RenderSystem .setShaderFogEnd (farDistance );
331+ RenderSystem .setShaderFogShape (shape );
332+ }
333+
303334 @ Override
304335 public int getTintColor () {
305336 return color ;
0 commit comments