--- a/net/minecraft/world/item/FlintAndSteelItem.java
+++ b/net/minecraft/world/item/FlintAndSteelItem.java
@@ -2,10 +2,12 @@
 
 import net.minecraft.advancements.CriteriaTriggers;
 import net.minecraft.core.BlockPos;
+import net.minecraft.core.Holder;
 import net.minecraft.server.level.ServerPlayer;
 import net.minecraft.sounds.SoundEvents;
 import net.minecraft.sounds.SoundSource;
 import net.minecraft.world.InteractionResult;
+import net.minecraft.world.entity.Entity;
 import net.minecraft.world.entity.LivingEntity;
 import net.minecraft.world.entity.player.Player;
 import net.minecraft.world.item.context.UseOnContext;
@@ -19,42 +21,59 @@
 import net.minecraft.world.level.gameevent.GameEvent;
 
 public class FlintAndSteelItem extends Item {
+
     public FlintAndSteelItem(Item.Properties settings) {
         super(settings);
     }
 
     @Override
     public InteractionResult useOn(UseOnContext context) {
-        Player player = context.getPlayer();
-        Level level = context.getLevel();
-        BlockPos blockPos = context.getClickedPos();
-        BlockState blockState = level.getBlockState(blockPos);
-        if (!CampfireBlock.canLight(blockState) && !CandleBlock.canLight(blockState) && !CandleCakeBlock.canLight(blockState)) {
-            BlockPos blockPos2 = blockPos.relative(context.getClickedFace());
-            if (BaseFireBlock.canBePlacedAt(level, blockPos2, context.getHorizontalDirection())) {
-                level.playSound(player, blockPos2, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.4F + 0.8F);
-                BlockState blockState2 = BaseFireBlock.getState(level, blockPos2);
-                level.setBlock(blockPos2, blockState2, 11);
-                level.gameEvent(player, GameEvent.BLOCK_PLACE, blockPos);
-                ItemStack itemStack = context.getItemInHand();
-                if (player instanceof ServerPlayer) {
-                    CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)player, blockPos2, itemStack);
-                    itemStack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(context.getHand()));
+        Player entityhuman = context.getPlayer();
+        Level world = context.getLevel();
+        BlockPos blockposition = context.getClickedPos();
+        BlockState iblockdata = world.getBlockState(blockposition);
+
+        if (!CampfireBlock.canLight(iblockdata) && !CandleBlock.canLight(iblockdata) && !CandleCakeBlock.canLight(iblockdata)) {
+            BlockPos blockposition1 = blockposition.relative(context.getClickedFace());
+
+            if (BaseFireBlock.canBePlacedAt(world, blockposition1, context.getHorizontalDirection())) {
+                // CraftBukkit start - Store the clicked block
+                if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(world, blockposition1, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, entityhuman).isCancelled()) {
+                    context.getItemInHand().hurtAndBreak(1, entityhuman, LivingEntity.getSlotForHand(context.getHand()));
+                    return InteractionResult.PASS;
                 }
+                // CraftBukkit end
+                world.playSound(entityhuman, blockposition1, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, world.getRandom().nextFloat() * 0.4F + 0.8F);
+                BlockState iblockdata1 = BaseFireBlock.getState(world, blockposition1);
 
-                return InteractionResult.sidedSuccess(level.isClientSide());
+                world.setBlock(blockposition1, iblockdata1, 11);
+                world.gameEvent((Entity) entityhuman, (Holder) GameEvent.BLOCK_PLACE, blockposition);
+                ItemStack itemstack = context.getItemInHand();
+
+                if (entityhuman instanceof ServerPlayer) {
+                    CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer) entityhuman, blockposition1, itemstack);
+                    itemstack.hurtAndBreak(1, entityhuman, LivingEntity.getSlotForHand(context.getHand()));
+                }
+
+                return InteractionResult.sidedSuccess(world.isClientSide());
             } else {
                 return InteractionResult.FAIL;
             }
         } else {
-            level.playSound(player, blockPos, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, level.getRandom().nextFloat() * 0.4F + 0.8F);
-            level.setBlock(blockPos, blockState.setValue(BlockStateProperties.LIT, Boolean.valueOf(true)), 11);
-            level.gameEvent(player, GameEvent.BLOCK_CHANGE, blockPos);
-            if (player != null) {
-                context.getItemInHand().hurtAndBreak(1, player, LivingEntity.getSlotForHand(context.getHand()));
+            // CraftBukkit start - Store the clicked block
+            if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(world, blockposition, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, entityhuman).isCancelled()) {
+                context.getItemInHand().hurtAndBreak(1, entityhuman, LivingEntity.getSlotForHand(context.getHand()));
+                return InteractionResult.PASS;
+            }
+            // CraftBukkit end
+            world.playSound(entityhuman, blockposition, SoundEvents.FLINTANDSTEEL_USE, SoundSource.BLOCKS, 1.0F, world.getRandom().nextFloat() * 0.4F + 0.8F);
+            world.setBlock(blockposition, (BlockState) iblockdata.setValue(BlockStateProperties.LIT, true), 11);
+            world.gameEvent((Entity) entityhuman, (Holder) GameEvent.BLOCK_CHANGE, blockposition);
+            if (entityhuman != null) {
+                context.getItemInHand().hurtAndBreak(1, entityhuman, LivingEntity.getSlotForHand(context.getHand()));
             }
 
-            return InteractionResult.sidedSuccess(level.isClientSide());
+            return InteractionResult.sidedSuccess(world.isClientSide());
         }
     }
 }
