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

Помогите Генерация дерева

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

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

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

    Баллы:
    61
    Здравствуйте, хочу сделать функцию, генерирующую дерево с основанием в данной точке (координаты уже даны), как это можно сделать проще, не прибегая к обозначению каждого блока и его последующей setType()? В Дискорде отписывали, что можно юзать world.generateTree(Location, TreeType), но он почему-то у меня не работает. Код ниже, если что - укажите на мои ошибки.

    Код:
    public static void onSpawnTreesInRandomPlace(){
            if(name==null) return;
            // name - имя арены, берётся из конфига
            else{
                int rndX = rnd(minX, maxX);
                int rndY = (int) minY;
                int rndZ = rnd(minZ, maxZ);
                // максимальные и минимальные координаты уже заданы ранее с помощью WE API
                // метод rnd() тоже работает, проверял ранее с такой же фунцией с листвой+сундуками с лутом
                World world = Bukkit.getServer().getWorld(w);
                // w  - обычный мир, берётся с точки спавна в onEnable()
                Block rndBlock = world.getBlockAt(rndX, rndY, rndZ);
                Location rndBlockLoc = rndBlock.getLocation();
                TreeType oak = TreeType.TREE;
                if(rndBlock.getType()==Material.AIR){
                    world.generateTree(rndBlockLoc, oak);
                }
                else{}
            }
    }
     
  2. TheZefirrkka

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

    Баллы:
    76
    Попробуй там обычный блок поставить, может, с координатами что-то не так.
    или попробуй обновить чанк после генерации.
     
  3. Автор темы
    Mizerathom

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

    Баллы:
    61
    Попробовал с кирпичами, всё норм, как и ожидалось. Значит, проблема в чём-то другом.

    p.s. название режима не боюсь сливать
    getChunk().unload(); ?
    getChunk().unload() же ?
    Не-а, обновление чанков не помогает.
     

    Вложения:

  4. TheZefirrkka

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

    Баллы:
    76
    нет, есть метод updateChunck
     
  5. Автор темы
    Mizerathom

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

    Баллы:
    61
    refreshChunk() мб?
    Не, не помогает
     
  6. Exception_Prototype

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

    Баллы:
    96
    а мож save?
     
  7. makssof

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

    Баллы:
    103
    Как именно не работает? Просто не генерирует дерево, выкидывает какие-то ошибки, и т.п.?
    И попробуй на более открытой площадке это сделать.
    Check it
     
    Последнее редактирование: 3 июн 2017
  8. Автор темы
    Mizerathom

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

    Баллы:
    61
    Да, просто не генерирует дерево, ошибок нет. Ок, попробую и посмотрю, спасибо.
    Значительно расширил территорию, попробовал ещё тот способ, в итоге всё также не работает(
    С координатами всё тоже нормально, несколько раз проверял дебагом (S.o.p)
     
  9. makssof

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

    Баллы:
    103
    В последнее условие точно заходит?.. В смысле выполняется ли. Мало ли
     
  10. Автор темы
    Mizerathom

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

    Баллы:
    61
    Да-да, дебаг именно перед строчкой со спавном дерева.
    Код:
    if(rndBlock.getType()==Material.AIR){
                    System.out.println(rndBlockLoc.getX()+" "+rndBlockLoc.getY()+" "+rndBlockLoc.getZ());
                    world.generateTree(rndBlockLoc, oak);
                    rndBlock.getWorld().refreshChunk(chunkX, chunkZ);
                }

    ВЫ НЕ ПОВЕРИТЕ!
    @makssof @Exception_Prototype @TheZefirrkka
    Мне стоило всего лишь сделать поверхность, на которой будут спавниться деревья - землёй, как ВСЁ ЗАРАБОТАЛО! Возможно, вы подумаете, я тупой, что не знал, что деревья не могут спавниться на другой поверхности, но это же Bukkit - можно сделать и так, чтобы до спавна дерева тот блок заменялся землёй и обратно после его спавна. В общем, всем спасибо, я всё понял и осознал, искренне извините меня за ваши потраченные нервы (возможно) и время.
     
Статус темы:
Закрыта.

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