1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

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

Статус темы:
Закрыта.
  1. Автор темы
    therimuru_

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

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

    Каким образом на данный момент нужно спавнить FallingBlock'и правильно?
     
  2. CioLay

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

    Баллы:
    61
    Имя в Minecraft:
    NordNM
    Использовать 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(); 
            }
        }
    }
     
  3. Автор темы
    therimuru_

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

    Баллы:
    66
    Имя в Minecraft:
    therimuru_
    РЕШЕНО
    Вместо удаления 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);
    });
    
     
    Последнее редактирование: 1 авг 2024
Статус темы:
Закрыта.

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