2020-10-31 08:55:27 +00:00
package me.totalfreedom.plex.listener.impl ;
2020-10-27 20:12:38 +00:00
2020-10-28 03:49:56 +00:00
import java.util.Arrays ;
2020-11-05 21:17:14 +00:00
import java.util.UUID ;
2020-10-27 20:12:38 +00:00
import me.totalfreedom.plex.Plex ;
2020-11-05 21:17:14 +00:00
import me.totalfreedom.plex.admin.Admin ;
2020-10-27 20:12:38 +00:00
import me.totalfreedom.plex.cache.MongoPlayerData ;
2020-10-27 21:04:05 +00:00
import me.totalfreedom.plex.cache.PlayerCache ;
import me.totalfreedom.plex.cache.SQLPlayerData ;
2020-11-02 00:06:08 +00:00
import me.totalfreedom.plex.command.impl.FionnCMD ;
2020-10-31 08:55:27 +00:00
import me.totalfreedom.plex.listener.PlexListener ;
2020-10-27 20:12:38 +00:00
import me.totalfreedom.plex.player.PlexPlayer ;
import me.totalfreedom.plex.player.PunishedPlayer ;
import me.totalfreedom.plex.util.PlexLog ;
2020-10-28 19:07:02 +00:00
import org.bukkit.ChatColor ;
2020-11-02 00:06:08 +00:00
import org.bukkit.Location ;
2020-10-27 20:12:38 +00:00
import org.bukkit.entity.Player ;
import org.bukkit.event.EventHandler ;
2020-10-28 19:07:02 +00:00
import org.bukkit.event.EventPriority ;
2020-10-27 20:12:38 +00:00
import org.bukkit.event.Listener ;
import org.bukkit.event.player.PlayerJoinEvent ;
import org.bukkit.event.player.PlayerQuitEvent ;
2020-10-31 08:55:27 +00:00
public class PlayerListener extends PlexListener
2020-10-27 20:12:38 +00:00
{
2020-10-31 08:55:27 +00:00
private final MongoPlayerData mongoPlayerData = plugin . getMongoPlayerData ( ) ! = null ? plugin . getMongoPlayerData ( ) : null ;
private final SQLPlayerData sqlPlayerData = plugin . getSqlPlayerData ( ) ! = null ? plugin . getSqlPlayerData ( ) : null ;
2020-10-27 20:12:38 +00:00
2020-11-02 00:06:08 +00:00
// setting up a player's data
2020-10-28 19:07:02 +00:00
@EventHandler ( priority = EventPriority . HIGHEST )
public void onPlayerSetup ( PlayerJoinEvent event )
2020-10-27 20:12:38 +00:00
{
Player player = event . getPlayer ( ) ;
2020-10-27 21:04:05 +00:00
PlexPlayer plexPlayer = null ;
2020-10-27 20:12:38 +00:00
if ( mongoPlayerData ! = null ) // Alright, check if we're saving with Mongo first
{
if ( ! mongoPlayerData . exists ( player . getUniqueId ( ) ) ) //okay, we're saving with mongo! now check if the player's document exists
{
PlexLog . log ( " AYO THIS MAN DONT EXIST " ) ; // funi msg
2020-10-27 21:04:05 +00:00
plexPlayer = new PlexPlayer ( player . getUniqueId ( ) ) ; //it doesn't! okay so now create the object
2020-10-27 20:12:38 +00:00
plexPlayer . setName ( player . getName ( ) ) ; //set the name of the player
plexPlayer . setIps ( Arrays . asList ( player . getAddress ( ) . getAddress ( ) . getHostAddress ( ) . trim ( ) ) ) ; //set the arraylist of ips
2020-10-28 04:11:23 +00:00
mongoPlayerData . save ( plexPlayer ) ; //and put their document in mongo collection
2020-10-28 03:49:56 +00:00
}
else
{
2020-10-27 21:04:05 +00:00
plexPlayer = mongoPlayerData . getByUUID ( player . getUniqueId ( ) ) ; //oh they do exist!
plexPlayer . setName ( plexPlayer . getName ( ) ) ; //set the name!
}
2020-10-28 03:49:56 +00:00
}
else if ( sqlPlayerData ! = null )
2020-10-27 21:04:05 +00:00
{
2020-10-31 08:55:27 +00:00
if ( ! sqlPlayerData . exists ( player . getUniqueId ( ) ) ) //okay, we're saving with sql! now check if the player's document exists
2020-10-27 21:04:05 +00:00
{
PlexLog . log ( " AYO THIS MAN DONT EXIST " ) ; // funi msg
plexPlayer = new PlexPlayer ( player . getUniqueId ( ) ) ; //it doesn't! okay so now create the object
plexPlayer . setName ( player . getName ( ) ) ; //set the name of the player
plexPlayer . setIps ( Arrays . asList ( player . getAddress ( ) . getAddress ( ) . getHostAddress ( ) . trim ( ) ) ) ; //set the arraylist of ips
2020-10-31 08:55:27 +00:00
sqlPlayerData . insert ( plexPlayer ) ; //and put their row into the sql table
2020-10-28 03:49:56 +00:00
}
else
{
2020-10-27 21:04:05 +00:00
plexPlayer = sqlPlayerData . getByUUID ( player . getUniqueId ( ) ) ; //oh they do exist!
2020-10-27 20:12:38 +00:00
plexPlayer . setName ( plexPlayer . getName ( ) ) ; //set the name!
}
}
2020-10-27 21:04:05 +00:00
PlayerCache . getPlexPlayerMap ( ) . put ( player . getUniqueId ( ) , plexPlayer ) ; //put them into the cache
PlayerCache . getPunishedPlayerMap ( ) . put ( player . getUniqueId ( ) , new PunishedPlayer ( player . getUniqueId ( ) ) ) ;
2020-10-28 19:07:02 +00:00
assert plexPlayer ! = null ;
2020-10-31 08:55:27 +00:00
if ( plugin . getRankManager ( ) . isAdmin ( plexPlayer ) )
2020-10-28 19:07:02 +00:00
{
2020-11-05 21:17:14 +00:00
Admin admin = new Admin ( UUID . fromString ( plexPlayer . getUuid ( ) ) ) ;
admin . setRank ( plexPlayer . getRankFromString ( ) ) ;
plugin . getAdminList ( ) . addToCache ( admin ) ;
2020-10-28 19:07:02 +00:00
if ( ! plexPlayer . getLoginMSG ( ) . isEmpty ( ) )
{
event . setJoinMessage ( ChatColor . AQUA + player . getName ( ) + " is " + plexPlayer . getLoginMSG ( ) ) ;
} else {
event . setJoinMessage ( ChatColor . AQUA + player . getName ( ) + " is " + plexPlayer . getRankFromString ( ) . getLoginMSG ( ) ) ;
}
}
2020-10-27 20:12:38 +00:00
}
2020-11-02 00:06:08 +00:00
// saving the player's data
2020-11-03 02:24:25 +00:00
@EventHandler ( priority = EventPriority . HIGHEST )
2020-10-28 19:07:02 +00:00
public void onPlayerSave ( PlayerQuitEvent event )
2020-10-27 20:12:38 +00:00
{
2020-10-27 21:04:05 +00:00
PlexPlayer plexPlayer = PlayerCache . getPlexPlayerMap ( ) . get ( event . getPlayer ( ) . getUniqueId ( ) ) ; //get the player because it's literally impossible for them to not have an object
2020-11-05 21:17:14 +00:00
if ( plugin . getRankManager ( ) . isAdmin ( plexPlayer ) )
{
plugin . getAdminList ( ) . removeFromCache ( UUID . fromString ( plexPlayer . getUuid ( ) ) ) ;
}
2020-10-27 20:12:38 +00:00
if ( mongoPlayerData ! = null ) //back to mongo checking
{
2020-10-27 21:04:05 +00:00
mongoPlayerData . update ( plexPlayer ) ; //update the player's document
2020-10-28 03:49:56 +00:00
}
2020-10-31 08:55:27 +00:00
else if ( sqlPlayerData ! = null ) //sql checking
2020-10-27 21:04:05 +00:00
{
sqlPlayerData . update ( plexPlayer ) ;
2020-10-27 20:12:38 +00:00
}
2020-11-03 02:24:25 +00:00
if ( FionnCMD . ENABLED )
PlayerCache . getPunishedPlayer ( event . getPlayer ( ) . getUniqueId ( ) ) . setFrozen ( false ) ;
2020-10-27 21:04:05 +00:00
PlayerCache . getPlexPlayerMap ( ) . remove ( event . getPlayer ( ) . getUniqueId ( ) ) ; //remove them from cache
PlayerCache . getPunishedPlayerMap ( ) . remove ( event . getPlayer ( ) . getUniqueId ( ) ) ;
2020-11-05 21:17:14 +00:00
2020-10-27 20:12:38 +00:00
}
2020-10-28 19:07:02 +00:00
2020-11-02 00:06:08 +00:00
// unrelated player quitting
@EventHandler
public void onPlayerQuit ( PlayerQuitEvent e )
{
Player player = e . getPlayer ( ) ;
if ( FionnCMD . ENABLED )
{
player . setInvisible ( false ) ;
Location location = FionnCMD . LOCATION_CACHE . get ( player ) ;
if ( location ! = null )
player . teleport ( location ) ;
}
}
2020-10-27 20:12:38 +00:00
}