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