2014-12-01 143 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