Search in sources :

Example 11 with PlayerInfo

use of me.staartvin.statz.datamanager.player.PlayerInfo in project Statz by Staartvin.

the class PlayerInfoTest method testResolvePlayerInfo5.

// Test two conflicting (of same statType) and two non conflicting (of another statType, that conflict with each
// other).
@Test
public void testResolvePlayerInfo5() {
    UUID uuid = UUID.fromString("3657b9cc-2518-4265-ad69-323e11286ce2");
    PlayerStat statType = PlayerStat.ARROWS_SHOT;
    PlayerStat statType2 = PlayerStat.KILLS_MOBS;
    PlayerInfo playerInfo = new PlayerInfo(uuid);
    PlayerInfo playerInfo2 = new PlayerInfo(uuid);
    Query queryA = StatzUtil.makeQuery("UUID", uuid, "World", "worldName1", "value", 5);
    Query queryB = StatzUtil.makeQuery("UUID", uuid, "World", "worldName1", "value", 6);
    Query queryC = StatzUtil.makeQuery("UUID", uuid, "World", "worldName2", "value", 8);
    Query queryD = StatzUtil.makeQuery("UUID", uuid, "World", "worldName2", "value", 45);
    Query queryE = StatzUtil.makeQuery("UUID", uuid, "World", "worldName3", "value", 100);
    playerInfo.addRow(statType, queryA);
    playerInfo2.addRow(statType, queryB);
    playerInfo2.addRow(statType2, queryC);
    playerInfo.addRow(statType2, queryD);
    playerInfo.addRow(statType, queryE);
    PlayerInfo nonConflictingPlayerInfo = playerInfo.resolveConflicts(playerInfo2);
    // Verify the number of rows
    Assert.assertEquals(2, nonConflictingPlayerInfo.getNumberOfRows(statType));
    Assert.assertEquals(1, nonConflictingPlayerInfo.getNumberOfRows(statType2));
    // Verify the number of statistics stored.
    Assert.assertEquals(2, nonConflictingPlayerInfo.getNumberOfStatistics());
    // Verify that value is correct
    Assert.assertEquals(111, nonConflictingPlayerInfo.getTotalValue(statType), 0);
    Assert.assertEquals(53, nonConflictingPlayerInfo.getTotalValue(statType2), 0);
}
Also used : Query(me.staartvin.statz.database.datatype.Query) PlayerInfo(me.staartvin.statz.datamanager.player.PlayerInfo) PlayerStat(me.staartvin.statz.datamanager.player.PlayerStat) UUID(java.util.UUID) Test(org.junit.Test)

Example 12 with PlayerInfo

use of me.staartvin.statz.datamanager.player.PlayerInfo in project Statz by Staartvin.

the class PlayerInfoTest method testResolvePlayerInfo2.

// Test with two conflicting and one non-conflicting query
@Test
public void testResolvePlayerInfo2() {
    UUID uuid = UUID.fromString("3657b9cc-2518-4265-ad69-323e11286ce2");
    PlayerStat statType = PlayerStat.ARROWS_SHOT;
    PlayerInfo playerInfo = new PlayerInfo(uuid);
    PlayerInfo playerInfo2 = new PlayerInfo(uuid);
    Query queryA = StatzUtil.makeQuery("UUID", uuid, "World", "worldName1", "value", 5);
    Query queryB = StatzUtil.makeQuery("UUID", uuid, "World", "worldName1", "value", 6);
    Query queryC = StatzUtil.makeQuery("UUID", uuid, "World", "worldName2", "value", 8);
    playerInfo.addRow(statType, queryA);
    playerInfo2.addRow(statType, queryB);
    playerInfo2.addRow(statType, queryC);
    PlayerInfo nonConflictingPlayerInfo = playerInfo.resolveConflicts(playerInfo2);
    // Verify that there is only 1 row
    Assert.assertEquals(2, nonConflictingPlayerInfo.getNumberOfRows(statType));
    // Verify that there is only 1 statistic stored
    Assert.assertEquals(1, nonConflictingPlayerInfo.getNumberOfStatistics());
    // Verify that value is correct
    Assert.assertEquals(19, nonConflictingPlayerInfo.getTotalValue(statType), 0);
}
Also used : Query(me.staartvin.statz.database.datatype.Query) PlayerInfo(me.staartvin.statz.datamanager.player.PlayerInfo) PlayerStat(me.staartvin.statz.datamanager.player.PlayerStat) UUID(java.util.UUID) Test(org.junit.Test)

