| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package me.lethunderhawk.clans.command;
- import me.lethunderhawk.clans.Clan;
- import me.lethunderhawk.clans.ClanManager;
- import me.lethunderhawk.clans.ClanModule;
- import me.lethunderhawk.clans.claim.Claim;
- import me.lethunderhawk.clans.claim.ClaimManager;
- import me.lethunderhawk.clans.gui.ClanMenu;
- import me.lethunderhawk.custom.item.abstraction.instance.ItemInstance;
- import me.lethunderhawk.custom.item.abstraction.registry.CustomItemRegistry;
- import me.lethunderhawk.fluxapi.FluxService;
- import me.lethunderhawk.fluxapi.util.command.CommandNode;
- import me.lethunderhawk.fluxapi.util.command.CustomCommand;
- import me.lethunderhawk.fluxapi.util.gui.InventoryManager;
- import net.kyori.adventure.text.Component;
- import net.kyori.adventure.text.format.NamedTextColor;
- import net.kyori.adventure.text.format.TextDecoration;
- import org.bukkit.Bukkit;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import java.util.List;
- import java.util.UUID;
- import java.util.stream.Collectors;
- public class ClanCommand extends CustomCommand {
- private final ClanManager manager;
- public ClanCommand(ClanManager manager) {
- super(FluxService.get(ClanModule.class));
- this.manager = manager;
- }
- @Override
- public CommandNode getRootCommand(){
- return new CommandNode("clan", "Main clan command", null);
- }
- @Override
- public void createCommands() {
- registerSubCommand("list", "List all clans", this::handleList);
- registerSubCommand("leave", "Leave your current clan", this::handleLeaveClan);
- registerSubCommand("reload", "Reload the clan Plugin", this::handleReload);
- registerSubCommand("members", "Show the members of your clan", this::handleShowMembers);
- registerSubCommand("save", "Save all clans and Claims", this::handleSave);
- registerSubCommand("menu", "Shows a GUI to handle your clan if you are the owner", this::handleGUI);
- CommandNode claimNode = registerSubCommand("claim", "Claim land for your clan", this::handleClaim);
- claimNode.registerSubCommand("info", "Get information about your claims", this::infoClaims);
- claimNode.registerSubCommand("removeAll", "Remove all current claims", this::removeAllClaims);
- claimNode.registerSubCommand("tool", "Get the claimTool", this::getClaimTool);
- CommandNode acceptNode = registerSubCommand("acceptRequest", "Accept a pending request of a player", this::handleAcceptRequest);
- acceptNode.setTabCompleter(this::completeRequests);
- CommandNode declineNode = registerSubCommand("declineRequest", "Decline a pending request of a player", this::handleDeclineRequest);
- declineNode.setTabCompleter(this::completeRequests);
- CommandNode removeNode = registerSubCommand("remove", "Remove a Clan", this::removeClan);
- removeNode.setTabCompleter(this::completeClans);
- CommandNode joinNode = registerSubCommand("join", "Join a clan", this::handleJoin);
- joinNode.setTabCompleter(this::completeClans);
- registerSubCommand("create", "Create a new clan", this::handleCreate);
- }
- private void getClaimTool(CommandSender sender, String[] strings) {
- if(!(sender instanceof Player p)) return;
- CustomItemRegistry registry = FluxService.get(CustomItemRegistry.class);
- p.getInventory().addItem(new ItemInstance(registry.get("claim_tool")).buildItemStack());
- module.sendText(p, Component.text("The tool magically appears in your inventory! How convenient!"));
- }
- private void handleSave(CommandSender sender, String[] strings) {
- if(!sender.isOp()) return;
- FluxService.get(ClanManager.class).saveClans();
- }
- private void removeAllClaims(CommandSender sender, String[] strings) {
- if(!(sender instanceof Player player) || !sender.isOp()) return;
- FluxService.get(ClaimManager.class).removeAllClaims();
- }
- private void infoClaims(CommandSender sender, String[] strings) {
- if(!(sender instanceof Player player)) return;
- UUID uuid = player.getUniqueId();
- Clan myClan = manager.getMyClan(uuid);
- if(myClan == null) return;
- module.sendText(player, Component.text("List of all claims in clan " + myClan.getName(), NamedTextColor.GREEN, TextDecoration.UNDERLINED));
- for(Claim claim : myClan.getClaims()){
- module.sendText(player, Component.text("Claim: " + claim.getName(), NamedTextColor.GOLD));
- module.sendText(player, Component.text("This claim spans from X: " + claim.getMaxX() + " to X: " + claim.getMinX(), NamedTextColor.GRAY)
- .appendNewline()
- .append(Component.text( " and from Z: " + claim.getMaxZ() + " to Z: " + claim.getMinZ(), NamedTextColor.GRAY)));
- module.sendText(player, Component.text("Volume of this claim is " + claim.getVolume() + " Blocks", NamedTextColor.GRAY));
- }
- }
- private void handleClaim(CommandSender sender, String[] strings) {
- }
- private void handleGUI(CommandSender sender, String[] strings) {
- if(!(sender instanceof Player player)) return;
- Clan myClan = manager.getMyClan(player.getUniqueId());
- if(myClan == null) return;
- InventoryManager.openFor(player, new ClanMenu(myClan, player));
- }
- private void handleDeclineRequest(CommandSender sender, String[] strings) {
- if (!(sender instanceof Player player) || strings[0] == null || strings[0].isEmpty()) return;
- UUID uuid = player.getUniqueId();
- Clan clan = manager.getMyClan(uuid);
- if(clan.denyRequest(uuid, strings[0])){
- module.sendText(player, Component.text("You declined the request from " + strings[0] + "."));
- }else{
- module.sendText(player, Component.text("You are not the owner, or " + strings[0] + " hasn't requested to join your clan."));
- }
- }
- private void handleAcceptRequest(CommandSender sender, String[] strings) {
- if (!(sender instanceof Player player) || strings[0] == null || strings[0].isEmpty()) return;
- UUID uuid = player.getUniqueId();
- Clan clan = manager.getMyClan(uuid);
- if(clan.acceptRequest(uuid, strings[0])){
- module.sendText(player, Component.text("You accepted the request from " + strings[0] + "."));
- }else{
- module.sendText(player, Component.text("You are not the owner, or " + strings[0] + " hasn't requested to join your clan."));
- }
- }
- private void handleShowMembers(CommandSender sender, String[] strings) {
- if (!(sender instanceof Player player)) return;
- UUID uuid = player.getUniqueId();
- Clan clan = manager.getMyClan(uuid);
- if(clan == null) return;
- module.sendText(player, Component.text("§6=== Clan Members - " + clan.getName() + " ==="));
- Player owner = clan.getOwner();
- module.sendText(player,
- Component.text("Owner: ", NamedTextColor.RED)
- .append(Component.text(owner.getName(), NamedTextColor.GRAY)));
- for(UUID member : clan.getMembers()){
- Player p = Bukkit.getPlayer(member);
- if(p == null) continue;
- module.sendText(player, Component.text(p.getName()));
- }
- }
- private void handleReload(CommandSender sender, String[] strings) {
- if(sender.isOp()) {
- reload();
- module.sendText(sender, Component.text("Reloading..."));
- }
- }
- private void handleLeaveClan(CommandSender sender, String[] strings) {
- if (!(sender instanceof Player player)) return;
- UUID uuid = player.getUniqueId();
- Clan clan = manager.getMyClan(uuid);
- if(manager.leaveClan(uuid)){
- module.sendText(player,Component.text("You left your Clan "));
- if(clan.getOwner().equals(player)){
- manager.removeClan(clan.getName());
- module.sendText(player,Component.text("The clan was deleted since you are the only one left!"));
- }
- }else{
- module.sendText(player,Component.text("You cannot leave this clan! Either join a clan or if you are an owner, please remove all members first!"));
- }
- }
- private void handleHelp(CommandSender sender, String[] strings) {
- sendHelp(sender);
- }
- private void removeClan(CommandSender commandSender, String[] strings) {
- if(!commandSender.isOp()) return;
- if(strings[0] != null && !strings[0].isEmpty()) manager.removeClan(strings[0]);
- }
- private void handleCreate(CommandSender commandSender, String[] strings) {
- if (!(commandSender instanceof Player player)) return;
- String name = String.join("-", strings);
- if (manager.getMyClan(player.getUniqueId()) != null){
- module.sendText(player,Component.text("You are already in a clan! Leave your clan first!"));
- return;
- }
- if(manager.createClan(player, name)) module.sendText(player,Component.text("Creating the Clan " + name + " ..."));
- else module.sendText(player,Component.text("The Name for the Clan " + name + " is already taken or you are already in a clan!"));
- }
- // Example command handlers
- private void handleList(CommandSender sender, String[] args) {
- module.sendText(sender,Component.text("Aktuelle Liste an Clans: "));
- for (Clan clan : manager.getClans()) {
- module.sendText(sender,Component.text(clan.getName()));
- }
- }
- private void handleJoin(CommandSender sender, String[] args) {
- if (!(sender instanceof Player player)) return;
- if (args.length < 1) {
- module.sendText(sender,Component.text("Usage: /clan join <clan>"));
- return;
- }
- if(manager.joinClan(player.getUniqueId(), args[0])) module.sendText(player, Component.text("Sent a request to join the clan " + args[0]));
- }
- private List<String> completeClans(CommandSender sender, String[] args) {
- if(!(sender instanceof Player player)) return List.of("Your not a player!");
- String partial = args.length > 0 ? args[args.length - 1].toLowerCase() : "";
- if(manager.getClans() == null) return List.of("No Clan found!");
- return manager.getClans().stream()
- .map(Clan::getName)
- .filter(name -> name.toLowerCase().startsWith(partial))
- .collect(Collectors.toList());
- }
- private List<String> completeRequests(CommandSender sender, String[] args) {
- if(!(sender instanceof Player player)) return List.of("Your not a player!");
- Clan clan = manager.getMyClan(player.getUniqueId());
- if (clan == null) return List.of("You are not in a clan!");
- String partial = args.length > 0 ? args[args.length - 1].toLowerCase() : "";
- return clan.getRequests().stream()
- .filter(name -> name.toLowerCase().startsWith(partial))
- .collect(Collectors.toList());
- }
- }
|