字符串在命令后发送命令名称而不是文本
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])
}
所以我正在尝试执行广播命令,但它发送的命令名称我不知道为什么?如果你知道为什么以及如何解决这个问题
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])
}