// Important API to ensure smooth data retrieval - use readiness check via the API
// Generating a database takes some time, so in other APIs, null values may be possible
// To avoid this, use this API before accessing other APIs
Boolean IsReady - returns true if the plugin is fully initialized, otherwise false
// Usage example:
public Boolean IsReadyIQFakeActive()
{
    if (IQFakeActive != null && config.UseIQFakeActive)
        return IQFakeActive.Call<Boolean>("IsReady");
    return false;
}
	JObject GetListPlayers() - returns a JObject with a list of fake and real players
// Requires a List class with the FakePlayer class: List<FakePlayer>
public class FakePlayer
{
    [JsonProperty("userId")]
    public String userId;
    [JsonProperty("displayName")]
    public String displayName;
    public Boolean isMuted;
}
// Example usage:
private List<FakePlayer> GetCombinedPlayerList()
{
    if (!IsReadyIQFakeActive()) return null;
    JObject jsonData = IQFakeActive.Call<JObject>("GetListPlayers");
    if (!jsonData.TryGetValue("players", out JToken playersToken)) return null;
    List<FakePlayer> playerList = playersToken.ToObject<List<FakePlayer>>();
    return playerList;
}
// IsReadyIQFakeActive() - checks if the plugin is active using the "IsReady" API and if the plugin support function is enabled
// Example IsReadyIQFakeActive
public Boolean IsReadyIQFakeActive()
{
    if (IQFakeActive != null && config.UseIQFakeActive)
        return IQFakeActive.Call<Boolean>("IsReady");
    return false;
}
	// Similar principle to the GetListPlayers API
JObject GetOnlyListFakePlayers() - returns a JObject with a list of fake and real players
// Requires a List class with the FakePlayer class: List<FakePlayer>
// Example usage:
private List<FakePlayer> GetFakePlayerList()
{
    if (!IsReadyIQFakeActive()) return null;
    JObject jsonData = IQFakeActive.Call<JObject>("GetOnlyListFakePlayers");
    if (!jsonData.TryGetValue("players", out JToken playersToken)) return null;
    List<FakePlayer> playerList = playersToken.ToObject<List<FakePlayer>>();
    return playerList;
}
	Int32 GetOnline - returns the current online count, including fake and real players
Int32 GetOnlyFakeOnline - returns the current online count of fake players only
	Boolean IsFakeUser(String idOrName) - returns true if the player is generated by the plugin, otherwise false if the player is real
	String GetFakeName(String userId) - returns the nickname of a fake player
// If the plugin is not fully initialized, it will return "initializePlugin"
// If the fake player with the given userid is not found, it will return "notFindedUser"
	JObject GetDatabase - returns a JObject with the complete plugin data
// Requires a complete database class
// The database includes:
// - All generated messages
// - All generated players
// - All generated players and real players
// - Number of fake players
// - Number of fake and real players
// - Generated chat presets (with IQChat support)
// -- Chat prefix
// -- Nickname color in chat
// -- Message color in chat
// -- Nickname size in chat
// -- Message size in chat
// Database class:
public FakeDatabase fakeDatabase = new();
public class FakeDatabase
{
    public OnlineDatabase onlineDatabase = new();
    public ChatPresetFakePlayer chatPresetFakePlayer = new();
    public List<FakePlayer> fakePlayerList = new();
    public List<FakePlayer> fakePlayerConnection = new();
    public List<FakePlayer> fakePlayerDisconnection = new();
    public List<FakePlayer> realAndFakePlayerList = new();
    public List<Messages> fakeMessageList = new();
    public class Messages
    {
        [JsonProperty("message")]
        public String message;
    }
    public class OnlineDatabase
    {
        public Int32 currentFakeOnline;
        public Int32 currentOnline;
    }
    public class FakePlayer
    {
        [JsonProperty("userId")]
        public String userId;
        [JsonProperty("displayName")]
        public String displayName;
        public Boolean isMuted;
    }
    public class ChatPresetFakePlayer
    {
        public String chatPrefix;
        public String chatColor;
        public String nickColor;
        public Int32 sizeMessage;
        public Int32 sizeNick;
    }
}
	// Важное API, дабы все данные подтягивались без проблем - используйте проверку готовности по API
