private static List <Line> CreateSphere(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { ISphereOptions sphere = new Options(); var location = position; switch (commandArgs.Length) { case 3: // radius height(Y) block @ current position sphere.Radius = commandArgs[1].ToInt(); sphere.Block = commandArgs[2]; break; case 4: // radius height(Y) block savedposition case 6: // radius height(Y) block x y z sphere.Radius = commandArgs[1].ToInt(); sphere.Block = commandArgs[2]; location = location.GetAbsolutePosition(commandArgs.Skip(3).Take(3), savedPositions); break; default: commandService.Status("\nCREATE SPHERE\n" + "create sphere radius block - current postion\n" + "create sphere radius block [named position]\n" + "create sphere raidus block x y z"); return(new List <Line>()); } sphere.Start = location.ToPoint(); IGenerator generator = new SphereGenerator(); return(generator.Run((Options)sphere)); }
private static void LogTime(IMinecraftCommandService commandService, Stopwatch sw, string message) { sw.Stop(); commandService.Status(message); sw.Reset(); sw.Start(); }
private static List <Line> CreateHouse(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { IHouseOptions house = new Options { Fill = false, Thickness = 1, InnerThickness = 3 }; var location = position; if (commandArgs.Length >= 2) { commandArgs = commandArgs.Skip(1).ToArray(); bool evaluate = true; while (evaluate) { switch (commandArgs[0]) { case "floors": var floors = commandArgs.ElementAtOrDefault(1); house.Height = floors.ToInt(); commandArgs = commandArgs.Skip(2).ToArray(); break; default: house.Block = commandArgs.Length == 0 ? "stone" : String.Join(" ", commandArgs); evaluate = false; break; } } } house.Start = location.ToPoint(); IGenerator generator = new HouseGenerator(commandService); return(generator.Run((Options)house)); }
public static void CreateGeometry(IMinecraftCommandService commandService, params string[] args) { var position = commandService.GetLocation(); var lines = new CreateCommandHandler(commandService).Handle(args.ToList().Skip(1).ToArray(), position, new List <SavedPosition>()); if (lines.Any()) { var _commandFormater = commandService.GetFormater(); var sw = new Stopwatch(); sw.Start(); var lastLine = lines.First(); foreach (var line in lines) { if (lastLine.Start.Distance2D(line.Start) > 100) { commandService.Command($"tp @s {line.Start.X} ~ {line.Start.Z}"); } var command = _commandFormater.Fill(line.Start.X, line.Start.Y, line.Start.Z, line.End.X, line.End.Y, line.End.Z, line.Block, line.Block.Contains(" ")?"":"0"); commandService.Command(command); lastLine = line; } sw.Stop(); commandService.Status($"time to queue commands {sw.Elapsed.TotalSeconds}"); //Console.WriteLine($"time to queue commands {sw.Elapsed.TotalSeconds}"); sw.Reset(); sw.Start(); commandService.Wait(); sw.Stop(); commandService.Status($"time to complete import {sw.Elapsed.TotalSeconds}"); //Console.WriteLine($"time to complete import {sw.Elapsed.TotalSeconds}"); } }
public void Handle(string[] args, IMinecraftCommandService minecraftService) { var position = minecraftService.GetLocation(); for (var i = 0; i <= RadiusHandler.Radius; i++) { CreateHandler.CreateGeometry(minecraftService, "create", "circle", $"{i}", "1", "air", $"{position.X}", $"{position.Y+i}", $"{position.Z}"); //minecraftService.Command($"fill ~-{i} ~{i} ~-{i} ~{i} ~{i} ~{i} air"); } }
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)); }
public void Handle(string[] args, IMinecraftCommandService minecraftService) { if (args[0].Equals("^-")) { Radius--; if (Radius == 0) { Radius = 1; } } else { Radius++; } minecraftService.Status($"Radius changed to {Radius}"); }
private static List <Line> CreateBox(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions, bool fill) { ISquareOptions box = new Options { Fill = fill }; var command = commandArgs[0].ToLowerInvariant(); commandArgs = ProcessFillArgument(commandArgs, (Options)box); var location = position; switch (commandArgs.Length) { // width(X) length(Z) height(Y) block [postition] case 5: box.Width = commandArgs[1].ToInt(); box.Length = commandArgs[2].ToInt(); box.Height = commandArgs[3].ToInt(); box.Block = commandArgs[4]; break; case 6: // width(X) length(Z) height(Y) block savedposition case 8: // width(X) length(Z) height(Y) block x y z box.Width = commandArgs[1].ToInt(); box.Length = commandArgs[2].ToInt(); box.Height = commandArgs[3].ToInt(); box.Block = commandArgs[4]; location = location.GetAbsolutePosition(commandArgs.Skip(5).Take(3), savedPositions); break; default: var help = $"\nCREATE {command.ToUpper()} - {(fill ? "filled" : "not filled")} by default\n" + $"create {command} [fill|nofill] width(X) length(Z) height(Y) block - center at current position\n" + $"create {command} [fill|nofill] width(X) length(Z) height(Y) block [named position]\n" + $"create {command} [fill|nofill] width(X) length(Z) height(Y) block [x y z]"; commandService.Status(help); return(new List <Line>()); } box.Start = location.ToPoint(); IGenerator generator = new BoxGenerator(); return(generator.Run((Options)box)); }
private static List <Line> CreateMaze(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { IMazeOptions maze = new Options { Fill = false, Thickness = 1, InnerThickness = 3 }; var location = position; switch (commandArgs.Length) { // width(X) length(Z) height(Y) block [postition] case 7: maze.Width = commandArgs[1].ToInt(); maze.Length = commandArgs[2].ToInt(); maze.Height = commandArgs[3].ToInt(); maze.Thickness = commandArgs[4].ToInt(); maze.InnerThickness = commandArgs[5].ToInt(); maze.Block = commandArgs[6]; break; case 8: // width(X) length(Z) height(Y) block savedposition case 10: // width(X) length(Z) height(Y) block x y z maze.Width = commandArgs[1].ToInt(); maze.Length = commandArgs[2].ToInt(); maze.Height = commandArgs[3].ToInt(); maze.Thickness = commandArgs[4].ToInt(); maze.InnerThickness = commandArgs[5].ToInt(); maze.Block = commandArgs[6]; location = location.GetAbsolutePosition(commandArgs.Skip(7).Take(3), savedPositions); break; default: var help = "\nCREATE MAZE\n" + "create maze width(X) length(Z) height(Y) wall-thickness inner-thickness block - center at current position\n" + "create maze width(X) length(Z) height(Y) wall-thickness inner-thickness block [name]\n" + "create maze width(X) length(Z) height(Y) wall-thickness inner-thickness block [x y z]\n"; commandService.Status(help); return(new List <Line>()); } maze.Start = location.ToPoint(); IGenerator generator = new MazeGenerator(commandService); return(generator.Run((Options)maze)); }
private static List <Line> CreateRing(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { ICircleOptions ring = new Options { Fill = false }; var location = position; switch (commandArgs.Length) { case 3: // radius block @ current position & height=1 ring.Radius = commandArgs[1].ToInt(); ring.Block = commandArgs[2]; ring.Height = 1; break; case 4: // radius height(Y) block @ current position ring.Radius = commandArgs[1].ToInt(); ring.Height = commandArgs[2].ToInt(); ring.Block = commandArgs[3]; break; case 5: // radius height(Y) block savedposition case 7: // radius height(Y) block x y z ring.Radius = commandArgs[1].ToInt(); ring.Height = commandArgs[2].ToInt(); ring.Block = commandArgs[3]; location = location.GetAbsolutePosition(commandArgs.Skip(4).Take(3), savedPositions); break; default: commandService.Status("\nCREATE RING\n" + "create ring radius block\n" + "create ring radius height(Y) block - current position\n" + "create ring radius height(Y) block [named position]\n" + "create ring radius height(Y) block x y z"); return(new List <Line>()); } ring.Start = location.ToPoint(); IGenerator generator = new RingGenerator(); return(generator.Run((Options)ring)); }
private static List <Line> CreateWalls(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { ISquareOptions walls = new Options { Fill = false, Thickness = 1 }; var location = position; switch (commandArgs.Length) { case 5: // width(X) length(Z) height(Y) block @ current position walls.Width = commandArgs[1].ToInt(); walls.Length = commandArgs[2].ToInt(); walls.Height = commandArgs[3].ToInt(); walls.Block = commandArgs[4]; break; case 6: // width(X) length(Z) height(Y) block savedposition case 7: // width(X) length(Z) height(Y) block savedposition thickness case 8: // width(X) length(Z) height(Y) block x y z case 9: // width(X) length(Z) height(Y) block x y z thickness walls.Width = commandArgs[1].ToInt(); walls.Length = commandArgs[2].ToInt(); walls.Height = commandArgs[3].ToInt(); walls.Block = commandArgs[4]; location = location.GetAbsolutePosition(commandArgs.Skip(5).Take(3), savedPositions); walls.Thickness = (commandArgs.ElementAtOrDefault(commandArgs.Length == 7 ? 6 : 8) ?? "1").ToInt(); break; default: var help = "\nCREATE WALLS\n" + "create walls width(X) length(Z) height(Y) block - defaults to center at current position, thickness 1\n" + "create walls width(X) length(Z) height(Y) block [named position] [thickness]\n" + "create walls width(X) length(Z) height(Y) block [x y z] [thickness]"; commandService.Status(help); return(new List <Line>()); } walls.Start = location.ToPoint(); IGenerator generator = new SquareGenerator(); return(generator.Run((Options)walls)); }
private static List <Line> CreateFloor(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { ISquareOptions floor = new Options { Fill = true }; commandArgs = ProcessFillArgument(commandArgs, (Options)floor); var location = position; switch (commandArgs.Length) { case 4: // width(X) length(Z) block @ current position floor.Width = commandArgs[1].ToInt(); floor.Length = commandArgs[2].ToInt(); floor.Height = 1; floor.Block = commandArgs[3]; break; case 5: // width(X) length(Z) block savedposition case 7: // width(X) length(Z) block x y z floor.Width = commandArgs[1].ToInt(); floor.Length = commandArgs[2].ToInt(); floor.Height = 1; floor.Block = commandArgs[3]; location = location.GetAbsolutePosition(commandArgs.Skip(4).Take(3), savedPositions); break; default: var help = "\nCREATE FLOOR\n" + "create floor [nofill] width(X) length(Z) block - center at current position\n" + "create floor [nofill] width(X) length(Z) block [named position]\n" + "create floor [nofill] width(X) length(Z) block [x y z]"; commandService.Status(help); return(new List <Line>()); } floor.Start = location.ToPoint(); IGenerator generator = new BoxGenerator(); return(generator.Run((Options)floor)); }
private static List <Line> CreateCircle(IMinecraftCommandService commandService, string[] commandArgs, Position position, List <SavedPosition> savedPositions) { ICircleOptions circle = new Options { Fill = true }; var location = position; switch (commandArgs.Length) { // radius height(Y) block [position] case 4: circle.Radius = commandArgs[1].ToInt(); circle.Height = commandArgs[2].ToInt(); circle.Block = commandArgs[3]; break; case 5: // radius height(Y) block savedposition case 7: // radius height(Y) block x y z circle.Radius = commandArgs[1].ToInt(); circle.Height = commandArgs[2].ToInt(); circle.Block = commandArgs[3]; location = location.GetAbsolutePosition(commandArgs.Skip(4).Take(3), savedPositions); break; default: var help = "\nCREATE CIRCLE\n" + "create circle radius height(Y) block - center at current position\n" + "create circle radius height(Y) block [named position]\n" + "create circle radius height(Y) block x y z"; commandService.Status(help); return(new List <Line>()); } circle.Start = location.ToPoint(); IGenerator generator = new CircleGenerator(); return(generator.Run((Options)circle)); }
public void Start(string serverName, string portNumber) { using (var server = new SocketServer("ws://0.0.0.0:" + portNumber)) // will stop on disposal. { server.Start(); minecraftService = new MinecraftWebsocketCommandService(server); foreach (var gameHandler in GameHandlers) { if (gameHandler is ISendCommand) { ((ISendCommand)gameHandler).CommandService = minecraftService; } server.AddHandler(gameHandler); } var eventSubscriptions = GameHandlers.SelectMany(a => a.CanHandle()).Distinct().OrderBy(a => a).ToList(); server.AddHandler(new ConnectionHandler(minecraftService, serverName, eventSubscriptions)); var ahk = AutoHotKey.Run("hotkeys.ahk"); AutoHotKey.Callback = s => { Console.WriteLine(s); var args = s.Split(' '); HandleHotKeys(args); }; using (var cancelationToken = minecraftService.Run()) { while (keepRunning) { Thread.Sleep(500); } ahk.Terminate(); minecraftService.Status(serverName + " Shutting Down"); minecraftService.Wait(); minecraftService.ShutDown(); cancelationToken.Cancel(); } server.Stop(); } }
public void Handle(string[] args, IMinecraftCommandService minecraftService) { minecraftService.Command("getchunks overworld"); minecraftService.Command("getchunkdata overworld ~ ~ ~"); }
public CreateCommandHandler(IMinecraftCommandService minecraft) { _minecraft = minecraft; }
public ConnectionHandler(IMinecraftCommandService minecraftService, string serverName, List <GameEvent> eventSubscriptions) { _minecraftService = minecraftService; _serverName = serverName; _eventSubscriptions = eventSubscriptions; }
public MazeGenerator(IMinecraftCommandService commandService) { _commandService = commandService; }
public SchematicProcessor(IMinecraftCommandService commandService) { _commandService = commandService; }
public SchematicProcessor(IMinecraftCommandService minecraftCommandService) { _minecraftCommandService = minecraftCommandService; }
public static void CreateGeometry(IMinecraftCommandService commandService, List <SavedPosition> savedPositions, params string[] args) { var sw = new Stopwatch(); sw.Start(); var position = commandService.GetLocation(); var commandArgs = args.Skip(1).ToArray(); var lines = new List <Line>(); var createCommand = (commandArgs.ElementAtOrDefault(0) ?? "").ToLower(); switch (createCommand) { case "circle": lines = CreateCircle(commandService, commandArgs, position, savedPositions); break; case "ring": lines = CreateRing(commandService, commandArgs, position, savedPositions); break; case "walls": lines = CreateWalls(commandService, commandArgs, position, savedPositions); break; case "outline": lines = CreateBox(commandService, commandArgs, position, savedPositions, false); break; case "box": lines = CreateBox(commandService, commandArgs, position, savedPositions, true); break; case "floor": lines = CreateFloor(commandService, commandArgs, position, savedPositions); break; case "sphere": lines = CreateSphere(commandService, commandArgs, position, savedPositions); break; case "merlon": lines = CreateMerlon(commandService, commandArgs, position, savedPositions); break; case "maze": lines = CreateMaze(commandService, commandArgs, position, savedPositions); break; case "house": lines = CreateHouse(commandService, commandArgs, position, savedPositions); break; case "triangle": lines = CreateTriangle(commandService, commandArgs, position, savedPositions); break; case "poly": case "polygon": lines = CreatePoly(commandService, commandArgs, position, savedPositions); break; default: commandService.Status("CREATE\n" + "create circle\n" + "create ring\n" + "create walls\n" + "create outline\n" + "create box\n" + "create floor\n" + "create sphere\n" + "create merlon\n" + "create triangle\n" + "create [poly|polygon]\n" + "create maze" ); return; } if (!lines.Any()) { return; } LogTime(commandService, sw, $"CREATE {createCommand.ToUpper()}: time to get lines to render: {sw.Elapsed.TotalSeconds}"); var commandFormater = commandService.GetFormater(); var lastLine = lines.First(); foreach (var line in lines) { if (lastLine.Start.Distance2D(line.Start) > 100) { commandService.Command($"tp @s {line.Start.X} ~ {line.Start.Z}"); } var command = commandFormater.Fill(line.Start.X, line.Start.Y, line.Start.Z, line.End.X, line.End.Y, line.End.Z, line.Block, line.Block.Contains(" ") ? "" : "0"); // TODO: Identify the limitation here and account for it. // Should this be executed on a thread so that other commands can be processed at the same time? // Is that possible? commandService.Command(command); lastLine = line; } LogTime(commandService, sw, $"CREATE {createCommand.ToUpper()}: time to queue commands: {sw.Elapsed.TotalSeconds}"); commandService.Wait(); LogTime(commandService, sw, $"CREATE {createCommand.ToUpper()}: time to complete import: {sw.Elapsed.TotalSeconds}"); }