Beispiel #1
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     buffer.WriteVarInt(PacketID);
     buffer.WriteLong(Globals.WorldAge);
     buffer.WriteLong(Globals.TimeOfDay);
     buffer.FlushData();
 }
        private void HandleStatusRequest(ClientWrapper state, MSGBuffer buffer)
        {
            buffer.WriteVarInt(PacketID);

            Serverping serverlistping = new Serverping()
            {
                Version = new ServerpingVersion()
                {
                    Name     = Globals.ProtocolName,
                    Protocol = Globals.ProtocolVersion
                },
                Players = new ServerpingPlayers()
                {
                    Max    = Globals.MaxPlayers,
                    Online = Globals.PlayersOnline,
                },
                Description = new ServerpingDescription()
                {
                    Motd = Globals.Config.Motd
                },
                Favicon = (Globals.Favicon == null) ? "" : Globals.Favicon
            };

            buffer.WriteString(JsonConvert.SerializeObject(serverlistping));
            buffer.FlushData();
        }
Beispiel #3
0
        public byte[] Export()
        {
            var buffer = new MSGBuffer(new byte[0]);

            buffer.WriteInt(Blocks.Length);

            for (var i = 0; i < Blocks.Length; i++)
            {
                buffer.WriteUShort(Blocks[i]);
            }

            buffer.WriteInt(Blocks.Length);
            for (var i = 0; i < Blocks.Length; i++)
            {
                buffer.WriteUShort((ushort)Metadata[i]);
            }

            buffer.WriteInt(Blocklight.Data.Length);
            buffer.Write(Blocklight.Data);

            buffer.WriteInt(Skylight.Data.Length);
            buffer.Write(Skylight.Data);

            buffer.WriteInt(BiomeId.Length);
            buffer.Write(BiomeId);

            return(buffer.ExportWriter);
        }
Beispiel #4
0
        public byte[] GetBytes(bool unloader = false)
        {
            var writer = new MSGBuffer(new byte[0]);

            if (!unloader)
            {
                writer.WriteInt(X);
                writer.WriteInt(Z);
                writer.WriteBool(true);
                writer.WriteUShort(0xffff);                 // bitmap
                writer.WriteVarInt((Blocks.Length * 2) + Skylight.Data.Length + Blocklight.Data.Length + BiomeId.Length);

                for (var i = 0; i < Blocks.Length; i++)
                {
                    //if (i == null) writer.WriteUShort((0 << 4) | 0);
                    writer.WriteUShort((ushort)((Blocks[i] << 4) | Metadata[i]));
                }

                writer.Write(Blocklight.Data);
                writer.Write(Skylight.Data);

                writer.Write(BiomeId);
            }
            else
            {
                writer.WriteInt(X);
                writer.WriteInt(Z);
                writer.WriteBool(true);
                writer.WriteUShort(0);
                writer.WriteVarInt(0);
            }
            return(writer.ExportWriter);
        }
Beispiel #5
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     buffer.WriteVarInt(PacketID);
     buffer.WriteString(Arguments[0].ToString());
     buffer.WriteString(Arguments[1].ToString());
     buffer.FlushData();
 }
        private void HandleLoginRequest(ClientWrapper state, MSGBuffer buffer)
        {
            string username = buffer.ReadUsername();
            string UUID     = getUUID(username);

            Program.Logger.Log(LogType.Warning, "Logging in : " + UUID);
            try
            {
                new LoginSuccess().Write(state, buffer, new object[] { UUID, username });
            } catch (Exception e)
            {
                Globals.Logger.Log(LogType.Error, e.Message);
            }
            Globals.LastUniqueID++;
            state.Player = new Player()
            {
                UUID = UUID, Username = username, UniqueServerID = Globals.LastUniqueID, Wrapper = state, Gamemode = Gamemode.Creative, Dimension = 0
            };
            state.PlayMode = true; //Toggle the boolean to PlayMode so we know we are not handling Status stuff anymore.

            if (!Globals.UseCompression)
            {
                new SetCompression().Write(state, buffer, new object[] { -1 }); //Turn off compression.
            }
            new JoinGame().Write(state, buffer, new object[] { state.Player });
            //  new MapChunkBulk ().Write (state, buffer, new object[0]);
            new SpawnPosition().Write(state, buffer, new object[0]);
            // new PlayerPositionAndLook().Write(state, buffer, new object[0]);
            //new KeepAlive ().Write (state, buffer, new object[0]);
            state.StartKeepAliveTimer();
            state.Player.AddToList();
            state.Player.SendChunksFromPosition();
        }
