2014-12-01 95 views
-1

希望你们能帮我解决这个问题。我对Java很陌生,对BukkitAPI很新。我只是继续前进并尝试项目,然后在我无法解决问题时进行大量的研究,从而学到了最好的东西。对命令使用多个类,命令不起作用?

我看了四周,我无法弄清楚为什么这不起作用。我试图做一个插件,并且正在利用多个组织和清洁类。我正在输入一切应该如何输入,并已在这里打开this tutorial。这有点旧,所以有些东西可能已经改变了。问题是,当我运行命令时,我没有得到任何错误,但它什么都不做。它说:“Alj23在控制台发布了服务器命令:/ hello(这是我的命令,直到我解决这个问题时),但没有任何反应,聊天中没有消息,没有任何消息,控制台没有错误。谁发出命令的消息说:“你好!”(也是暂时的现在)我只是不知道它为什么它的作品。

我还在学习,所以我很可能做一些公然错误的东西我也可能在追踪不良行为或做不必要的东西,所以如果是这样,这将是惊人的,如果你能指出来

我的主类:

package me.Alj23.RPGClasses; 

import org.bukkit.event.Listener; 
import org.bukkit.plugin.java.JavaPlugin; 

public class RPGClassesMain extends JavaPlugin implements Listener 

{ 
public void OnEnable() 
{ 
    this.getCommand("hello").setExecutor(new WarriorInfo(this)); 
} 

public void OnDisable() 
{ 

} 

执行该代码的命令的类:

package me.Alj23.RPGClasses; 

import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 

public class WarriorInfo implements CommandExecutor 
{ 
RPGClassesMain plugin; 

public WarriorInfo (RPGClassesMain passedPlugin) 
{ 
    this.plugin = passedPlugin; 
} 

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label,String[] arg3) 
{ 
    Player player = (Player) sender; 
    player.sendMessage("Hello there!"); 


return false 
} 

} 

Plugin.yml:

name: RPGClasses 
version: 1.0 
main: me.Alj23.RPGClasses.RPGClassesMain 
description: Choose beyond a wide scope of classes! 
commands: 
hello: 
description: placeholder! 
+0

这个yaml文件是否与您拥有的一样?检查间距/对齐要求。 – Celeo 2014-12-01 23:35:14

+0

不需要,我必须做四个空间缩进才能使其成为代码。我在我的实际plugin.yml格式正确,否则它会告诉我,我有一个无效的plugin.yml,对不对? – austinj1022 2014-12-01 23:44:52

+0

不,它不会注册任何命令,在访问'Command.setExecutor(CommandExecutor)'时是'NullPointerException'。 – 2014-12-02 07:40:16

回答

4

看那OnEnableOnDisable方法。根据Java约定(和Bukkit API),这些方法应分别命名为onEnableonDisable。这种拼写错误导致您的命令永远无法注册。

此外,对于YAML文件,正确的缩进是必须。它应该看起来像这样:

name: RPGClasses 
version: 1.0 
main: me.Alj23.RPGClasses.RPGClassesMain 
description: Choose beyond a wide scope of classes! 
commands: 
    hello: 
    description: placeholder! 
+0

你真了不起!这工作。非常感谢。我无法相信这只是两个大写的“O”弄乱了一切。这种令人沮丧的事情很难让人注意。看起来完全一样。问题是,OnEnable和onEnable两个不同的东西?为什么我在最长时间启用后没有给出错误? – austinj1022 2014-12-01 23:51:48

+1

@ austinj1022它不会给你一个错误,因为从编译器的角度来看,拼写错误的方法非常好。这是[为什么要使用@覆盖]的一个很好的教训(http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why)。这两种方法是不同的,因为它们在程序的不同阶段被调用。如果它有帮助,随时接受答案! :) – August 2014-12-01 23:55:29

+0

哦!我试图使用@Override,因为这是视频中正在使用的内容。当我这样做时,它一直给我一个错误,并让我将其删除。我从来没有把两个和两个拼在一起,我的方法拼写错误。 Thanks1 – austinj1022 2014-12-01 23:58:48