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

Помогите Не работает кусочек кода)

Тема в разделе "Разработка плагинов для новичков", создана пользователем Iggi6666, 7 июн 2013.

  1. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Всем привет. Тренируюсь писать под Буккит и накатал такую фигню:
    Код:
    public void onInteract(PlayerInteractEvent event){
        if (event.getAction()== Action.RIGHT_CLICK_BLOCK){
            if (event.getClickedBlock().getTypeId() == Material.WOOD_DOOR.getId()) {
                event.getPlayer().sendMessage(ChatColor.GREEN +"Тебе тут не рады!");   
            }
          }
      }
    К сожалению не работает так, как хочется. В чем проблема?
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    @EventHandler над методом есть?
     
  4. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    нужен весь класс, а не один метод, чтобы точно сказать что не так.
     
  5. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Код:
    public class iga extends JavaPlugin implements Listener {
      public static final Logger _log = Logger.getLogger("Minecraft");
     
      @Override
      public void onEnable() {
          _log.info("Enable()");
          Bukkit.getPluginManager().registerEvents(this, this);
      }
      @EventHandler
      public void onInteract(PlayerInteractEvent event){
      if (event.getAction()== Action.LEFT_CLICK_BLOCK){
            event.getPlayer().sendMessage(ChatColor.GREEN +event.getPlayer().getName() + ChatColor.GOLD +" ударил "+event.getItem().getType()+" по " + event.getClickedBlock().getType());
      }
      if (event.getAction()== Action.RIGHT_CLICK_BLOCK){
          if (event.getClickedBlock().getTypeId() == Material.WOOD_DOOR.getId()) {
              event.getPlayer().sendMessage(ChatColor.GREEN +"Тебе тут не рады!"); 
        }
        }
      }
    }
     
  6. unlimited

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

    Баллы:
    123
    Имя в Minecraft:
    infinity
    А что конкретно работает не так, как вы хотите?
     
  7. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    плагин загружается? выводит Enable()?
     
  8. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Бью по двери и ничего не происходит.
    Так же как обрабатывать событие, если человек бьет по двери рукой? Что-то я не разобрался с HangingBreakByEntityEvent.[DOUBLEPOST=1370631135,1370631074][/DOUBLEPOST]
    Да, запускается все.[DOUBLEPOST=1370631180][/DOUBLEPOST]Первая часть тоже работает, когда бью левой кнопкой мыши.
     
  9. unlimited

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

    Баллы:
    123
    Имя в Minecraft:
    infinity
    Он либо не опрееляет дверь, либо не определяет action, попробуйте сначало убрать первую проверку, если будет работать, то сделайте, чтобы проверяло по id верхней или нижней части двери
    Код:
    if(кликнули по верхней части || по нижней части) {
     
    }
     
  10. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    LEFT_CLICK_BLOCK, на сколько я знаю теперь вызывается только с определёнными предметами в руке.
    Вместо него лучше вызывать BlockDamageEvent, но в креативе он не работает.
     
  11. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Прошу прощение за нубский вопрос. А как получить ID верхней или нижней части двери?[DOUBLEPOST=1370631929,1370631899][/DOUBLEPOST]
    Это я заметил. Но не работает, даже, с предметами в руках.[DOUBLEPOST=1370632294][/DOUBLEPOST]Заодно задам еще один вопрос.
    Вот хочу таймер сделать. На форуме уже задовался такой вопрос.
    Код:
    Bukkit.getScheduler().scheduleSyncRepeatingTask(iga, null, 20L, 0L);
    Почему название плагина подчеркивается красным цветом?[DOUBLEPOST=1370632412][/DOUBLEPOST]Еще new Runnable() подчеркивается)
     
    Сникерсни нравится это.
  12. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    new Runnable() -- анонимный класс, который должен что-то выполнять.
    new Runnable(){@override void run(){/*Исполняемый код*/}}
     
  13. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    А почему компилятору это не нравится все?
    [​IMG][DOUBLEPOST=1370634654,1370633287][/DOUBLEPOST]Ну вот разобрался чуть-чуть.
    Но опять не понятно.
    [​IMG]
    Что не так на этот раз?[DOUBLEPOST=1370634960][/DOUBLEPOST]Подробнее.
    Код: [​IMG]
    Консоль: [​IMG]
     
  14. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    1. В анонмном классе не могут быть цельные переменные, только статичные и/или окончательные.
    2. Переменная iga(то есть ссылка на плагин) равна null. Если вызов происходет в классе, который наследует JavaPlugin, то вместо переменной лучше написать this, иначе нужно присвоить этой переменной значение до вызова метода.
     
    dimahru и Iggi6666 нравится это.
  15. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Большое спасибо. Сделал вот так:
    Код:
    final int var = 10;
          Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
            @Override
            public void run(){
               
                var--;
                event.getPlayer().sendMessage("Тест таймера:" + var);
                  if(var == 0) {
                  }
            }}, 20L, 0L);
    Но строка var--; все еще подчеркивается. Такая ошибка: [​IMG]
     
    zuma2 нравится это.
  16. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Значения финальных переменных нельзя менять.
     
    Iggi6666 нравится это.
  17. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Да, это я уже понял. А как тогда делать?
    Как глобальную переменную ввести? public int var?
    Так вот тоже не работает. :(
     
    zuma2 нравится это.
  18. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    если не получается это запилить так, вынеси этот runnable в отдельный класс.
     
  19. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Вынеси в отдельный нестатичный класс. Или забей значение через объект.
     

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