diff --git a/src/main/java/net/doppelr/lemonmates/fluid/BaseFluidType.java b/src/main/java/net/doppelr/lemonmates/fluid/BaseFluidType.java index 5879d3c..68ce93b 100644 --- a/src/main/java/net/doppelr/lemonmates/fluid/BaseFluidType.java +++ b/src/main/java/net/doppelr/lemonmates/fluid/BaseFluidType.java @@ -1,25 +1,45 @@ package net.doppelr.lemonmates.fluid; +import com.mojang.blaze3d.shaders.FogShape; +import com.mojang.blaze3d.systems.RenderSystem; import net.doppelr.lemonmates.LemonMates; +import net.minecraft.client.Camera; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.FogRenderer; import net.minecraft.resources.ResourceLocation; import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; import net.neoforged.neoforge.fluids.FluidType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.joml.Vector3f; /** * Basic implementation of {@link FluidType} that supports specifying still and flowing textures in the constructor. * * @author Choonster (MIT License) */ +/** + * Basic implementation of {@link FluidType} that supports specifying still and flowing textures in the constructor. + * + * @author Choonster (MIT License) + * Change by: Kaupenjoe + * Added overlayTexture and tintColor as well. Also converts tint color into fog color + */ public class BaseFluidType extends FluidType { private final ResourceLocation stillTexture; private final ResourceLocation flowingTexture; + private final ResourceLocation overlayTexture; + private final int tintColor; + private final Vector3f fogColor; - public BaseFluidType(final String stillTexture, final String flowingTexture, - final Properties properties) { + public BaseFluidType(final ResourceLocation stillTexture, final ResourceLocation flowingTexture, final ResourceLocation overlayTexture, + final int tintColor, final Vector3f fogColor, final Properties properties) { super(properties); - this.stillTexture = LemonMates.rl("block/" + stillTexture); - this.flowingTexture = LemonMates.rl("block/" + flowingTexture); - + this.stillTexture = stillTexture; + this.flowingTexture = flowingTexture; + this.overlayTexture = overlayTexture; + this.tintColor = tintColor; + this.fogColor = fogColor; } public IClientFluidTypeExtensions getClientFluidTypeExtensions() { @@ -34,6 +54,28 @@ public ResourceLocation getFlowingTexture() { return flowingTexture; } + @Override + public @Nullable ResourceLocation getOverlayTexture() { + return overlayTexture; + } + + @Override + public int getTintColor() { + return tintColor; + } + + @Override + public @NotNull Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, + int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) { + return fogColor; + } + + @Override + public void modifyFogRender(Camera camera, FogRenderer.FogMode mode, float renderDistance, float partialTick, + float nearDistance, float farDistance, FogShape shape) { + RenderSystem.setShaderFogStart(1f); + RenderSystem.setShaderFogEnd(6f); // distance when the fog starts + } }; } } diff --git a/src/main/java/net/doppelr/lemonmates/fluid/ModFluids.java b/src/main/java/net/doppelr/lemonmates/fluid/ModFluids.java index 763b070..ec9b7b1 100644 --- a/src/main/java/net/doppelr/lemonmates/fluid/ModFluids.java +++ b/src/main/java/net/doppelr/lemonmates/fluid/ModFluids.java @@ -2,6 +2,7 @@ import net.doppelr.lemonmates.LemonMates; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -18,6 +19,7 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.NeoForgeRegistries; +import org.joml.Vector3f; public class ModFluids { @@ -25,11 +27,13 @@ public class ModFluids { public static final DeferredRegister FLUIDS = DeferredRegister.create(BuiltInRegistries.FLUID, LemonMates.MOD_ID); public static final DeferredRegister BUCKETS = DeferredRegister.createItems(LemonMates.MOD_ID); public static final DeferredRegister SOURCEBLOCKS = DeferredRegister.createBlocks(LemonMates.MOD_ID); - + public static final ResourceLocation WATER_STILL_RL = ResourceLocation.parse("block/water_still"); + public static final ResourceLocation WATER_FLOWING_RL = ResourceLocation.parse("block/water_flow"); + public static final ResourceLocation WATER_OVERLAY_RL = ResourceLocation.parse("block/water_overlay"); // Finished Fluids // Citron final - public static final DeferredHolder CITRON_LEMONADE_FLUID = FLUID_TYPES.register("citron_lemonade_fluid", () -> new BaseFluidType("citron_lemonade_liquid_still","citron_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Citron Lemonade"))); + public static final DeferredHolder CITRON_LEMONADE_FLUID = FLUID_TYPES.register("citron_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFFFF99, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Citron Lemonade"))); public static final DeferredHolder CITRON_LEMONADE_FLUID_SOURCE = FLUIDS.register("citron_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.CITRON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder CITRON_LEMONADE_FLUID_FLOWING = FLUIDS.register("citron_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.CITRON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder CITRON_LEMONADE_FLUID_BUCKET = BUCKETS.register("citron_lemonade_bucket", () -> new BucketItem(CITRON_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -40,7 +44,7 @@ public class ModFluids { .block(CITRON_LEMONADE_FLUID_BLOCK) .bucket(CITRON_LEMONADE_FLUID_BUCKET); // Orange final - public static final DeferredHolder ORANGE_LEMONADE_FLUID = FLUID_TYPES.register("orange_lemonade_fluid", () -> new BaseFluidType("orange_lemonade_liquid_still","orange_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Orange Lemonade"))); + public static final DeferredHolder ORANGE_LEMONADE_FLUID = FLUID_TYPES.register("orange_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFFD1B3, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Orange Lemonade"))); public static final DeferredHolder ORANGE_LEMONADE_FLUID_SOURCE = FLUIDS.register("orange_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.ORANGE_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder ORANGE_LEMONADE_FLUID_FLOWING = FLUIDS.register("orange_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.ORANGE_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder ORANGE_LEMONADE_FLUID_BUCKET = BUCKETS.register("orange_lemonade_bucket", () -> new BucketItem(ORANGE_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -51,7 +55,7 @@ public class ModFluids { .block(ORANGE_LEMONADE_FLUID_BLOCK) .bucket(ORANGE_LEMONADE_FLUID_BUCKET); // Raspberry final - public static final DeferredHolder RASPBERRY_LEMONADE_FLUID = FLUID_TYPES.register("raspberry_lemonade_fluid", () -> new BaseFluidType("raspberry_lemonade_liquid_still","raspberry_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Raspberry Lemonade"))); + public static final DeferredHolder RASPBERRY_LEMONADE_FLUID = FLUID_TYPES.register("raspberry_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFE30B5D, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Raspberry Lemonade"))); public static final DeferredHolder RASPBERRY_LEMONADE_FLUID_SOURCE = FLUIDS.register("raspberry_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.RASPBERRY_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder RASPBERRY_LEMONADE_FLUID_FLOWING = FLUIDS.register("raspberry_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.RASPBERRY_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder RASPBERRY_LEMONADE_FLUID_BUCKET = BUCKETS.register("raspberry_lemonade_bucket", () -> new BucketItem(RASPBERRY_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -62,7 +66,7 @@ public class ModFluids { .block(RASPBERRY_LEMONADE_FLUID_BLOCK) .bucket(RASPBERRY_LEMONADE_FLUID_BUCKET); // Summermix final - public static final DeferredHolder SUMMERMIX_LEMONADE_FLUID = FLUID_TYPES.register("summermix_lemonade_fluid", () -> new BaseFluidType("summermix_lemonade_liquid_still","summermix_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Summer-Mix Lemonade"))); + public static final DeferredHolder SUMMERMIX_LEMONADE_FLUID = FLUID_TYPES.register("summermix_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFF9ACD32, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Summer-Mix Lemonade"))); public static final DeferredHolder SUMMERMIX_LEMONADE_FLUID_SOURCE = FLUIDS.register("summermix_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.SUMMERMIX_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder SUMMERMIX_LEMONADE_FLUID_FLOWING = FLUIDS.register("summermix_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.SUMMERMIX_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder SUMMERMIX_LEMONADE_FLUID_BUCKET = BUCKETS.register("summermix_lemonade_bucket", () -> new BucketItem(SUMMERMIX_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -73,7 +77,7 @@ public class ModFluids { .block(SUMMERMIX_LEMONADE_FLUID_BLOCK) .bucket(SUMMERMIX_LEMONADE_FLUID_BUCKET); // Watermelon final - public static final DeferredHolder WATERMELON_LEMONADE_FLUID = FLUID_TYPES.register("watermelon_lemonade_fluid", () -> new BaseFluidType("watermelon_lemonade_liquid_still","watermelon_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Watermelon Lemonade"))); + public static final DeferredHolder WATERMELON_LEMONADE_FLUID = FLUID_TYPES.register("watermelon_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFC6C85, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Watermelon Lemonade"))); public static final DeferredHolder WATERMELON_LEMONADE_FLUID_SOURCE = FLUIDS.register("watermelon_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.WATERMELON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder WATERMELON_LEMONADE_FLUID_FLOWING = FLUIDS.register("watermelon_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.WATERMELON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder WATERMELON_LEMONADE_FLUID_BUCKET = BUCKETS.register("watermelon_lemonade_bucket", () -> new BucketItem(WATERMELON_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -86,7 +90,7 @@ public class ModFluids { // Mixed Fluids // Citron mixed - public static final DeferredHolder MIXED_CITRON_LEMONADE_FLUID = FLUID_TYPES.register("mixed_citron_lemonade_fluid", () -> new BaseFluidType("mixed_citron_lemonade_liquid_still","mixed_citron_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Undistilled Citron Lemonade"))); + public static final DeferredHolder MIXED_CITRON_LEMONADE_FLUID = FLUID_TYPES.register("mixed_citron_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFFFF99, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Undistilled Citron Lemonade"))); public static final DeferredHolder MIXED_CITRON_LEMONADE_FLUID_SOURCE = FLUIDS.register("mixed_citron_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.MIXED_CITRON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_CITRON_LEMONADE_FLUID_FLOWING = FLUIDS.register("mixed_citron_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.MIXED_CITRON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_CITRON_LEMONADE_FLUID_BUCKET = BUCKETS.register("mixed_citron_lemonade_bucket", () -> new BucketItem(MIXED_CITRON_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -97,7 +101,7 @@ public class ModFluids { .block(MIXED_CITRON_LEMONADE_FLUID_BLOCK) .bucket(MIXED_CITRON_LEMONADE_FLUID_BUCKET); // Orange mixed - public static final DeferredHolder MIXED_ORANGE_LEMONADE_FLUID = FLUID_TYPES.register("mixed_orange_lemonade_fluid", () -> new BaseFluidType("mixed_orange_lemonade_liquid_still","mixed_orange_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Undistilled Orange Lemonade"))); + public static final DeferredHolder MIXED_ORANGE_LEMONADE_FLUID = FLUID_TYPES.register("mixed_orange_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFFD1B3, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Undistilled Orange Lemonade"))); public static final DeferredHolder MIXED_ORANGE_LEMONADE_FLUID_SOURCE = FLUIDS.register("mixed_orange_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.MIXED_ORANGE_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_ORANGE_LEMONADE_FLUID_FLOWING = FLUIDS.register("mixed_orange_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.MIXED_ORANGE_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_ORANGE_LEMONADE_FLUID_BUCKET = BUCKETS.register("mixed_orange_lemonade_bucket", () -> new BucketItem(MIXED_ORANGE_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -108,7 +112,7 @@ public class ModFluids { .block(MIXED_ORANGE_LEMONADE_FLUID_BLOCK) .bucket(MIXED_ORANGE_LEMONADE_FLUID_BUCKET); // Raspberry mixed - public static final DeferredHolder MIXED_RASPBERRY_LEMONADE_FLUID = FLUID_TYPES.register("mixed_raspberry_lemonade_fluid", () -> new BaseFluidType("mixed_raspberry_lemonade_liquid_still","mixed_raspberry_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Undistilled Raspberry Lemonade"))); + public static final DeferredHolder MIXED_RASPBERRY_LEMONADE_FLUID = FLUID_TYPES.register("mixed_raspberry_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFE30B5D, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Undistilled Raspberry Lemonade"))); public static final DeferredHolder MIXED_RASPBERRY_LEMONADE_FLUID_SOURCE = FLUIDS.register("mixed_raspberry_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.MIXED_RASPBERRY_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_RASPBERRY_LEMONADE_FLUID_FLOWING = FLUIDS.register("mixed_raspberry_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.MIXED_RASPBERRY_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_RASPBERRY_LEMONADE_FLUID_BUCKET = BUCKETS.register("mixed_raspberry_lemonade_bucket", () -> new BucketItem(MIXED_RASPBERRY_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -119,7 +123,7 @@ public class ModFluids { .block(MIXED_RASPBERRY_LEMONADE_FLUID_BLOCK) .bucket(MIXED_RASPBERRY_LEMONADE_FLUID_BUCKET); // Summermix mixed - public static final DeferredHolder MIXED_SUMMERMIX_LEMONADE_FLUID = FLUID_TYPES.register("mixed_summermix_lemonade_fluid", () -> new BaseFluidType("mixed_summermix_lemonade_liquid_still","mixed_summermix_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Undistilled Summer-Mix Lemonade"))); + public static final DeferredHolder MIXED_SUMMERMIX_LEMONADE_FLUID = FLUID_TYPES.register("mixed_summermix_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFF9ACD32, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Undistilled Summer-Mix Lemonade"))); public static final DeferredHolder MIXED_SUMMERMIX_LEMONADE_FLUID_SOURCE = FLUIDS.register("mixed_summermix_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.MIXED_SUMMERMIX_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_SUMMERMIX_LEMONADE_FLUID_FLOWING = FLUIDS.register("mixed_summermix_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.MIXED_SUMMERMIX_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_SUMMERMIX_LEMONADE_FLUID_BUCKET = BUCKETS.register("mixed_summermix_lemonade_bucket", () -> new BucketItem(MIXED_SUMMERMIX_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); @@ -130,7 +134,7 @@ public class ModFluids { .block(MIXED_SUMMERMIX_LEMONADE_FLUID_BLOCK) .bucket(MIXED_SUMMERMIX_LEMONADE_FLUID_BUCKET); // Watermelon mixed - public static final DeferredHolder MIXED_WATERMELON_LEMONADE_FLUID = FLUID_TYPES.register("mixed_watermelon_lemonade_fluid", () -> new BaseFluidType("mixed_watermelon_lemonade_liquid_still","mixed_watermelon_lemonade_liquid_flowing", FluidType.Properties.create().descriptionId("Undistilled Watermelon Lemonade"))); + public static final DeferredHolder MIXED_WATERMELON_LEMONADE_FLUID = FLUID_TYPES.register("mixed_watermelon_lemonade_fluid", () -> new BaseFluidType(WATER_STILL_RL, WATER_FLOWING_RL, WATER_OVERLAY_RL,0xFFFC6C85, new Vector3f(108f / 255f, 168f / 255f, 212f / 255f), FluidType.Properties.create().descriptionId("Undistilled Watermelon Lemonade"))); public static final DeferredHolder MIXED_WATERMELON_LEMONADE_FLUID_SOURCE = FLUIDS.register("mixed_watermelon_lemonade_liquid_source", () -> new BaseFlowingFluid.Source(ModFluids.MIXED_WATERMELON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_WATERMELON_LEMONADE_FLUID_FLOWING = FLUIDS.register("mixed_watermelon_lemonade_liquid_flowing", () -> new BaseFlowingFluid.Flowing(ModFluids.MIXED_WATERMELON_LEMONADE_FLUID_PROPERTIES)); public static final DeferredHolder MIXED_WATERMELON_LEMONADE_FLUID_BUCKET = BUCKETS.register("mixed_watermelon_lemonade_bucket", () -> new BucketItem(MIXED_WATERMELON_LEMONADE_FLUID_SOURCE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1)));