private static List <Line> CreatePoly(IMinecraftCommandService commandService, string[] commandArgs,
                                              Position position, List <SavedPosition> savedPositions)
        {
            IPolygonOptions poly = new Options {
                Fill = false
            };
            var location = position;

            commandArgs = ProcessFillArgument(commandArgs, (Options)poly);

            if (commandArgs.Count() > 3)
            {
                poly.StartingAngle = commandArgs[1].ToInt();
                poly.Sides         = commandArgs[2].ToInt();
                poly.Steps         = commandArgs[3].ToInt();
            }

            commandArgs = commandArgs.Skip(4).ToArray();
            switch (commandArgs.Length)
            {
            case 2:     // radius block @ current position & height=1
                poly.Block  = commandArgs[1];
                poly.Radius = commandArgs[0].ToInt();
                poly.Height = 1;
                break;

            case 3:     // radius height(Y) block @ current position
                poly.Block  = commandArgs[2];
                poly.Radius = commandArgs[0].ToInt();
                poly.Height = commandArgs[1].ToInt();
                break;

            case 4:     // radius height(Y) block savedposition
            case 6:     // radius height(Y) block x y z
                poly.Radius = commandArgs[0].ToInt();
                poly.Height = commandArgs[1].ToInt();
                poly.Block  = commandArgs[2];
                location    = location.GetAbsolutePosition(commandArgs.Skip(3).Take(3), savedPositions);
                break;

            default:
                commandService.Status("\nCREATE POLY\n" +
                                      "create poly [fill] startingAngle sides steps radius block\n" +
                                      "create poly [fill] startingAngle sides steps radius height(Y) block - current position\n" +
                                      "create poly [fill] startingAngle sides steps radius height(Y) block [named position]\n" +
                                      "create poly [fill] startingAngle sides steps radius height(Y) block x y z");
                return(new List <Line>());
            }

            poly.Start = location.ToPoint();
            IGenerator generator = new PolygonGenerator();

            return(generator.Run((Options)poly));
        }
        private static List <Line> CreateTriangle(IMinecraftCommandService commandService, string[] commandArgs,
                                                  Position position, List <SavedPosition> savedPositions)
        {
            IPolygonOptions triangle = new Options {
                Fill = false
            };
            var location = position;

            commandArgs = ProcessFillArgument(commandArgs, (Options)triangle);

            switch (commandArgs.Length)
            {
            case 3:     // radius block @ current position & height=1
                triangle.Radius = commandArgs[1].ToInt() / 2;
                triangle.Block  = commandArgs[2];
                triangle.Height = 1;
                break;

            case 4:     // radius height(Y) block @ current position
                triangle.Radius = commandArgs[1].ToInt() / 2;
                triangle.Height = commandArgs[2].ToInt();
                triangle.Block  = commandArgs[3];
                break;

            case 5:     // radius height(Y) block savedposition
            case 7:     // radius height(Y) block x y z
                triangle.Radius = commandArgs[1].ToInt() / 2;
                triangle.Height = commandArgs[2].ToInt();
                triangle.Block  = commandArgs[3];
                location        = location.GetAbsolutePosition(commandArgs.Skip(4).Take(3), savedPositions);
                break;

            default:
                commandService.Status("\nCREATE TRIANGLE\n" +
                                      "create triangle [fill] radius block\n" +
                                      "create triangle [fill] radius height(Y) block - current position\n" +
                                      "create triangle [fill] radius height(Y) block [named position]\n" +
                                      "create triangle [fill] radius height(Y) block x y z");
                return(new List <Line>());
            }

            triangle.Start         = location.ToPoint();
            triangle.Sides         = 3;
            triangle.Steps         = 3;
            triangle.StartingAngle = 0;

            IGenerator generator = new PolygonGenerator();

            return(generator.Run((Options)triangle));
        }