๐Ÿ”ตYour own statistics system

The library supports a custom stats system.

You can create your stats system in 5 steps.

Setup with database.

If you want to use file storage, see

Tips to setup with file storage
  1. Create UserStats model (Choose the saving method - file or database)

  2. Create a loader to load data from a file or database

  3. Create UserStatsManager (It is important to manage users)

  4. Create migration to create a database table (optional when you want to use file storage)

  5. Setup all in your main class

First step - create UserStats model
public class MyUserStats extends AbstractDbModel implements UserStats {

    @Id
    private final UUID uuid;
    private final String name;
    private final String arenaName;
    private int wins;
    private int defeats;
    private int kills;

    public UserStats(UUID uuid, String name, String arenaName) {
        this.uuid = uuid;
        this.name = name;
        this.arenaName = arenaName;
        init(); //don't forget
    }

    public UserStats(UUID uuid, String name, String arenaName, int wins, int defeats,int kills) {
        this.uuid = uuid;
        this.name = name;
        this.arenaName = arenaName;
        this.wins = wins;
        this.defeats = defeats;
        this.kills = kills;
        init(); //don't forget
    }

    //or use @Table annotation
    @Override
    public String getTableName() {
        return "users_stats"; //it is important
    }
    
    //Methods to add stats
    public void addWin() {
        wins++;
        update();
    }

    public void addDefeat() {
        defeats++;
        update();
    }

    public void addKill() {
        kills++;
        update();
    }
}
Second step - create a loader
public class MyStatisticsLoader extends AbstractSqlDataBaseLoader<MyUserStats> {

    private final ISQLDataBase sqlDataBase = DatabasesApiPlugin.getApi()
         .getCurrentSqlDataBase();

    @Override
    public void load() {
        load("myminigame_users_stats");
    }

    @Override
    public void load(String tableName) {
        QueryBuilder queryBuilder = new QueryBuilder();

        String query = queryBuilder.selectAll(tableName).build();

        try (ResultSet resultSet = sqlDataBase.getAsyncQuery().query(query)) {

            while (resultSet.next()) {
                MyUserStats userStats = new MyUserStats(
                        UUID.fromString(resultSet.getString("uuid")),
                        resultSet.getString("name"),
                        resultSet.getString("arenaName"),
                        resultSet.getInt("wins"),
                        resultSet.getInt("defeats"),
                        resultSet.getInt("kills"),
                );

                getData().add(userStats);
            }

        } catch (ExecutionException | InterruptedException | SQLException e) {
            throw new RuntimeException(e);
        }

    }
}
Third step - create UserStatsManager
Fourth step - create migration (Create thanks to T-DataBasesAPI)
Fifth step - setup all in your main class

How to add stats?

Create method getUserStatsOrCreate(player, arena) in your UserStatsManager.

Add stats