我的问题是我有一个简单的Minecraft插件,我只希望它执行一个命令。我之前已经完成了命令,所以这些步骤对我来说很清楚。我的plugin.yml设置正确(服务器检测到我添加的命令并显示帮助页面等),并且onCommand()函数的设置也与我在所有其他插件中所做的相同。插件本身可以正常工作(主要是我测试过的onEnable()函数),但是不会调用onCommand()。
我已经尝试使用不同的plugin.yml格式,以及将@Override注释添加到onCommand()上,而Eclipse并不是我真正想要的。我也知道我使用的API(com.PluginBase)是在其他项目中使用它的。执行命令时不会产生异常,在聊天中它仅显示我输入的命令。
这是Main.java:
package org.Professions;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.material.Command;
import org.bukkit.plugin.java.JavaPlugin;
import com.PluginBase.Chat;
public class Main extends JavaPlugin {
public void onEnable() {
Chat.getInstance().sendErrorMessageToConsole("Professions enabled");
Bukkit.getPluginCommand("profession").setExecutor((CommandExecutor) this);
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Chat.getInstance().sendErrorMessageToConsole("Got the command: " + label);
/*
* Check if command sender is a player
* and if the command is for this plugin
*/
if
(
sender instanceof Player == false
|| !label.toLowerCase().equals("profession")
) {
return true;
}
// Get the player who send the command
Player player = (Player) sender;
// Check if the player has given the right amount of arguments
if (args.length != 1) {
// Notify the player of invalid argument use
Chat.getInstance().sendMessageToPlayer(player, ChatColor.RED + "Invalid arguments. Usage: /profession <name>");
// Stop executing code after we've determined an incorrect amount of arguments
return true;
}
// Get the players new profession from the first argument he gave for the command
String profession = args[1];
// Set the players name in the playerlist to feature his professions
player.setPlayerListName
(
ChatColor.GREEN + "[" + profession + "] " // the players' profession
+ ChatColor.WHITE + player.getName() // the actual player name
);
// Always return true since if the command wasn't for this plugin we return false earlier
return true;
}
}
这是我的plugin.yml:
name: Professions
main: org.Professions.Main
version: 1.0
api-version: 1.13
depend: [PluginBase]
commands:
profession:
description: Change your profession
usage: /<command>
aliases: [p]
答案 0 :(得分:1)
您忘记实现CommandExecutor并注册了命令。
您的代码应如下所示:
S1 S2
A 12 15
B 13 11
此外,我想向您提供有关我的世界插件编码的一些建议。您不应在主类中执行命令,它们应属于自己的类。例如,您的public class Main extends JavaPlugin implements CommandExecutor{
@Override
public void onEnable(){
//...
getCommand("profession").setExecutor(this);
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
//...
}
}
命令将与所有参数一起进入profession
类(例如,ProfessionCmd
也将存在)。
答案 1 :(得分:0)
这是引起您问题的原因吗?
// Get the players new profession from the first argument he gave for the command
String profession = args[1]; // <-- [0] ?
答案 2 :(得分:0)
您错过了onEnable和onCommand方法中的@Override
。我不确定是否有必要,但是通常某些插件会使用此模式。
代替此命令注册:
Bukkit.getPluginCommand("profession").setExecutor((CommandExecutor) this);
使用:
getCommand("profession").setExecutor(this);
getCommand()
包含在JavaPlugin扩展器中,因此不必从Bukkit.getPluginCommand()
开始,这就是问题所在。
...也可以将onCommand方法签入播放器键入的命令,以防止发生其他错误。 示例:
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("profession")) {
// code here
}
}