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

Помогите Спавн fallingBlock

Статус
Закрыто для дальнейших ответов.

therimuru_

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
therimuru_
Приветствую. Нужно заспавнить fallingblock, и удалить его, когда он достигнет земли.
Проблема настигла сразу, World#spawnFallingBlock отмечен как устаревший (Deprecation).

Каким образом на данный момент нужно спавнить FallingBlock'и правильно?
 
Использовать World#spawnEntity


Код:
    public void spawnFallingBlock(Location location, Material material) {
        World world = location.getWorld();
        if (world != null) {
            FallingBlock fallingBlock = (FallingBlock) world.spawnEntity(location, EntityType.FALLING_BLOCK);
            fallingBlock.setMaterial(material.createBlockData());
            fallingBlock.setDropItem(false); 
        }
    }


   //удалить его, когда он достигнет земли.
    @EventHandler
    public void onEntityChangeBlock(EntityChangeBlockEvent event) {
        if (event.getEntity() instanceof FallingBlock) {
            event.getEntity().remove(); 
        }
    }
}
 
Использовать World#spawnEntity


Код:
    public void spawnFallingBlock(Location location, Material material) {
        World world = location.getWorld();
        if (world != null) {
            FallingBlock fallingBlock = (FallingBlock) world.spawnEntity(location, EntityType.FALLING_BLOCK);
            fallingBlock.setMaterial(material.createBlockData());
            fallingBlock.setDropItem(false);
        }
    }


   //удалить его, когда он достигнет земли.
    @EventHandler
    public void onEntityChangeBlock(EntityChangeBlockEvent event) {
        if (event.getEntity() instanceof FallingBlock) {
            event.getEntity().remove();
        }
    }
}

РЕШЕНО
Вместо удаления entity нужно использовать event.setCancelled(true)

Спасибо. Код работает, но не полностью.
FallingBlock'и отображают падение дерева, тоесть спавняться на местах, где раньше были блоки. При этом, спавнятся они не совсем на тех координатах, где были блоки. Есть смещение. + не все блоки которые упали удаляются. Некоторые превращаются в обычные блоки, и не удаляются. Что делать?

UPD: FallingBlock#setMaterial не существует, и по этому я используют #setBlockData(block.getBlockData());

Код:
@EventHandler
public void onFall(EntityChangeBlockEvent event) {
    if (event.getEntity() instanceof FallingBlock) {
        event.getEntity().remove();
    }
}

result.forEach((block, material) -> {
        FallingBlock fallingBlock = (FallingBlock) block.getLocation().getWorld().spawnEntity(block.getLocation(), EntityType.FALLING_BLOCK);
        fallingBlock.setBlockData(block.getBlockData());
        fallingBlock.setDropItem(false);
    block.setType(Material.AIR);
});
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх