public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            if (parameters.Length != 1)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use /help difficulty for more information.");
                return;
            }
            Difficulty value;
            int        num;

            if (int.TryParse(text, out num))
            {
                if (num < 0 || num > 3)
                {
                    user.SendChat(ChatColors.Red + "Invalid difficulty specified.");
                    return;
                }
                value = (Difficulty)num;
            }
            else
            {
                if (!Enum.TryParse <Difficulty>(text, true, out value))
                {
                    user.SendChat(ChatColors.Red + "Invalid difficulty specified.");
                    return;
                }
            }
            server.MinecraftServer.GetLevel(user.World).Difficulty = value;
            server.SendChatToGroup("server.op", ChatColors.Gray + user.Username + " sets difficulty of " + user.World.Name + " to " + value.ToString());
        }
Beispiel #2
0
        public static void ExecuteCommand(Server server, MinecraftClient user, string text)
        {
            string name = text.Substring(1);

            if (string.IsNullOrEmpty(name))
            {
                return;
            }
            var parameters = new string[0];
            var userText   = "";

            if (name.Contains(" "))
            {
                name       = name.Remove(name.IndexOf(' '));
                userText   = text.Substring(text.IndexOf(' ') + 1);
                parameters = userText.Split(' ');
            }
            var command = GetCommand(name);

            if (command == null)
            {
                user.SendChat(ChatColors.Red + "That command was not found.");
                return;
            }

            if (!MayUseCommand(command, user, server))
            {
                user.SendChat(ChatColors.Red + "You do not have permission to use that command.");
                return;
            }
            command.Execute(server, user, userText, parameters);
        }
Beispiel #3
0
        public static void Main(string[] args)
        {
            var endPoint = ParseEndPoint(args[0]);
            var ping     = ServerPing.DoPing(endPoint);

            Console.WriteLine("{0}/{1} {2} ({3}): {4} [{5}ms latency]",
                              ping.Players.OnlinePlayers,
                              ping.Players.MaxPlayers,
                              ping.Version.Name,
                              ping.Version.ProtocolVersion,
                              ping.Description,
                              (int)ping.Latency.TotalMilliseconds);
            Console.WriteLine("Player list sample:");
            if (ping.Players.Players != null)
            {
                foreach (var player in ping.Players.Players)
                {
                    Console.WriteLine("{0} ({1})", player.Name, player.Id);
                }
            }
            if (!string.IsNullOrEmpty(ping.Icon))
            {
                Console.WriteLine("Server icon: {0}", ping.Icon);
            }

            //var lastLogin = LastLogin.GetLastLogin();
            //var session = Session.DoLogin(lastLogin.Username, lastLogin.Password);
            var session = new Session("TestBot");

            // Connect to server
            var client = new MinecraftClient(session);

            client.Connect(endPoint);

            client.ChatMessage += (sender, e) => Console.WriteLine(e.Message);
            string command;

            do
            {
                command = Console.ReadLine();
                if (command == null)
                {
                    continue; // MonoDevelop debugger does this sometimes
                }
                if (command.StartsWith("say "))
                {
                    client.SendChat(command.Substring(4));
                }
                if (command == "detect")
                {
                    var coordinates = new Coordinates3D((int)client.Position.X, (int)client.Position.Y - 1, (int)client.Position.Z);
                    Console.WriteLine("Looking up " + coordinates);
                    var id = client.World.GetBlockId(coordinates);
                    Console.WriteLine("Block ID: " + id);
                }
            } while (command != "quit");

            client.Disconnect("Quitting");
        }
Beispiel #4
0
        static void Main(string[] args)
        {
            var MinecraftServer = new MinecraftClient(args[0], int.Parse(args[1]), "USERNAME HERE", "PASSWORD HERE", true);

            MinecraftServer.ServerState = 2;

            MinecraftServer.Message += (sender, message, name) => {
                Console.WriteLine("<" + name + "> " + message);
            };

            //MinecraftServer.DebugMessage += (sender, message) => {
            //    Console.WriteLine("[DEBUG][" + sender.ToString() + "] " + message);
            //};

            MinecraftServer.LoginFailure += (sender, message) => {
                Console.WriteLine("Login Error: " + message);
            };

            MinecraftServer.ErrorMessage += (sender, message) => {
                Console.WriteLine("[ERROR][" + sender.ToString() + "] " + message);
            };

            MinecraftServer.InfoMessage += (sender, message) => {
                Console.WriteLine("[INFO][" + sender.ToString() + "] " + message);
            };

            MinecraftServer.PlayerRespawned += () => {
                Console.WriteLine("[Info] You respawned!");
            };

            if (MinecraftServer.VerifyNames)
            {
                MinecraftServer.Login();
            }

            MinecraftServer.Connect();

            string command;

            do
            {
                command = Console.ReadLine();

                if (command.StartsWith("say "))
                {
                    MinecraftServer.SendChat(command.Substring(4));
                }

                if (command.StartsWith("respawn"))
                {
                    MinecraftServer.Respawn();
                }
            } while (command != "quit");

            MinecraftServer.Disconnect();

            Console.ReadKey();
        }
