diff --git a/src/main/java/fr/communaywen/core/tpa/TPACommand.java b/src/main/java/fr/communaywen/core/tpa/TPACommand.java index 277fbcc4..1063523c 100644 --- a/src/main/java/fr/communaywen/core/tpa/TPACommand.java +++ b/src/main/java/fr/communaywen/core/tpa/TPACommand.java @@ -1,8 +1,5 @@ package fr.communaywen.core.tpa; -import dev.xernas.menulib.PaginatedMenu; -import dev.xernas.menulib.utils.ItemBuilder; -import dev.xernas.menulib.utils.ItemUtils; import fr.communaywen.core.AywenCraftPlugin; import fr.communaywen.core.credit.Credit; import fr.communaywen.core.credit.Feature; @@ -12,23 +9,17 @@ import net.kyori.adventure.text.format.TextColor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Named; import revxrsal.commands.bukkit.annotation.CommandPermission; -import fr.communaywen.core.tpa.TPACommandGUI; @Feature("TPA") @Credit({"ddemile", "Axillity", "misieur", "process"}) public class TPACommand implements Listener { - private final TPAQueue tpQueue = TPAQueue.INSTANCE; private final AywenCraftPlugin plugin; - private static final int PLAYERS_PER_PAGE = 45; public TPACommand(AywenCraftPlugin plugin) { this.plugin = plugin; @@ -39,7 +30,8 @@ public TPACommand(AywenCraftPlugin plugin) { @CommandPermission("ayw.command.tpa") public void onCommand(Player player, @Named("joueur") String targetName) { if (targetName == null || targetName.trim().isEmpty()) { - new TPACommandGUI(player, plugin).open(); + player.sendMessage(Component.text("[TPA] ❌ Vous devez spécifier un joueur.") + .color(TextColor.color(255, 0, 0))); return; } @@ -70,12 +62,12 @@ public static void sendTPARequest(Player player, Player target, AywenCraftPlugin player.sendMessage(Component.text("[TPA] ✅ Demande de téléportation envoyée à ") .color(TextColor.color(0, 255, 0)) .append(Component.text(target.getName()) - .color(TextColor.color(0, 255, 255))) // Light blue color for the target's name + .color(TextColor.color(0, 255, 255))) .append(Component.text(" ✅")) .color(TextColor.color(0, 255, 0))); final Component message = Component.text(player.getName() + " vous a envoyé une demande de téléportation. Tapez /tpaccept pour accepter.") - .color(TextColor.color(0, 255, 255)) // Light blue color for the neutral text + .color(TextColor.color(0, 255, 255)) .clickEvent(ClickEvent.runCommand("/tpaccept")) .hoverEvent(HoverEvent.showText(Component.text("[TPA] §7[§aCliquez pour accepter§7]"))); diff --git a/src/main/java/fr/communaywen/core/tpa/TPACommandGUI.java b/src/main/java/fr/communaywen/core/tpa/TPACommandGUI.java index 660fe7cd..154ae1bd 100644 --- a/src/main/java/fr/communaywen/core/tpa/TPACommandGUI.java +++ b/src/main/java/fr/communaywen/core/tpa/TPACommandGUI.java @@ -2,19 +2,14 @@ import dev.xernas.menulib.PaginatedMenu; import dev.xernas.menulib.utils.ItemBuilder; -import dev.xernas.menulib.utils.ItemUtils; import dev.xernas.menulib.utils.StaticSlots; import fr.communaywen.core.AywenCraftPlugin; -import fr.communaywen.core.tpa.TPACommand; -import fr.communaywen.core.tpa.TPAQueue; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.bukkit.inventory.meta.ItemMeta; import java.util.ArrayList; import java.util.HashMap; @@ -24,61 +19,76 @@ public class TPACommandGUI extends PaginatedMenu { private final AywenCraftPlugin plugin; - private final TPAQueue tpQueue; public TPACommandGUI(Player owner, AywenCraftPlugin plugin) { super(owner); this.plugin = plugin; - this.tpQueue = TPAQueue.INSTANCE; } @Override - public @Nullable Material getBorderMaterial() { + public Material getBorderMaterial() { return Material.GRAY_STAINED_GLASS_PANE; } @Override - public @NotNull List getStaticSlots() { - return StaticSlots.STANDARD; + public List getStaticSlots() { + return StaticSlots.BOTTOM; } @Override - public @NotNull List getItems() { + public List getItems() { List items = new ArrayList<>(); - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - if (!onlinePlayer.equals(getOwner())) { - items.add(new ItemBuilder(this, ItemUtils.getPlayerSkull(onlinePlayer.getUniqueId()), itemMeta -> { - itemMeta.setDisplayName(ChatColor.GREEN + onlinePlayer.getName()); - itemMeta.setLore(List.of( - ChatColor.GRAY + "Cliquez pour envoyer une demande de téléportation" - )); - }).setOnClick(event -> { - TPACommand.sendTPARequest(getOwner(), onlinePlayer, plugin); - getOwner().closeInventory(); - })); + Bukkit.getOnlinePlayers().forEach(target -> { + if (!target.equals(getOwner())) { + ItemStack item = new ItemStack(Material.PLAYER_HEAD); + ItemMeta meta = item.getItemMeta(); + if (meta != null) { + meta.setDisplayName("§a" + target.getName()); + item.setItemMeta(meta); + } + items.add(item); } - } + }); return items; } @Override public Map getButtons() { - Map map = new HashMap<>(); - map.put(49, new ItemBuilder(this, Material.BARRIER, itemMeta -> itemMeta.setDisplayName(ChatColor.GRAY + "Fermer")) - .setCloseButton()); - map.put(48, new ItemBuilder(this, Material.RED_CONCRETE, itemMeta -> itemMeta.setDisplayName(ChatColor.RED + "Page précédente")) - .setPreviousPageButton()); - map.put(50, new ItemBuilder(this, Material.GREEN_CONCRETE, itemMeta -> itemMeta.setDisplayName(ChatColor.GREEN + "Page suivante")) - .setNextPageButton()); - return map; + Map buttons = new HashMap<>(); + buttons.put(48, createButton(Material.RED_CONCRETE, "§cPrevious")); + buttons.put(49, createButton(Material.BARRIER, "§7Close")); + buttons.put(50, createButton(Material.GREEN_CONCRETE, "§aNext")); + return buttons; + } + + private ItemStack createButton(Material material, String name) { + ItemStack item = new ItemStack(material); + ItemMeta meta = item.getItemMeta(); + if (meta != null) { + meta.setDisplayName(name); + item.setItemMeta(meta); + } + return item; } @Override - public @NotNull String getName() { - return "Liste des joueurs"; + public String getName() { + return "Sélectionnez un joueur pour TPA"; } @Override - public void onInventoryClick(InventoryClickEvent inventoryClickEvent) { + public void onInventoryClick(InventoryClickEvent event) { + if (event.getCurrentItem() != null) { + ItemStack clickedItem = event.getCurrentItem(); + if (clickedItem.getType() == Material.PLAYER_HEAD) { + ItemMeta meta = clickedItem.getItemMeta(); + String playerName = meta != null ? meta.getDisplayName().replace("§a", "") : "Unknown"; + Player target = Bukkit.getPlayer(playerName); + if (target != null) { + TPACommand.sendTPARequest(getOwner(), target, plugin); + getOwner().closeInventory(); + } + } + } } } diff --git a/src/main/java/fr/communaywen/core/tpa/TPAGUICommand.java b/src/main/java/fr/communaywen/core/tpa/TPAGUICommand.java new file mode 100644 index 00000000..2a0e3ee7 --- /dev/null +++ b/src/main/java/fr/communaywen/core/tpa/TPAGUICommand.java @@ -0,0 +1,32 @@ +package fr.communaywen.core.tpa; + +import dev.xernas.menulib.PaginatedMenu; +import dev.xernas.menulib.utils.ItemBuilder; +import fr.communaywen.core.AywenCraftPlugin; +import fr.communaywen.core.credit.Credit; +import fr.communaywen.core.credit.Feature; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; +import revxrsal.commands.annotation.Command; +import revxrsal.commands.bukkit.annotation.CommandPermission; + +@Feature("TPA") +@Credit({"ddemile", "Axillity", "misieur", "process"}) +public class TPAGUICommand implements Listener { + + private final AywenCraftPlugin plugin; + + public TPAGUICommand(AywenCraftPlugin plugin) { + this.plugin = plugin; + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @Command("tpagui") + @CommandPermission("ayw.command.tpagui") + public void onCommand(Player player) { + new TPACommandGUI(player, plugin).open(); + } +}