promotional bannermobile promotional banner

Realistic Finite Fluids

Finite water and lava with realistic movement

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.

 

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

### FEATURES

  • Realistic Finite Fluids: Fluids will move according to their gravity direction and disperse/equalize over the ground.
    • Gasses: For Fluids that have Material.AIR. Quite simple implementation of gasses that move randomly and disperse over the open space (that eventually dissapear). I'm open to suggestions to enhance thei behavior.
    • Ocean Behavior: For any RFF that should be infinite (water or lava oceans), they will have a special infinite behavior to never dry out (can be disabled in config).
  • Evaporation and Freezing: Water with the minimum level will evaporate over time, and in cold biomes will freeze (in snow layers and ice blocks when full).
  • Raining: Water with the minimum level will appear when raining.

 

  • Submarine Hole Patching: 3 types.of patching of ocean holes: Simple (the less disruptive), Optimized (the best ATM), Unoptimized (Brute force, slows chunk generation).

 

  • ForgeFluids Compat: This works for water/lava and fluids added by other mods.
  • Miscellaneous features: Added compat for Glass Bottles, Bubble Columns, etc.

 

 

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

### TODO

  • āœ… Add Fluidlogged API Compat
  • ☐ Integrate a Heat System to handle the evaporation/freezing of water (Current options: Heat&Climate. I'm open to suggestions)

 

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

### Mod-specific compat patches:

  • IC2: special logic to collect/place finite fluids with IC2's Fluid Cells.
  • Traveler's Backpacks 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.

 

//Fluid Behavior

waterCanFreeze --> Whether water can become ice.

shouldTickRandomly --> Whether fluids should have random ticks.

shouldFluidsBeInfinite --> Whether big fluid masses (lakes, oceans) should act as infinite fluid sources or not. It also works as a security switch to deactivate Ocean Blocks (if you find a finite fluid mass eating your world you better use /rffkillswitch).

shouldFluidsMoveSidewayDownwards --> Whether fluids could go down in the 4 cardinal positions in 1 movement or not (it makes them appear to leak below cardinal edges).

fluidsBreakFragileBlocks --> If Fluids should break fragile blocks or not.

fragileBlocks --> List of fragile blocks.

 

//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.

pressureLimit --> The maximum tries we will check for blocks to apply pressure.

 

//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
bucketRemoveLowFluid --> Whether buckets should remove finite fluids on the world when there's not enough fluid to make a full bucket.

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

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

infiniteModdedFluids --> List of modded fluids' names that should spawn as infinite fluids. You can find the list of fluids inside your world inside: /.minecraft/saves/YOUR_WORLD_NAME/data

 

//Bubble Columns Logic

enableBubbleColumns --> Whether to enable Bubble Columns or not. (These that appear in water when you place Soul Sand or Magma Blocks on the ocean floor).

maxBubbleColumnSize --> The maximum height a Bubble Column can have. (the maximum distance between the top water block with a Bubble Column and the Soul Sand/Magma Block). This is the maximum distance the scan for the block will be done.

 

//Render

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

maxOrNormalFluidHeight --> If fluids should have the full block height or not. Only has aesthetic effect.

dynamicOrStaticTexture -->  If fluids should use both dynamic and static fluid texture or just static one. Only has aesthetic effect.

 

//Barrier

oceanBarrierMode --> Ocean barrier method (to avoid leaving openings between underwater mines and the ocean): none, simple, optimized, unoptimized. Default: Optimized (the best).

 

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

logDebug --> Allow logDebug prints for special info about registerings.

 

 

 

 

 

 

 

 

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! 

 

Realistic Finite Fluids Team

profile avatar
  • 13
    Followers
  • 3
    Projects
  • 23.0K
    Downloads

More from gato_borrachon