Skip to content

Commit

Permalink
feat: Опции для контроля поведения серверных ошибок тика
Browse files Browse the repository at this point in the history
- Добавлены опции `display-ticking-errors-to-players`, `stop-on-critical-ticking-error`, обе по умолчанию включены и предпочтительны.
- Уточнения по поводу команды `/profilecallback [enabled] [showParameters]`.
  • Loading branch information
MaXFeeD committed Feb 14, 2024
1 parent f576284 commit 6e993b6
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 5 deletions.
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 или путь.
Expand Down Expand Up @@ -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
```
## Консольные команды
Expand All @@ -85,6 +93,7 @@ socket-port: 2304
+ mods — выводит список модификаций на сервере
+ inner_core_network — выводит список подключенных к протоколу игроков на сервере
+ state — выводит стейты блока по рантайм идентификатору
+ profilecallback [enabled] [showParameters] — отладка и профайлинг калбеков
> Все команды предназначены для операторов и не могут быть вызваны игроками.
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/com/reider745/InnerCoreServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
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;
Expand Down Expand Up @@ -484,6 +483,14 @@ public static MethodHandling getUnsupportedMethodHandling() {
}
}

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");
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/reider745/hooks/PlayerHooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public static void dataPacket(Player player, DataPacket packet) {
}

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")));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,8 @@ public static void onTick() {
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()) {
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/zotecore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 6e993b6

Please sign in to comment.