예제 #1
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
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            MinecraftClassicServer model = new MinecraftClassicServer();
            model.Port = 25565;
            model.MaxPlayers = 25;
            model.Name = "Test LibMinecraft Classic Server";
            model.Private = false;

            ClassicServer server = new ClassicServer();
            server.OnPlayerConnectionChanged += new EventHandler<PlayerConnectionEventArgs>(server_OnPlayerConnectionChanged);
            Console.WriteLine(server.Start(model));

            while (true)
            {
                string input = Console.ReadLine();
                if (input.StartsWith("motd "))
                    model.MotD = input.Substring(5);
            }
        }
 /// <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);
 }
예제 #4
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);
 /// <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>
 /// 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>
        /// 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);
        }