promotional bannermobile promotional banner
premium banner
Finite water and lava with realistic movement

Description

Coming from the death, these realistic water mods are finally arriving to Minecraft 1.12!

 

This mod adds a Realistic Finite behavior to both Vanilla Liquids and Forge Liquids (the ones registered by every mod)

 

Demostration video: (from beta versions)

 

Fluidlogged API compat

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### NOTES

+This mod adds ForgeBuckets compat by default, so you can use Buckets to move fluids without loosing small fluid quantities. Otherwise, you can use one of the specific compat made for some mods. i'm open to sugerences.

+I'm thinking on a system to implement generic behaviors to fluids that have certain name, for both new generated and already existing Fluid Blocks (BlockFluidClassic) of each Fluid.

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### TODO

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### Mod-specific compat patches:

  • IC2 (special logic to collect/place finite fluids with IC2's Fluid Cells)
  • Traveler's Backpack (special logic to collect/place finite fluids with its Hose)

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### CONFIG FILE

//Tickrates
waterTickRate --> Water tick rate.
lavaTickRate --> Lava tick rate.

 

//Fluid Logic
lakelimit --> The amount of fluid blocks that will turn into Still/Flowing blocks when you interact with them.

maxCalc --> Max number of finite fluid calculations every tick. A cap to (try) avoid holding the server.

playerMaxDistanceToCalc --> Maximum distance between a flowing liquid and a player to decide whether postpone or update now the block at the current tick when currentCalc is starting to get closer to maxCalc.

 

//Rain Logic
enableRain --> Enable finite water rain.

rainAmount --> A proportional modifier to the probability of a water drop to fall per tick when raining. values bigger than 24 won't increase the rain amount. It can't be zero, but 0.1 is valid.

 

//Pressure Logic
doPressure --> Whether to activate the pressure system.

 

//Evaporation Logic
enableEvaporation --> If water should evaporate. Only applies to water with the minimum level of fluid.

evaporationChance --> Probability of water evaporation per tick.

 

//Misc Logic
waterCanFreeze --> whether water can become ice.

bucketRemoveLowFluid --> Whether buckets should remove finite fluids on the world when there's not enough fluid to make a full bucket.

waterLightOpacity --> The amount of light the water will remove when it passes through it.

flowingWaterShouldMoveCreativePlayer --> Whether flowing liquids should move players on creative mode.

shouldTickRandomly --> Whether fluids should have random ticks.

shouldFluidsBeInfinite --> Whether big fluid masses (lakes, oceans) should act as infinite fluid sources.

createBlocksForBlocklessFluids --> Create finite fluid Blocks for Fluids that have no default Block assigned.

 

//Debug
debug --> Allow debug content. Only for testing purposes.

 

 

 

 

 

 

 

 

OLD PAGE

Coming from the death, these realistic water mods are finally arriving to Minecraft 1.12!


This mod adds Finite Water and Finite Lava, both fluids are different from the base water and lava, so you can still use the vanilla version!

 

 

Inside the config you can find things like --> Water and Lava Tick Rates, rain and evaporation features, a method to (try to) patch breaches between ocean and submarine caves/ravines, etc.

 

Basic mod compatibility

 

Universal Mod Compatibility (v1.6.0)

FALSE BY DEFAULT --> YOU NEED TO SET IT TO TRUE IF YOU WANT THE UNIVERSAL COMPAT. PRONE TO CRASHES/ERRORS.

 

Pressure System (v1.5.0)


### TODO

+More mod compat is planned, currently, the biggest issue are the mods that use direct vanilla water and lava references rather than the ForgeFluid system.

-Update 1 --> Most of them are covered with some mixin power, but let me know about any unexpected behavior

-Update 2 --> I added a config option to let you use an experimental way to add compat. Prone to crashes and errors. but it works. More info below.

+Currently, not all water in worldgen is replaced, it is planned to do so. (those lonely water/lava blocks on walls)

+Adding this system to any ForgeFluid would require an entire different aproach, so right now only water and lava are supported. Maybe in a future i will add this feature but only if i get time.

+I'm thinking on a way to add this system to every FluidRegistry fluid in game, it might lack some of the properties of the original fluids, but it could work without rewriting all the codebase

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### NOTES

+There's a config option to convert already existing worlds (with vanilla water and lava) into RealisticFiniteFluids Water and Lava.

 

+I also need to say that the mod is HIGHLY UNTESTED, so please, feel free to open an issue on any incompatibility/crash you get when trying this beast with your favorite mods (please, do a binary search to find the guilty mods)

+Right now, the mod is incompatible with FluidLogged API (i think both mods are intrinsically incompatible, even if we avoid the crash by adding some checks, nor RealisticFiniteFluids nor FluidLogged will work together)

+Also, i started school again (Autum 2025) and i might not be able to make constant updates, please, be patient

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Mod-specific compat patches:

  • Climatic Biomes (use finite water instead of vanilla)
  • IC2 (special logic to collect/place finite fluids with IC2's Fluid Cells)
  • Traveler's Backpack (special logic to collect/place finite fluids with its Hose)
  • (Soon) Realistic Terrain Generation Community (use finite water instead of vanilla)

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### CONFIG FILE

//Tickrates
waterTickRate --> Water tick rate.
lavaTickRate --> Lava tick rate.

 

 

//Fluid Logic
lakelimit --> The amount of fluid blocks that will turn into Still/Flowing blocks when you interact with them.

maxCalc --> Max number of finite fluid calculations every tick. A cap to (try) avoid holding the server.

playerMaxDistanceToCalc --> Maximum distance between a flowing liquid and a player to decide whether postpone or update now the block at the current tick when currentCalc is starting to get closer to maxCalc.

 

//Rain Logic
enableRain --> Enable finite water rain.

rainAmount --> if scalableRainMethod is FALSE: The probability of a water drop to fall per tick when raining.

rainArea --> if scalableRainMethod is FALSE: The diameter in blocks of the area where water drops should fall.

 

scalableRainMethod --> Whether to use the 'render distance-oriented method' or the 'player-oriented method' to place rain water.

rainNewMethodAmount --> if scalableRainMethod is TRUE: a proportional modifier to the probability of a water drop to fall per tick when raining. values bigger than 24 won't increase the rain amount. It can't be zero, but 0.1 is valid.

 

//Pressure Logic
doPressure --> Whether to activate the pressure system.

 

//Evaporation Logic
enableEvaporation --> If water should evaporate. Only applies to water with the minimum level of fluid.

evaporationChance --> Probability of water evaporation per tick.

 

//Misc Logic
waterCanFreeze --> whether water can become ice.

oceanBarrierMode --> Ocean barrier method (to avoid leaving openings between underwater mines and the ocean).

bucketRemoveLowFluid --> Whether buckets should remove finite fluids on the world when there's not enough fluid to make a full bucket.

waterLightOpacity --> The amount of light the water will remove when it passes through it.

replaceVanillaFluids --> Whether to replace vanilla fluids from already existing worlds or not. This option auto-sets to false when manually set to true (affects game 1 time before resetting itself to false).

universalCompat --> Enables the Universal Compat Coremod

exclusionsPrefixes  --> Path prefixes to exclud from the coremod. To exclude a class, add the full path to that class. To exclude an entire package, just add that path.

flowingWaterShouldMoveCreativePlayer --> Whether flowing liquids should move players on creative mode.

shouldTickRandomly --> Whether fluids should have random ticks.

shouldFluidsBeInfinite --> Whether big fluid masses (lakes, oceans) should act as infinite fluid sources.

 

//Debug
debug --> Allow debug content. Only for testing purposes.

debugUniversalCompatLog --> Enables the needed debug logs to find guilt patches made by universalCompat config option

 

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

### HOW TO DEBUG/ADD EXCEPTIONS TO THE UNIVERSAL COMPAT CONFIG

If you are getting crashes when the game is loading and you enabled the universalCompat config option, do the following:
1.- Disable the universalCompat config option

--- If that fixes the issue:

2.- Enable both universalCompat and debugUniversalCompatLog

3.- Once the game crashes, Check the crashlog lines on latest.log, and see what modified class by my Universal Compat Coremod was the crashing one

4.- Add the name of the class (ej: "net.minecraft.init.Blocks") to the exception list inside the config file

5.- Re-run the game and see if it crashes again.

 

6.- If you want to disable all the compat for an entire mod, add its initial package lines (ej: "ic2.core")

 

If you find that Realistic Finite Fluids' fluid blocks are missing/being registered by other mod (Witchery, BuildCraft, IC2, etc, etc)

1.- Load the game and see the ModID from the finite fluids (to find the guilty mod)

1.1.- Once you find it, do the following steps with that mod alone. It may require you do repeat this process if another mods registers my finite blocks as theirs.

2.- Enable both universalCompat and debugUniversalCompatLog inside config.

3.- Check for: "modificada: CLASS_PATH" (replace CLASS_PATH for the initial path of the guily mod, you can see that inside the .jar of the guilty mod or the github of the mod)

4.- Check for the methods of the modified classes, try to find "items", "blocks", "init", etc. And add the paths to these classes to the exception list.

4.1.- If you don't find any methods or classes with these suggestive names, try every class from that mod THAT IS BEING MODIFIED, let alone the ones untouched.

5.- Repeat until you the finite fluids are registered to RealisticFiniteFluids ModID.

 

 

 

 

Hope you enjoy this little project!