--- a/net/minecraft/world/level/block/PitcherCropBlock.java
+++ b/net/minecraft/world/level/block/PitcherCropBlock.java
@@ -98,6 +98,7 @@
 
     @Override
     public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
+        if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
         if (entity instanceof Ravager && world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
             world.destroyBlock(pos, true, entity);
         }
@@ -122,7 +123,7 @@
     @Override
     public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
         float f = CropBlock.getGrowthSpeed(this, world, pos);
-        boolean bl = random.nextInt((int)(25.0F / f) + 1) == 0;
+        boolean bl = random.nextFloat() < (world.spigotConfig.pitcherPlantModifier / (100.0F * (Math.floor(25.0F / f) + 1))); // Paper - Fix Spigot growth modifiers
         if (bl) {
             this.grow(world, state, pos, 1);
         }
@@ -132,7 +133,7 @@
         int i = Math.min(state.getValue(AGE) + amount, 4);
         if (this.canGrow(world, pos, state, i)) {
             BlockState blockState = state.setValue(AGE, Integer.valueOf(i));
-            world.setBlock(pos, blockState, 2);
+            if (!org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockGrowEvent(world, pos, blockState, 2)) return; // Paper
             if (isDouble(i)) {
                 world.setBlock(pos.above(), blockState.setValue(HALF, DoubleBlockHalf.UPPER), 3);
             }