Example 13 with PlayerInfo

use of me.staartvin.statz.datamanager.player.PlayerInfo in project Statz by Staartvin.

the class QueryTest method testRobustnessResolveConflictingQueries3.

// A query does not have value column
@Test(expected = IllegalArgumentException.class)
public void testRobustnessResolveConflictingQueries3() {
    Query queryA = StatzUtil.makeQuery("UUID", "3657b9cc-2518-4265-ad69-323e11286ce2", "mob", "COW", "value", 100);
    Query queryB = StatzUtil.makeQuery("uuid", "3657b9cc-2518-4265-ad69-323e11286ce2", "mob", "COW");
    PlayerInfo info = new PlayerInfo(UUID.fromString("3657b9cc-2518-4265-ad69-323e11286ce2"));
    List<Query> list = new ArrayList<>();
    list.add(queryA);
    list.add(queryB);
    info.setData(PlayerStat.KILLS_MOBS, list);
    info.setData(PlayerStat.ITEMS_DROPPED, list);
    queryA.resolveConflict(queryB).getValue();
}
Also used : Query(me.staartvin.statz.database.datatype.Query) PlayerInfo(me.staartvin.statz.datamanager.player.PlayerInfo) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Example 14 with PlayerInfo

use of me.staartvin.statz.datamanager.player.PlayerInfo in project Statz by Staartvin.

the class DataManager method getFreshPlayerInfo.

/**
 * Get data of a player for a given statistic. This method will obtain 'fresh' data from the database, meaning
 * that it will ignore cached data. Hence, this method will block the thread it is ran on. It is therefore
 * advised to run this method asynchronously.
 * <br>
 * <br>
 * It is recommended to use another method to obtain the data of a player when it is not loaded into the cache
 * yet: using {@link #loadPlayerData(UUID, PlayerStat)}, the retrieved data will also be stored in the cache, so
 * you can retrieve it the next time without making an expensive call to the database.
 *
 * @param uuid     UUID of the player.
 * @param statType Type of statistic.
 * @return fresh player data in the form of a {@link PlayerInfo} object.
 * @throws IllegalArgumentException if the given uuid is null.
 */
public PlayerInfo getFreshPlayerInfo(UUID uuid, PlayerStat statType) throws IllegalArgumentException {
    if (uuid == null) {
        throw new IllegalArgumentException("UUID cannot be null.");
    }
    Table table = DatabaseConnector.getTable(statType);
    List<Query> databaseRows = plugin.getDatabaseConnector().getObjects(table, new RowRequirement("uuid", uuid.toString()));
    PlayerInfo info = new PlayerInfo(uuid);
    info.setData(statType, databaseRows);
    return info;
}
Also used : Table(me.staartvin.statz.database.datatype.Table) Query(me.staartvin.statz.database.datatype.Query) PlayerInfo(me.staartvin.statz.datamanager.player.PlayerInfo) RowRequirement(me.staartvin.statz.database.datatype.RowRequirement)

Example 15 with PlayerInfo

use of me.staartvin.statz.datamanager.player.PlayerInfo in project Statz by Staartvin.

the class DataManager method sendStatisticsList.

