问题描述
所以我正在尝试执行广播命令,但是它发出了命令名,我不知道为什么?如果您知道为什么以及如何解决此问题
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])
}