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

问题描述

所以我正在尝试执行广播命令,但是它发出了命令名,我不知道为什么?如果您知道为什么以及如何解决此问题

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

如果返回false,则此命令的“用法” plugin.yml条目(如果已定义)将发送到播放器。

因为返回的是false,所以您说的是命令输入不正确,用法字符串应发送到CommandSender。如果命令成功执行,则应该返回true。

但是,您仍然应该看到自己的broadcastMessage。对于文档的第3个自变量(label),将再次对此进行说明:

所使用命令的别名

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

为了获取所用命令的参数,您需要使用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])
 


}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...