package net.minecraft.client.renderer.block; import com.mojang.blaze3d.platform.Transparency; import net.minecraft.client.color.block.BlockTintSource; import net.minecraft.client.renderer.chunk.ChunkSectionLayer; import net.minecraft.client.resources.model.ModelDebugName; import net.minecraft.client.resources.model.sprite.Material; import net.minecraft.client.resources.model.sprite.MaterialBaker; import net.minecraft.client.resources.model.sprite.Material.Baked; import org.jspecify.annotations.Nullable; public record FluidModel( ChunkSectionLayer layer, Baked stillMaterial, Baked flowingMaterial, @Nullable Baked overlayMaterial, @Nullable BlockTintSource tintSource ) { public record Unbaked(Material stillMaterial, Material flowingMaterial, @Nullable Material overlayMaterial, @Nullable BlockTintSource tintSource) { public FluidModel bake(final MaterialBaker materials, final ModelDebugName modelName) { Baked stillMaterial = materials.get(this.stillMaterial, modelName); Baked flowingMaterial = materials.get(this.flowingMaterial, modelName); Baked overlayMaterial = this.overlayMaterial != null ? materials.get(this.overlayMaterial, modelName) : null; Transparency transparency = getTransparency(stillMaterial).or(getTransparency(flowingMaterial)); if (overlayMaterial != null) { transparency = transparency.or(getTransparency(overlayMaterial)); } return new FluidModel(ChunkSectionLayer.byTransparency(transparency), stillMaterial, flowingMaterial, overlayMaterial, this.tintSource); } private static Transparency getTransparency(final Baked material) { return material.forceTranslucent() ? Transparency.TRANSLUCENT : material.sprite().transparency(); } } }