Esempio n. 1
1
        public static void EncryptionKeyRequest(MinecraftClient client, IPacket _packet)
        {
            var packet = (EncryptionKeyRequestPacket)_packet;
            var random = RandomNumberGenerator.Create();
            client.SharedSecret = new byte[16];
            random.GetBytes(client.SharedSecret); // Generate a secure AES key

            if (packet.ServerId != "-") // Online mode
            {
                // Authenticate with minecraft.net
                var data = Encoding.ASCII.GetBytes(packet.ServerId)
                    .Concat(client.SharedSecret)
                    .Concat(packet.PublicKey).ToArray();
                var hash = Cryptography.JavaHexDigest(data);
                var webClient = new WebClient();
                string result = webClient.DownloadString("http://session.minecraft.net/game/joinserver.jsp?user="******"&sessionId=" + Uri.EscapeUriString(client.Session.SessionId) +
                    "&serverId=" + Uri.EscapeUriString(hash));
                if (result != "OK")
                    LogProvider.Log("Unable to verify session: " + result);
            }

            var parser = new AsnKeyParser(packet.PublicKey);
            var key = parser.ParseRSAPublicKey();

            // Encrypt shared secret and verification token
            var crypto = new RSACryptoServiceProvider();
            crypto.ImportParameters(key);
            var encryptedSharedSecret = crypto.Encrypt(client.SharedSecret, false);
            var encryptedVerification = crypto.Encrypt(packet.VerificationToken, false);
            var response = new EncryptionKeyResponsePacket(encryptedSharedSecret, encryptedVerification);
            client.SendPacket(response);
        }
Esempio n. 2
0
 public MinecraftPacket(MinecraftClient client, MinecraftPacket packet)
 {
     Client = client;
     Length = packet.Length;
     Id     = packet.Id;
     Data   = packet.Data;
 }
Esempio n. 3
0
 /// <summary>
 /// lerp size
 /// </summary>
 public SP3DWorldBorder(MinecraftClient client, double oldDiameter, double newDiameter, long speed) : base(client)
 {
     Action      = Data.WriteVarInt(1);
     OldDiameter = Data.WriteDouble(oldDiameter);
     NewDiameter = Data.WriteDouble(newDiameter);
     Speed       = Data.WriteVarLong(speed);
 }
Esempio n. 4
0
        public static void ChatMessage(MinecraftClient client, IPacket _packet)
        {
            var packet = (ChatMessagePacket)_packet;
            LogProvider.Log(packet.Message, LogImportance.High);

            client.OnChatMessage(new ChatMessageEventArgs(packet.Message, RemoveChatCodes(packet.Message)));
        }
Esempio n. 5
0
 public CH00Handshake(MinecraftClient client, Stream stream) : base(client, stream)
 {
     ProtocolVersion = Data.ReadVarInt();
     ServerAddress   = Data.ReadString();
     ServerPort      = Data.ReadUnsignedShort();
     NextState       = (ProtocolState)Data.ReadVarInt();
 }
Esempio n. 6
0
        public static void Disconnect(MinecraftClient client, IPacket _packet)
        {
            var packet = (DisconnectPacket)_packet;

            LogProvider.Log("Disconnected: " + packet.Reason);
            client.OnDisconnected(new DisconnectEventArgs(packet.Reason));
        }
Esempio n. 7
0
 public override void HandlePacket(MinecraftServer server, MinecraftClient client)
 {
     if (!client.ReadyToSpawn)
         return;
     client.Entity.Pitch = Pitch;
     client.Entity.Yaw = Yaw;
 }
Esempio n. 8
0
        public static void CreativeInventoryAction(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (CreativeInventoryActionPacket)_packet;

            if (packet.SlotIndex == -1)
            {
                var entity = new ItemEntity(client.Entity.GivenPosition +
                                            new Vector3(0, client.Entity.Size.Height, 0), packet.Item);
                entity.Velocity = MathHelper.FowardVector(client.Entity) * new Vector3(0.25);
                server.EntityManager.SpawnEntity(client.World, entity);
            }
            else if (packet.SlotIndex < client.Entity.Inventory.Length && packet.SlotIndex > 0)
            {
                client.Entity.Inventory[packet.SlotIndex] = packet.Item;
                if (packet.SlotIndex == client.Entity.SelectedSlot)
                {
                    var clients = server.EntityManager.GetKnownClients(client.Entity);
                    foreach (var _client in clients)
                    {
                        _client.SendPacket(new EntityEquipmentPacket(client.Entity.Id, EntityEquipmentPacket.EntityEquipmentSlot.HeldItem,
                                                                     client.Entity.Inventory[packet.SlotIndex]));
                    }
                }
            }
        }
