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

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

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

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

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Здравствуйте, хочу сделать функцию, генерирующую дерево с основанием в данной точке (координаты уже даны), как это можно сделать проще, не прибегая к обозначению каждого блока и его последующей 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. Хостинг MineCraft
    <
  3. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    Попробуй там обычный блок поставить, может, с координатами что-то не так.[DOUBLEPOST=1496420286,1496420232][/DOUBLEPOST]или попробуй обновить чанк после генерации.
     
  4. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

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

    p.s. название режима не боюсь сливать[DOUBLEPOST=1496420571,1496420499][/DOUBLEPOST]
    getChunk().unload(); ?[DOUBLEPOST=1496420604][/DOUBLEPOST]
    getChunk().unload() же ?[DOUBLEPOST=1496420694][/DOUBLEPOST]Не-а, обновление чанков не помогает.
     

    Вложения:

  5. TheZefirrkka

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

    Баллы:
    76
    Skype:
    RomaMamkinHasker1337
    Имя в Minecraft:
    TheZefirrkka
    нет, есть метод updateChunck
     
  6. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    refreshChunk() мб?[DOUBLEPOST=1496455935,1496455516][/DOUBLEPOST]Не, не помогает
     
  7. Exception_Prototype

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

    Баллы:
    46
    а мож save?
     
  8. makssof

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

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

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Да, просто не генерирует дерево, ошибок нет. Ок, попробую и посмотрю, спасибо.[DOUBLEPOST=1496562703,1496561840][/DOUBLEPOST]Значительно расширил территорию, попробовал ещё тот способ, в итоге всё также не работает([DOUBLEPOST=1496563364][/DOUBLEPOST]С координатами всё тоже нормально, несколько раз проверял дебагом (S.o.p)
     
  10. makssof

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

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

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Да-да, дебаг именно перед строчкой со спавном дерева.
    Код:
    if(rndBlock.getType()==Material.AIR){
                    System.out.println(rndBlockLoc.getX()+" "+rndBlockLoc.getY()+" "+rndBlockLoc.getZ());
                    world.generateTree(rndBlockLoc, oak);
                    rndBlock.getWorld().refreshChunk(chunkX, chunkZ);
                }
    [DOUBLEPOST=1496565647,1496563841][/DOUBLEPOST]ВЫ НЕ ПОВЕРИТЕ!
    @makssof @Exception_Prototype @TheZefirrkka
    Мне стоило всего лишь сделать поверхность, на которой будут спавниться деревья - землёй, как ВСЁ ЗАРАБОТАЛО! Возможно, вы подумаете, я тупой, что не знал, что деревья не могут спавниться на другой поверхности, но это же Bukkit - можно сделать и так, чтобы до спавна дерева тот блок заменялся землёй и обратно после его спавна. В общем, всем спасибо, я всё понял и осознал, искренне извините меня за ваши потраченные нервы (возможно) и время.
     
Статус темы:
Закрыта.

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