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

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

Discussion in 'Разработка плагинов для новичков' started by Iggi6666, Jun 7, 2013.

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

    Iggi6666 Участник

    Trophy Points:
    28
    Имя в Minecraft:
    iggi666
    Всем привет. Тренируюсь писать под Буккит и накатал такую фигню:
    Code:
    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 Старожил Девелопер Пользователь

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

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

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

    Iggi6666 Участник

    Trophy Points:
    28
    Имя в Minecraft:
    iggi666
    Code:
    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 Старожил Пользователь

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

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

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

    Iggi6666 Участник

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

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

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

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

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

    Iggi6666 Участник

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

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

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

    Iggi6666 Участник

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

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

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

    Iggi6666 Участник

    Trophy Points:
    28
    Имя в Minecraft:
    iggi666
    Большое спасибо. Сделал вот так:
    Code:
    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 likes this.
  16. Ission

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

    Trophy Points:
    173
    Skype:
    lokivava
    Значения финальных переменных нельзя менять.
     
    Iggi6666 likes this.
  17. Автор темы
    Iggi6666

    Iggi6666 Участник

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

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

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

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

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

Share This Page