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.listener.PlexListener ;
import dev.plex.player.PlexPlayer ;
2022-04-07 07:37:31 +00:00
import dev.plex.storage.StorageType ;
2022-04-19 20:19:55 +00:00
import dev.plex.util.PermissionsUtil ;
2021-01-03 07:21:15 +00:00
import dev.plex.util.PlexLog ;
2022-02-24 05:19:40 +00:00
import dev.plex.util.PlexUtils ;
2022-04-13 02:22:17 +00:00
import java.util.Arrays ;
import java.util.List ;
2022-04-13 02:08:12 +00:00
import net.kyori.adventure.text.Component ;
import net.kyori.adventure.text.event.ClickEvent ;
import net.kyori.adventure.text.format.NamedTextColor ;
2022-02-28 20:39:04 +00:00
import org.bukkit.Bukkit ;
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 ;
2022-02-28 20:39:04 +00:00
import org.bukkit.event.inventory.InventoryClickEvent ;
import org.bukkit.event.inventory.InventoryCloseEvent ;
2020-10-27 20:12:38 +00:00
import org.bukkit.event.player.PlayerJoinEvent ;
import org.bukkit.event.player.PlayerQuitEvent ;
2022-04-11 17:56:26 +00:00
public class PlayerListener < T > extends PlexListener
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-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-08-02 12:08:52 +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. " ) ;
2022-03-18 01:18:35 +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-04-02 06:25:24 +00:00
plexPlayer . setIps ( Arrays . asList ( 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-08-02 12:08:52 +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-04-02 19:55:47 +00:00
List < String > ips = plexPlayer . getIps ( ) ;
2022-04-02 06:25:24 +00:00
String currentIP = player . getAddress ( ) . getAddress ( ) . getHostAddress ( ) . trim ( ) ;
2022-04-02 19:55:47 +00:00
if ( ! ips . contains ( currentIP ) )
2022-04-02 06:25:24 +00:00
{
2022-04-02 19:55:47 +00:00
PlexLog . debug ( " New IP address detected for player: " + player . getName ( ) + " . Adding " + currentIP + " to the database. " ) ;
ips . add ( currentIP ) ;
plexPlayer . setIps ( ips ) ;
2022-04-02 20:12:38 +00:00
DataUtils . update ( plexPlayer ) ;
}
if ( ! plexPlayer . getName ( ) . equals ( player . getName ( ) ) )
{
PlexLog . log ( plexPlayer . getName ( ) + " has a new name. Changing it to " + player . getName ( ) ) ;
plexPlayer . setName ( player . getName ( ) ) ;
DataUtils . update ( plexPlayer ) ;
2022-04-02 19:55:47 +00:00
}
2020-11-06 18:19:38 +00:00
}
2022-05-18 10:31:15 +00:00
plugin . getPlayerCache ( ) . getPlexPlayerMap ( ) . put ( player . getUniqueId ( ) , plexPlayer ) ;
2022-04-04 08:36:50 +00:00
if ( plexPlayer . isLockedUp ( ) )
2022-02-28 20:39:04 +00:00
{
player . openInventory ( player . getInventory ( ) ) ;
}
2020-10-28 19:07:02 +00:00
2022-02-22 07:17:00 +00:00
String loginMessage = plugin . getRankManager ( ) . getLoginMessage ( plexPlayer ) ;
if ( ! loginMessage . isEmpty ( ) )
2020-10-28 19:07:02 +00:00
{
2022-04-10 01:53:27 +00:00
PlexUtils . broadcast ( PlexUtils . mmDeserialize ( " <aqua> " + player . getName ( ) + " is " + loginMessage ) ) ;
2020-10-28 19:07:02 +00:00
}
2022-04-07 00:38:15 +00:00
2022-04-19 20:19:55 +00:00
PermissionsUtil . setupPermissions ( player ) ;
2022-04-11 17:56:26 +00:00
2022-04-07 07:37:31 +00:00
if ( plugin . getStorageType ( ) ! = StorageType . MONGODB )
{
2022-04-11 17:56:26 +00:00
plexPlayer . loadNotes ( ) ;
2022-04-07 07:37:31 +00:00
}
2022-04-13 02:08:12 +00:00
2022-05-06 01:41:11 +00:00
if ( plugin . getStorageType ( ) = = StorageType . MONGODB )
{
plexPlayer . loadPunishments ( ) ;
}
2022-05-29 02:12:18 +00:00
if ( plugin . getStorageType ( ) ! = StorageType . MONGODB )
2022-04-13 02:08:12 +00:00
{
2022-05-29 02:12:18 +00:00
plugin . getSqlNotes ( ) . getNotes ( plexPlayer . getUuid ( ) ) . whenComplete ( ( notes , ex ) - >
2022-04-13 02:08:12 +00:00
{
2022-05-29 02:12:18 +00:00
String plural = notes . size ( ) = = 1 ? " note. " : " notes. " ;
if ( ! notes . isEmpty ( ) )
{
PlexUtils . broadcastToAdmins ( Component . text ( plexPlayer . getName ( ) + " has " + notes . size ( ) + " " + plural ) . color ( NamedTextColor . GOLD ) ) ;
PlexUtils . broadcastToAdmins ( Component . text ( " Click to view their " + plural ) . clickEvent ( ClickEvent . runCommand ( " /notes " + plexPlayer . getName ( ) + " list " ) ) . color ( NamedTextColor . GOLD ) ) ;
}
} ) ;
}
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
{
2022-05-18 10:31:15 +00:00
PlexPlayer plexPlayer = plugin . getPlayerCache ( ) . getPlexPlayerMap ( ) . get ( event . getPlayer ( ) . getUniqueId ( ) ) ; //get the player because it's literally impossible for them to not have an object
2020-10-27 21:04:05 +00:00
2020-11-05 21:17:14 +00:00
if ( plugin . getRankManager ( ) . isAdmin ( plexPlayer ) )
{
2022-04-07 03:55:01 +00:00
plugin . getAdminList ( ) . removeFromCache ( plexPlayer . getUuid ( ) ) ;
2020-11-05 21:17:14 +00:00
}
2022-04-02 20:12:38 +00:00
DataUtils . update ( plexPlayer ) ;
2022-05-18 10:31:15 +00:00
plugin . getPlayerCache ( ) . getPlexPlayerMap ( ) . remove ( event . getPlayer ( ) . getUniqueId ( ) ) ; //remove them from cache
2020-10-27 20:12:38 +00:00
}
2022-02-28 20:39:04 +00:00
@EventHandler ( priority = EventPriority . HIGHEST )
public void onPlayerInventoryClose ( InventoryCloseEvent event )
{
2022-04-04 08:36:50 +00:00
PlexPlayer player = DataUtils . getPlayer ( event . getPlayer ( ) . getUniqueId ( ) ) ;
2022-02-28 20:39:04 +00:00
if ( player . isLockedUp ( ) )
{
Bukkit . getScheduler ( ) . runTaskLater ( plugin , ( ) - > event . getPlayer ( ) . openInventory ( event . getInventory ( ) ) , 1L ) ;
}
}
@EventHandler ( priority = EventPriority . HIGHEST )
public void onInventoryClick ( InventoryClickEvent event )
{
2022-04-04 08:36:50 +00:00
PlexPlayer player = DataUtils . getPlayer ( event . getWhoClicked ( ) . getUniqueId ( ) ) ;
2022-02-28 20:39:04 +00:00
if ( player . isLockedUp ( ) )
{
event . setCancelled ( true ) ;
}
}
2020-10-27 20:12:38 +00:00
}