Esempio n. 9
0
        public void Send(ref MinecraftClient client, GameStream stream)
        {
            byte[] array = File.ReadAllBytes(Config.IconFile);
            string image = Convert.ToBase64String(array);

            string responseStr = "{" +
                                 "\"version\": {" +
                                 "\"name\": \"" + MinecraftVersion.Current + "\"," +
                                 "\"protocol\": " + MinecraftVersion.Current.Protocol + "}," +
                                 "\"players\": {" +
                                 "\"max\":" + PlayerList.MaxPlayers + "," +
                                 "\"online\":" + PlayerList.Online + "," +
                                 "\"sample\": [{\"name\": \"CopperPenguin96\", \"id\":\"be57c0e9-0832-48a7-9940-2baf96b32f92\"}]}," +
                                 "\"description\": " + Chat.Format(Config.MessageOfTheDay, null) + "," +
                                 "\"favicon\": \"data:image/png;base64," + image + "\" }";


            var writer = File.CreateText("new2.json");

            writer.WriteLine(responseStr);
            writer.Flush();
            writer.Close();
            Protocol.Send(ref client, stream, Packet,
                          responseStr);
        }
Esempio n. 10
0
        public MinecraftClient newMinecraftClient()
        {
            MinecraftClient mcClient = new MinecraftClient();

            AddChild(mcClient);
            return(mcClient);
        }
Esempio n. 11
0
        public void Send(ref MinecraftClient client, GameStream stream)
        {
            int data = 0;

            switch (_entity.Identifier.Name)
            {
            case "item_frame":
                ItemFrame iFrame = (ItemFrame)_entity;
                data = iFrame.Rotation;
                break;

            case "falling_block":
                /*FallingBlock fBlock = (FallingBlock) _entity;
                 * data = fBlock.World.GetAtPosition(fBlock.SpawnPosition).State*/
                break;

            case "fishing_hook":
                FishingHook fHook = (FishingHook)_entity;
                data = fHook.HookedId;
                break;
            }

            Protocol.Send(ref client, stream, Packet,
                          _entity.Id, _entity.UniqueId.ToString(),
                          _entity.Type,
                          _entity.Position.X, _entity.Position.Y, _entity.Position.Z,
                          _entity.Position.Pitch, _entity.Position.Yaw,
                          data,
                          (short)_entity.Velocity.X,
                          (short)_entity.Velocity.Y,
                          (short)_entity.Velocity.Z);
        }
 public static void Animation(MinecraftClient client, MinecraftServer server, IPacket _packet)
 {
     var packet = (AnimationPacket)_packet;
     var clients = server.EntityManager.GetKnownClients(client.Entity);
     foreach (var _client in clients)
         _client.SendPacket(packet);
 }
Esempio n. 13
0
        public static void EntityAction(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (EntityActionPacket)_packet;

            switch (packet.Action)
            {
            case EntityActionPacket.EntityAction.Crouch:
                client.Entity.IsCrouching = true;
                break;

            case EntityActionPacket.EntityAction.Uncrouch:
                client.Entity.IsCrouching = false;
                break;

            case EntityActionPacket.EntityAction.StartSprinting:
                client.Entity.IsSprinting = true;
                break;

            case EntityActionPacket.EntityAction.StopSprinting:
                client.Entity.IsSprinting = false;
                break;

            case EntityActionPacket.EntityAction.LeaveBed:
                client.Entity.LeaveBed();
                break;
            }
            if (packet.Action != EntityActionPacket.EntityAction.LeaveBed) // NOTE: Does this matter?
            {
                // TODO ?
            }
        }
