From 0b23fa8f86bd0bbf5382688721946f22a1d7b9c9 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 7 Mar 2016 22:14:13 +1100 Subject: [PATCH] Crop Growth Rates Allows configuring the growth rates of crops as a percentage of their normal growth rate. diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java index ba8989414..bab55395b 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -387,6 +387,18 @@ public class Block extends BlockBase implements IMaterial { } // CraftBukkit end + // Spigot start + public static float range(float min, float value, float max) { + if (value < min) { + return min; + } + if (value > max) { + return max; + } + return value; + } + // Spigot end + public static final class a { private final IBlockData a; diff --git a/src/main/java/net/minecraft/world/level/block/BlockBamboo.java b/src/main/java/net/minecraft/world/level/block/BlockBamboo.java index 589473605..6d10a7cb4 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockBamboo.java +++ b/src/main/java/net/minecraft/world/level/block/BlockBamboo.java @@ -121,7 +121,7 @@ public class BlockBamboo extends Block implements IBlockFragilePlantElement { @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { if ((Integer) iblockdata.get(BlockBamboo.f) == 0) { - if (random.nextInt(3) == 0 && worldserver.isEmpty(blockposition.up()) && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { + if (random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.bambooModifier) * 3)) == 0 && worldserver.isEmpty(blockposition.up()) && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { // Spigot int i = this.b(worldserver, blockposition) + 1; if (i < 16) { diff --git a/src/main/java/net/minecraft/world/level/block/BlockCactus.java b/src/main/java/net/minecraft/world/level/block/BlockCactus.java index 60d6d98e9..c2316e346 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockCactus.java +++ b/src/main/java/net/minecraft/world/level/block/BlockCactus.java @@ -58,7 +58,7 @@ public class BlockCactus extends Block { if (i < 3) { int j = (Integer) iblockdata.get(BlockCactus.AGE); - if (j == 15) { + if (j >= (byte) range(3, ((100.0F / worldserver.spigotConfig.cactusModifier) * 15) + 0.5F, 15)) { // Spigot CraftEventFactory.handleBlockGrowEvent(worldserver, blockposition1, this.getBlockData()); // CraftBukkit IBlockData iblockdata1 = (IBlockData) iblockdata.set(BlockCactus.AGE, 0); diff --git a/src/main/java/net/minecraft/world/level/block/BlockCocoa.java b/src/main/java/net/minecraft/world/level/block/BlockCocoa.java index 6e3e89944..587013d2f 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockCocoa.java +++ b/src/main/java/net/minecraft/world/level/block/BlockCocoa.java @@ -43,7 +43,7 @@ public class BlockCocoa extends BlockFacingHorizontal implements IBlockFragilePl @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { - if (worldserver.random.nextInt(5) == 0) { + if (worldserver.random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.cocoaModifier) * 5)) == 0) { // Spigot int i = (Integer) iblockdata.get(BlockCocoa.AGE); if (i < 2) { diff --git a/src/main/java/net/minecraft/world/level/block/BlockCrops.java b/src/main/java/net/minecraft/world/level/block/BlockCrops.java index 2bf7153a9..09f15d908 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockCrops.java +++ b/src/main/java/net/minecraft/world/level/block/BlockCrops.java @@ -73,7 +73,20 @@ public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement if (i < this.d()) { float f = a((Block) this, (IBlockAccess) worldserver, blockposition); - if (random.nextInt((int) (25.0F / f) + 1) == 0) { + // Spigot start + int modifier; + if (this == Blocks.BEETROOTS) { + modifier = worldserver.spigotConfig.beetrootModifier; + } else if (this == Blocks.CARROTS) { + modifier = worldserver.spigotConfig.carrotModifier; + } else if (this == Blocks.POTATOES) { + modifier = worldserver.spigotConfig.potatoModifier; + } else { + modifier = worldserver.spigotConfig.wheatModifier; + } + + if (random.nextInt((int) ((100.0F / modifier) * (25.0F / f)) + 1) == 0) { + // Spigot end CraftEventFactory.handleBlockGrowEvent(worldserver, blockposition, this.setAge(i + 1), 2); // CraftBukkit } } 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 a67d13d30..84bd1fa9e 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java +++ b/src/main/java/net/minecraft/world/level/block/BlockGrowingTop.java @@ -40,7 +40,7 @@ public abstract class BlockGrowingTop extends BlockGrowingAbstract implements IB @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { - if ((Integer) iblockdata.get(BlockGrowingTop.d) < 25 && random.nextDouble() < this.e) { + if ((Integer) iblockdata.get(BlockGrowingTop.d) < 25 && random.nextDouble() < (100.0D / worldserver.spigotConfig.kelpModifier) * this.e) { // Spigot BlockPosition blockposition1 = blockposition.shift(this.a); if (this.h(worldserver.getType(blockposition1))) { diff --git a/src/main/java/net/minecraft/world/level/block/BlockMushroom.java b/src/main/java/net/minecraft/world/level/block/BlockMushroom.java index 326debea2..f9132dab8 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockMushroom.java +++ b/src/main/java/net/minecraft/world/level/block/BlockMushroom.java @@ -35,7 +35,7 @@ public class BlockMushroom extends BlockPlant implements IBlockFragilePlantEleme @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { - if (random.nextInt(25) == 0) { + if (random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.mushroomModifier) * 25)) == 0) { // Spigot int i = 5; boolean flag = true; Iterator iterator = BlockPosition.a(blockposition.b(-4, -1, -4), blockposition.b(4, 1, 4)).iterator(); diff --git a/src/main/java/net/minecraft/world/level/block/BlockNetherWart.java b/src/main/java/net/minecraft/world/level/block/BlockNetherWart.java index b80070a40..86e14d96f 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockNetherWart.java +++ b/src/main/java/net/minecraft/world/level/block/BlockNetherWart.java @@ -41,7 +41,7 @@ public class BlockNetherWart extends BlockPlant { public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { int i = (Integer) iblockdata.get(BlockNetherWart.AGE); - if (i < 3 && random.nextInt(10) == 0) { + if (i < 3 && random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.wartModifier) * 10)) == 0) { // Spigot iblockdata = (IBlockData) iblockdata.set(BlockNetherWart.AGE, i + 1); org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockGrowEvent(worldserver, blockposition, iblockdata, 2); // CraftBukkit } diff --git a/src/main/java/net/minecraft/world/level/block/BlockReed.java b/src/main/java/net/minecraft/world/level/block/BlockReed.java index efe3de17a..eb95d65e1 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockReed.java +++ b/src/main/java/net/minecraft/world/level/block/BlockReed.java @@ -54,7 +54,7 @@ public class BlockReed extends Block { if (i < 3) { int j = (Integer) iblockdata.get(BlockReed.AGE); - if (j == 15) { + if (j >= (byte) range(3, ((100.0F / worldserver.spigotConfig.caneModifier) * 15) + 0.5F, 15)) { // Spigot org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockGrowEvent(worldserver, blockposition.up(), this.getBlockData()); // CraftBukkit worldserver.setTypeAndData(blockposition, (IBlockData) iblockdata.set(BlockReed.AGE, 0), 4); } else { diff --git a/src/main/java/net/minecraft/world/level/block/BlockSapling.java b/src/main/java/net/minecraft/world/level/block/BlockSapling.java index 9d5b4c007..e8fb626d8 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockSapling.java +++ b/src/main/java/net/minecraft/world/level/block/BlockSapling.java @@ -42,7 +42,7 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { - if (worldserver.getLightLevel(blockposition.up()) >= 9 && random.nextInt(7) == 0) { + if (worldserver.getLightLevel(blockposition.up()) >= 9 && random.nextInt(Math.max(2, (int) (((100.0F / worldserver.spigotConfig.saplingModifier) * 7) + 0.5F))) == 0) { // Spigot // CraftBukkit start worldserver.captureTreeGeneration = true; // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/BlockStem.java b/src/main/java/net/minecraft/world/level/block/BlockStem.java index 2b7973a6d..1dc156d8b 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockStem.java +++ b/src/main/java/net/minecraft/world/level/block/BlockStem.java @@ -44,7 +44,7 @@ public class BlockStem extends BlockPlant implements IBlockFragilePlantElement { if (worldserver.getLightLevel(blockposition, 0) >= 9) { float f = BlockCrops.a((Block) this, (IBlockAccess) worldserver, blockposition); - if (random.nextInt((int) (25.0F / f) + 1) == 0) { + if (random.nextInt((int) ((100.0F / (this == Blocks.PUMPKIN_STEM ? worldserver.spigotConfig.pumpkinModifier : worldserver.spigotConfig.melonModifier)) * (25.0F / f)) + 1) == 0) { // Spigot int i = (Integer) iblockdata.get(BlockStem.AGE); if (i < 7) { diff --git a/src/main/java/net/minecraft/world/level/block/BlockSweetBerryBush.java b/src/main/java/net/minecraft/world/level/block/BlockSweetBerryBush.java index fd2a0d154..46459c384 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockSweetBerryBush.java +++ b/src/main/java/net/minecraft/world/level/block/BlockSweetBerryBush.java @@ -59,7 +59,7 @@ public class BlockSweetBerryBush extends BlockPlant implements IBlockFragilePlan public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { int i = (Integer) iblockdata.get(BlockSweetBerryBush.a); - if (i < 3 && random.nextInt(5) == 0 && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { + if (i < 3 && random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.sweetBerryModifier) * 5)) == 0 && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { // Spigot CraftEventFactory.handleBlockGrowEvent(worldserver, blockposition, (IBlockData) iblockdata.set(BlockSweetBerryBush.a, i + 1), 2); // CraftBukkit } diff --git a/src/main/java/net/minecraft/world/level/block/BlockVine.java b/src/main/java/net/minecraft/world/level/block/BlockVine.java index 7392eb1ef..b61b4afe0 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockVine.java +++ b/src/main/java/net/minecraft/world/level/block/BlockVine.java @@ -173,7 +173,7 @@ public class BlockVine extends Block { @Override public void tick(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, Random random) { - if (worldserver.random.nextInt(4) == 0) { + if (worldserver.random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.vineModifier) * 4)) == 0) { // Spigot EnumDirection enumdirection = EnumDirection.a(random); BlockPosition blockposition1 = blockposition.up(); BlockPosition blockposition2; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index 1cce14866..fb9c4fc78 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -79,4 +79,53 @@ public class SpigotWorldConfig config.addDefault( "world-settings.default." + path, def ); return config.get( "world-settings." + worldName + "." + path, config.get( "world-settings.default." + path ) ); } + + // Crop growth rates + public int cactusModifier; + public int caneModifier; + public int melonModifier; + public int mushroomModifier; + public int pumpkinModifier; + public int saplingModifier; + public int beetrootModifier; + public int carrotModifier; + public int potatoModifier; + public int wheatModifier; + public int wartModifier; + public int vineModifier; + public int cocoaModifier; + public int bambooModifier; + public int sweetBerryModifier; + public int kelpModifier; + private int getAndValidateGrowth(String crop) + { + int modifier = getInt( "growth." + crop.toLowerCase(java.util.Locale.ENGLISH) + "-modifier", 100 ); + if ( modifier == 0 ) + { + log( "Cannot set " + crop + " growth to zero, defaulting to 100" ); + modifier = 100; + } + log( crop + " Growth Modifier: " + modifier + "%" ); + + return modifier; + } + private void growthModifiers() + { + cactusModifier = getAndValidateGrowth( "Cactus" ); + caneModifier = getAndValidateGrowth( "Cane" ); + melonModifier = getAndValidateGrowth( "Melon" ); + mushroomModifier = getAndValidateGrowth( "Mushroom" ); + pumpkinModifier = getAndValidateGrowth( "Pumpkin" ); + saplingModifier = getAndValidateGrowth( "Sapling" ); + beetrootModifier = getAndValidateGrowth( "Beetroot" ); + carrotModifier = getAndValidateGrowth( "Carrot" ); + potatoModifier = getAndValidateGrowth( "Potato" ); + wheatModifier = getAndValidateGrowth( "Wheat" ); + wartModifier = getAndValidateGrowth( "NetherWart" ); + vineModifier = getAndValidateGrowth( "Vine" ); + cocoaModifier = getAndValidateGrowth( "Cocoa" ); + bambooModifier = getAndValidateGrowth( "Bamboo" ); + sweetBerryModifier = getAndValidateGrowth( "SweetBerry" ); + kelpModifier = getAndValidateGrowth( "Kelp" ); + } } -- 2.25.1