// генерация базы данных занимает некоторое время, поэтому в других API возможны - null
// чтобы такого не было - используйте это API перед обращением к другому API
Boolean IsReady - возвращает true, если плагин полностью инициализирован, иначе false
// Пример использования:
public Boolean IsReadyIQFakeActive()
{
    if (IQFakeActive != null && config.UseIQFakeActive)
        return IQFakeActive.Call<Boolean>("IsReady");
    return false;
}
	JObject GetListPlayers() - возвращает JObject со списком фейковых и настоящих игроков
// Требуется класс List с классом FakePlayer - List<FakePlayer>
public class FakePlayer
{
    [JsonProperty("userId")]
    public String userId;
    [JsonProperty("displayName")]
    public String displayName;
    public Boolean isMuted;
}
// Пример использования:
private List<FakePlayer> GetCombinedPlayerList()
{
    if (!IsReadyIQFakeActive()) return null;
    JObject jsonData = IQFakeActive.Call<JObject>("GetListPlayers");
    if (!jsonData.TryGetValue("players", out JToken playersToken)) return null;
    List<FakePlayer> playerList = playersToken.ToObject<List<FakePlayer>>();
    return playerList;
}
// IsReadyIQFakeActive() - проверяет активен ли плагин с помощью API "IsReady" и включена ли функция поддержки плагина
// Пример IsReadyIQFakeActive
public Boolean IsReadyIQFakeActive()
{
    if (IQFakeActive != null && config.UseIQFakeActive)
        return IQFakeActive.Call<Boolean>("IsReady");
    return false;
}
	//Принцип аналогичен с API GetListPlayers
JObject GetOnlyListFakePlayers() - возвращает JObject со списком фейковых и настоящих игроков
//Требуется класс List с классом FakePlayer - List<FakePlayer>
//Пример использования :
private List<FakePlayer> GetFakePlayerList()
{
    if (!IsReadyIQFakeActive()) return null;
    JObject jsonData = IQFakeActive.Call<JObject>("GetOnlyListFakePlayers");
 
    if (!jsonData.TryGetValue("players", out JToken playersToken)) return null;
    List<FakePlayer> playerList = playersToken.ToObject<List<FakePlayer>>();
    return playerList;
}
	Int32 GetOnline - возвращает текущий онлайн, фейковые игроки и настоящие
Int32 GetOnlyFakeOnline - возвращает текущий онлайн только фейковых игроков
	Boolean IsFakeUser(String idOrName) - возвращает true, если игрок сгенерирован плагином, иначе false если игрок настоящий
	String GetFakeName(String userId) - возвращает ник фейкового игрока
//Если плагин не инициализирован полностью - вернет "initializePlugin"
//Если фейкового игрока нет с данным userid - вернет "notFindedUser"
	JObject GetDatabase - возвращает JObject с полными данными плагина
// Потребуется полный класс базы данных
// В базу входит :
// - Все сгенерированные сообщения
// - Все сгенерированные игроки
// - Все сгенерированные игроки и настоящие игроки
// - Количество фейковых игроков
// - Количество фейковых и настоящих игроков
// - Сгенерированные пресеты для чата (С поддержкой IQChat)
// -- Префикс в чате
// -- Цвет ника в чате
// -- Цвет сообщения в чате
// -- Размер ника в чате
// -- Размер сообщения в чате
// Класс базы данных :
public FakeDatabase fakeDatabase = new();
public class FakeDatabase
{
    public OnlineDatabase onlineDatabase = new();
    public ChatPresetFakePlayer chatPresetFakePlayer = new();
    public List<FakePlayer> fakePlayerList = new();
    public List<FakePlayer> fakePlayerConnection = new();
    public List<FakePlayer> fakePlayerDisconnection = new();
    public List<FakePlayer> realAndFakePlayerList = new();
    public List<Messages> fakeMessageList = new();
    public class Messages
    {
        [JsonProperty("message")]
        public String message;
    }
    public class OnlineDatabase
    {
        public Int32 currentFakeOnline;
        public Int32 currentOnline;
    }
    public class FakePlayer
    {
        [JsonProperty("userId")]
        public String userId;
        [JsonProperty("displayName")]
        public String displayName;
        public Boolean isMuted;
    }
    public class ChatPresetFakePlayer
    {
        public String chatPrefix;
        public String chatColor;
        public String nickColor;
        public Int32 sizeMessage;
        public Int32 sizeNick;
    }
}