Beispiel #5
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            if (parameters.Length != 1)
            {
                user.SendChat(ChatColors.Red + "Invalid parameters. Use /help op for more information.");
                return;
            }
            var groups = server.GetUserGroups(parameters[0]);

            if (!groups.Contains("server.op"))
            {
                user.SendChat(ChatColors.Red + "User is not an op.");
                return;
            }
            groups.Remove("server.op");
            server.SendChatToGroup("server.op", ChatColors.Gray + user.Username + " removes " + parameters[0] + " from server.op group.");
            server.SetUserGroups(parameters[0], groups);
        }
 public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
 {
     if (parameters.Length != 1)
     {
         user.SendChat(ChatColors.Red + "Invalid parameters. Use /help op for more information.");
         return;
     }
     // TODO
 }
Beispiel #7
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            if (parameters.Length < 2)
            {
                user.SendChat(ChatColors.Red + "Insufficient parameters. Use \"/help tell\" for more information.");
                return;
            }
            var client = server.MinecraftServer.GetClient(parameters[0]);

            if (client == null)
            {
                user.SendChat(parameters[0] + " is not online.");
                return;
            }
            var format = server.SettingsProvider.Get <string>("chat.private.format");

            client.SendChat(string.Format(format, user.Username, client.Username, text));
        }
Beispiel #8
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            string   player = user.Username;
            GameMode gameMode;

            if (parameters.Length == 0 || parameters.Length > 2)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use /help gamemode for more information.");
                return;
            }
            int value;

            if (int.TryParse(parameters[0], out value))
            {
                if (value < 0 || value > 2)
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help gamemode for more information.");
                    return;
                }
                gameMode = (GameMode)value;
            }
            else
            {
                if (!Enum.TryParse <GameMode>(parameters[0], true, out gameMode))
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help gamemode for more information.");
                    return;
                }
            }
            if (parameters.Length == 2)
            {
                player = parameters[1];
            }
            var client = server.MinecraftServer.GetClient(player);

            if (client == null)
            {
                user.SendChat(ChatColors.Red + player + " is not online."); // TODO: Set it anyway
                return;
            }
            client.Entity.GameMode = gameMode;
            server.SendChatToGroup("server.op", ChatColors.Gray + user.Username + " sets " + player + " to " + gameMode + " mode.");
        }
Beispiel #9
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            if (parameters.Length > 2 || parameters.Length == 0)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use /help speed for more information.");
                return;
            }
            if (parameters[0].ToLower() == "reset")
            {
                user.Entity.Abilities.WalkingSpeed = 12;
                user.Entity.Abilities.FlyingSpeed  = 24;
                return;
            }
            string player = user.Username;
            int    speed;

            if (parameters.Length == 2)
            {
                player = parameters[0];
                if (!int.TryParse(parameters[1], out speed))
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help speed for more information.");
                    return;
                }
            }
            else
            {
                if (!int.TryParse(parameters[0], out speed))
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help speed for more information.");
                    return;
                }
            }
            var client = server.MinecraftServer.GetClient(player);

            if (client == null)
            {
                user.SendChat(ChatColors.Red + player + " is not online.");
                return;
            }
            client.Entity.Abilities.WalkingSpeed = (byte)speed;
            client.Entity.Abilities.FlyingSpeed  = (byte)(speed * 2);
        }
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            string player = user.Username;
            int    x      = (int)user.Entity.Position.X;
            int    y      = (int)user.Entity.Position.Y;
            int    z      = (int)user.Entity.Position.Z;

            if (parameters.Length == 1)
            {
                player = parameters[0];
            }
            else if (parameters.Length == 3)
            {
                if (!int.TryParse(parameters[0], out x) &&
                    !int.TryParse(parameters[1], out y) &&
                    !int.TryParse(parameters[2], out z))
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help spawnpoint for more information.");
                    return;
                }
            }
            else if (parameters.Length == 4)
            {
                player = parameters[0];
                if (!int.TryParse(parameters[1], out x) &&
                    !int.TryParse(parameters[2], out y) &&
                    !int.TryParse(parameters[3], out z))
                {
                    user.SendChat(ChatColors.Red + "Incorrect usage. Use /help spawnpoint for more information.");
                    return;
                }
            }
            var client = server.MinecraftServer.GetClient(player);

            if (player == null)
            {
                user.SendChat(ChatColors.Red + player + " is not online."); // TODO: Set it anyway
                return;
            }
            client.Entity.SpawnPoint = new Vector3(x, y, z);
            server.SendChatToGroup("server.op", user.Username + " set " + player + " spawn point to " + client.Entity.SpawnPoint);
        }
