2022-04-04 01:36:50 -07:00
|
|
|
package dev.plex.cache.player;
|
2020-10-27 13:12:38 -07:00
|
|
|
|
2020-10-27 21:11:23 -07:00
|
|
|
import dev.morphia.Datastore;
|
|
|
|
import dev.morphia.query.Query;
|
2020-10-28 12:07:02 -07:00
|
|
|
import dev.morphia.query.Update;
|
|
|
|
import dev.morphia.query.experimental.filters.Filters;
|
|
|
|
import dev.morphia.query.experimental.updates.UpdateOperators;
|
2021-01-03 01:21:15 -06:00
|
|
|
import dev.plex.Plex;
|
|
|
|
import dev.plex.player.PlexPlayer;
|
2022-03-30 23:50:53 -07:00
|
|
|
import java.util.Collections;
|
2022-04-04 01:36:50 -07:00
|
|
|
import java.util.List;
|
2020-11-05 19:29:38 -06:00
|
|
|
import java.util.UUID;
|
2020-10-27 21:11:23 -07:00
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Mongo fetching utilities for players
|
|
|
|
*/
|
2020-10-27 13:12:38 -07:00
|
|
|
public class MongoPlayerData
|
|
|
|
{
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* The datastore object / database
|
|
|
|
*/
|
2020-10-27 21:11:23 -07:00
|
|
|
private final Datastore datastore;
|
2020-10-27 13:12:38 -07:00
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Creates an instance of the player data
|
|
|
|
*/
|
2020-10-27 13:12:38 -07:00
|
|
|
public MongoPlayerData()
|
|
|
|
{
|
2020-10-27 21:11:23 -07:00
|
|
|
this.datastore = Plex.get().getMongoConnection().getDatastore();
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Checks whether the player exists in mongo's database
|
2022-02-06 23:59:26 -06:00
|
|
|
*
|
2022-02-05 15:14:23 -08:00
|
|
|
* @param uuid The unique ID of the player
|
|
|
|
* @return true if the player was found
|
|
|
|
*/
|
2020-10-27 22:49:56 -05:00
|
|
|
public boolean exists(UUID uuid)
|
|
|
|
{
|
2020-10-28 12:07:02 -07:00
|
|
|
Query<PlexPlayer> query = datastore.find(PlexPlayer.class)
|
|
|
|
.filter(Filters.eq("uuid", uuid.toString()));
|
2020-10-27 13:12:38 -07:00
|
|
|
|
2020-10-28 12:07:02 -07:00
|
|
|
return query.first() != null;
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Gets the player from cache or from mongo's database
|
2022-02-06 23:59:26 -06:00
|
|
|
*
|
2022-02-05 15:14:23 -08:00
|
|
|
* @param uuid The unique ID of the player
|
|
|
|
* @return a PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 22:49:56 -05:00
|
|
|
public PlexPlayer getByUUID(UUID uuid)
|
|
|
|
{
|
2020-10-27 14:04:05 -07:00
|
|
|
if (PlayerCache.getPlexPlayerMap().containsKey(uuid))
|
2020-10-27 13:12:38 -07:00
|
|
|
{
|
2020-10-27 14:04:05 -07:00
|
|
|
return PlayerCache.getPlexPlayerMap().get(uuid);
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
2020-10-28 12:07:02 -07:00
|
|
|
|
|
|
|
Query<PlexPlayer> query2 = datastore.find(PlexPlayer.class).filter(Filters.eq("uuid", uuid.toString()));
|
2020-10-27 21:11:23 -07:00
|
|
|
return query2.first();
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
2022-04-06 16:59:34 -07:00
|
|
|
|
|
|
|
public PlexPlayer getByName(String username)
|
|
|
|
{
|
|
|
|
PlexPlayer player = PlayerCache.getPlexPlayerMap().values().stream().filter(plexPlayer -> plexPlayer.getName().equalsIgnoreCase(username)).findFirst().orElse(null);
|
|
|
|
if (player != null)
|
|
|
|
{
|
|
|
|
return player;
|
|
|
|
}
|
|
|
|
|
|
|
|
Query<PlexPlayer> query2 = datastore.find(PlexPlayer.class).filter(Filters.regex("name").caseInsensitive().pattern(username));
|
|
|
|
return query2.first();
|
|
|
|
}
|
2020-10-27 13:12:38 -07:00
|
|
|
|
2022-03-30 23:50:53 -07:00
|
|
|
/**
|
|
|
|
* Gets the player from cache or from mongo's database
|
|
|
|
*
|
|
|
|
* @param ip The IP address of the player.
|
|
|
|
* @return a PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
|
|
|
public PlexPlayer getByIP(String ip)
|
|
|
|
{
|
|
|
|
PlexPlayer player = PlayerCache.getPlexPlayerMap().values().stream().filter(plexPlayer -> plexPlayer.getIps().contains(ip)).findFirst().orElse(null);
|
|
|
|
if (player != null)
|
|
|
|
{
|
|
|
|
return player;
|
|
|
|
}
|
|
|
|
|
|
|
|
Query<PlexPlayer> query2 = datastore.find(PlexPlayer.class).filter(Filters.in("ips", Collections.singleton(ip)));
|
|
|
|
return query2.first();
|
|
|
|
}
|
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Updates a player's information in the mongo database
|
2022-02-06 23:59:26 -06:00
|
|
|
*
|
2022-02-05 15:14:23 -08:00
|
|
|
* @param player The PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 13:12:38 -07:00
|
|
|
public void update(PlexPlayer player)
|
|
|
|
{
|
2020-10-28 12:07:02 -07:00
|
|
|
Query<PlexPlayer> filter = datastore.find(PlexPlayer.class)
|
|
|
|
.filter(Filters.eq("uuid", player.getUuid()));
|
|
|
|
|
|
|
|
Update<PlexPlayer> updateOps = filter
|
|
|
|
.update(
|
|
|
|
UpdateOperators.set("name", player.getName()),
|
2022-02-21 23:17:00 -08:00
|
|
|
UpdateOperators.set("loginMSG", player.getLoginMessage()),
|
2020-10-28 12:07:02 -07:00
|
|
|
UpdateOperators.set("prefix", player.getPrefix()),
|
|
|
|
UpdateOperators.set("rank", player.getRank().toLowerCase()),
|
|
|
|
UpdateOperators.set("ips", player.getIps()),
|
2020-11-06 10:19:38 -08:00
|
|
|
UpdateOperators.set("coins", player.getCoins()),
|
2022-02-06 23:53:57 -06:00
|
|
|
UpdateOperators.set("vanished", player.isVanished()),
|
|
|
|
UpdateOperators.set("commandspy", player.isCommandSpy()));
|
2020-10-28 12:07:02 -07:00
|
|
|
|
|
|
|
updateOps.execute();
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
|
|
|
|
2022-04-04 01:36:50 -07:00
|
|
|
public List<PlexPlayer> getPlayers()
|
|
|
|
{
|
|
|
|
return datastore.find(PlexPlayer.class).stream().toList();
|
|
|
|
}
|
|
|
|
|
2020-11-05 13:17:14 -08:00
|
|
|
|
2022-02-05 15:14:23 -08:00
|
|
|
/**
|
|
|
|
* Saves the player's information in the database
|
2022-02-06 23:59:26 -06:00
|
|
|
*
|
2022-02-05 15:14:23 -08:00
|
|
|
* @param plexPlayer The PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 21:11:23 -07:00
|
|
|
public void save(PlexPlayer plexPlayer)
|
2020-10-27 22:49:56 -05:00
|
|
|
{
|
2020-10-27 21:11:23 -07:00
|
|
|
datastore.save(plexPlayer);
|
2020-10-27 13:12:38 -07:00
|
|
|
}
|
2020-10-27 22:55:35 -05:00
|
|
|
}
|