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

  • Автор темы Автор темы 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));

    }
 
Ребят, помогите. Пишу плагин, который после разрушения определенного блока ставит на его места другой блок. Дело в том, что после разрушения блока, блок не ставиться на прошлые координаты. Если мы возьмем, например, координату 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));

    }
1. Не понятно, зачем нужно это: "throws InterruptedException {", эвенты и без этого будут прекрасно работать.
2. В проверке, e.getBlock().getType() есть ошибка. Делай так: e.getBlock().getType() == Material.DIAMOND_ORE
3. А setY, как я думаю, можно будет уже удалить.
И еще, а не ты ли чувак на Ютубе, который глитчи ищет? Имя знакомое...
 
1. Не понятно, зачем нужно это: "throws InterruptedException {", эвенты и без этого будут прекрасно работать.
2. В проверке, e.getBlock().getType() есть ошибка. Делай так: e.getBlock().getType() == Material.DIAMOND_ORE
3. А setY, как я думаю, можно будет уже удалить.
И еще, а не ты ли чувак на Ютубе, который глитчи ищет? Имя знакомое...
Проверка работает нормально =) Ответа на вопрос так и не получил. Да, это я тот чувак =) После удаления setY блок на координатах не появляется =)
 
Весь код в условии укладывается в e.getBlock().setType(Material.DIAMOND_ORE)
 
Весь код в условии укладывается в e.getBlock().setType(Material.DIAMOND_ORE)
Это понятно, но как все таки поставить блок заново после разрушения? Голову уже второй день ломаю. Ставил sleep, но он полностью останавливает поток, а мне нужно именно задержку на немного.
 
Это понятно, но как все таки поставить блок заново после разрушения? Голову уже второй день ломаю. Ставил sleep, но он полностью останавливает поток, а мне нужно именно задержку на немного.
runTaskLater?
 
Таааак. Спасибо, попробуем.
Спасибо. Проблема решена.
Код:
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);
     
        }

Вопрос закрыт.
 
Назад
Верх