Esempio n. 14
0
        public static void EncryptionKeyResponse(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (EncryptionKeyResponsePacket)_packet;

            client.SharedKey = server.CryptoServiceProvider.Decrypt(packet.SharedSecret, false);
            client.SendPacket(new EncryptionKeyResponsePacket(new byte[0], new byte[0]));
        }
Esempio n. 15
0
        public void Send(ref MinecraftClient client, GameStream stream)
        {
            // manually send this packet
            VarInt id     = (byte)Packet;
            VarInt length = 0;

            VarInt arrayLength = _stats.Length;

            length += arrayLength.Length;
            foreach (Statistic stat in _stats)
            {
                length += stat.Id.Length;
                length += stat.Value.Length;
                length += stat.Category.Length;
            }

            // write the packet info
            stream.WriteVarInt(length);
            stream.WriteVarInt(id);

            // Write the length
            stream.WriteVarInt(arrayLength);

            // write each item
            foreach (Statistic stat in _stats)
            {
                stream.WriteVarInt(stat.Category);
                stream.WriteVarInt(stat.Id);
                stream.WriteVarInt(stat.Value);
            }

            stream.Flush();
        }
Esempio n. 16
0
        public static void PlayerLook(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (PlayerLookPacket)_packet;

            client.Entity.Pitch = packet.Pitch;
            client.Entity.Yaw   = packet.Yaw;
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        public SP35UnlockRecipes(MinecraftClient client, RecipeAction action,
                                 bool craftingRecipeBookOpen, bool craftingRecipeBookFilterActive,
                                 bool smeltingRecipeBookOpen, bool smeltingRecipeBookFilterActive, bool blastFurnaceRecipeBookOpen,
                                 bool blastFurnaceRecipeBookFilterActive, bool smokerRecipeBookOpen, bool smokerRecipeBookFilterActive,
                                 Identifier[] recipeIds, Identifier[] recipeIdsInit = null) : base(client)
        {
            Action = (RecipeAction)Data.WriteVarInt((int)action);
            CraftingRecipeBookOpen             = Data.WriteBoolean(craftingRecipeBookOpen);
            CraftingRecipeBookFilterActive     = Data.WriteBoolean(craftingRecipeBookFilterActive);
            SmeltingRecipeBookOpen             = Data.WriteBoolean(smeltingRecipeBookOpen);
            SmeltingRecipeBookFilterActive     = Data.WriteBoolean(smeltingRecipeBookFilterActive);
            BlastFurnaceRecipeBookOpen         = Data.WriteBoolean(blastFurnaceRecipeBookOpen);
            BlastFurnaceRecipeBookFilterActive = Data.WriteBoolean(blastFurnaceRecipeBookFilterActive);
            SmokerRecipeBookOpen         = Data.WriteBoolean(smokerRecipeBookOpen);
            SmokerRecipeBookFilterActive = Data.WriteBoolean(smokerRecipeBookFilterActive);

            Data.WriteVarInt(recipeIds.Length);
            RecipeIds = Data.WriteArray <Identifier, DataTypes.Identifier>(recipeIds);

            if (action == RecipeAction.Init)
            {
                if (recipeIdsInit != null)
                {
                    Data.WriteVarInt(recipeIdsInit.Length);
                    RecipeIdsInit = Data.WriteArray <Identifier, DataTypes.Identifier>(recipeIdsInit);
                }
                else
                {
                    throw new System.ArgumentNullException(nameof(recipeIdsInit), "recipeIdsInit should be provided when action is init!");
                }
            }
        }
Esempio n. 19
0
 public SP29EntityRotation(MinecraftClient client, int entityId, float yaw, float pitch, bool onGround) : base(client)
 {
     EntityId = Data.WriteVarInt(entityId);
     Yaw      = Data.WriteAngle(yaw);
     Pitch    = Data.WriteAngle(pitch);
     OnGround = Data.WriteBoolean(onGround);
 }
Esempio n. 20
0
 public override void HandlePacket(MinecraftServer server, MinecraftClient client)
 {
     switch (Action)
     {
         case EntityAction.Crouch:
             client.IsCrouching = true;
             break;
         case EntityAction.Uncrouch:
             client.IsCrouching = false;
             break;
         case EntityAction.StartSprinting:
             client.IsSprinting = true;
             break;
         case EntityAction.StopSprinting:
             client.IsSprinting = false;
             break;
         case EntityAction.LeaveBed:
             client.Entity.LeaveBed();
             break;
     }
     if (Action != EntityAction.LeaveBed) // NOTE: Does this matter?
     {
         // TODO ?
     }
 }
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         DataUtility.CreateString(PlayerName),
         DataUtility.CreateBoolean(Online),
         DataUtility.CreateInt16(Ping)));
 }
