--- a/net/minecraft/world/level/block/IceBlock.java
+++ b/net/minecraft/world/level/block/IceBlock.java
@@ -15,6 +15,7 @@
 import net.minecraft.world.level.block.state.BlockState;
 
 public class IceBlock extends HalfTransparentBlock {
+
     public IceBlock(BlockBehaviour.Properties settings) {
         super(settings);
     }
@@ -24,17 +25,23 @@
     }
 
     @Override
-    public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool) {
-        super.playerDestroy(world, player, pos, state, blockEntity, tool);
+    public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack tool, boolean includeDrops) { // Paper
+        super.playerDestroy(world, player, pos, state, blockEntity, tool, includeDrops); // Paper
+        // Paper start
+        this.afterDestroy(world, pos, tool);
+    }
+    public void afterDestroy(Level world, BlockPos pos, ItemStack tool) {
+        // Paper end
         if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) {
             if (world.dimensionType().ultraWarm()) {
                 world.removeBlock(pos, false);
                 return;
             }
 
-            BlockState blockState = world.getBlockState(pos.below());
-            if (blockState.blocksMotion() || blockState.liquid()) {
-                world.setBlockAndUpdate(pos, meltsInto());
+            BlockState iblockdata1 = world.getBlockState(pos.below());
+
+            if (iblockdata1.blocksMotion() || iblockdata1.liquid()) {
+                world.setBlockAndUpdate(pos, IceBlock.meltsInto());
             }
         }
 
@@ -49,11 +56,16 @@
     }
 
     protected void melt(BlockState state, Level world, BlockPos pos) {
+        // CraftBukkit start
+        if (org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory.callBlockFadeEvent(world, pos, world.dimensionType().ultraWarm() ? Blocks.AIR.defaultBlockState() : Blocks.WATER.defaultBlockState()).isCancelled()) {
+            return;
+        }
+        // CraftBukkit end
         if (world.dimensionType().ultraWarm()) {
             world.removeBlock(pos, false);
         } else {
-            world.setBlockAndUpdate(pos, meltsInto());
-            world.neighborChanged(pos, meltsInto().getBlock(), pos);
+            world.setBlockAndUpdate(pos, IceBlock.meltsInto());
+            world.neighborChanged(pos, IceBlock.meltsInto().getBlock(), pos);
         }
     }
 }
