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

Статус
Закрыто для дальнейших ответов.

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{}
        }
}
 
Попробуй там обычный блок поставить, может, с координатами что-то не так.
или попробуй обновить чанк после генерации.
 
Попробовал с кирпичами, всё норм, как и ожидалось. Значит, проблема в чём-то другом.

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

Вложения

  • 2017-06-02_22.20.31.png
    2017-06-02_22.20.31.png
    284,7 КБ · Просмотры: 16
Как именно не работает? Просто не генерирует дерево, выкидывает какие-то ошибки, и т.п.?
И попробуй на более открытой площадке это сделать.
Check it
 
Последнее редактирование:
Как именно не работает? Просто не генерирует дерево, выкидывает какие-то ошибки, и т.п.?
И попробуй на более открытой площадке это сделать.
Check it
Да, просто не генерирует дерево, ошибок нет. Ок, попробую и посмотрю, спасибо.
Значительно расширил территорию, попробовал ещё тот способ, в итоге всё также не работает(
С координатами всё тоже нормально, несколько раз проверял дебагом (S.o.p)
 
В последнее условие точно заходит?.. В смысле выполняется ли. Мало ли
 
Да-да, дебаг именно перед строчкой со спавном дерева.
Код:
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 - можно сделать и так, чтобы до спавна дерева тот блок заменялся землёй и обратно после его спавна. В общем, всем спасибо, я всё понял и осознал, искренне извините меня за ваши потраченные нервы (возможно) и время.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх