Commands not showing up.

Discussion in 'Bukkit Help' started by Is3kai, Aug 11, 2024.

Thread Status:
Not open for further replies.
  1. Offline

    Is3kai

    I've been trying to get a custom command plugin functioning for my 1.21 server. For some reason, even thought the .yml and class files should be formatted correctly, the commands are not registering in the actual game. I'm pasting the two class files and the yml file below. If anyone could help me out, i would be thankful.

    Main Class
    Code:
    package org.smpmakers.commandplugin;
    
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    import java.time.Duration;
    import java.time.Instant;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.UUID;
    public final class Commandplugin extends JavaPlugin implements Listener{
        private HashMap<UUID, Vote> activeVotes = new HashMap<>();
        private HashMap<UUID, UUID> invitedPlayers = new HashMap<>();
        private Set<UUID> allowedPlayers = new HashSet<>();
    
    
        @Override
        public void onEnable() {
            // Plugin startup logic
            getLogger().info("Voteban Plugin Enabled. Here you go Collyn!");
            getServer().getPluginManager().registerEvents(this, this);
    
        }
    
        @Override
        public void onDisable() {
            // Plugin shutdown logic
            getLogger().info("Voteban Plugin Disabled :(");
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            if (command.getName().equalsIgnoreCase("voteban")) {
                if (args.length < 2) {
                    sender.sendMessage("Usage: /voteban <player> <reason>");
                    return false;
                }
    
                Player target = Bukkit.getPlayer(args[0]);
                if (target == null) {
                    sender.sendMessage("Player not found!");
                    return false;
                }
    
                String reason = String.join(" ", args);
    
                if (Bukkit.getOnlinePlayers().size() < 7) {
                    sender.sendMessage("Not enough players online to start a vote!");
                    return false;
                }
    
                Vote vote = new Vote(target.getUniqueId(), sender.getName(), reason);
                activeVotes.put(target.getUniqueId(), vote);
                Bukkit.broadcastMessage(sender.getName() + " has started a vote to ban " + target.getName() + " for: " + reason);
                Bukkit.broadcastMessage("Type /vote yes or /vote no to cast your vote.");
    
                return true;
            }
            if (command.getName().equalsIgnoreCase("vote")) {
                if (args.length < 1) {
                    sender.sendMessage("Usage: /vote <yes|no>");
                    return false;
                }
    
                Player player = (Player) sender;
                Vote vote = activeVotes.values().stream()
                        .filter(v -> !v.hasVoted(player.getUniqueId()))
                        .findFirst()
                        .orElse(null);
    
                if (vote == null) {
                    sender.sendMessage("There is no active vote! Either that, or you have already voted!");
                }
    
                if (args[0].equalsIgnoreCase("yes")){
                    vote.addYesVote(player.getUniqueId());
                    sender.sendMessage("You voted YES to ban " + Bukkit.getPlayer(vote.getTarget()).getName());
                } else if (args[0].equalsIgnoreCase("no")) {
                    vote.addNoVote(player.getUniqueId());
                    sender.sendMessage("You voted NO to ban " + Bukkit.getPlayer(vote.getTarget()).getName());
                } else {
                    sender.sendMessage("Usage: /vote <yes|no>");
                    return false;
                }
    
                checkVote(vote);
                return true;
            }
            if (command.getName().equalsIgnoreCase("invite")) {
                if (args.length < 1) {
                    sender.sendMessage("Usage: /invite <player>");
                    return false;
                }
    
                Player target = Bukkit.getPlayer(args[0]);
                if (target == null) {
                    sender.sendMessage("Player not found!");
                    return false;
                }
    
                Player player = (Player) sender;
                invitedPlayers.put(target.getUniqueId(), player.getUniqueId());
                allowedPlayers.add(target.getUniqueId());
                sender.sendMessage("You have invited " + target.getName() + " to the server.");
                target.sendMessage("You have been invited to the server by " + player.getName() + ".");
    
                return true;
            }
    
            if (command.getName().equalsIgnoreCase("forceallow")) {
                if (args.length < 1) {
                    sender.sendMessage("Usage: /forceallow <player>");
                    return false;
                }
    
                if (!sender.hasPermission("voteban.forceallow")) {
                    sender.sendMessage("You do not have permission to use this command.");
                    return false;
                }
    
                Player target = Bukkit.getPlayer(args[0]);
                if (target == null) {
                    sender.sendMessage("Player not found!");
                    return false;
                }
    
                allowedPlayers.add(target.getUniqueId());
                sender.sendMessage(target.getName() + " has been forcibly allowed to join the server.");
                target.sendMessage("You have been forcibly allowed to join the server by an admin.");
    
                return true;
            }
    
            return false;
        }
    
        private void checkVote(Vote vote){
            int totalVotes = vote.getYesVotes().size() + vote.getNoVotes().size();
            int onlinePlayers = Bukkit.getOnlinePlayers().size();
            double requiredVotes = Math.ceil(onlinePlayers * .6666667);
    
            if (totalVotes >= requiredVotes){
                if (vote.getYesVotes().size() >= requiredVotes){
                    Player target = Bukkit.getPlayer(vote.getTarget());
                    if (target != null){
                        Instant instant = Instant.now();
                        target.ban("You have been banned by vote for: " + vote.getReason(), instant, vote.getReason());
                        Bukkit.broadcastMessage(target.getName() + " has been banned by vote for: " + vote.getReason());
    
                        UUID inviterUUID = invitedPlayers.get(target.getUniqueId());
                        if (inviterUUID != null) {
                            Player inviter = Bukkit.getPlayer(inviterUUID);
                            if (inviter != null) {
                                inviter.isBanned();
                                inviter.ban("You have been banned because your invitee was banned.", instant, "Your Invitee was banned");
                                Bukkit.broadcastMessage(inviter.getName() + " has been banned because their invitee was banned.");
                            }
                        }
                    }else{
                        Bukkit.broadcastMessage("The vote to ban " + Bukkit.getPlayer(vote.getTarget()).getName() + " has failed.");
                    }
                    activeVotes.remove(vote.getTarget());
                }
            }
        }
        public boolean playerAllowed(UUID playerUUID) {
            return allowedPlayers.contains(playerUUID);
        }
    
        /*@EventHandler
        public void onPlayerLogin(PlayerJoinEvent event){
            Player player = event.getPlayer();
            if(!playerAllowed(event.getPlayer().getUniqueId())){
                player.kick();
            }
    
        }*/
    
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent event){
            Player player = event.getPlayer();
            Duration time = Duration.ofMinutes(3);
            if (player.getKiller() instanceof Player){
                player.ban("You were killed by a player.", time, "Death By Player");
    
            }
        }
    
    
    }
    
    Vote Class File
    Code:
    package org.smpmakers.commandplugin;
    
    import java.util.HashSet;
    import java.util.Set;
    import java.util.UUID;
    
    public class Vote {
        private UUID target;
        private String initiator;
        private String reason;
        private Set<UUID> yesVotes = new HashSet<>();
        private Set<UUID> noVotes = new HashSet<>();
    
        public Vote(UUID target, String initiator, String reason) {
            this.target = target;
            this.initiator = initiator;
            this.reason = reason;
        }
    
        public UUID getTarget() {
            return target;
        }
    
        public String getInitiator() {
            return initiator;
        }
    
        public String getReason() {
            return reason;
        }
    
        public Set<UUID> getYesVotes() {
            return yesVotes;
        }
    
        public Set<UUID> getNoVotes() {
            return noVotes;
        }
    
        public void addYesVote(UUID player) {
            yesVotes.add(player);
        }
    
        public void addNoVote(UUID player) {
            noVotes.add(player);
        }
    
        public boolean hasVoted(UUID player) {
            return yesVotes.contains(player) || noVotes.contains(player);
        }
    }
    paper.yml
    Code:
    name: commandplugin
    version: '${project.version}'
    main: org.smpmakers.commandplugin.Commandplugin
    api-version: '1.21'
    commands:
      voteban:
        description: Start a vote to ban a player
        usage: /voteban <player> <reason>
      vote:
        description: Vote yes or no to ban a player
        usage: /vote <yes|no>
      invite:
        description: Invite a player to the server
        usage: /invite <player>
      forceallow:
        description: Forcibly allow a player to join the server
        usage: /forceallow <player>
     
  2. Offline

    KarimAKL

    @Is3kai I can't recall whether command registration is necessary in the main class, but just in case, try that. Additionally, if you have any errors in your server log, please post them here as well using pastebin or similar.
     
  3. Offline

    timtower Administrator Administrator Moderator

    It is not, main class is the default commandexecutor.
     
    KarimAKL likes this.
  4. Offline

    Is3kai

    That's the odd thing, there are no errors in the server log.

    The plugin is functioning, but the commands aren't registering. The PvP Death Ban is working, but nothing else. And if the kick without invite is uncommented, it also functions.
     
  5. Offline

    KarimAKL

    @Is3kai I tried compiling the source code you provided and run it on a Spigot 1.21 server (to be exact: CraftBukkit version 4258-Spigot-491f367-8fd64b0 (MC: 1.21) (Implementing API version 1.21-R0.1-SNAPSHOT)).
    I could not reproduce the problem; the commands registered just fine for me. What server software do you use? I notice you mentioned "paper.yml" rather than "plugin.yml".
     
  6. Offline

    Is3kai

    I'm trying to run it on a paper server, but none of the commands are registering or showing up when I run the /help command.
    I said paper.yml cause the file is a paper-plugin.yml file
     
  7. Offline

    timtower Administrator Administrator Moderator

    Please post your full server log using https://pastebin.com or similar
     
Thread Status:
Not open for further replies.

Share This Page