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

Помогите Не работает block break event

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

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

    Welester Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Welester
    Вот код:
    Код:
    if(getConfig().getInt("jobs." + p.getPlayer()) == 1){
                        if(e.getBlock().getType() !=Material.WHEAT){
                            e.setCancelled(true);
                        }
                    }
    
    Суть в том, что если блок не пшеница, то неразрушаемый, однако я ломаю пшеницу, и ничего, она такая же неуязвимая, как и другие .
    Я никак не пойму, в чём тут ошибка?
     
  2. Хостинг MineCraft
    <
  3. Sonicxd2

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

    Баллы:
    76
    Может быть потому что Material.WHEAT это не блок???
     
  4. Автор темы
    Welester

    Welester Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    Welester
    А как тогда называется блок пшеницы?
     
  5. Derik

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

    Баллы:
    76
    Имя в Minecraft:
    Derik
    Хм вопрос конечно интересный, столкнулся с этой проблемой когда писал квест на сервере на разрушение блоков. В итоге сделал квест на доставку а не разрушение. (citezens + quest)

    Как узнать какой блок сломал?

    Код:
    Logger log = getLogger();
    
    @EventHandler
    private void breacBlock(BlockBreakEvent e){
    Block block = e.getBlock();
    log.info('BreakBlock '+block.getType());
    }
    
    Запустить сервер, останеться сломать пшеницу и посмотреть что напишет.
     
  6. LaoTheLizard

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

    Баллы:
    103
    Skype:
    sgp_the_controller
    Наверное:
    Код:
    Material.CROPS
    
     
  7. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    1. Я ещё раз (третий) постараюсь намекнуть ТСу на то, что получать инстанс игрока и неявно кастовать его к строке не очень хорошая идея, т.к. при входе/выходе игрока и уж тем более рестарте сервера объект будет иметь совершенно другой случайный адрес.
      upload_2016-9-26_12-30-19.png
      Либо я чего-то не знаю и в Player-е перегружен метод toString(), который выдаёт вместо "Player#<адрес>" реально его ник или uuid?

    2. Вероятно, ТС отменяет событие для всех блоков ( setCancelled(true) ), а для пшеницы он хочет отменить отмену ( setCancelled(false) )?
      upload_2016-9-26_12-31-56.png
     
  8. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Ему нужен просто p.getName(). p.getPlayer () должен вроде сохраняться как CraftPlayer[NICK] или приближенный к этому виду в конфиге(во всяком случае так выводил System.out.print)
     
  9. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Да, действительно, в каком-то старом коде toString переопределён:
    Код:
    return "CraftPlayer{" + "name=" + getName() + '}';
    Тогда это рабочий, хоть и гавнокод.
     

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