Beispiel #7
0
        public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            int id = new Random().Next(0, 100);

            buffer.WriteVarInt(PacketID);
            buffer.WriteVarInt(id);
            buffer.FlushData();
        }
        public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            Vector3 D    = Globals.WorldGen.GetSpawnPoint();
            long    Data = (((long)D.X & 0x3FFFFFF) << 38) | (((long)D.Y & 0xFFF) << 26) | ((long)D.Z & 0x3FFFFFF);

            buffer.WriteVarInt(PacketID);
            buffer.WriteLong(Data);
            buffer.FlushData();
        }
Beispiel #9
0
        public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            float Yaw      = buffer.ReadFloat();
            float Pitch    = buffer.ReadFloat();
            bool  OnGround = buffer.ReadBool();

            state.Player.Yaw   = Yaw;
            state.Player.Pitch = Pitch;
        }
Beispiel #10
0
 protected Package(ClientWrapper client)
 {
     if (!client.TcpClient.Connected)
     {
         return;
     }
     Client = client;
     Stream = client.TcpClient.GetStream();
     Buffer = new MSGBuffer(client);
 }
Beispiel #11
0
 protected Package(ClientWrapper client, MSGBuffer buffer)
 {
     if (!client.TcpClient.Connected)
     {
         return;
     }
     Client = client;
     Stream = client.TcpClient.GetStream();
     Buffer = buffer;
 }
Beispiel #12
0
        public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            Player targetplayer = state.Player;
            double X            = buffer.ReadDouble();
            double FeetY        = buffer.ReadDouble();
            double Z            = buffer.ReadDouble();
            bool   OnGround     = buffer.ReadBool();

            targetplayer.Coordinates = new Vector3(X, FeetY, Z);
            state.Player.OnGround    = OnGround;
        }
Beispiel #13
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     buffer.WriteVarInt(0x08);
     buffer.WriteDouble(Globals.WorldGen.GetSpawnPoint().X);
     buffer.WriteDouble(Globals.WorldGen.GetSpawnPoint().Y);
     buffer.WriteDouble(Globals.WorldGen.GetSpawnPoint().Z);
     buffer.WriteFloat(0f);
     buffer.WriteFloat(0f);
     buffer.WriteByte(111);
     buffer.FlushData();
 }
Beispiel #14
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     buffer.WriteVarInt(PacketID);
     buffer.WriteInt(state.Player.UniqueServerID);
     buffer.WriteByte((byte)state.Player.Gamemode);
     buffer.WriteInt(state.Player.Dimension);
     buffer.WriteByte((byte)Globals.Difficulty);
     buffer.WriteByte((byte)Globals.MaxPlayers);
     buffer.WriteString(Globals.LVLType);
     buffer.WriteBool(false);
     Globals.Logger.Log(Utils.LogType.Error, Globals.LVLType);
     buffer.FlushData();
 }
Beispiel #15
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     if (state.PlayMode)
     {
         buffer.WriteVarInt(PacketID);
     }
     else
     {
         buffer.WriteVarInt(0x00);
     }
     buffer.WriteString(JsonConvert.SerializeObject((ChatMessage)Arguments[0]));
     buffer.FlushData();
 }
