diff --git a/patches/minecraft/net/minecraft/block/BlockDynamicLiquid.java.patch b/patches/minecraft/net/minecraft/block/BlockDynamicLiquid.java.patch new file mode 100644 index 000000000..b73df79bc --- /dev/null +++ b/patches/minecraft/net/minecraft/block/BlockDynamicLiquid.java.patch @@ -0,0 +1,11 @@ +--- ../src-base/minecraft/net/minecraft/block/BlockDynamicLiquid.java ++++ ../src-work/minecraft/net/minecraft/block/BlockDynamicLiquid.java +@@ -67,7 +67,7 @@ + } + } + +- if (this.field_149815_a >= 2 && this.field_149764_J == Material.field_151586_h) ++ if (this.field_149815_a >= 2 && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(p_180650_1_, p_180650_2_, p_180650_3_, this.field_149764_J == Material.field_151586_h)) + { + IBlockState iblockstate = p_180650_1_.func_180495_p(p_180650_2_.func_177977_b()); + diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index eead4dfdc..0459550db 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -98,6 +98,7 @@ import net.minecraftforge.event.entity.player.UseHoeEvent; import net.minecraftforge.event.terraingen.ChunkGeneratorEvent; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.BlockEvent.CreateFluidSourceEvent; import net.minecraftforge.event.world.BlockEvent.MultiPlaceEvent; import net.minecraftforge.event.world.BlockEvent.NeighborNotifyEvent; import net.minecraftforge.event.world.BlockEvent.PlaceEvent; @@ -585,4 +586,13 @@ public class ForgeEventFactory return event.getTable(); } + public static boolean canCreateFluidSource(World world, BlockPos pos, IBlockState state, boolean def) + { + CreateFluidSourceEvent evt = new CreateFluidSourceEvent(world, pos, state); + MinecraftForge.EVENT_BUS.post(evt); + + Result result = evt.getResult(); + return result == Result.DEFAULT ? def : result == Result.ALLOW; + } + } diff --git a/src/main/java/net/minecraftforge/event/world/BlockEvent.java b/src/main/java/net/minecraftforge/event/world/BlockEvent.java index b113ba04c..b5a33b92e 100644 --- a/src/main/java/net/minecraftforge/event/world/BlockEvent.java +++ b/src/main/java/net/minecraftforge/event/world/BlockEvent.java @@ -252,4 +252,20 @@ public class BlockEvent extends Event return notifiedSides; } } + + /** + * Fired to check whether a non-source block can turn into a source block. + * A result of ALLOW causes a source block to be created even if the liquid + * usually doesn't do that (like lava), and a result of DENY prevents creation + * even if the liquid usually does do that (like water). + */ + @HasResult + public static class CreateFluidSourceEvent extends BlockEvent + { + public CreateFluidSourceEvent(World world, BlockPos pos, IBlockState state) + { + super(world, pos, state); + } + } + }