feat: Приостановка тика при ошибках, сообщение игрокам
- Если после повторного включения не пройдет небольшой таймаут до следующей ошибки, сервер перезапустится.
This commit is contained in:
@@ -7,6 +7,7 @@ import cn.nukkit.level.Level;
|
||||
|
||||
import com.reider745.InnerCoreServer;
|
||||
import com.reider745.entity.EntityMethod;
|
||||
import com.reider745.hooks.PlayerHooks;
|
||||
import com.zhekasmirnov.apparatus.adapter.innercore.EngineConfig;
|
||||
import com.zhekasmirnov.apparatus.adapter.innercore.game.Minecraft;
|
||||
import com.zhekasmirnov.apparatus.adapter.innercore.game.block.BlockBreakResult;
|
||||
@@ -176,6 +177,7 @@ public class NativeCallback {
|
||||
|
||||
private static boolean isFirstServerTick = true;
|
||||
private static boolean isServerTickDisabledDueToError = false;
|
||||
private static long serverTickDisabledDueToErrorMillis = 0;
|
||||
private static int globalServerTickCounter = 0;
|
||||
|
||||
// this is called, when ServerLevel is constructed
|
||||
@@ -254,6 +256,7 @@ public class NativeCallback {
|
||||
globalServerTickCounter = 0;
|
||||
isFirstServerTick = true;
|
||||
isServerTickDisabledDueToError = false;
|
||||
serverTickDisabledDueToErrorMillis = 0;
|
||||
|
||||
// check, if we are required to call legacy callback: if we are the server, call
|
||||
// it for server leave game, otherwise call for client
|
||||
@@ -380,7 +383,21 @@ public class NativeCallback {
|
||||
} catch (Throwable e) {
|
||||
isServerTickDisabledDueToError = true;
|
||||
ICLog.e("INNERCORE-CALLBACK", "error occurred in server tick callback", e);
|
||||
|
||||
if (serverTickDisabledDueToErrorMillis
|
||||
+ 15000 >= (serverTickDisabledDueToErrorMillis = System.currentTimeMillis())) {
|
||||
Server.getInstance().shutdown();
|
||||
} else {
|
||||
for (long playerUid : Network.getSingleton().getServer().getConnectedPlayers()) {
|
||||
PlayerHooks.showExceptionForm(EntityMethod.getPlayerById(playerUid), "FATAL ERROR",
|
||||
"Fatal error occurred in ticking callback, it will be re-enabled in a few minutes.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (serverTickDisabledDueToErrorMillis != 0
|
||||
&& System.currentTimeMillis() - serverTickDisabledDueToErrorMillis >= 30000) {
|
||||
isServerTickDisabledDueToError = false;
|
||||
serverTickDisabledDueToErrorMillis = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
// call server player handlers
|
||||
|
||||
Reference in New Issue
Block a user