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

  • Автор темы Автор темы 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];
}
}
}
}
}
}
 
Возможная причина)))
Используй шедулеры для этих задач.
Я так подумал возможно дело в том что идет перегрузка потока, могу попробовать разгрузить поток создавая новые которые будут сразу после установки блока закрываться.
Пока 1860 блоков сгенерировало. Жду дальше
нет все равно падает ((
 
щас попробую
Попробовал и не вийшло, или я что то неправильно делаю. Вот стало интересно в плагине worldedit нет такой проблемы там пишеш //set 1 и большой кусок превратился в камень. Что интересно у меня мой плагин когда генерирует на половине выкидает меня из сервера все догенерирует и останавливается. Возможно нужно сохранять мир каждые 1000 блоков
вопрос в том чтобы сделать простой генератор или проще чтобы большой кусок превратить в камень без нагрузки на сервер как в WorldEdit.
 
Создавать задачу на ~1024 блока и выполнять каждую из них каждый тик.
 
Создавать задачу на ~1024 блока и выполнять каждую из них каждый тик.
А почему именно по одному блоку за тик? Можно штук по 10, наверно, а то и больше... А то 1200 блоков в минуту... (если сервер ещё и идеально работает)
http://minecraft-ru.gamepedia.com/Такт
На серверах это называют тиками (возможно из-за перевода, возможно ещё что-то).
 
А почему именно по одному блоку за тик? Можно штук по 10, наверно, а то и больше... А то 1200 блоков в минуту... (если сервер ещё и идеально работает)
и выполнять каждую из них каждый тик.
Или слово "блок" ныне женского пола?
Хотя mb, надо было писать "задачи" вместо "задачу".
 
А почему именно по одному блоку за тик? Можно штук по 10, наверно, а то и больше... А то 1200 блоков в минуту... (если сервер ещё и идеально работает)

http://minecraft-ru.gamepedia.com/Такт
На серверах это называют тиками (возможно из-за перевода, возможно ещё что-то).

как использовать тик для генерации блоков? Кстате интересное наблюдение, по мере увеличения количества сгенерируемых блоков увеличивается количество занятой оперативной памяти (от 670-980 мб) и никак не падает все время пока не вырубишь сервер. Если опять включить то все нормально. Возможно в определенный момент идет перегрузка по оперативной памяти и процес падает. Можно ли сделать так чтоб оперативная память не так сильно уходила под сервер, ибо WorldEdit с таким объёмом работы совсем не нагружает оперативную память.
 
Просто делай задержки. И сейв алл делай переодически.
А вообще, Такие вещи нужно вшивать напрямую в mca, а потом релоадить их. Тогда можно добиться огромных скоростей генерации и не убить память сервера.
Из минусов такого подхода, не ведется расчет освещения. Но зато можно обрабатывать миллионы блоков за раз.
 
Просто делай задержки. И сейв алл делай переодически.
А вообще, Такие вещи нужно вшивать напрямую в mca, а потом релоадить их. Тогда можно добиться огромных скоростей генерации и не убить память сервера.
Из минусов такого подхода, не ведется расчет освещения. Но зато можно обрабатывать миллионы блоков за раз.
Чтобы напрямую работать с файлами anvil, нуно сначала выгрузить все миры, иначе нет гарантии что в файлах реально лежит последняя версия мапы.

А в обход баккита можно конечно вставлять блоки, но это делать надо с умом, забудешь про тайл - будешь ловить незагружающиеся чанки ни с того ни с сего. А, так как бы да, заместил блок в чанке в нужной секции и всё. Только вот потом в конце всё равно надо будет вызвать перерасчёт света и физики да и клиенту об этом сообщить, и вот это уже сожрёт дофига.
 
Используй шедулеры для этих задач.
Так как же их использовать, в сети много материала а в каком направлении идти неизвестно. Лучше материальщика подкиньте.
Просто делай задержки. И сейв алл делай переодически.
когда делал команду Bukkit.getWorld("world").save(); консоль выдавала ошибку A manual (plugin-induced) save has been detected while server is configured to auto-save. This may affect performance.
Эхех. Не нужно. Можно обойтись и средствами ведра.
Хотел бы узнать что это такое.
 
Так как же их использовать
Bukkit.getScheduler().runTask(plugin, runnable);
А runnable должен содержать тот код, который должен быть исполнен в основном потоке.
консоль выдавала ошибку A manual (plugin-induced) save has been detected
Это не ошибка, а предупреждение, или даже информация. Когда-нибудь придётся научиться различать уровень важности записей логов.
 
Назад
Верх