diff options
Diffstat (limited to 'src/Items')
-rw-r--r-- | src/Items/ItemDye.h | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/Items/ItemDye.h b/src/Items/ItemDye.h index da657007f..631e28e7d 100644 --- a/src/Items/ItemDye.h +++ b/src/Items/ItemDye.h @@ -102,13 +102,13 @@ public: fertilization success is reported even in the case when the chance fails (bonemeal still needs to be consumed). */ static bool FertilizePlant(cWorld & a_World, Vector3i a_BlockPos) { - BLOCKTYPE blockType; - NIBBLETYPE blockMeta; - if (!a_World.GetBlockTypeMeta(a_BlockPos, blockType, blockMeta)) + BLOCKTYPE BlockType; + NIBBLETYPE BlockMeta; + if (!a_World.GetBlockTypeMeta(a_BlockPos, BlockType, BlockMeta)) { return false; } - switch (blockType) + switch (BlockType) { case E_BLOCK_WHEAT: case E_BLOCK_CARROTS: @@ -117,8 +117,8 @@ public: case E_BLOCK_PUMPKIN_STEM: { // Grow by 2 - 5 stages: - auto numStages = GetRandomProvider().RandInt(2, 5); - if (a_World.GrowPlantAt(a_BlockPos, numStages) <= 0) + auto NumStages = GetRandomProvider().RandInt(2, 5); + if (a_World.GrowPlantAt(a_BlockPos, NumStages) <= 0) { return false; } @@ -128,14 +128,21 @@ public: case E_BLOCK_BEETROOTS: { + if (a_World.GrowPlantAt(a_BlockPos, 1) <= 0) + { + // Fix GH #4805 (bonemeal should only advance growth, not spawn produce): + return false; + } + + a_World.BroadcastSoundParticleEffect(EffectID::PARTICLE_HAPPY_VILLAGER, a_BlockPos, 0); + // 75% chance of 1-stage growth: - if (GetRandomProvider().RandBool(0.75)) + if (!GetRandomProvider().RandBool(0.75)) { - if (a_World.GrowPlantAt(a_BlockPos, 1) > 0) - { - a_World.BroadcastSoundParticleEffect(EffectID::PARTICLE_HAPPY_VILLAGER, a_BlockPos, 0); - } + // Hit the 25%, rollback: + a_World.GrowPlantAt(a_BlockPos, -1); } + return true; } // case beetroots @@ -144,27 +151,25 @@ public: // 45% chance of growing to the next stage / full tree: if (GetRandomProvider().RandBool(0.45)) { - if (a_World.GrowPlantAt(a_BlockPos, 1) > 0) - { - a_World.BroadcastSoundParticleEffect(EffectID::PARTICLE_HAPPY_VILLAGER, a_BlockPos, 0); - } + a_World.GrowPlantAt(a_BlockPos, 1); } + a_World.BroadcastSoundParticleEffect(EffectID::PARTICLE_HAPPY_VILLAGER, a_BlockPos, 0); return true; - } + } // case sapling case E_BLOCK_BIG_FLOWER: { // Drop the corresponding flower item without destroying the block: - cItems pickups; - switch (blockMeta) + cItems Pickups; + switch (BlockMeta) { - case E_META_BIG_FLOWER_SUNFLOWER: pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_SUNFLOWER); break; - case E_META_BIG_FLOWER_LILAC: pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_LILAC); break; - case E_META_BIG_FLOWER_ROSE_BUSH: pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_ROSE_BUSH); break; - case E_META_BIG_FLOWER_PEONY: pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_PEONY); break; + case E_META_BIG_FLOWER_SUNFLOWER: Pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_SUNFLOWER); break; + case E_META_BIG_FLOWER_LILAC: Pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_LILAC); break; + case E_META_BIG_FLOWER_ROSE_BUSH: Pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_ROSE_BUSH); break; + case E_META_BIG_FLOWER_PEONY: Pickups.Add(E_BLOCK_BIG_FLOWER, 1, E_META_BIG_FLOWER_PEONY); break; } // TODO: Should we call any hook for this? - a_World.SpawnItemPickups(pickups, a_BlockPos); + a_World.SpawnItemPickups(Pickups, a_BlockPos); return true; } // big flower |