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)));