package pack.example.lobby;

import be.iammehdib.api.bungee.BungeeServer;
import be.iammehdib.api.inventory.ItemBuilder;
import be.iammehdib.api.inventory.ItemSkull;
import be.iammehdib.api.lobby.LobbyTemplate_1_8;
import be.iammehdib.api.player.profile.PlayerProfile;
import be.iammehdib.api.utils.math.DateUtils;
import be.iammehdib.api.utils.packet.PacketReader;
import be.iammehdib.api.visual.NameTag;
import be.iammehdib.api.visual.board.Board;
import be.iammehdib.api.visual.hologram.Hologram;
import be.iammehdib.api.visual.hologram.HologramClass;
import be.iammehdib.api.visual.npc.NPCMap;
import be.iammehdib.core.UCore;
import be.iammehdib.core.gui.base.ProfilGui;
import be.iammehdib.modules.list.global.GuiModule;
import com.google.common.collect.Maps;
import net.minecraft.server.v1_8_R3.PlayerConnection;
import org.bukkit.*;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.skylymc.lobby.gui.CosmeticsGui;
import org.skylymc.lobby.gui.MainGui;
import org.skylymc.lobby.gui.SettingsGui;
import org.skylymc.lobby.utils.Leaderboard;

import java.util.Arrays;
import java.util.HashMap;

public class MainLobby extends LobbyTemplate_1_8 implements Listener {

    int playerLobbysCount = 0;

    public MainLobby() {
        super(UCore.getInstance(), "Home", new Location(Bukkit.getWorld("hub"), 0.5, 100.0, 0.5, 0.0f, 0.0f));
        World world = getSpawnPoint().getWorld();
        loadConfigNPC();
        new BukkitRunnable() {
            public void run() {
                updateLobbyPlayers();
            }
        }.runTaskTimerAsynchronously(getPlugin(), 100, 100);

        getHolograms().put("Home", new Hologram().newHologram(new Location(world, 0.5, 101.0, 10.5), Arrays.asList("§c» §c§lSKYLY §c«", "§84 ans d'existence avec vous §c❤", "", "§7Cliquez sur la boussole de §6§lnavigation", "§7pour jouer à nos différents §ajeux §7!", "", "§7Jouez avec vos §damis §7et invitez-les dans votre", "§7groupe avec le §e/party.")));
    }

    @Override
    public void onClickNpc(Player player, NPCMap npc) {
        /*if (npc.name.equals("ffa")) {
            GuiModule.open(player, new MainGui(player));
        }*/
    }

    @Override
    public void onClick(PlayerInteractEvent event) {
        if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return;

        Player player = event.getPlayer();
        player.sendMessage("click Item")
    }

    @Override
    public void onLeave(PlayerProfile player) {
        super.onLeave(player);
        PacketReader packetReader = new PacketReader();
        packetReader.uninject(player.getPlayer());
    }

    @Override
    public void onFirstJoin(PlayerProfile player) {
        super.onFirstJoin(player);
        player.getPlayer().teleport(getSpawnPoint());
        player.getPlayer().setGameMode(GameMode.ADVENTURE);
        PacketReader packetReader = new PacketReader();
        packetReader.inject(player.getPlayer());
        player.getPlayer().sendTitle(" ", " ");

        player.getPlayer().sendMessage(" ");

        giveItems(player.getPlayer());
        NameTag.rankSet(player);
        if (player.getClanName() != null)
            NameTag.setSuffix(player.getPlayer(), " " + player.getClanName());

        giveScoreboardHub(player);
        sendWelcomeMessage(player);

        getPlugin().getServer().getScheduler().runTaskLater(getPlugin(), () -> {
            if (!player.getPlayer().isOnline()) return;
            showHolograms(player.getPlayer());
            showNpc(player.getPlayer());
        }, 5);
    }

    @Override
    public void onJoin(PlayerProfile playerAPI) {
        super.onJoin(playerAPI);
        Player player = playerAPI.getPlayer();

        player.teleport(getSpawnPoint());
        player.setGameMode(GameMode.ADVENTURE);
        PacketReader packetReader = new PacketReader();
        packetReader.inject(player.getPlayer());
        player.getPlayer().sendTitle(" ", " ");

        giveItems(player);

        giveScoreboardHub(playerAPI);
        sendWelcomeMessage(playerAPI);
        NameTag.rankSet(playerAPI);
        if (playerAPI.getClanName() != null)
            NameTag.setSuffix(player, " " + playerAPI.getClanName());

        getPlugin().getServer().getScheduler().runTaskLater(getPlugin(), () -> {
            if (!player.isOnline()) return;
            showHolograms(player);
            showNpc(player);
        }, 10);
    }

    public void giveItems(Player p) {
        p.getInventory().clear();
        p.getInventory().setItem(0, new ItemBuilder(Material.COMPASS).setName("§6Main Menu").build());
      
    }

    public final void giveScoreboardHub(PlayerProfile playerAPI) {
        String clanName = "§7None";
        if (playerAPI.getClanName() != null) {
            clanName = playerAPI.getClanName();
        }

        Board.deleteAllLines(playerAPI.getPlayer());
        Board.updateBoardTitle(playerAPI.getPlayer(), "§6§lExemple Lobby");
        Board.updateBoard(playerAPI.getPlayer(), Arrays.asList(
                " §7§m------------------ ",
                " §fPlayers: §a" + playerLobbysCount,
                " §fRank: " + playerAPI.getPrefix(),
                " §fCoins: §6" + playerAPI.getCoins(),
                " §fClan: " + clanName,
                " ",
                " §eplay.skyly.fr",
                " §7§m------------------ ")
        );
    }

    public void updateLobbyPlayers() {
        this.playerLobbysCount = BungeeServer.getTotalPlayerCount();

        for (PlayerProfile playerAPI : getPlayers()) {
            Board.updateBoardLine(playerAPI.getPlayer(), " §fPlayers: §a" + playerLobbysCount, 1);
        }
    }
}

Et dans votre main plugin pour initialiser le lobby vous faites :

LobbyModule.setLobby(new MainLobby());