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()); }
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); }
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"); }
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(); }
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 }
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)); }
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."); }
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); }
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."); }
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)); }
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."); } }
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]); } }
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)); }
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 }
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"); }