From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sat, 23 Nov 2019 17:55:42 -0600
Subject: [PATCH] Implement infinite lava


diff --git a/src/main/java/net/minecraft/server/FluidTypeFlowing.java b/src/main/java/net/minecraft/server/FluidTypeFlowing.java
index cf9d3faabe8732d27c436f4806c727592e475f81..46bdeca19a0da06a1fcbd7043a26689b64459d67 100644
--- a/src/main/java/net/minecraft/server/FluidTypeFlowing.java
+++ b/src/main/java/net/minecraft/server/FluidTypeFlowing.java
@@ -196,7 +196,7 @@ public abstract class FluidTypeFlowing extends FluidType {
             }
         }
 
-        if (this.f() && j >= 2) {
+        if (infinite(iworldreader) && j >= getRequiredSources(iworldreader)) { // Purpur
             IBlockData iblockdata2 = iworldreader.getType(blockposition.down());
             Fluid fluid1 = iblockdata2.getFluid();
 
@@ -267,6 +267,17 @@ public abstract class FluidTypeFlowing extends FluidType {
         return (Fluid) this.e().h().set(FluidTypeFlowing.FALLING, flag);
     }
 
+    // Purpur start
+    protected boolean infinite(IWorldReader iworldreader) {
+        return infinite();
+    }
+
+    protected int getRequiredSources(IWorldReader iworldreader) {
+        return 2;
+    }
+    // Purpur end
+
+    protected boolean infinite() { return f(); } // Purpur - OBFHELPER
     protected abstract boolean f();
 
     protected void a(GeneratorAccess generatoraccess, BlockPosition blockposition, IBlockData iblockdata, EnumDirection enumdirection, Fluid fluid) {
diff --git a/src/main/java/net/minecraft/server/FluidTypeLava.java b/src/main/java/net/minecraft/server/FluidTypeLava.java
index 29930e801cdcb97bec2fb113ec478fe9c4a63b63..ffab2391925f577420ee52f3aa05041afa61464e 100644
--- a/src/main/java/net/minecraft/server/FluidTypeLava.java
+++ b/src/main/java/net/minecraft/server/FluidTypeLava.java
@@ -147,6 +147,18 @@ public abstract class FluidTypeLava extends FluidTypeFlowing {
         generatoraccess.triggerEffect(1501, blockposition, 0);
     }
 
+    // Purpur start
+    @Override
+    protected boolean infinite(IWorldReader iworldreader) {
+        return iworldreader.getWorldBorder().world.purpurConfig.lavaInfinite;
+    }
+
+    @Override
+    protected int getRequiredSources(IWorldReader iworldreader) {
+        return iworldreader.getWorldBorder().world.purpurConfig.lavaInfiniteRequiredSources;
+    }
+    // Purpur end
+
     @Override
     protected boolean f() {
         return false;
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 0de099d29b5e351822e59af6e389dc91c67eb2b2..37bc3033b3b7281da4f8783d3fbe9a0a4d33a9de 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -158,6 +158,13 @@ public class PurpurWorldConfig {
         farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
     }
 
+    public boolean lavaInfinite = false;
+    public int lavaInfiniteRequiredSources = 2;
+    private void lavaSettings() {
+        lavaInfinite = getBoolean("blocks.lava.infinite-source", lavaInfinite);
+        lavaInfiniteRequiredSources = getInt("blocks.lava.infinite-required-sources", lavaInfiniteRequiredSources);
+    }
+
     public boolean signAllowColors = false;
     public boolean signRightClickEdit = false;
     private void signSettings() {