Esempio n. 22
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     byte[] payload = new byte[] { PacketId }
         .Concat(DataUtility.CreateInt32(EntityId))
         .Concat(new byte[] { (byte)DeltaX, (byte)DeltaY, (byte)DeltaZ }).ToArray();
     client.SendData(payload);
 }
Esempio n. 23
0
 public static void BlockChange(MinecraftClient client, IPacket _packet)
 {
   var packet = (BlockChangePacket)_packet;
   var position = new Coordinates3D(packet.X, packet.Y, packet.Z);
   client.World.SetBlockId(position, (short)packet.BlockType);
   client.World.SetMetadata(position, packet.BlockMetadata);
 }
 private void ClientForm_Load(object sender, EventArgs e)
 {
     Client              = new MinecraftClient(Program.Session);
     Client.ChatMessage += Client_ChatMessage;
     Client.LoggedIn    += Client_LoggedIn;
     Client.Connect(EndPoint);
 }
Esempio n. 25
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         DataUtility.CreateInt32((int)SpawnPosition.X),
         DataUtility.CreateInt32((int)SpawnPosition.Y),
         DataUtility.CreateInt32((int)SpawnPosition.Z)));
 }
Esempio n. 26
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     byte[] payload = new byte[] { PacketId, (byte)EntityIds.Length };
     foreach (int id in EntityIds)
         payload = payload.Concat(DataUtility.CreateInt32(id)).ToArray();
     client.SendData(payload);
 }
Esempio n. 27
0
        public static void ClientStatus(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (ClientStatusPacket)_packet;
            if (packet.Status == ClientStatusPacket.ClientStatus.InitialSpawn)
            {
                // Create a hash for session verification
                SHA1 sha1 = SHA1.Create();
                AsnKeyBuilder.AsnMessage encodedKey = AsnKeyBuilder.PublicKeyToX509(server.ServerKey);
                byte[] shaData = Encoding.UTF8.GetBytes(client.AuthenticationHash)
                    .Concat(client.SharedKey)
                    .Concat(encodedKey.GetBytes()).ToArray();
                string hash = Cryptography.JavaHexDigest(shaData);

                // Talk to session.minecraft.net
                if (server.Settings.OnlineMode)
                {
                    var webClient = new WebClient();
                    var webReader = new StreamReader(webClient.OpenRead(
                        new Uri(string.Format(sessionCheckUri, client.Username, hash))));
                    string response = webReader.ReadToEnd();
                    webReader.Close();
                    if (response != "YES")
                    {
                        client.SendPacket(new DisconnectPacket("Failed to verify username!"));
                        return;
                    }
                }

                server.LogInPlayer(client);
            }
            else if (packet.Status == ClientStatusPacket.ClientStatus.Respawn)
            {
                // TODO
            }
        }
Esempio n. 28
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     byte[] payload = new byte[] { PacketId, WindowId }
         .Concat(DataUtility.CreateInt16(Index))
         .Concat(Slot.GetData()).ToArray();
     client.SendData(payload);
 }
        public override void SendPacket(MinecraftServer server, MinecraftClient client)
        {
            // TODO: Refactor like mad
            var buffer = new List<byte>();
            buffer.Add(PacketId);
            buffer.AddRange(DataUtility.CreateInt32(Item.Id));
            if (Item.Item.Empty)
                buffer.AddRange(DataUtility.CreateInt16(-1));
            else
            {
                buffer.AddRange(DataUtility.CreateInt16((short)Item.Item.Id)); // TODO: Make slots use signed shorts
                buffer.Add(Item.Item.Count);
                buffer.AddRange(DataUtility.CreateInt16((short)Item.Item.Metadata));
                buffer.AddRange(DataUtility.CreateInt16(-1)); // TODO: Nbt appears to be sent here
            }

            buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.X));
            buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.Y));
            buffer.AddRange(DataUtility.CreateAbsoluteInteger(Item.Position.Z));
            buffer.AddRange(DataUtility.CreatePackedByte(Item.Pitch));
            buffer.AddRange(DataUtility.CreatePackedByte(Item.Pitch));
            buffer.AddRange(DataUtility.CreatePackedByte(Item.Yaw));

            client.SendData(buffer.ToArray());
        }
