Example #1
0
        public override void FromClient(PacketFromClient packet)
        {
            switch (packet.PacketID)
            {
            #region Block place/break

                case PlayerDigging.ID:
                    PlayerDigging pd = packet as PlayerDigging;
                    if (pd.Status == PlayerDigging.StatusEnum.FinishedDigging)
                        QueueToAll(new BlockChange(pd.Position, BlockID.Air));
                    return;
            /* TODO: fix: crashes with new items such as pot
                case PlayerBlockPlacement.ID:
                    PlayerBlockPlacement pbp = packet as PlayerBlockPlacement;
                    if(pbp.Item == null)
                        return;
                    var bc = new BlockChange(pbp.BlockPosition.Offset(pbp.FaceDirection), pbp.Item.ItemID);
                    bc.Metadata = (byte)pbp.Item.Uses;
                    QueueToAll(bc);
                    return;*/

            #endregion

			#region Moving Looking
			
                case PlayerPositionLookClient.ID:
                    {
                        PlayerPositionLookClient p = (PlayerPositionLookClient)packet;
    			
                        SetPosition(p.Position, true);
                        Pitch = p.Pitch;
                        Yaw = p.Yaw;
    			
                        if (Player.Settings.Cloaked == null)
                        {
                            EntityTeleport et = new EntityTeleport(Player.EntityID, p.Position);
                            et.Yaw = p.Yaw;
                            et.Pitch = p.Pitch;
                            QueueToAllButMe(et);

                            QueueToAllButMe(new EntityHeadYaw(Player.EntityID, Yaw));
                        }
                        CheckPosition();
                        return;
                    }
                
			#endregion
			
                case UseEntity.ID:
                    //UseEntity ue = (UseEntity)packet;
                    //Sender see hurt
                    //New: hurt attacker, old: ue.Target
                    QueueToAll(new EntityStatus(this.Player.EntityID, EntityStatuses.EntityHurt));
                    QueueToAll(new Effect(SoundEffects.MobSpawn, Position.CloneInt()));
                    return;

#if DEBUG
                case PlayerGround.ID:
                case KeepAlivePing.ID://case KeepAlivePong.ID:
                    return;
			
                default:
                    //Console.WriteLine("Unhandled: " + packet);
                    return;
#endif
            }
        }
Example #2
0
        private void SendToPossessors(PacketFromClient p)
        {
            var pby = PossessedBy;
            if (pby.Length == 0)
                return;
                
            VanillaSession real = Session as VanillaSession;

            PacketFromServer ps = null;

            switch (p.PacketID)
            {
                case PlayerPositionLookClient.ID:
                    {
                        if (real == null)
                            return;

                        var pl = (PlayerPositionLookClient)p;
                        var et = new EntityTeleport(real.EID, pl.Position);
                        et.Yaw = pl.Yaw;
                        et.Pitch = pl.Pitch;

                        EntityHeadYaw hy = new EntityHeadYaw(real.EID, pl.Yaw);
                        foreach (WorldSession s in pby)
                        {
                            s.Player.Queue.Queue(et);
                            s.Player.Queue.Queue(hy);
                        }
                    }
                    return;
            }
            
            if (ps == null)
                return;
                
            foreach (WorldSession s in pby)
                s.Player.Queue.Queue(ps);
        }