From 6e993b6f8aa6bbf5c406e1a749009c06885985fa Mon Sep 17 00:00:00 2001 From: MaXFeeD Date: Wed, 14 Feb 2024 05:01:17 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=9E=D0=BF=D1=86=D0=B8=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD=D1=8B=D1=85=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D1=82=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлены опции `display-ticking-errors-to-players`, `stop-on-critical-ticking-error`, обе по умолчанию включены и предпочтительны. - Уточнения по поводу команды `/profilecallback [enabled] [showParameters]`. --- README.md | 13 +++++++++++-- src/main/java/com/reider745/InnerCoreServer.java | 9 ++++++++- src/main/java/com/reider745/hooks/PlayerHooks.java | 2 +- .../zhekasmirnov/innercore/api/NativeCallback.java | 3 ++- src/main/resources/zotecore.yml | 8 ++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d9c1b428..735a9c54 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ java -jar ZoteCore-SNAPSHOT.jar # Изменение информации пака, который клиент должен иметь для входа на сервер. # Устаревшие или не реализованные методы, однако, добавлены не будут. pack: Inner Core Test -pack-version: 2.3.0b116 test -pack-version-code: 153 +pack-version: 2.3.0b115 test +pack-version-code: 152 # Устанавливает список модов и конфигураций для загрузки, вы можете # указать название, имя папки модпака из /modpacks или путь. @@ -76,6 +76,14 @@ socket-server-enable: on # Порт серверного сокета, обычно должен быть между 10000 и 24999. # Но учтите, что по умолчанию клиент использует порт 2304. socket-port: 2304 + +# Отправляет текстовую форму игрокам когда происходят ошибки тика, +# содержит только стактрейс скрипта (без потенциально опасных свойств). +display-ticking-errors-to-players: true + +# Если серверный тик прерывается слишком часто, сервер будет остановлен; +# в противном случае тик будет пытаться продолжать перезапуски. +stop-on-critical-ticking-error: true ``` ## Консольные команды @@ -85,6 +93,7 @@ socket-port: 2304 + mods — выводит список модификаций на сервере + inner_core_network — выводит список подключенных к протоколу игроков на сервере + state — выводит стейты блока по рантайм идентификатору ++ profilecallback [enabled] [showParameters] — отладка и профайлинг калбеков > Все команды предназначены для операторов и не могут быть вызваны игроками. diff --git a/src/main/java/com/reider745/InnerCoreServer.java b/src/main/java/com/reider745/InnerCoreServer.java index ecde6cbd..2959548a 100644 --- a/src/main/java/com/reider745/InnerCoreServer.java +++ b/src/main/java/com/reider745/InnerCoreServer.java @@ -45,7 +45,6 @@ import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.*; -import java.nio.file.FileSystem; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicReference; import java.util.Enumeration; @@ -484,6 +483,14 @@ public class InnerCoreServer { } } + public static boolean shouldStoppedOnCriticalTickingError() { + return getPropertyBoolean("stop-on-critical-ticking-error", true); + } + + public static boolean shouldPlayersReceiveExceptionForms() { + return getPropertyBoolean("display-ticking-errors-to-players", true); + } + public static String getName() { return getPropertyString("pack", "Inner Core Test"); } diff --git a/src/main/java/com/reider745/hooks/PlayerHooks.java b/src/main/java/com/reider745/hooks/PlayerHooks.java index 7f833f37..fb26d4a7 100644 --- a/src/main/java/com/reider745/hooks/PlayerHooks.java +++ b/src/main/java/com/reider745/hooks/PlayerHooks.java @@ -98,7 +98,7 @@ public class PlayerHooks implements HookClass { } public static void showExceptionForm(Player player, String title, String message, Throwable exc) { - if (!EntityMethod.isValid(player)) { + if (!InnerCoreServer.shouldPlayersReceiveExceptionForms() || !EntityMethod.isValid(player)) { return; } FormWindowSimple form = new FormWindowSimple(title, message, Arrays.asList(new ElementButton("Rejoin"))); diff --git a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java index 67584a51..41b675cf 100644 --- a/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java +++ b/src/main/java/com/zhekasmirnov/innercore/api/NativeCallback.java @@ -385,7 +385,8 @@ public class NativeCallback { ICLog.e("INNERCORE-CALLBACK", "error occurred in server tick callback", e); if (serverTickDisabledDueToErrorMillis - + 15000 >= (serverTickDisabledDueToErrorMillis = System.currentTimeMillis())) { + + 15000 >= (serverTickDisabledDueToErrorMillis = System.currentTimeMillis()) + && InnerCoreServer.shouldStoppedOnCriticalTickingError()) { Server.getInstance().shutdown(); } else { for (long playerUid : Network.getSingleton().getServer().getConnectedPlayers()) { diff --git a/src/main/resources/zotecore.yml b/src/main/resources/zotecore.yml index a10aab00..0a56ff28 100644 --- a/src/main/resources/zotecore.yml +++ b/src/main/resources/zotecore.yml @@ -44,3 +44,11 @@ pack-version-code: 152 # Server socket port, usually should be between 10000 and 24999. # But keep in mind that the client uses port 2304 by default. # socket-port: 19131 + +# Sends form to players when ticking exception happens, +# contains only script stacktrace (without sensitive properties). +# display-ticking-errors-to-players: false + +# If ticking callback interrupts too often, server will be stopped; +# otherwise it will continue trying restart itself continiously. +# stop-on-critical-ticking-error: false