Beispiel #11
0
 public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
 {
     Server = server;
     if (parameters.Length != 0)
     {
         user.SendChat(ChatColors.Red + "Invalid parameters. Use /help repl for more information.");
         return;
     }
     if (ReplContext.Self != null)
     {
         user.SendChat(ChatColors.Red + ReplContext.Self.Username + " is currently in REPL mode. Only one user may be in REPL mode at a time.");
         // TODO: Upgrade Mono.CSharp to Mono 3.0 and support several REPLs at once
         return;
     }
     server.ChatMessage -= HandleChatMessage;
     server.ChatMessage += HandleChatMessage;
     server.MinecraftServer.PlayerLoggedOut += (s, e) =>
     {
         if (Evaluators.ContainsKey(e.Username))
         {
             Evaluators.Remove(e.Username);
         }
         ReplContext.Self = null;
     };
     Evaluators[user.Username] = new Evaluator(new CompilerContext(new CompilerSettings(), new MinecraftReportPrinter(user)));
     Evaluators[user.Username].ReferenceAssembly(typeof(Server).Assembly);
     Evaluators[user.Username].ReferenceAssembly(typeof(MinecraftServer).Assembly);
     Evaluators[user.Username].ReferenceAssembly(typeof(Craft.Net.IPacket).Assembly);
     Evaluators[user.Username].ReferenceAssembly(typeof(World).Assembly);
     Evaluators[user.Username].ReferenceAssembly(typeof(IServer).Assembly);
     Evaluators[user.Username].InteractiveBaseClass = typeof(ReplContext);
     Evaluators[user.Username].Run("using Craft.Net");
     Evaluators[user.Username].Run("using Craft.Net.Data");
     Evaluators[user.Username].Run("using Craft.Net.Data.Blocks");
     Evaluators[user.Username].Run("using Craft.Net.Data.Items");
     Evaluators[user.Username].Run("using Craft.Net.Server");
     Evaluators[user.Username].Run("using PartyCraft");
     ReplContext.Self   = user;
     ReplContext.Server = server;
     user.SendChat(ChatColors.Blue + "Entering C# Interactive Mode");
     user.SendChat(ChatColors.Blue + "Use `Exit()` to exit REPL mode.");
 }
Beispiel #12
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            if (parameters.Length == 0)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use /help say for more information.");
                return;
            }
            var format = server.SettingsProvider.Get <string>("chat.broadcast.format");

            server.MinecraftServer.SendChat(string.Format(format, text));
        }
Beispiel #13
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            int page = -1;

            if (parameters.Length == 0)
            {
                page = 1;
            }
            if (parameters.Length > 1)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use \"/help\" for more information.");
                return;
            }
            if (page != -1 || int.TryParse(parameters[0], out page))
            {
                page--;
                int pages = Commands.Count / CommandsPerPage;
                if (page >= pages)
                {
                    user.SendChat(ChatColors.Red + "No further commands. Use \"/help\" for more information.");
                    return;
                }
                user.SendChat(ChatColors.DarkGreen + "Command List (page " + (page + 1) + " of " + pages + ")");
                foreach (var c in Commands.Skip(page * CommandsPerPage).Take(CommandsPerPage))
                {
                    user.SendChat(ChatColors.DarkCyan + "/" + c.DefaultCommand);
                }
                return;
            }
            var command = GetCommand(parameters[0]);

            if (command == null)
            {
                user.SendChat(ChatColors.Red + "Command not found.");
                return;
            }
            string[] lines = command.Documentation.Split('\n');
            user.SendChat(ChatColors.DarkGreen + "Documentation for /" + command.DefaultCommand + ":");
            foreach (var line in lines)
            {
                user.SendChat(ChatColors.DarkCyan + line);
            }
            if (!MayUseCommand(command, user, server))
            {
                user.SendChat(ChatColors.Red + "You are not permitted to use this command.");
            }
        }
Beispiel #14
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            string  player = user.Username;
            Vector3 target;

            if (parameters.Length < 1 || parameters.Length > 4)
            {
                user.SendChat(ChatColors.Red + "Incorrect usage. Use /help tp for more information.");
                return;
            }
            if (parameters.Length == 1)
            {
                var client = server.MinecraftServer.GetClient(parameters[0]);
            }
        }
