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

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

Discussion in 'Разработка плагинов для новичков' started by link9932, Mar 2, 2014.

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

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

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

    Code:
        @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 Старожил Девелопер Пользователь

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    Skype:
    shkurovs
    runTaskLater?
     
    link9932 likes this.
  8. Автор темы
    link9932

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

    Trophy Points:
    61
    Имя в Minecraft:
    link9932
    Таааак. Спасибо, попробуем.[DOUBLEPOST=1393857955,1393846142][/DOUBLEPOST]
    Спасибо. Проблема решена.
    Code:
    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);
         
            }
    Вопрос закрыт.
     

Share This Page