Beispiel #16
0
        public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            string Locale       = buffer.ReadString();
            byte   ViewDistance = (byte)buffer.ReadByte();
            byte   ChatFlags    = (byte)buffer.ReadByte();
            bool   ChatColours  = buffer.ReadBool();
            byte   SkinParts    = (byte)buffer.ReadByte();

            state.Player.Locale       = Locale;
            state.Player.ViewDistance = ViewDistance;
            state.Player.ChatColours  = ChatColours;
            state.Player.ChatFlags    = ChatFlags;
            state.Player.SkinParts    = SkinParts;
        }
Beispiel #17
0
 public void Broadcast(Level level, bool self = true, Player source = null)
 {
     foreach (var i in level.OnlinePlayers)
     {
         if (!self && i == source)
         {
             continue;
         }
         Client = i.Wrapper;
         Buffer = new MSGBuffer(i.Wrapper);
         Stream = i.Wrapper.TcpClient.GetStream();
         Write();
     }
 }
Beispiel #18
0
        public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            double X        = buffer.ReadDouble();
            double FeetY    = buffer.ReadDouble();
            double Z        = buffer.ReadDouble();
            float  Yaw      = buffer.ReadFloat();
            float  Pitch    = buffer.ReadFloat();
            bool   OnGround = buffer.ReadBool();

            state.Player.OnGround    = OnGround;
            state.Player.Yaw         = Yaw;
            state.Player.Pitch       = Pitch;
            state.Player.Coordinates = new Vector3(X, FeetY, Z);
        }
Beispiel #19
0
        private void HandleClientCommNew(TcpClient tcpClient, NetworkStream clientStream)
        {
            ClientWrapper Client = new ClientWrapper(tcpClient);

            while (tcpClient.Connected)
            {
                try
                {
                    MSGBuffer Buf          = new MSGBuffer(Client, clientStream);
                    int       ReceivedData = clientStream.Read(Buf.BufferedData, 0, Buf.BufferedData.Length);
                    if (ReceivedData > 0)
                    {
                        int length = Buf.ReadVarInt();
                        Buf.Size = length;
                        int  packid = Buf.ReadVarInt();
                        bool found  = false;
                        foreach (IPacket i in Globals.Packets)
                        {
                            if (i.PacketID == packid && i.IsPlayePacket == Client.PlayMode)
                            {
                                i.Read(Client, Buf, new object[0]);
                                found = true;
                                break;
                            }
                        }
                        if (!found)
                        {
                            Globals.Logger.Log(LogType.Error, "Unknown packet received! \"0x" + packid.ToString("X2") + "\"");
                        }
                    }
                    else
                    {
                        break;
                    }
                } catch (Exception e)
                {
                    Globals.Logger.Log(LogType.Error, e.Message);
                    new Disconnect().Write(Client, new MSGBuffer(Client), new object[] { "Server threw an exception!" });
                    break;
                }
            }
            //Close the connection with the client. :)
            Client.StopKeepAliveTimer();
            if (Client.Player != null)
            {
                Globals.Players.Remove(Client.Player);
            }
            Client.TCPClient.Close();
        }
        public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
        {
            int    Protocol = buffer.ReadVarInt();
            string Host     = buffer.ReadString();
            short  Port     = buffer.ReadShort();
            int    State    = buffer.ReadVarInt();

            switch (State)
            {
            case 1:
                HandleStatusRequest(state, buffer);
                break;

            case 2:
                HandleLoginRequest(state, buffer);
                break;
            }
        }
