示例#1
0
 /// <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);
 }
示例#2
0
 /// <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));
     }
 }
示例#3
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();
            }
        }
示例#4
0
        /// <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);
        }
示例#5
0
        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;
                }
            }
        }
示例#6
0
        /// <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();
 }
示例#10
0
 /// <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);