2021-01-03 07:21:15 +00:00
package dev.plex.listener.impl ;
2020-10-27 20:12:38 +00:00
2021-01-03 07:21:15 +00:00
import dev.plex.cache.DataUtils ;
import dev.plex.cache.MongoPlayerData ;
import dev.plex.cache.PlayerCache ;
import dev.plex.cache.SQLPlayerData ;
import dev.plex.listener.PlexListener ;
import dev.plex.player.PlexPlayer ;
import dev.plex.player.PunishedPlayer ;
import dev.plex.util.PlexLog ;
2022-02-22 07:17:00 +00:00
import net.kyori.adventure.text.Component ;
import net.kyori.adventure.text.format.NamedTextColor ;
2022-01-27 09:00:50 +00:00
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer ;
2020-10-28 19:07:02 +00:00
import org.bukkit.ChatColor ;
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.player.PlayerJoinEvent ;
import org.bukkit.event.player.PlayerQuitEvent ;
2022-02-22 07:17:00 +00:00
import java.util.Collections ;
import java.util.UUID ;
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-11-06 01:29:38 +00:00
@EventHandler ( priority = EventPriority . HIGHEST )
2020-10-28 19:07:02 +00:00
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
2020-11-06 18:19:38 +00:00
PlexPlayer plexPlayer ;
2020-10-27 21:04:05 +00:00
2022-02-04 21:25:40 +00:00
if ( plugin . getSystem ( ) . equalsIgnoreCase ( " ranks " ) )
{
player . setOp ( true ) ;
PlexLog . debug ( " Automatically opped " + player . getName ( ) + " since ranks are enabled. " ) ;
2022-02-22 07:17:00 +00:00
} else if ( plugin . getSystem ( ) . equalsIgnoreCase ( " permissions " ) )
2022-02-04 21:25:40 +00:00
{
player . setOp ( false ) ;
PlexLog . debug ( " Automatically deopped " + player . getName ( ) + " since ranks are disabled. " ) ;
}
2020-11-06 18:19:38 +00:00
if ( ! DataUtils . hasPlayedBefore ( player . getUniqueId ( ) ) )
{
2022-01-29 22:35:48 +00:00
PlexLog . log ( " A player with this name has not joined the server before, creating new entry. " ) ;
2020-11-06 18:19:38 +00:00
plexPlayer = new PlexPlayer ( player . getUniqueId ( ) ) ; //it doesn't! okay so now create the object
plexPlayer . setName ( player . getName ( ) ) ; //set the name of the player
2022-01-27 09:00:50 +00:00
plexPlayer . setIps ( Collections . singletonList ( player . getAddress ( ) . getAddress ( ) . getHostAddress ( ) . trim ( ) ) ) ; //set the arraylist of ips
2020-11-06 18:19:38 +00:00
DataUtils . insert ( plexPlayer ) ; // insert data in some wack db
2022-02-22 07:17:00 +00:00
} else
2022-01-29 22:35:48 +00:00
{
2020-11-06 18:19:38 +00:00
plexPlayer = DataUtils . getPlayer ( player . getUniqueId ( ) ) ;
}
2022-02-22 00:20:22 +00:00
PunishedPlayer punishedPlayer ;
2020-10-27 21:04:05 +00:00
PlayerCache . getPlexPlayerMap ( ) . put ( player . getUniqueId ( ) , plexPlayer ) ; //put them into the cache
2022-02-05 23:18:17 +00:00
if ( ! PlayerCache . getPunishedPlayerMap ( ) . containsKey ( player . getUniqueId ( ) ) )
{
2022-02-22 00:20:22 +00:00
punishedPlayer = new PunishedPlayer ( player . getUniqueId ( ) ) ;
PlayerCache . getPunishedPlayerMap ( ) . put ( player . getUniqueId ( ) , punishedPlayer ) ;
2022-02-22 07:17:00 +00:00
} else
2022-02-22 04:51:05 +00:00
{
2022-02-22 00:20:22 +00:00
punishedPlayer = PlayerCache . getPunishedPlayer ( player . getUniqueId ( ) ) ;
2022-02-05 23:18:17 +00:00
}
2022-02-22 00:20:22 +00:00
punishedPlayer . convertPunishments ( ) ;
2020-10-28 19:07:02 +00:00
assert plexPlayer ! = null ;
2022-02-22 07:17:00 +00:00
String loginMessage = plugin . getRankManager ( ) . getLoginMessage ( plexPlayer ) ;
2022-02-22 07:11:37 +00:00
2022-02-22 07:17:00 +00:00
if ( ! loginMessage . isEmpty ( ) )
2020-10-28 19:07:02 +00:00
{
2022-02-22 07:17:00 +00:00
event . joinMessage (
Component . text ( ChatColor . AQUA + player . getName ( ) + " is " ) . color ( NamedTextColor . AQUA ) . append ( LegacyComponentSerializer . legacyAmpersand ( ) . deserialize ( loginMessage ) )
. append ( Component . newline ( ) )
. append ( Component . text ( player . getName ( ) + " joined the game " ) . color ( NamedTextColor . YELLOW ) )
) ;
2020-10-28 19:07:02 +00:00
}
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
2022-02-22 07:17:00 +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-10-27 21:04:05 +00:00
PlayerCache . getPlexPlayerMap ( ) . remove ( event . getPlayer ( ) . getUniqueId ( ) ) ; //remove them from cache
2020-10-27 20:12:38 +00:00
}
}