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

Помогите Эффект ломания блоков

Тема в разделе "Разработка плагинов для новичков", создана пользователем just_lofe, 28 июн 2023.

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

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Мне нужно, что-бы в радиусе 2-3 блоков от игрока блоки имели фантомный прогресс ломания.
    Если игрок отходит - эффект пропадает, обновляется каждую секунду.
    Желательно что бы эффект принимали блоки в шарообразном радиусе и имели разную степень.

    Ядро - Purpur 1.20.1
     
    Последнее редактирование: 28 июн 2023
  2. Арбузный кот

    Арбузный кот Ньюби

    Баллы:
    1
    Что значит "эффект ломания"?
     
  3. Автор темы
    just_lofe

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Как будто игрок ломает блок
     

    Вложения:

  4. Арбузный кот

    Арбузный кот Ньюби

    Баллы:
    1
    Возьми за основу код ниже. Это мод но суть похожа


    Код:
    package com.example.autobreakmod;
    
    import net.minecraft.client.Minecraft;
    import net.minecraftforge.client.event.PlayerSPPushOutOfBlocksEvent;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.eventbus.api.SubscribeEvent;
    import net.minecraftforge.fml.common.Mod;
    import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    @Mod("autobreakmod")
    public class AutoBreakMod {
        private static final Logger LOGGER = LogManager.getLogger();
    
        public AutoBreakMod() {
            MinecraftForge.EVENT_BUS.register(this);
        }
    
        @Mod.EventBusSubscriber(modid = "autobreakmod", bus = Mod.EventBusSubscriber.Bus.MOD)
        public static class ModEventSubscriber {
            @SubscribeEvent
            public static void onClientSetup(FMLClientSetupEvent event) {
                // Ничего не нужно делать в этом методе
            }
    
            @SubscribeEvent
            public static void onPlayerSPPushOutOfBlocks(PlayerSPPushOutOfBlocksEvent event) {
                Minecraft mc = Minecraft.getInstance();
                int radius = 3; // Радиус, в котором будут ломаться блоки
    
                for (int x = -radius; x <= radius; x++) {
                    for (int y = -radius; y <= radius; y++) {
                        for (int z = -radius; z <= radius; z++) {
                            int posX = (int) mc.player.getPosX() + x;
                            int posY = (int) mc.player.getPosY() + y;
                            int posZ = (int) mc.player.getPosZ() + z;
    
                            mc.playerController.onPlayerDestroyBlock(posX, posY, posZ); // Ломаем блоки
                        }
                    }
                }
            }
        }
    }
    
    (код взял с инета, за работоспособность не ручаюсь)
     
  5. Автор темы
    just_lofe

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Код:
    @EventHandler
    public void handlePlayerMoveEvent(PlayerMoveEvent event) {
            Player player = event.getPlayer();
            if(playerMap.get(player) != null) {
                int radius = 3;
                for (int x = -radius; x <= radius; x++) {
                    for (int y = -radius; y <= radius; y++) {
                        for (int z = -radius; z <= radius; z++) {
                            int posX = (int) player.getLocation().getX() + x;
                            int posY = (int) player.getLocation().getY() + y;
                            int posZ = (int) player.getLocation().getZ() + z;
    
                            player.sendBlockDamage(new Location(player.getWorld(), posX, posY, posZ), 0.5f);
                        }
                    }
                }
            }
        }
    Сделал так, но не видно прогресса, можно заметить как ломаются лишь один-два блока.
     
  6. Арбузный кот

    Арбузный кот Ньюби

    Баллы:
    1
    Попробуй так


    Код:
     for (Player player : Bukkit.getOnlinePlayers()) {
                int radiusSquared = radius * radius;
    
                for (int x = -radius; x <= radius; x++) {
                    for (int y = -radius; y <= radius; y++) {
                        for (int z = -radius; z <= radius; z++) {
                            if ((x * x) + (y * y) + (z * z) <= radiusSquared) {
                                int posX = (int) player.getLocation().getX() + x;
                                int posY = (int) player.getLocation().getY() + y;
                                int posZ = (int) player.getLocation().getZ() + z;
                                player.sendBlockDamage(new Location(player.getWorld(), posX, posY, posZ), 0.5f);
                            }
                        }
                    }
                }
            }
     
  7. Автор темы
    just_lofe

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Работать то оно работает, но мне нужно не сломать блок, а создать вид что блок ломается, я поэтому и использовал Player#sendBlockDamage();
     
  8. Арбузный кот

    Арбузный кот Ньюби

    Баллы:
    1
    Попробуй в читах с открытыми исходниками поискать код функции Nuker. Там прям точно как ты сказал все работает, но блок ломается. Но я думаю будет реально сделать проверку на то что если блок почти сломался то эффект пойдет заново.
     
  9. ekbasiaa

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

    Баллы:
    66
    Клиент и сервер различаются. Можешь отправлять пакеты разрушения блоков, а как и какой пакет глянь в плагине Block Damage (срц нет, но в целом при декомпиле все остается понятным)
     
  10. Автор темы
    just_lofe

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Спасибо, закрыто.
     
Статус темы:
Закрыта.

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