Esempio n. 30
0
        public void Receive(ref MinecraftClient client, GameStream stream)
        {
            string          username  = stream.ReadString();
            string          idRequest = new WebClient().DownloadString(PlayerDatabase.uuidRetrieval + username).Trim();
            UniqueIdRequest request   = JsonConvert.DeserializeObject <UniqueIdRequest>(idRequest);

            for (int x = 0; x < PlayerDatabase.Players.Count; x++)
            {
                Player player = PlayerDatabase.Players[x];
                if (player.UniqueId.toString().Remove('-') == request.UniqueId)
                {
                    player.Username = username; // Make sure username is updated
                    PlayerDatabase.Players.RemoveAt(x);
                    PlayerDatabase.Players.Add(player);
                    PlayerDatabase.Save();
                }
            }

            Logger.Log($"{username} is trying to connect. ({request.UniqueId})");

            if (!Config.EnableEncryption)
            {
                new LoginSuccess(false).Send(ref client, stream);
            }
            else
            {
                new EncryptionRequest().Send(ref client, stream);
            }
        }
Esempio n. 31
0
 public static void KeepAlive(MinecraftClient client, MinecraftServer server, IPacket _packet)
 {
     var packet = (KeepAlivePacket)_packet;
     // TODO: Confirm value validity
     client.LastKeepAlive = DateTime.Now;
     client.Ping = (short)(client.LastKeepAlive - client.LastKeepAliveSent).TotalMilliseconds;
 }
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         DataUtility.CreateInt32(EntityId),
         DataUtility.CreateInt16(SlotIndex),
         Item.GetData()));
 }
Esempio n. 33
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     byte[] data = new byte[] {PacketId}
         .Concat(DataUtility.CreateInt32(EntityId))
         .Concat(new byte[] {(byte)Animation}).ToArray();
     client.SendData(data);
 }
Esempio n. 34
0
 public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client)
 {
     if (!Client.ReadyToSpawn)
         return;
     Client.Entity.Pitch = Pitch;
     Client.Entity.Yaw = Yaw;
 }
Esempio n. 35
0
 public CP12PlayerPosition(MinecraftClient client, Stream stream) : base(client, stream)
 {
     X        = Data.ReadDouble();
     FeetY    = Data.ReadDouble();
     Z        = Data.ReadDouble();
     OnGround = Data.ReadBoolean();
 }
Esempio n. 36
0
        public SP20ChunkData(MinecraftClient client, int chunkX, int chunkZ, bool fullChunk, int primaryBitMask,
                             TagCompound heightmaps, int[] biomes, sbyte[] data, TagCompound[] blockEntities) : base(client)
        {
            ChunkX         = base.Data.WriteInt(chunkX);
            ChunkZ         = base.Data.WriteInt(chunkZ);
            FullChunk      = base.Data.WriteBoolean(fullChunk);
            PrimaryBitMask = base.Data.WriteVarInt(primaryBitMask);
            Heightmaps     = base.Data.WriteNBT(new NBTFile(heightmaps)).Root;

            if (fullChunk)
            {
                base.Data.WriteVarInt(biomes.Length);
                Biomes = base.Data.WriteArray <int, VarInt>(biomes);
            }

            base.Data.WriteVarInt(data.Length);
            Data = base.Data.WriteByteArray(data);
            base.Data.WriteVarInt(blockEntities.Length);
            BlockEntities = blockEntities;

            for (int i = 0; i < blockEntities.Length; i++)
            {
                base.Data.WriteNBT(new NBTFile(blockEntities[i]));
            }
        }
Esempio n. 37
0
        public static void Respawn(MinecraftClient client, IPacket _packet)
        {
            var packet = (RespawnPacket)_packet;

            // TODO: Dimension change
            client.IsSpawned = false;
        }
