Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Bukkit Api

Статус
Закрыто для дальнейших ответов.

Zealot

Активный участник
Пользователь
Баллы
63
Есть основной класс и листнер
основной класс
этот код в OnEnable
Код:
        m.Init();
        mSql.Init(setting);
        wg = Wg.init(mSql,wgPl);
        pm.init(mSql, Wg);      
        ad.init(mSql,Wg,pm);      
        new commandHandler(ad,Wg,cM,this);


в листнере:

public class commandHandler implements Listener{
Конструктор:
Код:
public commandHandler(admin i,WorldGuard xxx,countryManager zxc,Plugin zxcv)
    {
        cm = zxc;
        wg =xxx;
        ad=i;
        _log.severe("CH work");
        zxcv.getServer().getPluginManager().registerEvents(this, zxcv);
    }

сама onCommand:
Код:
@EventHandler
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
      {

при запуске падает ошибка
attepted to register an invalid event handler

Что я сделал не так?
 
Вам приятно с этим работать? xxx, zxc, zxcv... Или, я надеюсь - это последствия декомпиляции?
 
Вам приятно с этим работать? xxx, zxc, zxcv... Или, я надеюсь - это последствия декомпиляции?
Они используются ровно 1 раз чтобы передать в локальную переменную(такие имена чтобы случайно не пересеклись с другими)
@Override, а не эвентхэндлер.
The method onCommand(CommandSender, Command, String, String[]) of type commandHandler must override or implement a supertype method
 
И еще..
http://doc.artofweb.ru/doc/Java-конвенция_кода
Умоляю
Они используются ровно 1 раз чтобы передать в локальную переменную(такие имена чтобы случайно не пересеклись с другими)

The method onCommand(CommandSender, Command, String, String[]) of type commandHandler must override or implement a supertype method
Класс с методом onCommand должен implements CommandExecutor
 
А, ну так ещё надо имплементить CommandExecutor, или как он там...
 
И еще..
http://doc.artofweb.ru/doc/Java-конвенция_кода
Умоляю

Класс с методом onCommand должен implements CommandExecutor
Тогда падает на регистрации

zxcv.getServer().getPluginManager().registerEvents(this, zxcv);

The method registerEvents(Listener, Plugin) in the type PluginManager is not applicable for the arguments (commandHandler, Plugin)

Есть 2 листнера:
- Команды
- евенты

можно пример регистрации?(смотрел исходники других плагинов и http://wiki.bukkit.org/Event_API_Reference)
 
Последнее редактирование:
Обработчик команд не обязан быть листенером.
Но ты можешь писать ... implements Listener, CommandExecutor
 
Тогда падает на регистрации

zxcv.getServer().getPluginManager().registerEvents(this, zxcv);

The method registerEvents(Listener, Plugin) in the type PluginManager is not applicable for the arguments (commandHandler, Plugin)

Есть 2 листнера:
- Команды
- евенты

можно пример регистрации?(смотрел исходники других плагинов и http://wiki.bukkit.org/Event_API_Reference)

сам плагин падающий на регистрации евента
http://rghost.ru/7V7zFvF9q
Ты американец, пишущий через Google Translator?
 
Теперь ошибка при регистрации пропала,но команда не выполняется

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{ _log.severe("still work");
_log.severe("try broadcase message");
sender.getServer().broadcastMessage("xxx");
_log.severe("try get numcoutries");
_log.severe(ad.CommandTest());

Ничего не приходит
Какой максимальный уровень вложенности у комманд?
if (command.getName().equalsIgnoreCase("fс"))
{
if (args[0] == "use")
{
if(args[1]=="q1")
{
сработает?
 
1)
Какой максимальный уровень вложенности у комманд?
Что?

2) В onEnable необходимо задать экзекуртор при помощи getCommand("kek").setExecutor(..);

3) Перед использованием аргумента необходимо проверить его наличие при помощи измерения длинны массива аргументов
 
Ты американец, пишущий через Google Translator?
Перефразирую:
Есть ли примеры с несколькими Хэндлерами\листнерами не входящими в главный класс с передаваемыми через конструктор параметрами?
 
Перефразирую:
Есть ли примеры с несколькими Хэндлерами\листнерами не входящими в главный класс с передаваемыми через конструктор параметрами?
public class DeathListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerDamagedByPlayer(EntityDamageByEntityEvent event) {
event.getPlayer().sendMessage("Вы неудачник");
}
}


В мейнклассе:
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(new DeathListener(), this);
}
 
1)
Что?

2) В onEnable необходимо задать экзекуртор при помощи getCommand("kek").setExecutor(..);

3) Перед использованием аргумента необходимо проверить его наличие при помощи измерения длинны массива аргументов

1. комманда /fc use q1 q2 q3 будет работать? какой лимит аргументов
2. сейчас попробую
3.проверка нужна только если используешь аргумент. Если его нет вернет Null , который просто не пройдет условие
 
Нет тут такого понятия, это всё просто массив слов.
Проверь args.length сперва, и не забывай на пожарный проверять их на null.

Каждой команде нужно установить тот обработчик, который ты хочешь. По умолчанию это JavaPlugin.
 
1. комманда /fc use q1 q2 q3 будет работать? какой лимит аргументов
Теоретически равен объему оперативной памяти
Практически - сколько уместите в строку чата
Если его нет вернет Null
Если его нет вам прилетит ArrayOutOfBoundsException
 
Нет тут такого понятия, это всё просто массив слов.
Проверь args.length сперва, и не забывай на пожарный проверять их на null.

Каждой команде нужно установить тот обработчик, который ты хочешь. По умолчанию это JavaPlugin.
Теоретически равен объему оперативной памяти
Практически - сколько уместите в строку чата

Если его нет вам прилетит ArrayOutOfBoundsException
После регистрации в onEnable заработало, спасибо.

На счет аргумента:
Проверка на существование нужна когда ты забираешь его в переменную.
 
После регистрации в onEnable заработало, спасибо.
Не за что
На счет аргумента:
На счет аргумента можно положить денег, если очень захотеть. А насчет аргумента можно поговорить :D
Проверка на существование нужна когда ты забираешь его в переменную.
Проверка на то что в массиве есть элемент под таким индексом нужна в любом случае.
 
Когда ты пытаешься к нему обратиться.
Неважно, как, если этого нет, будет ArrayOutOfBounds или NPE.
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх