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

Помогите Выделение чанка частицами.

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

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

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ребят, есть ли у кого где-нибуть код, который бы спавнил какие-то частицы по границам чанка?
    Желательно с пакетами, чтоб отправлялось только одному игроку..
    Буду благодарен если кто-нибуть чего-нибуть подкинет)
     
  2. Хостинг MineCraft
    <
  3. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @EventHandler(priority = EventPriority.LOW)
        public void onPlayerMove(final PlayerMoveEvent e) {
            final Player player = e.getPlayer();
            final Chunk chunk = e.getTo().getChunk();
            if (player.isOp()) {
                for (int y = 0; y < 256; ++y) {
                    for (int x = 0; x < 2; ++x) {
                        for (int z = 0; z < 2; ++z) {
                            final Block block = chunk.getBlock(0, y, 0);
                            final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), 0.0, (double)(16 * z)));
                            if (b.getType() == Material.AIR) {
                                player.spawnParticle(Particle.VILLAGER_HAPPY, b.getLocation(), 1, 0, 0, 0, 1);
                            }
                        }
                    }
                }
            }
        }
    [DOUBLEPOST=1466838665,1466838563][/DOUBLEPOST]вроде только одному игроку отправляет.
    [​IMG]
     
  4. kirill3345

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

    Баллы:
    66
    Имя в Minecraft:
    kirill3345
    F3 + G уволились?
     
  5. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Не знал о такой функции...
    Но в любом случае не подходит, заставлять игроков жмать F3+G когда мне надо - будет сложно)))
    Очень круто... Но... А можно так что не только по бокам, а и по сторонам?)[DOUBLEPOST=1466839928][/DOUBLEPOST]И еще вопрос на засыпочку ботанам...
    Какие частицы в майне (Particle) самые.. БОЛЬШИЕ...
    Ну кроме взрывов, из них делать стенку чанка будет некрасиво...
    Ну типо чтоб даже косоглазый их точно увидел :D
     
  6. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    если по бокам, то фпс будет просаживаться.[DOUBLEPOST=1466841343,1466841012][/DOUBLEPOST]немного говно кода:
    не умею делать циклы на 0.05((

    Код:
        public void onEnable() {
            Bukkit.getScheduler().runTaskTimerAsynchronously(this, this, 28, 28);
        }
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.isOp()) {
                    final Chunk chunk = player.getLocation().getChunk();
                    for (int y = 0; y < 256; ++y) {
                        for (int x = 0; x < 2; ++x) {
                            for (int z = 0; z < 2; ++z) {
                                final Block block = chunk.getBlock(0, y, 0);
                                final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), 0.0, (double)(16 * z)));
                                if (b.getType() == Material.AIR && (block.getY() < player.getLocation().getY() + 5 ) && (block.getY() > player.getLocation().getY() -5 )) {
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.05, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.05, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.1, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.1, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.15, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.15, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.20, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.20, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.25, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.25, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.30, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.30, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.35, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.35, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.40, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.40, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.45, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.45, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.50, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.50, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.55, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.55, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.60, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.60, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.65, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.65, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.70, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.70, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.75, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.75, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.80, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.80, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.85, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.85, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.90, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.90, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 0.95, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -0.95, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, 1, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, b.getLocation(), 1, 0, -1, 0, 0.25);
                                }
                            }
                        }
                    }
                }
            }
        }
    [DOUBLEPOST=1466842046][/DOUBLEPOST]Вот так лучше будет, точнее красивее:

    Код:
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.isOp()) {
                    final Chunk chunk = player.getLocation().getChunk();
                    for (int y = 0; y < 256; ++y) {
                        for (int x = 0; x < 2; ++x) {
                            for (int z = 0; z < 2; ++z) {
                                final Block block = chunk.getBlock(0, y, 0);
                                final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), +0.0, (double)(16 * z)));
                                if (b.getType() == Material.AIR && (block.getY() < player.getLocation().getY() + 5 ) && (block.getY() > player.getLocation().getY() -5 )) {
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.05), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.05), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.1), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.1), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.15), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.15), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.20), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.20), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.25), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.25), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.30), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.30), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.35), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.35), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.40), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.40), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.45), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.45), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.50), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.50), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.55), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.55), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.60), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.60), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.65), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.65), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.70), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.70), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.75), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.75), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.80), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.80), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.85), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.85), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.90), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.90), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +0.95), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -0.95), b.getZ()), 1, 0, 0, 0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() + 1) ,b.getZ()),1, 0, 0,0, 0.25);
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -1), b.getZ()), 1, 0, 0, 0, 0.25);
                                }
                            }
                        }
                    }
                }
            }
        }
    [DOUBLEPOST=1466842113][/DOUBLEPOST]
    [​IMG]
     
  7. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ыыы, ладно, это слишком страшно...
    Буду лучше юзать тогда только по бокам))
    Дальше идет вопрос именно про сами частицы,
    как мне заспавнить частицы эффекта зелья определенного цвета?
    И можно ли такое вообще?
     
  8. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Так это не по бокам, это только по краям, чтобы прямая линия была, и небыло промежутков между частицами.
     
  9. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Я вот передал в вот такой метод для удобства, что мне нужна переждать как последний параметр для того чтобы заспавнить эффект зелья определенного цвета?
    Код:
        public void selectChunk(Chunk chunk, Player player, Particle particle) {
            for (int y = 0; y < 256; ++y) {
                for (int x = 0; x < 2; ++x) {
                    for (int z = 0; z < 2; ++z) {
                        final Block block = chunk.getBlock(0, y, 0);
                        final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), 0.0, (double)(16 * z)));
                        if (b.getType() == Material.AIR) {
                            player.spawnParticle(particle, b.getLocation(), 1, 0, 0, 0, 1);
                        }
                    }
                }
            }
        }
    
    [DOUBLEPOST=1466842315,1466842285][/DOUBLEPOST]
    Я понял, ну ладно, все-равно пожалуй сделаю без этого)[DOUBLEPOST=1466842420][/DOUBLEPOST]P.S. Циклы на 0.05 по идее вот так вот:
    Код:
                for (double d = 0.05; d <= 1.05; d+= 0.05) {
                   
                }
     
  10. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.isOp()) {
                    final Chunk chunk = player.getLocation().getChunk();
                    for (int y = 0; y < 256; ++y) {
                        for (int x = 0; x < 2; ++x) {
                            for (int z = 0; z < 2; ++z) {
                                final Block block = chunk.getBlock(0, y, 0);
                                final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), +0.0, (double)(16 * z)));
                                if (b.getType() == Material.AIR && (block.getY() < player.getLocation().getY() + 5 ) && (block.getY() > player.getLocation().getY() -5 )) {
                                    for (double d = 0.05; d <= 1.05; d+= 0.05) {
                                        player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +d), b.getZ()), 1, 0, 0, 0, 0.25);
                                    }
                                    for (double d = 0.05; d >= -1.05; d-= 0.05) {
                                        player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() -d), b.getZ()), 1, 0, 0, 0, 0.25);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    как цвет сделать, хз. Но можно юзать воду. От неё фпс сильно не проседает + не нужно делать от земли частицы, т.к вода тупо падает, и сама чертит линию.[DOUBLEPOST=1466846039,1466845782][/DOUBLEPOST]в принципе можно и убрать цикл на - , и без него всё нормально работает
     
  11. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    А если спавнить частицы большим количеством пакетов, то можно положить канал. Поэксперементируйте с командой /particle, подберите нужные параметры, чтобы минимумом пакетов отправлять.
     
  12. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    команда же вроде для всех игроков спавнит частицы.
    А пакеты только для определёных игроков. Поидее ведь от пакетов должно быть меньше нагрузки чем от команды.
     
  13. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Я сделаль вот так, вроде все хорошо :D
    Спасибо)
    Код:
        public void selectChunk(Chunk chunk, Player player, Effect effect) {
            if (GWMServerPlugin.plugin.config.getBoolean("USE_BETTER_CHUNK_SELECT")) {
                for (int y = 0; y < 256; ++y) {
                    for (int x = 0; x < 2; ++x) {
                        for (int z = 0; z < 2; ++z) {
                            final Block block = chunk.getBlock(0, y, 0);
                            final Block b = block.getWorld().getBlockAt(block.getLocation().add((double) (16 * x), 0.0, (double) (16 * z)));
                            player.playEffect(b.getLocation(), effect, 1);
                        }
                    }
                }
            } else {
                for (int y = 0; y < 256; ++y) {
                    for (int x = 0; x < 2; ++x) {
                        for (int z = 0; z < 2; ++z) {
                            final Block block = chunk.getBlock(0, y, 0);
                            final Block b = block.getWorld().getBlockAt(block.getLocation().add((double) (16 * x), 0.0, (double) (16 * z)));
                            if (b.getType() == Material.AIR && (block.getY() < player.getLocation().getY() + 32) && (block.getY() > player.getLocation().getY() - 16))
                                for (double d = 0.05; d <= 1.05; d += 0.05)
                                    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX(), (b.getY() + d), b.getZ()), 1, 0, 0, 0, 0.25);
                        }
                    }
                }
            }
        }
    
     
  14. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Параметры команды "particle <name> <x> <y> <z><xd> <yd> <zd> <speed> [count] [mode] [player] [params ...]".
    Я предлагал не использовать команду в плагине, а посмотреть с какими параметрами частицы будут оптимальнее, да и вообще какие частицы больше подойдут.
    А если отправлять таким циклом, как предлагается выше, частицы, то будет большая нагрузка на интернет канал из-за неоправданно большого количества посылок.
     
  15. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Код:
      
        ArrayList<Player> p = new ArrayList<Player>();
    
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.isOp()) {
                    final Chunk chunk = player.getLocation().getChunk();
                    p.add(player);
                    for (int y = 0; y < 256; ++y) {
                        for (int x = 0; x < 2; ++x) {
                            for (int z = 0; z < 2; ++z) {
                                final Block block = chunk.getBlock(0, y, 0);
                                final Block b = block.getWorld().getBlockAt(block.getLocation().add((double)(16 * x), +0.0, (double)(16 * z)));
                                if (b.getType() == Material.AIR && (block.getY() < player.getLocation().getY() + 5 ) && (block.getY() > player.getLocation().getY() -5 )) {
                                    for (double d = 0.05; d <= 1.05; d+= 0.05) {
                                        ParticleEffect.REDSTONE.sendColor(p, new Location(b.getWorld(), b.getX() , (b.getY() +d), b.getZ()), Color.BLACK);
                                        // import java.awt.Color;
                                    //    player.spawnParticle(Particle.DRIP_WATER, new Location(b.getWorld(), b.getX() , (b.getY() +d), b.getZ()), 1, 0, 0, 0, 0.25);
                                    }
                                   
                                }
                            }
                        }
                    }
                  p.remove(player);
                }
            }
        }
    https://www.spigotmc.org/resources/api-particleapi-1-7-1-8-1-9-1-10.2067/[DOUBLEPOST=1466869295,1466867979][/DOUBLEPOST]
    Код:
      
       // enable.. a.add(0);//
        ArrayList<Player> p = new ArrayList<Player>();
        ArrayList<Integer> a = new ArrayList<Integer>();
        @Override
        public void run() {
            for (Player player : Bukkit.getOnlinePlayers()) {
                if (player.isOp()) {
                    final Chunk chunk = player.getLocation().getChunk();
                    Location corner1 = chunk.getBlock(0, 0, 0).getLocation();
                    Location corner2 = chunk.getBlock(15, 0, 0).getLocation();
                    Location corner3 = chunk.getBlock(0, 0, 15).getLocation();
                    Location corner4 = chunk.getBlock(15, 0, 15).getLocation();
                    p.add(player);
                    a.set(0, 0);
                    for (int i = 0; i < 127; ++i) {
                        for (int i2 = 0; i2 < 15; ++i2) {
                            corner1 = chunk.getBlock(i2, i, 0).getLocation();
                            corner2 = chunk.getBlock(15, i, i2).getLocation();
                            corner3 = chunk.getBlock(15 - i2, i, 15).getLocation();
                            corner4 = chunk.getBlock(0, i, 15 - i2).getLocation();
                            if (corner1.getBlock().getType() == Material.AIR && (corner1.getY() < player.getLocation().getY() + 10 )  && (corner1.getY() > player.getLocation().getY() -10 )) {
                                ParticleEffect.REDSTONE.sendColor(p, new Location(corner1.getWorld(), corner1.getX() , corner1.getY() , corner1.getZ()), Color.BLACK);
                                a.set(0, a.get(0) + 1);
                            }
                            if (corner2.getBlock().getType() == Material.AIR && (corner2.getY() < player.getLocation().getY() + 10 ) && (corner2.getY() > player.getLocation().getY() -10 )) {
                                ParticleEffect.REDSTONE.sendColor(p, new Location(corner2.getWorld(), corner2.getX() , corner2.getY() , corner2.getZ()), Color.BLACK);
                                a.set(0, a.get(0) + 1);
                            }
                            if (corner3.getBlock().getType() == Material.AIR && (corner3.getY() < player.getLocation().getY() + 10 ) && (corner3.getY() > player.getLocation().getY() -10 )) {
                                ParticleEffect.REDSTONE.sendColor(p, new Location(corner3.getWorld(), corner3.getX() , corner3.getY() , corner3.getZ()), Color.BLACK);
                                a.set(0, a.get(0) + 1);
                            }
                            if (corner4.getBlock().getType() == Material.AIR && (corner4.getY() < player.getLocation().getY() + 10 ) && (corner4.getY() > player.getLocation().getY() -10 )) {
                                ParticleEffect.REDSTONE.sendColor(p, new Location(corner4.getWorld(), corner4.getX() , corner4.getY(), corner4.getZ()), Color.BLACK);
                                a.set(0, a.get(0) + 1);
                            }
                        }
                    }
                    p.remove(player);
                    System.out.print(a.get(0));
                }
            }
        }
    
    Если вдруг по бокам надо.
     
    Последнее редактирование: 25 июн 2016

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