From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <blake.galbreath@gmail.com>
Date: Sun, 22 Nov 2020 20:13:27 -0600
Subject: [PATCH] Kelp weeping and twisting vines configurable max growth age


diff --git a/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java b/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java
index 546c7877647bac41753a600bd25c630a0510be56..3d6a1131a138114424b683a81d04478e92d05544 100644
--- a/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java
+++ b/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java
@@ -30,7 +30,7 @@ public abstract class BlockGrowingTop extends BlockGrowingAbstract implements IB
 
     @Override
     public IBlockData a(GeneratorAccess generatoraccess) {
-        return (IBlockData) this.getBlockData().set(BlockGrowingTop.d, generatoraccess.getRandom().nextInt(25));
+        return (IBlockData) this.getBlockData().set(BlockGrowingTop.d, generatoraccess.getRandom().nextInt(getMaxGrowthAge(generatoraccess.getMinecraftWorld()))); // Purpur
     }
 
     @Override
@@ -40,9 +40,11 @@ public abstract class BlockGrowingTop extends BlockGrowingAbstract implements IB
 
     public abstract double getGrowthModifier(WorldServer worldserver); // Purpur
 
+    public abstract int getMaxGrowthAge(WorldServer worldserver); // Purpur
+
     @Override
     public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) {
-        if ((Integer) iblockdata.get(BlockGrowingTop.d) < 25 && random.nextDouble() < (100.0D / getGrowthModifier(worldserver)) * this.e) { // Spigot // Purpur
+        if ((Integer) iblockdata.get(BlockGrowingTop.d) < getMaxGrowthAge(worldserver) && random.nextDouble() < (100.0D / getGrowthModifier(worldserver)) * this.e) { // Spigot // Purpur
             BlockPosition blockposition1 = blockposition.shift(this.a);
 
             if (this.h(worldserver.getType(blockposition1))) {
@@ -87,13 +89,13 @@ public abstract class BlockGrowingTop extends BlockGrowingAbstract implements IB
     @Override
     public void a(WorldServer worldserver, Random random, BlockPosition blockposition, IBlockData iblockdata) {
         BlockPosition blockposition1 = blockposition.shift(this.a);
-        int i = Math.min((Integer) iblockdata.get(BlockGrowingTop.d) + 1, 25);
+        int i = Math.min((Integer) iblockdata.get(BlockGrowingTop.d) + 1, getMaxGrowthAge(worldserver)); // Purpur
         int j = this.a(random);
 
         for (int k = 0; k < j && this.h(worldserver.getType(blockposition1)); ++k) {
             worldserver.setTypeUpdate(blockposition1, (IBlockData) iblockdata.set(BlockGrowingTop.d, i));
             blockposition1 = blockposition1.shift(this.a);
-            i = Math.min(i + 1, 25);
+            i = Math.min(i + 1, getMaxGrowthAge(worldserver)); // Purpur
         }
 
     }
diff --git a/src/main/java/net/minecraft/world/level/block/BlockKelp.java b/src/main/java/net/minecraft/world/level/block/BlockKelp.java
index 27f1cbe8786d7c37d62193a21baf0a2bdc6f0294..90ad39d40e4f979126d80c70df292e01e07ed793 100644
--- a/src/main/java/net/minecraft/world/level/block/BlockKelp.java
+++ b/src/main/java/net/minecraft/world/level/block/BlockKelp.java
@@ -72,5 +72,9 @@ public class BlockKelp extends BlockGrowingTop implements IFluidContainer {
     public double getGrowthModifier(WorldServer worldserver) {
         return worldserver.spigotConfig.kelpModifier;
     }
+
+    public int getMaxGrowthAge(WorldServer worldserver) {
+        return worldserver.purpurConfig.kelpMaxGrowthAge;
+    }
     // Purpur end
 }
diff --git a/src/main/java/net/minecraft/world/level/block/BlockTwistingVines.java b/src/main/java/net/minecraft/world/level/block/BlockTwistingVines.java
index 3a8d08a1ee8f066cea36e6acff492e5af62993c5..d95151d50d2652e5f1b215267c898402f0b28829 100644
--- a/src/main/java/net/minecraft/world/level/block/BlockTwistingVines.java
+++ b/src/main/java/net/minecraft/world/level/block/BlockTwistingVines.java
@@ -34,5 +34,9 @@ public class BlockTwistingVines extends BlockGrowingTop {
     public double getGrowthModifier(WorldServer worldserver) {
         return worldserver.purpurConfig.twistingVinesGrowthModifier;
     }
+
+    public int getMaxGrowthAge(WorldServer worldserver) {
+        return worldserver.purpurConfig.twistingVinesMaxGrowthAge;
+    }
     // Purpur end
 }
diff --git a/src/main/java/net/minecraft/world/level/block/BlockWeepingVines.java b/src/main/java/net/minecraft/world/level/block/BlockWeepingVines.java
index 198bd8857571872ed3f7437529c330dceeb825db..a71f97e87ee7210f3246e542dd768403905f7679 100644
--- a/src/main/java/net/minecraft/world/level/block/BlockWeepingVines.java
+++ b/src/main/java/net/minecraft/world/level/block/BlockWeepingVines.java
@@ -34,5 +34,9 @@ public class BlockWeepingVines extends BlockGrowingTop {
     public double getGrowthModifier(WorldServer worldserver) {
         return worldserver.purpurConfig.weepingVinesGrowthModifier;
     }
+
+    public int getMaxGrowthAge(WorldServer worldserver) {
+        return worldserver.purpurConfig.weepingVinesMaxGrowthAge;
+    }
     // Purpur end
 }
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 6894d0aa124b45bf6eb79d417026b85fc342f25a..e11b7abcebefc384b7d15fbae17c6d8e723e2cc5 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -378,6 +378,11 @@ public class PurpurWorldConfig {
         furnaceInfiniteFuel = getBoolean("blocks.furnace.infinite-fuel", furnaceInfiniteFuel);
     }
 
+    public int kelpMaxGrowthAge = 25;
+    private void kelpSettings() {
+        kelpMaxGrowthAge = getInt("blocks.kelp.max-growth-age", kelpMaxGrowthAge);
+    }
+
     public boolean lavaInfinite = false;
     public int lavaInfiniteRequiredSources = 2;
     public int lavaSpeedNether = 10;
@@ -432,13 +437,17 @@ public class PurpurWorldConfig {
     }
 
     public double twistingVinesGrowthModifier = 0.10D;
+    public int twistingVinesMaxGrowthAge = 25;
     private void twistingVinesSettings() {
         twistingVinesGrowthModifier = getDouble("blocks.twisting_vines.growth-modifier", twistingVinesGrowthModifier);
+        twistingVinesMaxGrowthAge = getInt("blocks.twisting_vines.max-growth-age", twistingVinesMaxGrowthAge);
     }
 
     public double weepingVinesGrowthModifier = 0.10D;
+    public int weepingVinesMaxGrowthAge = 25;
     private void weepingVinesSettings() {
         weepingVinesGrowthModifier = getDouble("blocks.weeping_vines.growth-modifier", weepingVinesGrowthModifier);
+        weepingVinesMaxGrowthAge = getInt("blocks.weeping_vines.max-growth-age", weepingVinesMaxGrowthAge);
     }
 
     public boolean babiesAreRidable = true;
