public override bool Invoke(string messageText)
        {
            if (messageText.Equals("/meteor", StringComparison.InvariantCultureIgnoreCase))
            {
                MatrixD worldMatrix;
                Vector3D position;

                if (MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.Parent == null)
                {
                    worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.GetHeadMatrix(true, true, false); // dead center of player cross hairs.
                    position = worldMatrix.Translation + worldMatrix.Forward * 1.5f; // Spawn item 1.5m in front of player for safety.
                }
                else
                {
                    worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.WorldMatrix;
                    position = worldMatrix.Translation + worldMatrix.Forward * 1.5f + worldMatrix.Up * 0.5f; // Spawn item 1.5m in front of player in cockpit for safety.
                }

                var meteorBuilder = new MyObjectBuilder_Meteor()
                {
                    Item = new MyObjectBuilder_InventoryItem()
                    {
                        Amount = 10000,
                        Content = new MyObjectBuilder_Ore() { SubtypeName = _defaultOreName }
                    },
                    PersistentFlags = MyPersistentEntityFlags2.InScene, // Very important
                    PositionAndOrientation = new MyPositionAndOrientation()
                    {
                        Position = position,
                        Forward = (Vector3)worldMatrix.Forward,
                        Up = (Vector3)worldMatrix.Up,
                    },
                    LinearVelocity = worldMatrix.Forward * 300,
                    Integrity = 100,
                };

                meteorBuilder.CreateAndSyncEntity();
                return true;
            }

            return false;
        }
        public static void Smite(IMyPlayer selectedPlayer)
        {
            var worldMatrix = selectedPlayer.Controller.ControlledEntity.GetHeadMatrix(true, true, true);
            var maxspeed = MyDefinitionManager.Static.EnvironmentDefinition.SmallShipMaxSpeed * 1.25f;

            var meteorBuilder = new MyObjectBuilder_Meteor
            {
                Item = new MyObjectBuilder_InventoryItem { Amount = 1, Content = new MyObjectBuilder_Ore { SubtypeName = CommandPlayerSmite.Instance._defaultOreName } },
                PersistentFlags = MyPersistentEntityFlags2.InScene, // Very important
                PositionAndOrientation = new MyPositionAndOrientation
                {
                    Position = (worldMatrix.Translation + worldMatrix.Up * -0.5f).ToSerializableVector3D(),
                    Forward = worldMatrix.Forward.ToSerializableVector3(),
                    Up = worldMatrix.Up.ToSerializableVector3(),
                },
                LinearVelocity = worldMatrix.Down * -maxspeed, // has to be faster than JetPack speed, otherwise it could be avoided.
                // Update 01.052 seemed to have flipped the direction. It's Up instead of Down???
                Integrity = 1
            };

            meteorBuilder.CreateAndSyncEntity();
        }
		public Meteor( MyObjectBuilder_Meteor definition, Object backingObject )
			: base( definition, backingObject )
		{
			m_item = new InventoryItemEntity( definition.Item );
		}
        private void ThrowMeteor(IMyPlayer player, string oreName)
        {
            MatrixD worldMatrix;
            Vector3D position;

            if (player.Controller.ControlledEntity.Entity.Parent == null)
            {
                worldMatrix = player.Controller.ControlledEntity.GetHeadMatrix(true, true, false); // dead center of player cross hairs.
                position = worldMatrix.Translation + worldMatrix.Forward * 1.5f; // Spawn item 1.5m in front of player for safety.
            }
            else
            {
                worldMatrix = player.Controller.ControlledEntity.Entity.WorldMatrix;
                position = worldMatrix.Translation + worldMatrix.Forward * 1.5f + worldMatrix.Up * 0.5f; // Spawn item 1.5m in front of player in cockpit for safety.
            }

            var meteorBuilder = new MyObjectBuilder_Meteor()
            {
                Item = new MyObjectBuilder_InventoryItem()
                {
                    Amount = 10000,
                    Content = new MyObjectBuilder_Ore() { SubtypeName = oreName }
                },
                PersistentFlags = MyPersistentEntityFlags2.InScene, // Very important
                PositionAndOrientation = new MyPositionAndOrientation()
                {
                    Position = position,
                    Forward = (Vector3)worldMatrix.Forward,
                    Up = (Vector3)worldMatrix.Up,
                },
                LinearVelocity = worldMatrix.Forward * 500,
                Integrity = 100,
            };

            meteorBuilder.CreateAndSyncEntity();
        }