Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Bukkit Api

Тема в разделе "Разработка плагинов для новичков", создана пользователем Zealot, 18 авг 2015.

Статус темы:
Закрыта.
  1. Автор темы
    Zealot

    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

    Что я сделал не так?
     
  2. Хостинг MineCraft
    <
  3. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Вам приятно с этим работать? xxx, zxc, zxcv... Или, я надеюсь - это последствия декомпиляции?
     
  4. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    @Override, а не эвентхэндлер.
     
  5. Автор темы
    Zealot

    Zealot Активный участник Пользователь

    Баллы:
    63
    Они используются ровно 1 раз чтобы передать в локальную переменную(такие имена чтобы случайно не пересеклись с другими)
    The method onCommand(CommandSender, Command, String, String[]) of type commandHandler must override or implement a supertype method
     
  6. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    И еще..
    http://doc.artofweb.ru/doc/Java-конвенция_кода
    Умоляю[DOUBLEPOST=1439915360,1439915313][/DOUBLEPOST]
    Класс с методом onCommand должен implements CommandExecutor
     
  7. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    А, ну так ещё надо имплементить CommandExecutor, или как он там...
     
  8. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    c маленькой буквы. В этом еще проблема может быть
     
  9. Автор темы
    Zealot

    Zealot Активный участник Пользователь

    Баллы:
    63
    Тогда падает на регистрации

    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)
     
    Последнее редактирование: 18 авг 2015
  10. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Обработчик команд не обязан быть листенером.
    Но ты можешь писать ... implements Listener, CommandExecutor
     
  11. MrTrojan

    MrTrojan Активный участник Пользователь

    Баллы:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Ты американец, пишущий через Google Translator?
     
  12. Автор темы
    Zealot

    Zealot Активный участник Пользователь

    Баллы:
    63
    Теперь ошибка при регистрации пропала,но команда не выполняется

    @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")
    {
    сработает?
     
  13. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    1)
    Что?

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

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

    Zealot Активный участник Пользователь

    Баллы:
    63
    Перефразирую:
    Есть ли примеры с несколькими Хэндлерами\листнерами не входящими в главный класс с передаваемыми через конструктор параметрами?
     
  15. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    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);
    }
     
  16. Автор темы
    Zealot

    Zealot Активный участник Пользователь

    Баллы:
    63
    1. комманда /fc use q1 q2 q3 будет работать? какой лимит аргументов
    2. сейчас попробую
    3.проверка нужна только если используешь аргумент. Если его нет вернет Null , который просто не пройдет условие
     
  17. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Нет тут такого понятия, это всё просто массив слов.
    Проверь args.length сперва, и не забывай на пожарный проверять их на null.

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

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Теоретически равен объему оперативной памяти
    Практически - сколько уместите в строку чата
    Если его нет вам прилетит ArrayOutOfBoundsException
     
  19. Автор темы
    Zealot

    Zealot Активный участник Пользователь

    Баллы:
    63
    После регистрации в onEnable заработало, спасибо.

    На счет аргумента:
    Проверка на существование нужна когда ты забираешь его в переменную.
     
  20. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Не за что
    На счет аргумента можно положить денег, если очень захотеть. А насчет аргумента можно поговорить :D
    Проверка на то что в массиве есть элемент под таким индексом нужна в любом случае.
     
  21. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Когда ты пытаешься к нему обратиться.
    Неважно, как, если этого нет, будет ArrayOutOfBounds или NPE.
     
Статус темы:
Закрыта.

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