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

Помогите Не устанавливается блок.

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    link9932
    Ребят, помогите. Пишу плагин, который после разрушения определенного блока ставит на его места другой блок. Дело в том, что после разрушения блока, блок не ставиться на прошлые координаты. Если мы возьмем, например, координату Y+1, то блок поставиться на 1 блок выше от прошлого блока. Вопрос состоит в том, как поставить блок на место старого блока. Вот код. Помогите пожалуйста. У меня была идея поставить sleep(), но это не помогало.

    Код:
        @EventHandler(priority = EventPriority.NORMAL)
        public void onBlockPLace(BlockBreakEvent e) throws InterruptedException {
        Player player = e.getPlayer();
        if(e.getBlock().getType().equals(Material.DIAMOND_ORE)){   
            Location loc = e.getBlock().getLocation();
            World w = loc.getWorld();
            loc.setY(loc.getY()+1);
            Block b = w.getBlockAt(loc);
            b.setType(Material.DIAMOND_ORE);
            player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 180, 2));
    
        } 
     
  2. Хостинг MineCraft
    <
  3. JustBlender

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

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    1. Не понятно, зачем нужно это: "throws InterruptedException {", эвенты и без этого будут прекрасно работать.
    2. В проверке, e.getBlock().getType() есть ошибка. Делай так: e.getBlock().getType() == Material.DIAMOND_ORE
    3. А setY, как я думаю, можно будет уже удалить.
    И еще, а не ты ли чувак на Ютубе, который глитчи ищет? Имя знакомое...
     
    0bsid1 нравится это.
  4. Автор темы
    link9932

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

    Баллы:
    61
    Имя в Minecraft:
    link9932
    Проверка работает нормально =) Ответа на вопрос так и не получил. Да, это я тот чувак =) После удаления setY блок на координатах не появляется =)
     
  5. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Весь код в условии укладывается в e.getBlock().setType(Material.DIAMOND_ORE)
     
    JustBlender нравится это.
  6. Автор темы
    link9932

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

    Баллы:
    61
    Имя в Minecraft:
    link9932
    Это понятно, но как все таки поставить блок заново после разрушения? Голову уже второй день ломаю. Ставил sleep, но он полностью останавливает поток, а мне нужно именно задержку на немного.
     
  7. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    runTaskLater?
     
    link9932 нравится это.
  8. Автор темы
    link9932

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

    Баллы:
    61
    Имя в Minecraft:
    link9932
    Таааак. Спасибо, попробуем.[DOUBLEPOST=1393857955,1393846142][/DOUBLEPOST]
    Спасибо. Проблема решена.
    Код:
    if(e.getBlock().getType().equals(Material.DIAMOND_ORE)){   
            final Location loc = e.getBlock().getLocation();
            loc.setY(loc.getY() + 0);
            Bukkit.getScheduler().runTaskLater(this, new Runnable() {
                @Override
                public void run() {
                    World w = loc.getWorld();
                    Block b = w.getBlockAt(loc);
                        b.setType(Material.DIAMOND_ORE);
                  }
                }, 200);
         
            }
    Вопрос закрыт.
     

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