2014-12-01 2 views
-1

Надеюсь, вы, ребята, можете помочь мне исправить это. Я новичок в Java и очень новичок в BukkitAPI. Я лучше всего учусь, просто иду вперед и пытаясь делать проекты, а затем занимаюсь исследованиями, когда не могу понять, что происходит.Использование нескольких классов для команд, команда не работает?

Я посмотрел вокруг, и я не могу понять, почему это не работает. Я пытаюсь сделать плагин и использую несколько классов для организации и чистоты. Я печатаю все, как его следует набирать, и вот здесь this tutorial. Это немного устарело, поэтому некоторые вещи могут измениться. Проблема в том, что когда я запускаю команду, я не получаю никаких ошибок, но ничего не делает. В нем говорится: «Alj23 выдал команду сервера:/hello (которая является моей командой временным, пока я не исправил это) в консоли, но ничего не происходит. В чате нет сообщений, нет ничего. который выдал команду сообщение «Hello there!» (тоже временно для этого сейчас.) Я просто не знаю, почему это работает.

Я все еще учась, поэтому я, скорее всего, делаю что-то вопиющее неправильное . Я также мог бы быть следующие плохие практики или делать ненужные вещи, так что если это так, было бы удивительно, если бы вы могли бы указать их

Мой главный класс:.

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

+0

Нет. Мне нужно было сделать четыре пробела, чтобы они читались как код. Я правильно отформатировал его в своем файле plugin.yml, иначе он сказал бы мне, что у меня есть неверный файл plugin.yml, правильно? – austinj1022

+0

Нет, он не зарегистрировал бы никаких команд, то есть «NullPointerException» при доступе к 'Command.setExecutor (CommandExecutor)'. –

ответ

4

Посмотрите на OnEnable и OnDisable методов. В соответствии с соглашениями Java (и API Bukkit) эти методы следует называть onEnable и onDisable соответственно. Это неправильное письмо заставило вашу команду никогда не регистрироваться в первую очередь.

Кроме того, правильный отступ должен для файлов 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

+1

@ austinj1022 Это не дает вам ошибки, потому что орфографический метод отлично справляется с точки зрения компилятора. Это отличный урок [почему вы должны использовать '@ Override'] (http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why). Эти два метода отличаются друг от друга, потому что их вызывают на разных этапах программы. Не стесняйтесь принять ответ, если это поможет! :) – August

+0

О! Я попытался использовать @Override, потому что это то, что использовалось в видео. Он продолжал давать мне ошибку, когда я это делал, и сказал, чтобы я удалил ее. Я никогда не добавлял два и два вместе, чтобы мой метод был ошибочно написан. Thanks1 – austinj1022

Смежные вопросы