This event is triggered when all shipments are shipped. `OrderShippingListener::updateShipmentStatesShipped` is listening at this event, and will then update all states to shipped... But it is already the case thanks to this if! That's why I said in previous comment that `updateShipmentStatesShipped` is useless. Delete the method there, and keep this event triggering here, it's perfect.