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

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

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 +"Тебе тут не рады!");   
        }
      }
  }
К сожалению не работает так, как хочется. В чем проблема?
 
@EventHandler над методом есть?
 
нужен весь класс, а не один метод, чтобы точно сказать что не так.
 
@EventHandler над методом есть?
нужен весь класс, а не один метод, чтобы точно сказать что не так.
Код:
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 +"Тебе тут не рады!"); 
    }
    }
  }
}
 
Код:
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 +"Тебе тут не рады!");
    }
    }
  }
}

А что конкретно работает не так, как вы хотите?
 
плагин загружается? выводит Enable()?
 
А что конкретно работает не так, как вы хотите?
Бью по двери и ничего не происходит.
Так же как обрабатывать событие, если человек бьет по двери рукой? Что-то я не разобрался с HangingBreakByEntityEvent.
плагин загружается? выводит Enable()?
Да, запускается все.
Первая часть тоже работает, когда бью левой кнопкой мыши.
 
Бью по двери и ничего не происходит.
Так же как обрабатывать событие, если человек бьет по двери рукой? Что-то я не разобрался с HangingBreakByEntityEvent.

Он либо не опрееляет дверь, либо не определяет action, попробуйте сначало убрать первую проверку, если будет работать, то сделайте, чтобы проверяло по id верхней или нижней части двери
Код:
if(кликнули по верхней части || по нижней части) {
 
}
 
Код:
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 +"Тебе тут не рады!");
    }
    }
  }
}
LEFT_CLICK_BLOCK, на сколько я знаю теперь вызывается только с определёнными предметами в руке.
Вместо него лучше вызывать BlockDamageEvent, но в креативе он не работает.
 
Он либо не опрееляет дверь, либо не определяет action, попробуйте сначало убрать первую проверку, если будет работать, то сделайте, чтобы проверяло по id верхней или нижней части двери
Код:
if(кликнули по верхней части || по нижней части) {
 
}
Прошу прощение за нубский вопрос. А как получить ID верхней или нижней части двери?
LEFT_CLICK_BLOCK, на сколько я знаю теперь вызывается только с определёнными предметами в руке.
Вместо него лучше вызывать BlockDamageEvent, но в креативе он не работает.
Это я заметил. Но не работает, даже, с предметами в руках.
Заодно задам еще один вопрос.
Вот хочу таймер сделать. На форуме уже задовался такой вопрос.
Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(iga, null, 20L, 0L);
Почему название плагина подчеркивается красным цветом?
Еще new Runnable() подчеркивается)
 
new Runnable() -- анонимный класс, который должен что-то выполнять.
new Runnable(){@override void run(){/*Исполняемый код*/}}
 
new Runnable() -- анонимный класс, который должен что-то выполнять.
new Runnable(){@override void run(){/*Исполняемый код*/}}
А почему компилятору это не нравится все?
3avk0.png

Ну вот разобрался чуть-чуть.
Но опять не понятно.
3awd1.png

Что не так на этот раз?
Подробнее.
Код:
3awtR.png

Консоль:
3awrD.png
 
А почему компилятору это не нравится все?
3avk0.png

Ну вот разобрался чуть-чуть.
Но опять не понятно.
3awd1.png

Что не так на этот раз?
Подробнее.
Код:
3awtR.png

Консоль:
3awrD.png
1. В анонмном классе не могут быть цельные переменные, только статичные и/или окончательные.
2. Переменная iga(то есть ссылка на плагин) равна null. Если вызов происходет в классе, который наследует JavaPlugin, то вместо переменной лучше написать this, иначе нужно присвоить этой переменной значение до вызова метода.
 
1. В анонмном классе не могут быть цельные переменные, только статичные и/или окончательные.
2. Переменная iga(то есть ссылка на плагин) равна null. Если вызов происходет в классе, который наследует JavaPlugin, то вместо переменной лучше написать this, иначе нужно присвоить этой переменной значение до вызова метода.
Большое спасибо. Сделал вот так:
Код:
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--; все еще подчеркивается. Такая ошибка:
3aQe8.png
 
Большое спасибо. Сделал вот так:
Код:
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--; все еще подчеркивается. Такая ошибка:
3aQe8.png
Значения финальных переменных нельзя менять.
 
Значения финальных переменных нельзя менять.
Да, это я уже понял. А как тогда делать?
Как глобальную переменную ввести? public int var?
Так вот тоже не работает. :(
 
если не получается это запилить так, вынеси этот runnable в отдельный класс.
 
Да, это я уже понял. А как тогда делать?
Как глобальную переменную ввести? public int var?
Так вот тоже не работает. :(
Вынеси в отдельный нестатичный класс. Или забей значение через объект.
 

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

Назад
Верх