- Поддерживаемые версии
- Отсутствует
Введение
Пожалуй самая главная вещь в администрировании сервера с которой нужно уметь работать - это логи. Не обязательно нужно быть разработчиком чтобы разбирать бегущие по экрану строки о каких-то событиях, но обязательно нужно уметь их читать и понимать что происходит. И на удивление многие не умеют читать что там написано.
Большинство из таких файлов идут на английском языке - поэтому без его знания у вас могут возникнуть трудности. Но с развитием технологий и это не беда, существует множество онлайн-переводчиков, например такие как:
Теория
Начнём пожалуй с самого главного: а что такое эти ваши логи?
Логи, они же файлы журнала - последовательные записи о каких-либо событиях, которые произошли в запущенной программе. Зачастую помимо самого события в лог ещё и записывают время, когда это событие произошло (Подробнее: статьи на Wikipedia - "You must be logged in to see this link." и "You must be logged in to see this link.")
Что можно понять по этим логам? На самом деле очень многое, без них решение большинства проблем будет очень затруднено, так как обо всех проблемах, ошибках и так далее программы в первую очередь пишут именно в логи. Поэтому при возникновении каких-либо проблем и создании поста с вопросом, нужно прикреплять логи. А ещё Spigot/Paper/Forge/Fabric-подобных серверах, запущенном Minecraft и любых других приложениях есть такое понятие как стактрейс.
Stack trace (stacktrace, трассировка стека) - отчёт о выполнении программы до места, в котором произошла ошибка. Именно благодаря нему можно очень просто понять в каком именно месте что-то пошло не так (Подробнее: статья на Wikipedia - "You must be logged in to see this link.")
Практика
Хорошо, теперь мы разобрались что это такое, но что дальше? Теперь давайте посмотрим на реальный пример лога - обычный Paper сервер и посмотрим что там происходит:
Код:
Downloading mojang_1.21.4.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/server/libraries/io/netty/netty-common/4.1.115.Final/netty-common-4.1.115.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
[13:29:37 INFO]: [bootstrap] Running Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1) on Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)
[13:29:37 INFO]: [bootstrap] Loading Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4
[13:29:37 INFO]: [PluginInitializerManager] Initializing plugins...
[13:29:37 INFO]: [PluginInitializerManager] Initialized 0 plugins
[13:29:38 INFO]: [ReobfServer] Remapping server...
[13:29:43 INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[13:29:43 INFO]: Found new data pack file/bukkit, loading it automatically
[13:29:43 INFO]: Found new data pack paper, loading it automatically
[13:29:46 INFO]: No existing world data, creating new world
[13:29:48 INFO]: [ReobfServer] Done remapping server in 10151ms.
[13:29:49 INFO]: Loaded 1370 recipes
[13:29:49 INFO]: Loaded 1481 advancements
[13:29:49 INFO]: [MCTypeRegistry] Initialising converters for DataConverter...
[13:29:49 INFO]: [MCTypeRegistry] Finished initialising converters for DataConverter in 327.5ms
[13:29:49 INFO]: Starting minecraft server version 1.21.4
[13:29:49 WARN]: ****************************
[13:29:49 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.
[13:29:49 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.
[13:29:49 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/
[13:29:49 WARN]: ****************************
[13:29:49 INFO]: Loading properties
[13:29:49 INFO]: This server is running Purpur version 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)
[13:29:49 INFO]: [spark] This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling
[13:29:49 INFO]: Server Ping Player Sample Count: 12
[13:29:49 INFO]: Using 4 threads for Netty based IO
[13:29:50 INFO]: [MoonriseCommon] Paper is using 3 worker threads, 1 I/O threads
[13:29:50 INFO]: [ChunkTaskScheduler] Chunk system is using population gen parallelism: true
[13:29:51 INFO]: Default game type: SURVIVAL
[13:29:51 INFO]: Generating keypair
[13:29:51 INFO]: Starting Minecraft server on *:25565
[13:29:51 INFO]: Using epoll channel type
[13:29:51 INFO]: Paper: Using libdeflate (Linux x86_64) compression from Velocity.
[13:29:51 INFO]: Paper: Using OpenSSL 3.x.x (Linux x86_64) cipher from Velocity.
[13:29:51 INFO]: Preparing level "world"
[13:29:55 INFO]: Preparing start region for dimension minecraft:overworld
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:56 INFO]: Preparing spawn area: 30%
[13:29:56 INFO]: Time elapsed: 1471 ms
[13:29:56 INFO]: Preparing start region for dimension minecraft:the_nether
[13:29:56 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Preparing spawn area: 18%
[13:29:57 INFO]: Time elapsed: 796 ms
[13:29:57 INFO]: Preparing start region for dimension minecraft:the_end
[13:29:57 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Time elapsed: 161 ms
[13:29:58 INFO]: [spark] Starting background profiler...
[13:29:58 INFO]: Done preparing level "world" (6.933s)
[13:29:58 INFO]: Running delayed init tasks
[13:29:58 INFO]: Done (22.986s)! For help, type "help"
[13:29:58 INFO]: *************************************************************************************
[13:29:58 INFO]: This is the first time you're starting this server.
[13:29:58 INFO]: It's recommended you read our 'Getting Started' documentation for guidance.
[13:29:58 INFO]: View this and more helpful information here: https://docs.papermc.io/paper/next-steps
[13:29:58 INFO]: *************************************************************************************
Первое что мы видим при первом запуске:
Код:
Downloading mojang_1.21.4.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/server/libraries/io/netty/netty-common/4.1.115.Final/netty-common-4.1.115.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
[13:29:37 INFO]: [bootstrap] Running Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1) on Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)
[13:29:37 INFO]: [bootstrap] Loading Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4
[13:29:37 INFO]: [PluginInitializerManager] Initializing plugins...
[13:29:37 INFO]: [PluginInitializerManager] Initialized 0 plugins
[13:29:38 INFO]: [ReobfServer] Remapping server...
[13:29:43 INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[13:29:43 INFO]: Found new data pack file/bukkit, loading it automatically
[13:29:43 INFO]: Found new data pack paper, loading it automatically
[13:29:46 INFO]: No existing world data, creating new world
[13:29:48 INFO]: [ReobfServer] Done remapping server in 10151ms.
[13:29:49 INFO]: Loaded 1370 recipes
[13:29:49 INFO]: Loaded 1481 advancements
[13:29:49 INFO]: [MCTypeRegistry] Initialising converters for DataConverter...
[13:29:49 INFO]: [MCTypeRegistry] Finished initialising converters for DataConverter in 327.5ms
[13:29:49 INFO]: Starting minecraft server version 1.21.4
- Ядро сервера загружает официальное ядро от Mojang и применяет патчи (да, Paper так работает)
- Первый "WARNING" - в библиотеке Netty используется метод из Unsafe (sun.misc.Unsafe::allocateMemory), который помечен как устаревший и будет удалён в новых версиях Java. В нашем случае это не принципиально, просто пропустим
- Запущенное ядро выводит версию Java (
Java 24 (OpenJDK 64-Bit Server VM 24.0.1+9-jvmci-b01; GraalVM Community GraalVM CE 24.0.1+9.1)
), операционной системы (Linux 5.15.167.4-microsoft-standard-WSL2 (amd64)
) и самой игры (Purpur 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) for Minecraft 1.21.4
) - Далее загружаются плагины (в моём случае их 0 - сервер ведь впервые запущен), рецепты, достижения
No existing world data, creating new world
говорит о том, что на сервере нет мира, и будет создан новый
Пока всё просто, давайте продолжим:
Код:
[13:29:49 WARN]: ****************************
[13:29:49 WARN]: YOU ARE RUNNING THIS SERVER AS AN ADMINISTRATIVE OR ROOT USER. THIS IS NOT ADVISED.
[13:29:49 WARN]: YOU ARE OPENING YOURSELF UP TO POTENTIAL RISKS WHEN DOING THIS.
[13:29:49 WARN]: FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/
[13:29:49 WARN]: ****************************
Код:
[13:29:49 INFO]: Loading properties
[13:29:49 INFO]: This server is running Purpur version 1.21.4-2416-HEAD@51aafbc (2025-04-12T23:37:33Z) (Implementing API version 1.21.4-R0.1-SNAPSHOT)
[13:29:49 INFO]: [spark] This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling
[13:29:49 INFO]: Server Ping Player Sample Count: 12
[13:29:49 INFO]: Using 4 threads for Netty based IO
[13:29:50 INFO]: [MoonriseCommon] Paper is using 3 worker threads, 1 I/O threads
[13:29:50 INFO]: [ChunkTaskScheduler] Chunk system is using population gen parallelism: true
[13:29:51 INFO]: Default game type: SURVIVAL
[13:29:51 INFO]: Generating keypair
[13:29:51 INFO]: Starting Minecraft server on *:25565
[13:29:51 INFO]: Using epoll channel type
[13:29:51 INFO]: Paper: Using libdeflate (Linux x86_64) compression from Velocity.
[13:29:51 INFO]: Paper: Using OpenSSL 3.x.x (Linux x86_64) cipher from Velocity.
[13:29:51 INFO]: Preparing level "world"
[13:29:55 INFO]: Preparing start region for dimension minecraft:overworld
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:55 INFO]: Preparing spawn area: 2%
[13:29:56 INFO]: Preparing spawn area: 30%
[13:29:56 INFO]: Time elapsed: 1471 ms
[13:29:56 INFO]: Preparing start region for dimension minecraft:the_nether
[13:29:56 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Preparing spawn area: 18%
[13:29:57 INFO]: Time elapsed: 796 ms
[13:29:57 INFO]: Preparing start region for dimension minecraft:the_end
[13:29:57 INFO]: Preparing spawn area: 2%
[13:29:57 INFO]: Time elapsed: 161 ms
[13:29:58 INFO]: [spark] Starting background profiler...
[13:29:58 INFO]: Done preparing level "world" (6.933s)
[13:29:58 INFO]: Running delayed init tasks
[13:29:58 INFO]: Done (22.986s)! For help, type "help"
server.properties
, сервер пишет что он запущен на порту 25565, происходит генерация нового мира и мы видим текст Done (22.986s)! For help, type "help"
который говорит что сервер успешно запущен и готов к работе.Но это идеальный сценарий, при котором всё и так понятно что сервер запустится и будет работать. Давайте же рассмотрим примеры ошибок с стактрейсами.
Пример 1 - очень распространённая ошибка, которую хотя бы раз видел (почти) каждый, кто имел дело с серверами. И имя ей UnsupportedClassVersionError - когда используемая версия Java старее чем та, что необходима для запуска программы.
Код:
Starting org.bukkit.craftbukkit.Main
Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: org/bukkit/craftbukkit/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at io.papermc.paperclip.Paperclip.lambda$main$0(Paperclip.java:38)
at java.base/java.lang.Thread.run(Thread.java:840)
В данном случае проблема в том, что сервер требует версию class file минимум 65 (то есть Java 21), а у нас используется версия 61 (то есть Java 17). Это как раз пример стактрейса - нам пишет не только саму ошибку, но и предыдущие функции в коде, которые вызывались до получения этой ошибки.
Подробнее, а также таблица с версиями классов и версиями Java: You must be logged in to see this link.
Пример 2 - после установки плагина он не запускается из-за отсутствия зависимости
Код:
[14:35:57 ERROR]: [ModernPluginLoadingStrategy] Could not load 'plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar' in 'plugins/.paper-remapped'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.
at io.papermc.paper.plugin.entrypoint.strategy.modern.ModernPluginLoadingStrategy.loadProviders(ModernPluginLoadingStrategy.java:82) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:38) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at io.papermc.paper.plugin.entrypoint.LaunchEntryPointHandler.enter(LaunchEntryPointHandler.java:39) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:577) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:320) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1178) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:313) ~[purpur-1.21.4.jar:1.21.4-2416-51aafbc]
at java.base/java.lang.Thread.run(Thread.java:1447) ~[?:?]
Здесь нас интересует первые 2 строки:
Код:
Could not load 'plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar' in 'plugins/.paper-remapped'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.
plugins/.paper-remapped/ExecutableItems-7.25.5.12.jar
, а на следующей строке сама ошибка: Unknown/missing dependency plugins: [SCore]. Please download and install these plugins to run 'ExecutableItems'.
. Что это означает: для работы плагина необходим другой плагин, от которого он зависит (тут - SCore
), и он не может его найти из-за чего и отключается, выдавая ошибку.Пример 3 - после установки плагина он не запускается из-за того, что не поддерживает версию сервера
Код:
[14:51:45 ERROR]: Could not load 'plugins/NightJoiner-2.0.2.1.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.18
at org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers.checkSupported(CraftMagicNumbers.java:361) ~[patched_1.16.5.jar:git-Purpur-1171]
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:149) ~[patched_1.16.5.jar:git-Purpur-1171]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:414) ~[patched_1.16.5.jar:git-Purpur-1171]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:322) ~[patched_1.16.5.jar:git-Purpur-1171]
at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:393) ~[patched_1.16.5.jar:git-Purpur-1171]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:279) ~[patched_1.16.5.jar:git-Purpur-1171]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Purpur-1171]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171]
at java.lang.Thread.run(Thread.java:1447) [?:?]
Как и в примере выше, нас интересуют первые 2 строки:
Код:
[14:51:45 ERROR]: Could not load 'plugins/NightJoiner-2.0.2.1.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.18
Что прямо говорит о том, что плагин был написан под версию 1.18, а не 1.16.5, как установлена на сервере.