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

Помогите Падает сервер

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

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

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    Ситуация непонятная, сделал плагин который генерирует заново ресурсы с какой-то вероятностью на определённой территории (типа шахты), работает эта часть плагина как отдельный поток, при запуске генерации на определённом моменте падает сервер сохраняет карту. Пробивал делать чтобы очень долго генерировало блоки (там блок в одну секунду), не помогает также падает сервер, даже еще менше работы проделано. При остановке пишет: The state engine was in incorrect state SERVER_STOPING and forced info state SERVER_STOPED. Errors may have been discarded. Java стоит x64 то-есть использует все 8 gb оперативки, да и по железу все норм. Ну и собственно сам код:

    for (int y=Integer.valueOf(CountryBuilding[14][_j])+1;y<(Integer.valueOf(CountryBuilding[12][_j])+_mine_mass[Integer.valueOf(CountryBuilding[4][_j])][4]);y++){
    for (int x=(Integer.valueOf(CountryBuilding[6][_j])-(_size_x/2));x<=(Integer.valueOf(CountryBuilding[6][_j])+(_size_x/2));x++){
    for (int z=(Integer.valueOf(CountryBuilding[7][_j])-(_size_z/2)-1);z<=(Integer.valueOf(CountryBuilding[7][_j])+(_size_z/2))-1;z++){
    Location loc=new Location(Bukkit.getWorld("world"),x,y,z);
    if (loc.getBlock().getTypeId()==0||loc.getBlock().getTypeId()==8||loc.getBlock().getTypeId()==9||loc.getBlock().getTypeId()==10||loc.getBlock().getTypeId()==11){
    // System.out.println("(((((("+y);
    temp++;
    if (temp>=_time_lagg_amount){
    temp=0;
    try {
    Thread.sleep(_time_lagg);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    Random rand = new Random();
    int finalX = rand.nextInt(probability[0][2]) + 1;
    for (int p=1;p<=probability[0][1];p++){
    if (probability[p][2]>=finalX){
    loc.getBlock().setTypeId(probability[p][1]);
    loc.getBlock().setData((byte) 0);
    p=probability[0][1];
    }
    }
    }
    }
    }
    }
     
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Возможная причина)))
    Используй шедулеры для этих задач.
     
  4. Автор темы
    teramik

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    Я так подумал возможно дело в том что идет перегрузка потока, могу попробовать разгрузить поток создавая новые которые будут сразу после установки блока закрываться.[DOUBLEPOST=1473842715,1473842655][/DOUBLEPOST]Пока 1860 блоков сгенерировало. Жду дальше[DOUBLEPOST=1473846014][/DOUBLEPOST]нет все равно падает ((
     
  5. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
     
  6. Автор темы
    teramik

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    щас попробую[DOUBLEPOST=1473853268,1473851711][/DOUBLEPOST]Попробовал и не вийшло, или я что то неправильно делаю. Вот стало интересно в плагине worldedit нет такой проблемы там пишеш //set 1 и большой кусок превратился в камень. Что интересно у меня мой плагин когда генерирует на половине выкидает меня из сервера все догенерирует и останавливается. Возможно нужно сохранять мир каждые 1000 блоков[DOUBLEPOST=1473855192][/DOUBLEPOST]вопрос в том чтобы сделать простой генератор или проще чтобы большой кусок превратить в камень без нагрузки на сервер как в WorldEdit.
     
  7. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Создавать задачу на ~1024 блока и выполнять каждую из них каждый тик.
     
  8. Автор темы
    teramik

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    Всмысле тик?
     
  9. Dymeth

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

    Баллы:
    76
    А почему именно по одному блоку за тик? Можно штук по 10, наверно, а то и больше... А то 1200 блоков в минуту... (если сервер ещё и идеально работает)
    http://minecraft-ru.gamepedia.com/Такт
    На серверах это называют тиками (возможно из-за перевода, возможно ещё что-то).
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Или слово "блок" ныне женского пола?
    Хотя mb, надо было писать "задачи" вместо "задачу".
     
  11. Dymeth

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

    Баллы:
    76
    Всё в порядке, просто я читать разучился...
     
  12. Автор темы
    teramik

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    как использовать тик для генерации блоков? Кстате интересное наблюдение, по мере увеличения количества сгенерируемых блоков увеличивается количество занятой оперативной памяти (от 670-980 мб) и никак не падает все время пока не вырубишь сервер. Если опять включить то все нормально. Возможно в определенный момент идет перегрузка по оперативной памяти и процес падает. Можно ли сделать так чтоб оперативная память не так сильно уходила под сервер, ибо WorldEdit с таким объёмом работы совсем не нагружает оперативную память.
     
  13. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
     
  14. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Просто делай задержки. И сейв алл делай переодически.[DOUBLEPOST=1473996927,1473996669][/DOUBLEPOST]А вообще, Такие вещи нужно вшивать напрямую в mca, а потом релоадить их. Тогда можно добиться огромных скоростей генерации и не убить память сервера.[DOUBLEPOST=1473997046][/DOUBLEPOST]Из минусов такого подхода, не ведется расчет освещения. Но зато можно обрабатывать миллионы блоков за раз.
     
  15. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Эхех.
    Не нужно. Можно обойтись и средствами ведра.
     
  16. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Чтобы напрямую работать с файлами anvil, нуно сначала выгрузить все миры, иначе нет гарантии что в файлах реально лежит последняя версия мапы.

    А в обход баккита можно конечно вставлять блоки, но это делать надо с умом, забудешь про тайл - будешь ловить незагружающиеся чанки ни с того ни с сего. А, так как бы да, заместил блок в чанке в нужной секции и всё. Только вот потом в конце всё равно надо будет вызвать перерасчёт света и физики да и клиенту об этом сообщить, и вот это уже сожрёт дофига.
     
  17. Автор темы
    teramik

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

    Баллы:
    61
    Имя в Minecraft:
    teramik
    Так как же их использовать, в сети много материала а в каком направлении идти неизвестно. Лучше материальщика подкиньте.
    когда делал команду Bukkit.getWorld("world").save(); консоль выдавала ошибку A manual (plugin-induced) save has been detected while server is configured to auto-save. This may affect performance.
    Хотел бы узнать что это такое.
     
  18. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Bukkit.getScheduler().runTask(plugin, runnable);
    А runnable должен содержать тот код, который должен быть исполнен в основном потоке.
    Это не ошибка, а предупреждение, или даже информация. Когда-нибудь придётся научиться различать уровень важности записей логов.
     

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