--- a/net/minecraft/world/level/block/NyliumBlock.java
+++ b/net/minecraft/world/level/block/NyliumBlock.java
@@ -11,23 +11,31 @@
 import net.minecraft.world.level.block.state.BlockBehaviour;
 import net.minecraft.world.level.block.state.BlockState;
 import net.minecraft.world.level.chunk.ChunkGenerator;
+import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
 import net.minecraft.world.level.lighting.LayerLightEngine;
 
 public class NyliumBlock extends Block implements BonemealableBlock {
+
     protected NyliumBlock(BlockBehaviour.Properties settings) {
         super(settings);
     }
 
     private static boolean canBeNylium(BlockState state, LevelReader world, BlockPos pos) {
-        BlockPos blockPos = pos.above();
-        BlockState blockState = world.getBlockState(blockPos);
-        int i = LayerLightEngine.getLightBlockInto(world, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(world, blockPos));
+        BlockPos blockposition1 = pos.above();
+        BlockState iblockdata1 = world.getBlockState(blockposition1);
+        int i = LayerLightEngine.getLightBlockInto(world, state, pos, iblockdata1, blockposition1, Direction.UP, iblockdata1.getLightBlock(world, blockposition1));
+
         return i < world.getMaxLightLevel();
     }
 
     @Override
     public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
-        if (!canBeNylium(state, world, pos)) {
+        if (!NyliumBlock.canBeNylium(state, world, pos)) {
+            // CraftBukkit start
+            if (org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory.callBlockFadeEvent(world, pos, Blocks.NETHERRACK.defaultBlockState()).isCancelled()) {
+                return;
+            }
+            // CraftBukkit end
             world.setBlockAndUpdate(pos, Blocks.NETHERRACK.defaultBlockState());
         }
 
@@ -45,16 +53,17 @@
 
     @Override
     public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) {
-        BlockState blockState = world.getBlockState(pos);
-        BlockPos blockPos = pos.above();
-        ChunkGenerator chunkGenerator = world.getChunkSource().getGenerator();
-        if (blockState.is(Blocks.CRIMSON_NYLIUM)) {
-            NetherFeatures.CRIMSON_FOREST_VEGETATION_BONEMEAL.value().place(world, chunkGenerator, random, blockPos);
-        } else if (blockState.is(Blocks.WARPED_NYLIUM)) {
-            NetherFeatures.WARPED_FOREST_VEGETATION_BONEMEAL.value().place(world, chunkGenerator, random, blockPos);
-            NetherFeatures.NETHER_SPROUTS_BONEMEAL.value().place(world, chunkGenerator, random, blockPos);
+        BlockState iblockdata1 = world.getBlockState(pos);
+        BlockPos blockposition1 = pos.above();
+        ChunkGenerator chunkgenerator = world.getChunkSource().getGenerator();
+
+        if (iblockdata1.is(Blocks.CRIMSON_NYLIUM)) {
+            ((ConfiguredFeature) NetherFeatures.CRIMSON_FOREST_VEGETATION_BONEMEAL.value()).place(world, chunkgenerator, random, blockposition1);
+        } else if (iblockdata1.is(Blocks.WARPED_NYLIUM)) {
+            ((ConfiguredFeature) NetherFeatures.WARPED_FOREST_VEGETATION_BONEMEAL.value()).place(world, chunkgenerator, random, blockposition1);
+            ((ConfiguredFeature) NetherFeatures.NETHER_SPROUTS_BONEMEAL.value()).place(world, chunkgenerator, random, blockposition1);
             if (random.nextInt(8) == 0) {
-                NetherFeatures.TWISTING_VINES_BONEMEAL.value().place(world, chunkGenerator, random, blockPos);
+                ((ConfiguredFeature) NetherFeatures.TWISTING_VINES_BONEMEAL.value()).place(world, chunkgenerator, random, blockposition1);
             }
         }
 
