Requires the library mod Collective. 

   This mod is part of The Vanilla Experience.

Nether portals spread (nether) blocks to the overworld around the portal in a configurable radius. By default you can stop the spread by placing four coal blocks within the portal's radius. This can however be changed in the config. Players around the portal will receive a message when the spread effect begins and when it is prevented.

The mod saves all portal locations to '../world-folder/data/netherportalspread/portals/'. A new portal is detected when it's created or when a player goes from the nether to the overworld. So for old worlds you'll have to go through it and back once to start the spread effect, or re-fire the portal. This makes it a lot more efficient than checking every block in the world for a portal.

Version 4.4 and above is compatible with the Immersive Portals mod.

Configurable: ( how do I configure? )
sendMessageOnPortalCreation (default = true): When enabled, sends a message to players around the portal that the nether is spreading and that you can stop the spread with 'preventSpreadBlockAmountNeeded' of the 'preventSpreadBlockString' block.
messageOnPortalCreation (default = "You feel a corrupt energy coming from the portal. The nether will slowly spread into the overworld unless %preventSpreadBlockAmountNeeded% %preventSpreadBlockString% are placed within a %portalSpreadRadius% block radius around the portal."): The message sent on portal creation.
sendMessageOnPreventSpreadBlocksFound (default = true): When enabled, sends a message to players around the portal that the nether spread has stopped when the portal detects new 'preventSpreadBlockString' blocks.
messageOnPreventSpreadBlocksFound (default = "With enough %preventSpreadBlockString% placed, you feel the corrupted energy fade."): The message sent on preventspread blocks found.
sendMessageOnPortalBroken (default = true): When enabled, sends a message to players when a portal is broken.
messageOnPortalBroken (default = "With the nether portal broken, the corrupted energy is no longer able to enter the overworld."): The message sent when a portal is broken.
prefixPortalCoordsInMessage (default = true): When enabled, shows the portal coordinates in portal messages.

portalSpreadRadius (default = 15, min 1, max 100): The radius around the portal to which the nether blocks can spread.
(default = 40, min 1, max 72000): The delay in ticks in between the spread around the nether portal. 20 ticks = 1 second.
(default = 50, min 0, max 1000): The amount of blocks that are instantly converted to a nether block around a portal when it is detected. If there are existing nether blocks within the radius, their count is subtracted from this number.

preventSpreadWithBlock (default = true): When enabled, blocks the spread effect when there are n (defined) prevent-spread-blocks (defined) within the radius.
preventSpreadBlockAmountNeeded (default = 4): The amount of prevent-spread-blocks (defined) needed within the radius of the nether portal to prevent spread.
preventSpreadBlockString (default = "minecraft:coal_block"): The block which prevents the nether portal from spreading. By default a coal block (minecraft:coal_block is the namespace ID).

By default, the mod will send a message to players around the portal when:
A portal is created, and the spread starts:

Portal spread is stopped with the preventspread blocks (defined in config):

The message when a portal is broken:

Configurable spread blocks
You can define which blocks should spread to what and the chance of it happening in the "spreadsettings.txt" file located in "./config/netherportalspread/". By default it contains the following:

stone; [netherrack>10 + magma_block>2 + nether_quartz_ore>1],
grass_block; [netherrack>1],
dirt; [netherrack>1],
sand; [soul_sand>1],
gravel; [soul_sand>1],
stone_bricks; [nether_bricks>2 + red_nether_bricks>1],
sea_lantern; [glowstone>1],
farmland; [soul_sand>1],
wheat; [nether_wart>1]

The mod automatically adds "minecraft:" in front of the name values if it contains no ":" (colon).
The weight is automatically converted to chance values. This is calculated by: (1/total_weight)*weight.
So the default config file means:

Convert stone into 76.92% netherrack. 15.38% magma blocks and 7.7% quartz ore.
Convert grass blocks into 100% netherrack.
Convert dirt into 100% netherrack.
Convert sand into 100% soul sand.
Convert gravel into 100% soul sand.
Convert stone bricks into 66.67% nether bricks and 33.3% red nether bricks.
Convert sea lanterns into 100% glowstone.
Convert farmland into 100% soul sand.
Convert wheat into 100% netherwart.


Minecraft 1.16 and up has a different default config, using the new blocks:

stone; [netherrack>10 + magma_block>2 + nether_quartz_ore>1],
grass; [nether_sprouts>1],
cobblestone; [blackstone>1],
grass_block; [crimson_nylium>1],
dirt; [netherrack>1],
coarse_dirt; [soul_soil>1],
sand; [soul_sand>1 + soul_soil>1],
red_sand; [soul_soil>1 + soul_sand>1],
sandstone; [blackstone>1],
cut_sandstone; [polished_blackstone>1],
chiseled_sandstone; [chiseled_polished_blackstone>1],
smooth_sandstone; [basalt>1],
smooth_red_sandstone; [basalt>1],
gravel; [soul_soil>1],
stone_bricks; [nether_bricks>2 + red_nether_bricks>1],
sea_lantern; [glowstone>1],
farmland; [soul_sand>1],
wheat; [nether_wart>1],
gold_ore; [nether_gold_ore>1],
fern; [nether_sprouts>1],
oak_leaves; [nether_wart_block>1],
spruce_leaves; [nether_wart_block>1],
birch_leaves; [warped_wart_block>1],
jungle_leaves; [warped_wart_block>1],
acacia_leaves; [nether_wart_block>1],
dark_oak_leaves; [warped_wart_block>1],
oak_log; [crimson_stem>1],
spruce_log; [crimson_stem>1],
birch_log; [warped_stem>1],
jungle_log; [warped_stem>1],
acacia_log; [crimson_stem>1],
dark_oak_log; [warped_stem>1],

You can also spread blocks from other mods:
Example with Soulstone from Mystical Agriculture:

For modded blocks the format is [MODID:Blockname>weight]

The effect in action (with old spread settings):



You may freely use this mod in any modpack, as long as the download remains hosted within the CurseForge ecosystem.

Serilum.com contains an overview and more information on all mods available.

Comments are disabled as I'm unable to keep track of all the separate pages on each mod.
For issues, ideas, suggestions or anything else there is the Github repo. Thanks!