Beispiel #21
0
        public override ChunkColumn LoadChunk(int x, int z)
        {
            var u      = Globals.Decompress(File.ReadAllBytes(_folder + "/" + x + "." + z + ".cfile"));
            var reader = new MSGBuffer(u);

            var blockLength = reader.ReadInt();
            var block       = reader.ReadUShortLocal(blockLength);

            var metalength = reader.ReadInt();
            var blockmeta  = reader.ReadShortLocal(metalength);

            //var blockies = new Block[block.Length];
            //var blocks = new ushort[block.Length];
            //for (var i = 0; i < block.Length; i++)
            //{
            //	blockies[i] = new Block(block[i]) {Metadata = (byte) blockmeta[i]};
            //}


            var skyLength = reader.ReadInt();
            var skylight  = reader.Read(skyLength);

            var lightLength = reader.ReadInt();
            var blocklight  = reader.Read(lightLength);

            var biomeIdLength = reader.ReadInt();
            var biomeId       = reader.Read(biomeIdLength);

            var cc = new ChunkColumn
            {
                Blocks     = block,
                Metadata   = blockmeta,
                Blocklight = { Data = blocklight },
                Skylight   = { Data = skylight },
                BiomeId    = biomeId,
                X          = x,
                Z          = z
            };

            Debug.WriteLine("We should have loaded " + x + ", " + z);
            return(cc);
            //throw new NotImplementedException();
        }
Beispiel #22
0
        public PackageFactory(ClientWrapper client, MSGBuffer buffer)
        {
            #region Ping

            PingPackages.Add(new Handshake(client, buffer));
            PingPackages.Add(new Ping(client, buffer));
            PingPackages.Add(new StevenBug(client, buffer));

            #endregion

            LoginPackages.Add(new EncryptionResponse(client, buffer));

            #region Play

            PlayPackages.Add(new ChatMessage(client, buffer));
            PlayPackages.Add(new Animation(client, buffer));
            PlayPackages.Add(new PlayerBlockPlacement(client, buffer));
            PlayPackages.Add(new HeldItemChange(client, buffer));
            PlayPackages.Add(new EntityAction(client, buffer));
            PlayPackages.Add(new PlayerAbilities(client, buffer));
            PlayPackages.Add(new PluginMessage(client, buffer));
            PlayPackages.Add(new KeepAlive(client, buffer));
            PlayPackages.Add(new PlayerPositionAndLook(client, buffer));
            PlayPackages.Add(new PlayerPosition(client, buffer));
            PlayPackages.Add(new PlayerLook(client, buffer));
            PlayPackages.Add(new OnGround(client, buffer));
            PlayPackages.Add(new ClientSettings(client, buffer));
            PlayPackages.Add(new PlayerDigging(client, buffer));
            PlayPackages.Add(new ClientStatus(client, buffer));
            PlayPackages.Add(new ClickWindow(client, buffer));
            PlayPackages.Add(new UseEntity(client, buffer));

            #endregion

            _client = client;
            _buffer = buffer;
        }
Beispiel #23
0
 public UseEntity(ClientWrapper client, MSGBuffer buffer)
     : base(client, buffer)
 {
     ReadId = 0x02;
 }
Beispiel #24
0
 public Handshake(ClientWrapper client, MSGBuffer buffer) : base(client, buffer)
 {
     ReadId = 0x00;
     SendId = 0x00;
 }
Beispiel #25
0
 public EntityLook(ClientWrapper client, MSGBuffer buffer) : base(client, buffer)
 {
     SendId = 0x16;
 }
 public EncryptionResponse(ClientWrapper client, MSGBuffer buffer) : base(client, buffer)
 {
     ReadId = 0x01;
 }
Beispiel #27
0
 public Animation(ClientWrapper client, MSGBuffer buffer) : base(client, buffer)
 {
     SendId = 0x0B;
     ReadId = 0x0A;
 }
Beispiel #28
0
 public void Write(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
     buffer.WriteVarInt(PacketID);
     buffer.Write((byte[])Arguments[0]);
     buffer.FlushData();
 }
Beispiel #29
0
 public void Read(ClientWrapper state, MSGBuffer buffer, object[] Arguments)
 {
 }
Beispiel #30
0
 public JoinGame(ClientWrapper client, MSGBuffer buffer) : base(client, buffer)
 {
     SendId = 0x01;
 }