public class command implements Listener, CommandExecutor {
    private static Map<String, playerData> playerData = new HashMap<>();


    FileConfiguration player;

    public FileConfiguration getData() {
        return this.player;
    }

    public static playerData getPlayerData(Player player)
    {
        if(!playerData.containsKey(player.getUniqueId().toString()))
        {
            playerData data =  new playerData();
            playerData.put(player.getUniqueId().toString(), data);
            return data;
        }
        return playerData.get(player.getUniqueId().toString());

    }

    public static void setPlayerData(Player player, playerData data)
    {
        playerData.put(player.getUniqueId().toString(), data);
    }

    public static void resPlayerData(Player player)
    {
        playerData.remove(player.getUniqueId().toString());
    }

    //separatoooooooooooooooooooooooooooaaaaaaaaaaaaaaaaaaaaar//
    final private String invLevel = "Level Progress";

    public command(Leveling_System plugin)
    {
        Bukkit.getPluginManager().registerEvents(this, plugin);
    }



    @EventHandler
    public void onInventoryClick(InventoryClickEvent event)
    {
        if (!event.getView().getTitle().equals(invLevel))
        {
            return;
        }

        Player player = (Player) event.getWhoClicked();
        int slot = event.getSlot();
        event.setCancelled(true);
    }

    @EventHandler
    public void onBlockBreak(BlockBreakEvent event)
    {
        BlockData bdata = event.getBlock().getBlockData();
        if(bdata instanceof Ageable){
            Ageable age = (Ageable) bdata;
            if(age.getAge() == age.getMaximumAge())
            {
                playerData data = command.getPlayerData(event.getPlayer()); //remove if needed
                Player player = event.getPlayer();
                int currentPoints = data.getExp();
                int booster = data.getBoost();
                int pointsToAdd = 4 * booster;
                //level related
                int currentLevel = data.getLevel();
                int newLevel = currentLevel + 1;
                //end of level related
                int totalPoints = pointsToAdd + currentPoints;
                int playerReq = data.getReq();
                data.setExp(totalPoints);
                player.sendTitle("§e§l+" + pointsToAdd, "§6§l" + currentLevel + " §8§l>> " + "§a" + totalPoints + "§7/§a" + playerReq, 1, 20, 1);
                player.playSound(player.getLocation() ,"entity.experience_orb.pickup", 20, 300);
                if(totalPoints >= playerReq)
                {// Get player's current level or 0 if not found
                    int newReq = playerReq + 50;
                    data.setLevel(newLevel); // Update player's level
                    data.setExp(0); // Reset player's points to 0
                    data.setReq(newReq);
                    player.sendTitle("§6§lLEVEL UP!", "§8You are now §dLvl. " + currentLevel, 1, 20, 1);
                    player.playSound(player.getLocation() ,"ui.toast.challenge_complete", 20, 300);
                }

            }
        }
    }

    @EventHandler
    public void onEntityDeath(EntityDeathEvent event)
    {
        if("Dead Mobius".equals(event.getEntity().getCustomName()))
        {
            if(event.getEntity().getKiller() instanceof Player)
            {
                Player player = (Player) event.getEntity().getKiller();
                playerData data = command.getPlayerData(event.getEntity().getKiller()); //remove if needed
                int currentPoints = data.getExp();
                int booster = data.getBoost();
                int pointsToAdd = 4 * booster;
                //level related
                int currentLevel = data.getLevel();
                int newLevel = currentLevel + 1;
                //end of level related
                int totalPoints = pointsToAdd + currentPoints;
                int playerReq = data.getReq();
                data.setExp(totalPoints);
                player.sendTitle("§e§l+" + pointsToAdd, "§6§l" + currentLevel + " §8§l>> " + "§a" + totalPoints + "§7/§a" + playerReq, 1, 20, 1);
                player.playSound(player.getLocation() ,"entity.experience_orb.pickup", 20, 300);
                if(totalPoints >= playerReq)
                {// Get player's current level or 0 if not found
                    int newReq = playerReq + 50;
                    data.setLevel(newLevel); // Update player's level
                    data.setExp(0); // Reset player's points to 0
                    data.setReq(newReq);
                    player.sendTitle("§6§lLEVEL UP!", "§8You are now §dLvl. " + currentLevel, 1, 20, 1);
                    player.playSound(player.getLocation() ,"ui.toast.challenge_complete", 20, 300);
                    }
            }
        }
    }