Esempio n. 38
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         new[] {WindowId},
         DataUtility.CreateInt16(Index),
         Slot.GetData()));
 }
Esempio n. 39
0
        public override void HandlePacket(MinecraftServer server, MinecraftClient client)
        {
            var target = server.EntityManager.GetEntity(TargetId);
            if (target == null || 
                server.EntityManager.GetEntityWorld(target) != server.EntityManager.GetEntityWorld(client.Entity) ||
                target.Position.DistanceTo(client.Entity.Position) > client.Reach)
                return;

            if (target is LivingEntity)
            {
                // Do damage
                if (LeftClick)
                {
                    var livingEntity = target as LivingEntity;
                    if (livingEntity.Invulnerable)
                        return;

                    var item = client.Entity.SelectedItem.Item;
                    if (item == null)
                        item = new AirBlock();
                    client.Entity.FoodExhaustion += 0.3f;
                    livingEntity.Damage(item.AttackDamage);
                    livingEntity.Velocity /*+*/= DataUtility.RotateY(new Vector3(0, 0, client.Entity.IsSprinting ? 10 : 3),
                                                                     // TODO: Knockback enchantment
                                                                     DataUtility.DegreesToRadians(client.Entity.Yaw));
                    if (livingEntity is PlayerEntity)
                    {
                        (livingEntity as PlayerEntity).LastDamageType = DamageType.Combat;
                        (livingEntity as PlayerEntity).LastAttackingEntity = client.Entity;
                    }
                    // TODO: Physics
                }
            }
        }
Esempio n. 40
0
 public static void EncryptionKeyResponse(MinecraftClient client, IPacket _packet)
 {
     // Enable encryption
     client.Stream = new MinecraftStream(new AesStream(new BufferedStream(client.NetworkStream), client.SharedSecret));
     client.SendPacket(new ClientStatusPacket(ClientStatusPacket.ClientStatus.InitialSpawn));
     LogProvider.Log("Logged in.");
 }
Esempio n. 41
0
 /// <summary>
 /// update gamemode
 /// </summary>
 public SP32PlayerInfo(MinecraftClient client, UUID uuid, Gamemode gamemode) : base(client)
 {
     Action = Data.WriteVarInt(1);
     Data.WriteVarInt(1);
     Uuid     = Data.WriteUuid(uuid);
     Gamemode = (Gamemode)Data.WriteVarInt((int)gamemode);
 }
Esempio n. 42
0
 public static void Handshake(MinecraftClient client, MinecraftServer server, IPacket _packet)
 {
     var packet = (HandshakePacket)_packet;
     if (packet.ProtocolVersion < PacketReader.ProtocolVersion)
     {
         client.SendPacket(new DisconnectPacket("Outdated client!"));
         return;
     }
     if (packet.ProtocolVersion > PacketReader.ProtocolVersion)
     {
         client.SendPacket(new DisconnectPacket("Outdated server!"));
         return;
     }
     if (server.Clients.Any(c => c.Username == packet.Username))
     {
         client.SendPacket(new DisconnectPacket(""));
         return;
     }
     client.Username = packet.Username;
     client.Hostname = packet.ServerHostname + ":" + packet.ServerPort;
     if (server.Settings.OnlineMode)
         client.AuthenticationHash = CreateHash();
     else
         client.AuthenticationHash = "-";
     if (server.Settings.EnableEncryption)
         client.SendPacket(CreateEncryptionRequest(client, server));
     else
         server.LogInPlayer(client);
 }
Esempio n. 43
0
 /// <summary>
 /// update ping
 /// </summary>
 public SP32PlayerInfo(MinecraftClient client, UUID uuid, int ping) : base(client)
 {
     Action = Data.WriteVarInt(2);
     Data.WriteVarInt(1);
     Uuid = Data.WriteUuid(uuid);
     Ping = Data.WriteVarInt(ping);
 }
