--- a/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java
+++ b/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java
@@ -1,5 +1,6 @@
 package net.minecraft.world.item.enchantment;
 
+import java.util.Iterator;
 import net.minecraft.core.BlockPos;
 import net.minecraft.util.Mth;
 import net.minecraft.world.entity.LivingEntity;
@@ -10,6 +11,7 @@
 import net.minecraft.world.phys.shapes.CollisionContext;
 
 public class FrostWalkerEnchantment extends Enchantment {
+
     public FrostWalkerEnchantment(Enchantment.EnchantmentDefinition properties) {
         super(properties);
     }
@@ -21,25 +23,32 @@
 
     public static void onEntityMoved(LivingEntity entity, Level world, BlockPos blockPos, int level) {
         if (entity.onGround()) {
-            BlockState blockState = Blocks.FROSTED_ICE.defaultBlockState();
-            int i = Math.min(16, 2 + level);
-            BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos();
+            BlockState iblockdata = Blocks.FROSTED_ICE.defaultBlockState();
+            int j = Math.min(16, 2 + level);
+            BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos();
+            Iterator iterator = BlockPos.betweenClosed(blockPos.offset(-j, -1, -j), blockPos.offset(j, -1, j)).iterator();
 
-            for (BlockPos blockPos2 : BlockPos.betweenClosed(blockPos.offset(-i, -1, -i), blockPos.offset(i, -1, i))) {
-                if (blockPos2.closerToCenterThan(entity.position(), (double)i)) {
-                    mutableBlockPos.set(blockPos2.getX(), blockPos2.getY() + 1, blockPos2.getZ());
-                    BlockState blockState2 = world.getBlockState(mutableBlockPos);
-                    if (blockState2.isAir()) {
-                        BlockState blockState3 = world.getBlockState(blockPos2);
-                        if (blockState3 == FrostedIceBlock.meltsInto()
-                            && blockState.canSurvive(world, blockPos2)
-                            && world.isUnobstructed(blockState, blockPos2, CollisionContext.empty())) {
-                            world.setBlockAndUpdate(blockPos2, blockState);
-                            world.scheduleTick(blockPos2, Blocks.FROSTED_ICE, Mth.nextInt(entity.getRandom(), 60, 120));
+            while (iterator.hasNext()) {
+                BlockPos blockposition1 = (BlockPos) iterator.next();
+
+                if (blockposition1.closerToCenterThan(entity.position(), (double) j)) {
+                    blockposition_mutableblockposition.set(blockposition1.getX(), blockposition1.getY() + 1, blockposition1.getZ());
+                    BlockState iblockdata1 = world.getBlockState(blockposition_mutableblockposition);
+
+                    if (iblockdata1.isAir()) {
+                        BlockState iblockdata2 = world.getBlockState(blockposition1);
+
+                        if (iblockdata2 == FrostedIceBlock.meltsInto() && iblockdata.canSurvive(world, blockposition1) && world.isUnobstructed(iblockdata, blockposition1, CollisionContext.empty())) {
+                            // CraftBukkit Start - Call EntityBlockFormEvent for Frost Walker
+                            if (org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(world, blockposition1, iblockdata, entity)) {
+                                world.scheduleTick(blockposition1, Blocks.FROSTED_ICE, Mth.nextInt(entity.getRandom(), 60, 120));
+                            }
+                            // CraftBukkit End
                         }
                     }
                 }
             }
+
         }
     }
 
