字符串在命令后发送命令名称而不是文本

string sends command name instead of text after command

所以我正在尝试执行广播命令,但它发送的命令名称我不知道为什么?如果你知道为什么以及如何解决这个问题

package ml.harrytubestudios.helloworld.commands;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

import ml.harrytubestudios.helloworld.main;

public class bro implements CommandExecutor {
private main plugins;
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String no, String[] args) {
 
        Bukkit.broadcastMessage(no);
return false;
    }
}

你的问题是双重的。如果您查看 CommandExecutor 的文档;它在 Spigot 和 Bukkit 中是一样的,你会看到它说 onCommand:

If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be sent to the player.

因为您正在 returning false,您是说命令输入不正确,用法字符串应该发送到 CommandSender。如果命令执行成功,你应该 return true。

但是,您仍然应该看到您的 broadcastMessage。这在文档中再次解释为第三个参数 (label):

Alias of the command which was used

这意味着您正在广播 CommandSender 使用的命令别名(您的 no 参数),而不是它们的参数,我认为这就是您想要的。

为了获取所用命令的参数,您需要 args 参数,它是一个字符串数组。您可能希望将其格式化为一个字符串以用于您的广播;其中有不同的 solutions.

我找到了答案,字符串是命令,args 是命令后的参数,所以

    package ga.harrytubestudios.helloworld.commands;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

import ga.harrytubestudios.helloworld.main;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;

public class shopcommand implements CommandExecutor {
private main pluign;
    @Override
    public boolean onCommand(CommandSender Sender, Command smd, String label, String[] args) {
        
    
            Player p = (Player)Sender;
p.sendmessgae(args[0])
 


}