public void CatchBlock(OnPlayerBlockChange args)
 {
     CatchPos cpos = (CatchPos)args.datapass;
     cpos.pos = new Vector3(args.x, args.z, args.y);
     args.Cancel();
     args.Unregister();
     OnPlayerBlockChange.Register(CatchBlock2, args.Player, cpos);
 }
 //public void CatchBlock(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass)
 public void CatchBlock(OnPlayerBlockChange args)
 {
     args.Cancel();
     args.Unregister();
     args.Player.SendBlockChange(args.x, args.z, args.y, args.Player.Level.GetBlock(args.x, args.z, args.y));
     CatchPos cpos = (CatchPos)args.datapass;
     cpos.FirstBlock = new Vector3(args.x, args.z, args.y);
     OnPlayerBlockChange.Register(CatchBlock2, args.Player, cpos);
     //p.CatchNextBlockchange(new Player.BlockChangeDelegate(CatchBlock2), (object)cpos);
 }
 //public void CatchBlock2(Player p, ushort x, ushort z, ushort y, byte NewType, bool placed, object DataPass)
 public void CatchBlock2(OnPlayerBlockChange args)
 {
     args.Cancel();
     args.Unregister();
     args.Player.SendBlockChange(args.x, args.z, args.y, args.Player.Level.GetBlock(args.x, args.z, args.y));
     CatchPos cpos = (CatchPos)args.datapass;
     Vector3 FirstBlock = cpos.FirstBlock;
     ushort xx, zz, yy;
     int count = 0;
     for (xx = Math.Min((ushort)(FirstBlock.x), args.x); xx <= Math.Max((ushort)(FirstBlock.x), args.x); ++xx)
         for (zz = Math.Min((ushort)(FirstBlock.z), args.z); zz <= Math.Max((ushort)(FirstBlock.z), args.z); ++zz)
             for (yy = Math.Min((ushort)(FirstBlock.y), args.y); yy <= Math.Max((ushort)(FirstBlock.y), args.y); ++yy)
             {
                 if (cpos.ignore == null || !cpos.ignore.Contains(args.Player.Level.GetBlock(xx, zz, yy)))
                 {
                     count++;
                 }
             }
     args.Player.SendMessage(count + " blocks are between (" + FirstBlock.x + ", " + FirstBlock.z + ", " + FirstBlock.y + ") and (" + args.x + ", " + args.z + ", " + args.y + ")");
 }
 public void CatchBlock2(OnPlayerBlockChange args)
 {
     CatchPos cpos = (CatchPos)args.datapass;
     Cuboid(cpos, args.holding, args.Player, args.x, args.y, args.z);
     args.Cancel();
     args.Unregister();
 }