Untitled

 avatar
unknown
plain_text
a year ago
11 kB
2
Indexable
package org.lifestealsmp.duelscore;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class EventsManager implements Listener {

	public ArrayList<String> respawning = new ArrayList<String>();

	@EventHandler
	public void onPlayerJoin(PlayerJoinEvent event) {
		Main.getInstance().createPlayerFile(event.getPlayer().getUniqueId().toString());
	}

	@EventHandler
	public void onPlayerTeleport(PlayerTeleportEvent event) {
		Location to = event.getTo();
		World duelsWorld = Bukkit.getWorld("duels");

		if (duelsWorld == null) {
			return; // World not found, you might want to handle this case.
		}

		for (Player player : duelsWorld.getPlayers()) {
			if (player.getLocation().equals(to)) {
				event.getPlayer().sendMessage("You cannot teleport to a player in the duels world!");
				event.setCancelled(true);
				return;
			}
		}
	}

	@EventHandler
	public void onCmd(PlayerCommandPreprocessEvent event) {
		Player player = (Player) event.getPlayer();
		if (Main.getInstance().functionsManager.savedInventories.containsKey(player.getName())) {
			event.setCancelled(true);
		}
	}

	@EventHandler
	public void onInventoryClick(InventoryClickEvent event) {
		Player player = (Player) event.getWhoClicked();
		if (event.getView().getTitle().startsWith("§4§lDuels §0§lSelect Game Mode")) {
			event.setCancelled(true);

			if (event.getSlot() == 12) {
				Main.getInstance().inventoryManager.openUnRankedDuelsGUI(player);
			}

			if (event.getSlot() == 14) {
				Main.getInstance().inventoryManager.openRankedDuelsGUI(player);
			}
		}
	}
	
	@EventHandler
	public void onPlayerDroppingItem(PlayerDropItemEvent event) {
		Player player = (Player) event.getPlayer();
		World duels = Bukkit.getServer().getWorld("duels");
		if(player.getLocation().getWorld().equals(duels)) {
			event.setCancelled(true);
		}
	}

	@EventHandler
	public void onInventoryClickUnRankedDuelsGUI(InventoryClickEvent event) {
	    Player player = (Player) event.getWhoClicked();
	    if (event.getView().getTitle().startsWith("§4§lDuels §0§lUnranked Kits")) {
	        event.setCancelled(true);

	        ItemStack clickedItem = event.getCurrentItem();
	        if (clickedItem != null && clickedItem.hasItemMeta()) {
	            // Get the kits section from the config here, so it's accessible throughout the method
	            ConfigurationSection kitsSection = Main.getInstance().getConfig().getConfigurationSection("Kits");

	            ItemMeta itemMeta = clickedItem.getItemMeta();
	            if (clickedItem.getType().equals(Material.EMERALD_BLOCK) && itemMeta.getDisplayName().contains("Join All Un-Ranked Queues")) {
	                // Logic to add the player to all unranked queues
	                if (kitsSection != null) {
	                    for (String key : kitsSection.getKeys(false)) {
	                        Main.getInstance().functionsManager.addPlayerToUnRankedQueue(player, key);
	                    }
	                }
	                player.sendMessage("§e§lDuels §8> §cYou've joined all unranked queues!");
	                player.closeInventory();
	                return;
	            }

	            if (!clickedItem.getType().equals(Material.BLACK_STAINED_GLASS_PANE)) {
	                String kitDisplayName = ChatColor.stripColor(itemMeta.getDisplayName()).trim();
	                
	                // Check if kitsSection is not null
	                if (kitsSection != null) {
	                    for (String key : kitsSection.getKeys(false)) {
	                        String displayName = ChatColor.stripColor(kitsSection.getString(key + ".name")).trim();
	                        if (displayName.contains(kitDisplayName)) {
	                            // key is the kit path you're looking for
	                            player.sendMessage("§e§lDuels §8> §cYou've joined the queue for kit §a" + kitDisplayName);
	                            Main.getInstance().functionsManager.addPlayerToUnRankedQueue(player, key);
	                            break;
	                        }
	                    }
	                }
	                player.closeInventory();
	            }
	        }
	    }
	}


	@EventHandler
	public void onInventoryClickRankedDuelsGUI(InventoryClickEvent event) {
	    Player player = (Player) event.getWhoClicked();
	    if (event.getView().getTitle().startsWith("§4§lDuels §0§lRanked Kits")) {
	        event.setCancelled(true);

	        ItemStack clickedItem = event.getCurrentItem();
	        if (clickedItem != null && clickedItem.hasItemMeta()) {
	            // Get the kits section from the config here, so it's accessible throughout the method
	            ConfigurationSection kitsSection = Main.getInstance().getConfig().getConfigurationSection("Kits");

	            ItemMeta itemMeta = clickedItem.getItemMeta();
	            if (clickedItem.getType().equals(Material.EMERALD_BLOCK) && itemMeta.getDisplayName().contains("Join All Ranked Queues")) {
	                // Logic to add the player to all ranked queues
	                if (kitsSection != null) {
	                    for (String key : kitsSection.getKeys(false)) {
	                        Main.getInstance().functionsManager.addPlayerToRankedQueue(player, key);
	                    }
	                }
	                player.sendMessage("§e§lDuels §8> §cYou've joined all ranked queues!");
	                player.closeInventory();
	                return;
	            }

	            if (!clickedItem.getType().equals(Material.BLACK_STAINED_GLASS_PANE)) {
	                String kitDisplayName = ChatColor.stripColor(itemMeta.getDisplayName()).trim();
	                
	                // Check if kitsSection is not null
	                if (kitsSection != null) {
	                    for (String key : kitsSection.getKeys(false)) {
	                        String displayName = ChatColor.stripColor(kitsSection.getString(key + ".name")).trim();
	                        if (displayName.contains(kitDisplayName)) {
	                            player.sendMessage("§e§lDuels §8> §cYou've joined the queue for kit §a" + kitDisplayName);
	                            Main.getInstance().functionsManager.addPlayerToRankedQueue(player, key);
	                            break;
	                        }
	                    }
	                }
	                player.closeInventory();
	            }
	        }
	    }
	} 


	@EventHandler
	public void onEntityDeath(EntityDeathEvent event) {
		if (event.getEntity() instanceof Player) {
			Player deceasedPlayer = (Player) event.getEntity();
			for (Map.Entry<String, List<Player>> entry : Main.getInstance().functionsManager.map.entrySet()) {
				List<Player> players = entry.getValue();
				if (players.contains(deceasedPlayer)) {
					respawning.add(deceasedPlayer.getName());
					event.getDrops().clear();
					String arenaName = entry.getKey();
					Player otherPlayer = players.stream().filter(player -> !player.equals(deceasedPlayer)).findFirst()
							.orElse(null);
					if (otherPlayer != null) {
						Main.getInstance().functionsManager.FinishDuelMatch(arenaName, otherPlayer, deceasedPlayer);
					}
					break;
				}
			}
		}
	}

	@EventHandler
	public void onPlayerRespawn(PlayerRespawnEvent event) {
		Player player = (Player) event.getPlayer();
		if (respawning.contains(player.getName())) {
			Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.getInstance(), new Runnable() {
				public void run() {
					Main.getInstance().functionsManager.RestorePlayerData(player);
					respawning.remove(player.getName());
				}
			}, 1);
		}
	}

	@EventHandler
	public void OnPlayerQuit(PlayerQuitEvent event) {
		Player QuittingPlayer = (Player) event.getPlayer();
		Main.getInstance().functionsManager.RemoveQueue(QuittingPlayer);
		
		File directory = new File("plugins/Duels/players");
		File QuittingPlayerFile = new File(directory, QuittingPlayer.getUniqueId() + ".yml");
		FileConfiguration QuittingPlayerConfig = YamlConfiguration.loadConfiguration(QuittingPlayerFile);

		for (Map.Entry<String, List<Player>> entry : Main.getInstance().functionsManager.map.entrySet()) {
			List<Player> players = entry.getValue();
			if (players.contains(QuittingPlayer)) {
				String arenaName = entry.getKey();
				Player otherPlayer = players.stream().filter(player -> !player.equals(QuittingPlayer)).findFirst()
						.orElse(null);
				if (otherPlayer != null) {
					QuittingPlayerConfig.set("Location", Main.getInstance().functionsManager.savedlocation.get(QuittingPlayer.getName()));
					try {
						QuittingPlayerConfig.save(QuittingPlayerFile);
					} catch (IOException e) {
						e.printStackTrace(); // Handle any exceptions
					}
					Main.getInstance().functionsManager.RestorePlayerData(QuittingPlayer);
					Main.getInstance().functionsManager.FinishDuelMatch(arenaName, otherPlayer, QuittingPlayer);
				}
			}
		}
	}
	
	@EventHandler
	public void onLocationTeleportJoin(PlayerJoinEvent event) {
	    Player joiningPlayer = event.getPlayer(); // Renamed for clarity, as they are no longer quitting
	    
	    File directory = new File("plugins/Duels/players");
	    File playerFile = new File(directory, joiningPlayer.getUniqueId() + ".yml");
	    FileConfiguration playerConfig = YamlConfiguration.loadConfiguration(playerFile);
	    
	    // Check if the location is saved in the config
	    Location savedLocation = playerConfig.getLocation("Location");
	    if(savedLocation != null) {
	        // Teleport the player to the saved location
	        joiningPlayer.teleport(savedLocation);
	        // Remove the location from config after successful teleport
	        playerConfig.set("Location", null);
	        try {
	            // Save the config to reflect the removal of the location
	            playerConfig.save(playerFile);
	        } catch (IOException e) {
	            e.printStackTrace(); // Handle any exceptions
	        }
	    }
	}
}
Editor is loading...
Leave a Comment