Beispiel #15
0
        public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
        {
            bool add     = false;
            var  current = server.MinecraftServer.GetLevel(user).Time;
            long?time    = null;

            if (parameters.Length == 0)
            {
                user.SendChat("The current time is " + current + ", or " + LongToTimeString(current));
                return;
            }
            if (parameters[0].ToLower() == "day")
            {
                time = 0;
            }
            else if (parameters[0].ToLower() == "night")
            {
                time = 12000;
            }
            else if (parameters[0].ToLower() == "noon")
            {
                time = 6000;
            }
            else if (parameters[0].ToLower() == "midnight")
            {
                time = 18000;
            }
            else
            {
                string timeString;
                if (parameters[0].ToLower() == "set")
                {
                    timeString = parameters[1];
                }
                else if (parameters[0].ToLower() == "add")
                {
                    timeString = parameters[1];
                    add        = true;
                }
                else
                {
                    timeString = parameters[0];
                }
                if (timeString.Contains(":"))
                {
                    try
                    {
                        time = TimeStringToLong(timeString);
                    }
                    catch { }
                }
                else
                {
                    long _time;
                    if (long.TryParse(timeString, out _time))
                    {
                        time = _time;
                    }
                }
                if (add)
                {
                    time += current;
                }
            }

            if (time == null)
            {
                user.SendChat(ChatColors.Red + "Invalid time specified.");
                return;
            }

            time = time.Value % 24000;

            server.MinecraftServer.GetLevel(user).Time = time.Value; // TODO: Add event listener in Craft.Net
            server.SendChatToGroup("server.op", ChatColors.Gray + user.Username + " set the time in " + user.World.Name +
                                   " to " + time.Value + ", or " + LongToTimeString(time.Value));
        }
Beispiel #16
0
 public override void Execute(Server server, MinecraftClient user, string text, params string[] parameters)
 {
     user.SendChat(server.MinecraftServer.GetLevel(user.World).Seed.ToString()); // TODO: Maybe add some stuff in Craft.Net to make this less cumbersome
 }
Beispiel #17
0
        static void Main(string[] args)
        {
            // Set up log providers
            LogProvider.RegisterProvider(new FileLogWriter("packetLog.txt", LogImportance.Low));
            LogProvider.RegisterProvider(new ConsoleLogWriter(LogImportance.High));

            // Set up endpoint, ping server
            var endPoint = ParseEndPoint(args[0]);
            var ping     = ServerPing.DoPing(endPoint);

            Console.WriteLine("{0}/{1} {2} ({3}): {4}", ping.CurrentPlayers, ping.MaxPlayers, ping.ServerVersion,
                              ping.ProtocolVersion, ping.MotD);

            //var lastLogin = LastLogin.GetLastLogin();
            //var session = Session.DoLogin(lastLogin.Username, lastLogin.Password);
            var session = new Session("TestBot");

            // Connect to server
            var client = new MinecraftClient(session);

            client.Connect(endPoint);

            client.PlayerDied   += (s, e) => Console.WriteLine("Player died! Type 'respawn' to respawn.");
            client.Disconnected += (s, e) => Console.WriteLine("Disconnected: " + e.Reason);

            string input = "";

            while (input != "quit")
            {
                input = Console.ReadLine();
                if (input == null)
                {
                    continue;
                }

                if (input.StartsWith("move "))
                {
                    var parts   = input.Split(' ');
                    var amountX = int.Parse(parts[1]);
                    var amountZ = int.Parse(parts[2]);

                    client.Move(amountX, amountZ);
                }
                else if (input.StartsWith("look "))
                {
                    var parts  = input.Split(' ');
                    var amount = float.Parse(parts[2]);
                    if (parts[1] == "yaw")
                    {
                        client.Yaw = amount;
                    }
                    else
                    {
                        client.Pitch = amount;
                    }
                }
                else if (input.StartsWith("lookat "))
                {
                    var parts = input.Split(' ');
                    var pos   = new Vector3
                    {
                        X = double.Parse(parts[1]),
                        Y = double.Parse(parts[2]),
                        Z = double.Parse(parts[3])
                    };

                    client.LookAt(pos);
                }
                else if (input.StartsWith("say "))
                {
                    client.SendChat(input.Substring(4));
                }
                else if (input == "respawn")
                {
                    client.Respawn();
                }
                else if (input == "save")
                {
                    client.World.Save("testWorld", true);
                }
                else if (input == "under")
                {
                    Console.WriteLine(client.World.GetBlock(client.Position + Vector3.Down).GetType().Name);
                }
            }

            client.Disconnect("Quitting");
        }