Plex/server/src/main/java/dev/plex/listener/impl/PlayerListener.java

144 lines
5.6 KiB
Java
Raw Normal View History

2021-01-03 07:21:15 +00:00
package dev.plex.listener.impl;
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;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
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;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class PlayerListener<T> extends PlexListener
{
// setting up a player's data
2020-11-06 01:29:38 +00:00
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerSetup(PlayerJoinEvent event)
{
Player player = event.getPlayer();
PlexPlayer plexPlayer;
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.");
}
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.");
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
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
{
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
}
}
2022-05-18 10:31:15 +00:00
plugin.getPlayerCache().getPlexPlayerMap().put(player.getUniqueId(), plexPlayer);
if (plexPlayer.isLockedUp())
2022-02-28 20:39:04 +00:00
{
player.openInventory(player.getInventory());
}
String loginMessage = plugin.getRankManager().getLoginMessage(plexPlayer);
if (!loginMessage.isEmpty())
{
2022-04-10 01:53:27 +00:00
PlexUtils.broadcast(PlexUtils.mmDeserialize("<aqua>" + player.getName() + " is " + loginMessage));
}
2022-04-07 00:38:15 +00:00
2022-04-19 20:19:55 +00:00
PermissionsUtil.setupPermissions(player);
2022-04-07 07:37:31 +00:00
if (plugin.getStorageType() != StorageType.MONGODB)
{
plexPlayer.loadNotes();
2022-04-07 07:37:31 +00:00
}
2022-04-13 02:08:12 +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));
}
});
}
}
// saving the player's data
2020-11-03 02:24:25 +00:00
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerSave(PlayerQuitEvent event)
{
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-11-05 21:17:14 +00:00
if (plugin.getRankManager().isAdmin(plexPlayer))
{
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
}
2022-02-28 20:39:04 +00:00
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerInventoryClose(InventoryCloseEvent event)
{
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)
{
PlexPlayer player = DataUtils.getPlayer(event.getWhoClicked().getUniqueId());
2022-02-28 20:39:04 +00:00
if (player.isLockedUp())
{
event.setCancelled(true);
}
}
}