Java bukkit命令

Java bukkit命令,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在为服务器制作一个带有基本命令的插件,并且我已经加入了几个运行良好的事件。但是当我尝试添加命令时,它不起作用。在您提问之前,我已经用一条简单的sendmange替换了onCommand部分中的所有内容,但它什么都不做。当我执行这个命令时,它只告诉我plugin.yml中的用法 这是我的密码:对不起,太长了 package com.pepsi.core; import org.bukkit.Bukkit; import org.bukkit.command.Command; import o

我正在为服务器制作一个带有基本命令的插件,并且我已经加入了几个运行良好的事件。但是当我尝试添加命令时,它不起作用。在您提问之前,我已经用一条简单的sendmange替换了onCommand部分中的所有内容,但它什么都不做。当我执行这个命令时,它只告诉我plugin.yml中的用法

这是我的密码:对不起,太长了

package com.pepsi.core;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

@Override
public void onEnable() {

    Bukkit.getLogger().info("PepsiCore >> Enabled!");
    Bukkit.getServer().getPluginManager().registerEvents(this, this);

    getConfig().options().copyDefaults(true);
    saveConfig();

}

@Override
public void onDisable() {

    Bukkit.getLogger().info("PepsiCore >> Disabled!");

}

public boolean onCommand(Command cmd, CommandSender sender, String cmdLbl, String[] args) {

    if (args.length == 0) {
        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eNot enough arguments! Use &6/pcore help &e to see a list of commands!"));
        return false;
    }

    if (args.length == 1) {

        if (args[0].equalsIgnoreCase("help")) {
            sender.sendMessage(Util.transMsg("&8--------------------<&6&lPepsiCore&8>--------------------"));
            sender.sendMessage(Util.transMsg("&6/pcore help &8>> &eDisplays the help page"));
            sender.sendMessage(Util.transMsg("&6/pcore info &8>> &eDisplays the plugin info page"));
            sender.sendMessage(Util.transMsg("&6/pcore ranks &8>> &eDisplays all the ranks"));
            sender.sendMessage(Util.transMsg("&6/pcore setrank <player> <rank> &8>> &eDisplays all the ranks"));
            sender.sendMessage(Util.transMsg("&8--------------------<&6&lPepsiCore&8>--------------------"));
            return true;
        }

        if (args[0].equalsIgnoreCase("info")) {
            sender.sendMessage(Util.transMsg("&8--------------------<&6&lPepsiCore&8>--------------------"));
            sender.sendMessage(Util.transMsg("&ePepsiCore version &61.0.0-BETA"));
            sender.sendMessage(Util.transMsg("&eDeveloped by &6P3pi &efor &6Project: Infernal"));
            sender.sendMessage(Util.transMsg("&8--------------------<&6&lPepsiCore&8>--------------------"));
            return true;
        }

        if (args[0].equalsIgnoreCase("ranks")) {
            sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eRanks: &6guest&e, &6gold&e, &6diamond&e, &6emerald&e, &6yt&e, &6staff&e, &6developer&e, &6owner"));
            return false;
        }

        if (args[0].equalsIgnoreCase("setrank")) {
            sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eNot enough arguments! Use &6/pcore help&e to see a list of commands!"));
            return false;
        }

        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eInvalid arguments! Use &6/pcore help&e to see a list of commands!"));
        return false;
    }

    if (args.length == 2) {

        if (args[0].equalsIgnoreCase("setrank")) {
            sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eNot enough arguments! Use &6/pcore help&e to see a list of commands!"));
            return false;
        }

        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eInvalid arguments! Use &6/pcore help&e to see a list of commands!"));
        return false;
    }

    if (args.length == 3) {

        if (args[0].equalsIgnoreCase("setrank")) {

            Player t = Bukkit.getServer().getPlayer(args[1]);
            if (t == null) {
                sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eThe player &6" + args[1] + " &eis not online at the moment!"));
                return false;
            }

            String uuid = t.getUniqueId().toString();
            String rank = args[2];

            if (rank == ("guest")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("gold")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("diamond")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("emerald")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("yt")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("staff")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("developer")) { getConfig().set("ranks." + uuid, rank); }
            else if (rank == ("owner")) { getConfig().set("ranks." + uuid, rank); }
            else { sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eThe rank &6" + rank + " &e does not exist! Use &6/pcore ranks &eto see a list of ranks!")); }

        }

        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eInvalid arguments! Use &6/pcore help&e to see a list of commands!"));
        return false;
    }

    return true;
}

@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent e) {

    Player p = e.getPlayer();
    String uuid = p.getUniqueId().toString();
    String name = p.getName();
    String msg = e.getMessage();

    String rank = (String) getConfig().get("ranks." + uuid);

    if (rank == "guest") { e.setFormat(Util.transMsg("&fGuest &7&l" + name + " &8>> &f" + msg)); }
    else if (rank == "gold") { e.setFormat(Util.transMsg("&eGold &6&l" + name + " &8>> &e" + msg)); }
    else if (rank == "diamond") { e.setFormat(Util.transMsg("&bDiamond &3&l" + name + " &8>> &b" + msg)); }
    else if (rank == "emerald") { e.setFormat(Util.transMsg("&aEmerald &2&l" + name + " &8>> &a" + msg)); }
    else if (rank == "yt") { e.setFormat(Util.transMsg("&dYouTuber &5&l" + name + " &8>> &d" + msg)); }
    else if (rank == "staff") { e.setFormat(Util.transMsg("&9Staff &1&l" + name + " &8>> &9" + msg)); }
    else if (rank == "developer") { e.setFormat(Util.transMsg("&cDeveloper &4&l" + name + " &8>> &c" + msg)); }
    else if (rank == "owner") { e.setFormat(Util.transMsg("&cOwner &4&l" + name + " &8>> &c" + msg)); }
    else { e.setCancelled(true); p.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eYour rank seems to be broken! Please let a member of staff know!")); }

}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {

    Player p = e.getPlayer();
    String uuid = p.getUniqueId().toString();

    if (p.hasPlayedBefore() == false) {
        getConfig().set("ranks." + uuid, "guest");
        saveConfig();
        return;
    }

}

}
感谢使用onCommand方法编写代码时提供的帮助,代码块应始终返回true,例如:

  if (args[0].equalsIgnoreCase("ranks")) {
        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eRanks: &6guest&e, &6gold&e, &6diamond&e, &6emerald&e, &6yt&e, &6staff&e, &6developer&e, &6owner"));
        return false;
    }
