using CrystalConnector.Protocol.Packets.C2S; using CrystalConnector.Protocol.Packets.S2C; using Google.Protobuf; namespace CrystalConnector.Protocol.Packets; public interface IPacket { public void Read(byte[] bytes); public byte[] Write(); public static IPacket? From(byte[] data) { var result = TryForm(data); if (result is not null) { return result; } result = TryForm(data); if (result is not null) { return result; } result = TryForm(data); if (result is not null) { return result; } result = TryForm(data); return result; } private static IPacket? TryForm(byte[] data) where T : IPacket, new() { try { var message = new T(); message.Read(data); return message; } catch (InvalidProtocolBufferException ex) { return null; } } }