public void sendStatisticsList(CommandSender sender, String playerName, UUID uuid, int pageNumber, List<PlayerStat> list) {
    List<String> messages = new ArrayList<>();
    List<TextComponent> messagesSpigot = new ArrayList<>();
    for (PlayerStat statType : list) {
        // Skip data of players table
        if (statType.equals(PlayerStat.PLAYERS)) {
            continue;
        }
        PlayerInfo info = plugin.getDataManager().getPlayerInfo(uuid, statType);
        // Player is not loaded into cache yet, first load player data into cache.
        if (info == null) {
            info = plugin.getDataManager().loadPlayerData(uuid, statType);
        }
        // If data is empty, we have no data about the player and so skip it.
        if (info.getDataOfPlayerStat(statType).isEmpty()) {
            continue;
        }
        String messageString = DescriptionMatcher.getTotalDescription(info, statType);
        if (sender instanceof Player && plugin.getServer().getVersion().toLowerCase().contains("spigot")) {
            TextComponent spigotMessage = new TextComponent(messageString);
            spigotMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/statz list " + playerName + " " + statType.toString()));
            spigotMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Click on me for more info about ").append(statType.toString()).color(net.md_5.bungee.api.ChatColor.GOLD).create()));
            messagesSpigot.add(spigotMessage);
        } else {
            messages.add(messageString);
        }
    }
    int messagesPerPage = 8;
    int pages = 0;
    if (sender instanceof Player) {
        pages = (int) Math.ceil(messagesSpigot.size() / (double) messagesPerPage);
    } else {
        pages = (int) Math.ceil(messages.size() / (double) messagesPerPage);
    }
    if (pageNumber > (pages - 1) || pageNumber < 0) {
        pageNumber = 0;
    }
    sender.sendMessage(ChatColor.YELLOW + "---------------- [Statz of " + playerName + "] ----------------");
    for (int j = 0; j < messagesPerPage; j++) {
        int index = (pageNumber == 0 ? j : (pageNumber * messagesPerPage) + j);
        // Don't try to get other messages, as there are no others.
        if (sender instanceof Player) {
            if (index >= messagesSpigot.size()) {
                break;
            }
        } else {
            if (index >= messages.size()) {
                break;
            }
        }
        if (sender instanceof Player) {
            Player p = (Player) sender;
            p.spigot().sendMessage(messagesSpigot.get(index));
        } else {
            sender.sendMessage(messages.get(index));
        }
    }
    // Create page clicker
    BaseComponent[] pageClicker = new ComponentBuilder("<<< ").color(net.md_5.bungee.api.ChatColor.GOLD).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/statz list " + playerName + " " + (pageNumber < 0 ? 0 : pageNumber))).append("Page ").color(net.md_5.bungee.api.ChatColor.DARK_AQUA).append(pageNumber + 1 + "").color(net.md_5.bungee.api.ChatColor.GREEN).append(" of " + pages).color(net.md_5.bungee.api.ChatColor.DARK_AQUA).append(" >>>").color(net.md_5.bungee.api.ChatColor.GOLD).event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/statz list " + playerName + " " + (pageNumber + 2 > pages ? pages : pageNumber + 2))).create();
    if (sender instanceof Player) {
        Player p = (Player) sender;
        p.spigot().sendMessage(pageClicker);
    } else {
        sender.sendMessage(ChatColor.GOLD + "<<< " + ChatColor.DARK_AQUA + "Page " + ChatColor.GREEN + (pageNumber + 1) + ChatColor.DARK_AQUA + " of " + pages + ChatColor.GOLD + " >>>");
    }
}
Also used : Player(org.bukkit.entity.Player) PlayerStat(me.staartvin.statz.datamanager.player.PlayerStat) PlayerInfo(me.staartvin.statz.datamanager.player.PlayerInfo)

Aggregations

PlayerInfo (me.staartvin.statz.datamanager.player.PlayerInfo)19 Query (me.staartvin.statz.database.datatype.Query)13 PlayerStat (me.staartvin.statz.datamanager.player.PlayerStat)11 UUID (java.util.UUID)6 Test (org.junit.Test)6 ArrayList (java.util.ArrayList)2 Material (org.bukkit.Material)2 Player (org.bukkit.entity.Player)2 Inventory (org.bukkit.inventory.Inventory)2 ItemStack (org.bukkit.inventory.ItemStack)2 ItemMeta (org.bukkit.inventory.meta.ItemMeta)2 RowRequirement (me.staartvin.statz.database.datatype.RowRequirement)1 Table (me.staartvin.statz.database.datatype.Table)1 OfflinePlayer (org.bukkit.OfflinePlayer)1