Java Bukkit命令会重复吗?
我已经编写了一个Bukkit插件,没有错误,但在游戏中它有一个问题 无论何时使用该命令,它都不会执行它应该执行的操作。相反,它会向我发送一条粗体消息,告诉我键入的内容,Java Bukkit命令会重复吗?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我已经编写了一个Bukkit插件,没有错误,但在游戏中它有一个问题 无论何时使用该命令,它都不会执行它应该执行的操作。相反,它会向我发送一条粗体消息,告诉我键入的内容,/离开 这是我的密码: public class SeeYouSoon extends JavaPlugin{ // Start @Override public void onEnable(){ } @Override public void onDisable() { } //Commands public bo
/离开
这是我的密码:
public class SeeYouSoon extends JavaPlugin{
// Start
@Override
public void onEnable(){
}
@Override
public void onDisable() {
}
//Commands
public boolean onCommand(CommandSender sender, Command cmd, String[] args){
if(cmd.getName().equalsIgnoreCase("leaving")){
Player player = (Player) sender;
Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
//Run your function or change stuff here.
player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
}
}, 20 * 30);// There are 20 ticks in one second so we can just multiply seconds by 20.
}
return false;
}
}
这个plugin.yml就是我所期望的问题所在。以下是plugin.yml:
name: SeeYouSoon
main: me.mark.SeeYouSoon
version: 1.0
commands:
leaving:
description: Announce your leave
首先,JavaPlugin
中的onCommand()
方法格式是:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
关于为什么会发生这种情况,你的下一个原因是,在你按照命令行事之后,你没有这样做。例如,您应该使用:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("leaving")){
//your code
return true;
}
}
因此,您的最终代码应该如下所示:
public boolean onCommand(CommandSender sender, Command cmd, String[] args){
if(cmd.getName().equalsIgnoreCase("leaving")){
Player player = (Player) sender;
Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
}
}, 20 * 30);
return true;
}
return false;
}
首先,JavaPlugin
中的onCommand()
方法格式是:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
关于为什么会发生这种情况,你的下一个原因是,在你按照命令行事之后,你没有这样做。例如,您应该使用:
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
if(cmd.getName().equalsIgnoreCase("leaving")){
//your code
return true;
}
}
因此,您的最终代码应该如下所示:
public boolean onCommand(CommandSender sender, Command cmd, String[] args){
if(cmd.getName().equalsIgnoreCase("leaving")){
Player player = (Player) sender;
Bukkit.broadcastMessage(ChatColor.RED + player.getName() + ChatColor.LIGHT_PURPLE + ChatColor.ITALIC + " is about to leave the server. Please say your goodbyes!");
Bukkit.getScheduler().runTaskLater(this, new Runnable() {
public void run() {
player.kickPlayer(ChatColor.RED + "Kicked:" + ChatColor.WHITE + " You requested to leave.");
}
}, 20 * 30);
return true;
}
return false;
}
您不能安全地向玩家施放:
Player player = (Player)sender;
虽然这是正确的java,但这可能会导致错误。在施法之前,确保发送者实际上是玩家
if (!sender instanceof Player)
{
sender.sendMessage("Some error message");
return true;
}
// Now you can cast to a player and continue with your code.
您不能安全地向玩家施放:
Player player = (Player)sender;
虽然这是正确的java,但这可能会导致错误。在施法之前,确保发送者实际上是玩家
if (!sender instanceof Player)
{
sender.sendMessage("Some error message");
return true;
}
// Now you can cast to a player and continue with your code.
请提供更好的问题描述和实际负责人code@jojodmo现在,该命令没有做任何事情请包括更好的问题描述和实际负责人code@jojodmo现在这个命令什么都不做