Esempio n. 44
0
        private static void AddChunk(MinecraftClient client, int x, int z, ushort primaryBitMap, ushort addBitMap, bool lightIncluded, bool groundUp, byte[] data)
        {
            var coordinates = new Coordinates2D(x, z);
            var relativePosition = GetRelativeChunkPosition(coordinates);
            var chunk = new Chunk(relativePosition);
            var sectionCount = GetSectionCount(primaryBitMap);

            // Run through the sections
            // TODO: Support block IDs >255
            for (int y = 0; y < 16; y++)
            {
                if ((primaryBitMap & (1 << y)) > 0)
                {
                    // Blocks
                    Array.Copy(data, y * BlockDataLength, chunk.Sections[y].Blocks, 0, BlockDataLength);
                    // Metadata
                    Array.Copy(data, (BlockDataLength * sectionCount) + (y * NibbleDataLength),
                        chunk.Sections[y].Metadata.Data, 0, NibbleDataLength);
                    // Light
                    Array.Copy(data, ((BlockDataLength + NibbleDataLength) * sectionCount) + (y * NibbleDataLength),
                        chunk.Sections[y].BlockLight.Data, 0, NibbleDataLength);
                    // Sky light
                    if (lightIncluded)
                    {
                        Array.Copy(data, ((BlockDataLength + NibbleDataLength + NibbleDataLength) * sectionCount) + (y * NibbleDataLength),
                            chunk.Sections[y].SkyLight.Data, 0, NibbleDataLength);
                    }
                }
            }
            if (groundUp)
                Array.Copy(data, data.Length - chunk.Biomes.Length, chunk.Biomes, 0, chunk.Biomes.Length);
            client.World.SetChunk(coordinates, chunk);
            //client.OnChunkRecieved(new ChunkRecievedEventArgs(position, new ReadOnlyChunk(chunk)));
        }
 public SP07AcknowledgePlayerDigging(MinecraftClient client, Position.Int location, int block, ActionType status, bool successful) : base(client)
 {
     Location   = Data.WritePosition(location);
     Block      = Data.WriteVarInt(block);
     Status     = (ActionType)Data.WriteVarInt((int)status);
     Successful = Data.WriteBoolean(successful);
 }
Esempio n. 46
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         DataUtility.CreateString(Channel),
         DataUtility.CreateInt16((short)Message.Length),
         Message));
 }
Esempio n. 47
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     client.SendData(CreateBuffer(
         DataUtility.CreateInt16(Health),
         DataUtility.CreateInt16(Food),
         DataUtility.CreateFloat(FoodSaturation)));
 }
Esempio n. 48
0
        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());
        }
Esempio n. 49
0
 public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client)
 {
     switch (Action)
     {
         case EntityAction.Crouch:
             Client.IsCrouching = true;
             break;
         case EntityAction.Uncrouch:
             Client.IsCrouching = false;
             break;
         case EntityAction.StartSprinting:
             Client.IsSprinting = true;
             break;
         case EntityAction.StopSprinting:
             Client.IsSprinting = false;
             break;
     }
     if (Action != EntityAction.LeaveBed) // NOTE: Does this matter?
     {
         this.EntityId = Client.Entity.Id;
         for (int i = 0; i < 
              Server.GetClientsInWorld(Server.GetClientWorld(Client)).Count(); i++)
         {
             if (Server.Clients [i] != Client)
                 Server.Clients [i].SendPacket(this);
         }
         Server.ProcessSendQueue();
     }
 }
 public static void EntityAction(MinecraftClient client, MinecraftServer server, IPacket _packet)
 {
     var packet = (EntityActionPacket)_packet;
     switch (packet.Action)
     {
         case EntityActionPacket.EntityAction.Crouch:
             client.Entity.IsCrouching = true;
             break;
         case EntityActionPacket.EntityAction.Uncrouch:
             client.Entity.IsCrouching = false;
             break;
         case EntityActionPacket.EntityAction.StartSprinting:
             client.Entity.IsSprinting = true;
             break;
         case EntityActionPacket.EntityAction.StopSprinting:
             client.Entity.IsSprinting = false;
             break;
         case EntityActionPacket.EntityAction.LeaveBed:
             client.Entity.LeaveBed();
             break;
     }
     if (packet.Action != EntityActionPacket.EntityAction.LeaveBed) // NOTE: Does this matter?
     {
         // TODO ?
     }
 }
