Уделил время Hose, Работает хорошо, даже слишком, замена всех листов на Queue вызывает негодование у части форж, из-за чего пришлось отказаться. Есть пару багов, которых, пока, так и не удалось пофиксить, один из них скрывается в итераторе линкедлиста if(iterator.hasNext()) iterator.next() может выдать NullPointerException, что в свою очередь дополнительный краш и потеря стабильности, заметил что это происходит +- когда игрок меняет чанк. Прирост очень большой, тик ентити не влияет на тпс, если сервер не вывозит ентити те просто зависают, пока сервер с ними не справится. Если тут есть люди, которые хотят покопать асинхронность в энтити, давайте создадим тему и сделаем это вместе?Кто работал с ним? Насколько большой прирост?
entityList.parallelStream().forEach(ent -> {//hose
if (!entityLimiter.shouldContinue()) {
return;
}
Entity entity1 = ent.bB();
if (entity1 != null) {
if (!entity1.dead && entity1.w(entity)) {
continue;
if (!entity1.dead && entity1.w(ent)) {
return;
}
entity.stopRiding();
ent.stopRiding();
}
this.methodProfiler.a("tick");
if (!entity.dead && !(entity instanceof EntityPlayer)) {
if (!ent.dead && !(ent instanceof EntityPlayer)) {
try {
SpigotTimings.tickEntityTimer.startTiming(); // Spigot
this.h(ent);
SpigotTimings.tickEntityTimer.stopTiming(); // Spigot
} catch (Throwable throwable1) {
crashreport1 = CrashReport.a(throwable1, "Ticking entity");
crashreportsystemdetails1 = crashreport1.a("Entity being ticked");
entity.appendEntityCrashDetails(crashreportsystemdetails1);
ent.appendEntityCrashDetails(crashreportsystemdetails1);
throw new ReportedException(crashreport1);
}
}
}