/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { Client.Position = Position; Position.X = Position.X / 32; Position.Y = Position.Y / 32; Position.Z = Position.Z / 32; Client.Yaw = Yaw; Client.Pitch = Pitch; Server.EnqueueToAllClientsInWorld(new PositionAndOrientationPacket(Client.PlayerID, Position, Yaw, Pitch), Client.World, Client); }
/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { World.Find(Client.World)._SetBlock(Position, Type); //Send the block to all clients. if (Mode != 0) { Server.EnqueueToAllClients(new ServerSetBlockPacket(Position, Type)); } else { Server.EnqueueToAllClients(new ServerSetBlockPacket(Position, 0)); } }
/// <summary> /// Stops MCForge /// </summary> /// <remarks>Kicks all players, saves all of the worlds then exits</remarks> public static void Stop() { ClassicServer.EnqueueToAllClients(new DisconnectPlayerPacket { Reason = ServerSettings.GetSetting("ShutdownMessage") }); foreach (var world in ClassicServer.Worlds) { world.Save(); } if (ServerSettings.GetSettingBoolean("UsingConsole")) { MCForgeConsole.Close(); } }
/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { Client.LoggedIn = true; Client.UserName = UserNameOrServerName; Client.World = Server.MainLevel; Client.PacketQueue.Enqueue(new IdentificationPacket(Server.Server.Name, Server.Server.MotD, Client.UserType)); Client.PlayerID = (byte)(Server.Clients.Count() - 1); Client.PacketQueue.Enqueue(new WorldInitializePacket()); MemoryStream ms = new MemoryStream(); GZipStream s = new GZipStream(ms, CompressionMode.Compress, true); s.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(World.Find(Client.World).Data.Length)), 0, sizeof(int)); s.Write(World.Find(Client.World).Data, 0, World.Find(Client.World).Data.Length); s.Close(); byte[] data = ms.GetBuffer(); ms.Close(); double numChunks = data.Length / 1024; double chunksSent = 0; for (int i = 0; i < data.Length; i += 1024) { byte[] chunkData = new byte[1024]; short chunkLength = 1024; if (data.Length - i < chunkLength) { chunkLength = (short)(data.Length - i); } Array.Copy(data, i, chunkData, 0, chunkLength); Client.PacketQueue.Enqueue(new WorldDataChunkPacket(chunkLength, chunkData, (byte)((chunksSent / numChunks) * 100))); chunksSent++; } Client.PacketQueue.Enqueue(new WorldFinalizePacket(World.Find(Client.World).Width, World.Find(Client.World).Height, World.Find(Client.World).Depth)); Client.Position = World.Find(Client.World).Spawn.Clone(); Client.Yaw = 0; Client.Pitch = 0; unchecked { Client.PacketQueue.Enqueue(new PositionAndOrientationPacket((byte)-1, Client.Position, Client.Yaw, Client.Pitch)); } Server.LoadAllClientsToClient(Client); Server.EnqueueToAllClientsInWorld(new SpawnPlayerPacket(Client.PlayerID, Client.UserName, Client.Position, Client.Yaw, Client.Pitch), Client.World, Client); }
static void Main(string[] args) { Console.WriteLine("Starting Minecraft Classic server on port 25565"); server = new ClassicServer(); server.MaxPlayers = 25; server.MessageOfTheDay = "Welcome to the Classic6 test server!"; server.ServerName = "Classic6 Test Server"; server.Start(25565); string url = server.ServerUrl.ToString(); bool hasSet = false; while (true) { if (url != "" && !hasSet) { Clipboard.SetText(server.ServerUrl.ToString()); hasSet = true; } } }
/// <summary> /// Starts MCForge /// </summary> public static void Start() { Logger.OnRecieveLog += OnLog; //TODO init all the things Logger.Init(); ServerSettings.Init(); FileUtils.Init(); Manager.Init(); ClassicServer = new ClassicServer(); McServer = new MinecraftClassicServer(); Logger.Log("Starting MCForge"); McServer.MaxPlayers = ServerSettings.GetSettingInt("MaxPlayers"); McServer.MotD = ServerSettings.GetSetting("MOTD"); McServer.Name = ServerSettings.GetSetting("ServerName"); McServer.Port = ServerSettings.GetSettingInt("Port"); McServer.Private = !ServerSettings.GetSettingBoolean("Public"); Logger.Log(ClassicServer.Start(McServer)); Console.WriteLine("Testing event system.."); System.IO.File.WriteAllLines("url.txt", new[] { ClassicServer.ServerUrl }); if (ServerSettings.GetSettingBoolean("UsingConsole")) { Logger.OnRecieveLog -= OnLog; MCForgeConsole.Start(); } else { //new gui stuff } }
/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { //Send message to all clients. Create a method in ClassicServer to do this, which handles length & colors. Server.EnqueueToAllClients(new MessagePacket(0, "<" + Client.UserName + ">: " + Message)); }
/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { Client.PacketQueue.Enqueue(new DisconnectPlayerPacket("Invalid packet sent/recieved!")); }
/// <summary> /// Handles the packet. /// </summary> /// <param name="Server">The server.</param> /// <param name="Client">The client.</param> /// <remarks></remarks> public override void HandlePacket(ClassicServer Server, RemoteClient Client) { throw new NotImplementedException(); }
/// <summary> /// Deals with an incoming packet from a RemoteClient/ClassicServer /// </summary> /// <param name="Server">The server involved</param> /// <param name="Client">The RemoteClient involved</param> public abstract void HandlePacket(ClassicServer Server, RemoteClient Client);