你使用返回假;这将为您提供plugin.yml的用法

请看


请参阅。

Bukkit处理命令的方式是运行JavaPlugin类的onCommand方法。特别是onCommand方法,它接受CommandSender、Command命令、String标签、String[]args等参数

正如Vlexing所提到的,您的方法的参数顺序错误,因此在运行命令时,它不会运行您的方法,因此,应该从JavaPlugin运行onCommand方法,它只包含return false;。Bukkit仍然可以识别您的命令,因为您的plugin.yml,但是当它试图运行您的方法时,它得到了false,所以它会打印出您的使用信息


基本上,只要确定你的论点的顺序并遵循Vlexing的答案,你就应该被设置好了

我已经照你说的做了,它仍然有完全相同的问题…onCommand部分中的所有返回错误现在都是return true,仍然不起作用,并且还尝试了底部的一个是return false,其余的是return true。。。。请帮忙?我还注意到,对于onCommand参数,您有Command cmd、CommandSender sender、String cmdLbl、String[]参数。使用args的正确方法是公共布尔onCommandCommandSender、Command cmd、String commandLabel、String[]args{}。我不知道这是否有助于解决你的主要问题,但我想指出这一点。谢谢@Vlexing,我不知道这有什么不同,但当我改变它时,它工作得非常好。我想你可以打电话给commandLabel等,但谢谢你的帮助:
  if (args[0].equalsIgnoreCase("ranks")) {
        sender.sendMessage(Util.transMsg("&e<!> &6&lPepsiCore &8>> &eRanks: &6guest&e, &6gold&e, &6diamond&e, &6emerald&e, &6yt&e, &6staff&e, &6developer&e, &6owner"));
        return false;
    }