Skip to content
This repository was archived by the owner on Oct 12, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 4 additions & 12 deletions src/main/java/fr/communaywen/core/tpa/TPACommand.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;
}

Expand Down Expand Up @@ -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]")));

Expand Down
80 changes: 45 additions & 35 deletions src/main/java/fr/communaywen/core/tpa/TPACommandGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Integer> getStaticSlots() {
return StaticSlots.STANDARD;
public List<Integer> getStaticSlots() {
return StaticSlots.BOTTOM;
}

@Override
public @NotNull List<ItemStack> getItems() {
public List<ItemStack> getItems() {
List<ItemStack> 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<Integer, ItemStack> getButtons() {
Map<Integer, ItemStack> 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<Integer, ItemStack> 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();
}
}
}
}
}
32 changes: 32 additions & 0 deletions src/main/java/fr/communaywen/core/tpa/TPAGUICommand.java
Original file line number Diff line number Diff line change
@@ -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();
}
}