Esempio n. 51
0
 public override void SendPacket(MinecraftServer server, MinecraftClient client)
 {
     if (Entity.Data != 0)
     {
         client.SendData(CreateBuffer(
             DataUtility.CreateInt32(Entity.Id),
             new[] { Entity.EntityType },
             DataUtility.CreateAbsoluteInteger(Entity.Position.X),
             DataUtility.CreateAbsoluteInteger(Entity.Position.Y),
             DataUtility.CreateAbsoluteInteger(Entity.Position.Z),
             DataUtility.CreateInt32(Entity.Data),
             DataUtility.CreateInt16((short)Entity.Velocity.X),
             DataUtility.CreateInt16((short)Entity.Velocity.Y),
             DataUtility.CreateInt16((short)Entity.Velocity.Z)));
     }
     else
     {
         client.SendData(CreateBuffer(
             DataUtility.CreateInt32(Entity.Id),
             new[] { Entity.EntityType },
             DataUtility.CreateAbsoluteInteger(Entity.Position.X),
             DataUtility.CreateAbsoluteInteger(Entity.Position.Y),
             DataUtility.CreateAbsoluteInteger(Entity.Position.Z),
             DataUtility.CreateInt32(Entity.Data)));
     }
 }
Esempio n. 52
0
        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");
        }
Esempio n. 53
0
        public static void ChatMessage(MinecraftClient client, IPacket _packet)
        {
            var packet = (ChatMessagePacket)_packet;

            LogProvider.Log(packet.Message, LogImportance.High);

            client.OnChatMessage(new ChatMessageEventArgs(packet.Message, RemoveChatCodes(packet.Message)));
        }
Esempio n. 54
0
 public static void LoginRequest(MinecraftClient client, IPacket _packet)
 {
     var packet = (LoginRequestPacket)_packet;
     client.EntityId = packet.EntityId;
     client.IsLoggedIn = true;
     client.World = new ReadOnlyWorld();
     client.OnLoggedIn();
 }
Esempio n. 55
0
 public SL01EncryptionRequest(MinecraftClient client, string serverId, sbyte[] publicKey, sbyte[] verifyToken) : base(client)
 {
     ServerId = Data.WriteString(serverId);
     Data.WriteVarInt(publicKey.Length);
     PublicKey = Data.WriteByteArray(publicKey);
     Data.WriteVarInt(verifyToken.Length);
     VerifyToken = Data.WriteByteArray(verifyToken);
 }
Esempio n. 56
0
        public static void KeepAlive(MinecraftClient client, MinecraftServer server, IPacket _packet)
        {
            var packet = (KeepAlivePacket)_packet;

            // TODO: Confirm value validity
            client.LastKeepAlive = DateTime.Now;
            client.Ping          = (short)(client.LastKeepAlive - client.LastKeepAliveSent).TotalMilliseconds;
        }
Esempio n. 57
0
        public MinecraftPacket(MinecraftClient client)
        {
            Client = client;
            PacketAttribute attribute = GetType().GetCustomAttribute <PacketAttribute>(false);

            Id   = attribute.Id;
            Data = new MinecraftStream((RecyclableMemoryStream)RMSManager.Get().GetStream(GetType().FullName));
        }
Esempio n. 58
0
        public void Receive(ref MinecraftClient client, GameStream stream)
        {
            long pingReceived = stream.ReadLong();
            var  packet       = new Pong(pingReceived);

            packet.Send(ref client, stream);
            client.Client.Close(); // Ensure to close so that the client can keep pinging
        }
 public override void HandlePacket(MinecraftServer Server, ref MinecraftClient Client)
 {
     Client.ChatMode = this.ChatMode;
     Client.Locale = this.Locale;
     Client.MaxViewDistance = this.ViewDistance;
     Client.ColorsEnabled = this.ColorsEnabled;
     // Difficulty is discarded
 }
Esempio n. 60
0
 public override void HandlePacket(MinecraftServer server, MinecraftClient client)
 {
     LogProvider.Log("<" + client.Username + "> " + Message, LogImportance.Medium);
     var args = new ChatMessageEventArgs(client, Message);
     server.OnChatMessage(args);
     if (!args.Handled)
         server.SendChat("<" + client.Username + "> " + Message);
 }