--- a/net/minecraft/world/level/block/BuddingAmethystBlock.java
+++ b/net/minecraft/world/level/block/BuddingAmethystBlock.java
@@ -10,13 +10,14 @@
 import net.minecraft.world.level.material.Fluids;
 
 public class BuddingAmethystBlock extends AmethystBlock {
+
     public static final MapCodec<BuddingAmethystBlock> CODEC = simpleCodec(BuddingAmethystBlock::new);
     public static final int GROWTH_CHANCE = 5;
     private static final Direction[] DIRECTIONS = Direction.values();
 
     @Override
     public MapCodec<BuddingAmethystBlock> codec() {
-        return CODEC;
+        return BuddingAmethystBlock.CODEC;
     }
 
     public BuddingAmethystBlock(BlockBehaviour.Properties settings) {
@@ -26,26 +27,33 @@
     @Override
     protected void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
         if (random.nextInt(5) == 0) {
-            Direction direction = DIRECTIONS[random.nextInt(DIRECTIONS.length)];
-            BlockPos blockPos = pos.relative(direction);
-            BlockState blockState = world.getBlockState(blockPos);
+            Direction enumdirection = BuddingAmethystBlock.DIRECTIONS[random.nextInt(BuddingAmethystBlock.DIRECTIONS.length)];
+            BlockPos blockposition1 = pos.relative(enumdirection);
+            BlockState iblockdata1 = world.getBlockState(blockposition1);
             Block block = null;
-            if (canClusterGrowAtState(blockState)) {
+
+            if (BuddingAmethystBlock.canClusterGrowAtState(iblockdata1)) {
                 block = Blocks.SMALL_AMETHYST_BUD;
-            } else if (blockState.is(Blocks.SMALL_AMETHYST_BUD) && blockState.getValue(AmethystClusterBlock.FACING) == direction) {
+            } else if (iblockdata1.is(Blocks.SMALL_AMETHYST_BUD) && iblockdata1.getValue(AmethystClusterBlock.FACING) == enumdirection) {
                 block = Blocks.MEDIUM_AMETHYST_BUD;
-            } else if (blockState.is(Blocks.MEDIUM_AMETHYST_BUD) && blockState.getValue(AmethystClusterBlock.FACING) == direction) {
+            } else if (iblockdata1.is(Blocks.MEDIUM_AMETHYST_BUD) && iblockdata1.getValue(AmethystClusterBlock.FACING) == enumdirection) {
                 block = Blocks.LARGE_AMETHYST_BUD;
-            } else if (blockState.is(Blocks.LARGE_AMETHYST_BUD) && blockState.getValue(AmethystClusterBlock.FACING) == direction) {
+            } else if (iblockdata1.is(Blocks.LARGE_AMETHYST_BUD) && iblockdata1.getValue(AmethystClusterBlock.FACING) == enumdirection) {
                 block = Blocks.AMETHYST_CLUSTER;
             }
 
             if (block != null) {
-                BlockState blockState2 = block.defaultBlockState()
-                    .setValue(AmethystClusterBlock.FACING, direction)
-                    .setValue(AmethystClusterBlock.WATERLOGGED, Boolean.valueOf(blockState.getFluidState().getType() == Fluids.WATER));
-                world.setBlockAndUpdate(blockPos, blockState2);
+                BlockState iblockdata2 = (BlockState) ((BlockState) block.defaultBlockState().setValue(AmethystClusterBlock.FACING, enumdirection)).setValue(AmethystClusterBlock.WATERLOGGED, iblockdata1.getFluidState().getType() == Fluids.WATER);
+
+                // Paper start - Have Amethyst throw both spread and grow events
+                if (block == Blocks.SMALL_AMETHYST_BUD) {
+                org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockSpreadEvent(world, pos, blockposition1, iblockdata2); // CraftBukkit
+                } else {
+                    org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockGrowEvent(world, blockposition1, iblockdata2);
+                }
+                // Paper end - Have Amethyst throw both spread and grow events
             }
+
         }
     }
 
