Всем привет, думаю большинство из вас запускает сервера в так называемом online-mode: false.
В общем то в оффлайн моде я не вижу ничего плохого если сервер использует плагины без раток и пр, но вот разработчики ( в основном англоговорящие ) плагинов очень трясутся за то чтоб на сервере обязательно был включен online-mode: true.
И создавая запрос на оказание помощи ( как я сегодня ) вы можете столкнуться с тем что вам не только не помогут но и замутят на сервере пока не будет online-mode: true.
Расскажу на примере дискорда разраба citizens. Вот вы поставлили этот плагин, настроили, но иногда он выдает ошибки в лог сервера ( споилер ниже ) и вы не понимаете что с этим делать.
Из ошибки видно что плагин citizens не может обрабоать какое то событие потому что имя не может быть пустым ( надеюсь верно описал основное из ошибки ).
Плагин что вызывает ошибку понятен, цель куда писать ясна. Вот вы заходите в дс разработчика, находите форум с нажным плагином, описываете свою проблему, прикладываете лог и ждете.
По прошествии минуты приходит модератор и указывает вам что нужен полный лог сервера. Ладно, не проблема ( подумал я ) просто вырежу несколько строчек где сервер пишет что он работает в оффлайн режиме. Прикладываю отредаченнй лог, на что получаю мут и перекидывание в канал с требованием "Мы против пиратства, потому что TOS дискорда, включите онлайн мод или поддержка оказавыться не будет" и много другой белеберды.
Оказывается разраб плагина зашел дальше чем просто искать в логе "offline mode". Они сделали проверку UUID и от нее узнали что сервер работает в оффлайне.
Итог: Как исправить ошибку мы не узнали, получили мут и требование перейти на онлайн мод. Дальше я расскажу как с этим бороться и какие шаги проделать чтоб и поддержку получить и выйти сухим и воды.
Оптимальный путь содать видимость что вы белый и пушистый, но для него нужен пк который сможет одновременно запустить и игровой сервер и клинет майна. Обязательно нужен лицензионный аккаунт майна.
Наши действия перед тем как создать тикет в поддержку с проблемой: выкачиваем свой сервер себе на пк как он есть ( можно без карты ). Удаляем плагины на скины ( SkinRestorer, HeadDatabase и тому подобные ), переключем сервер в онлайн мод ( обязательно ), запускаем сервер, вызываем интересующую нас ошибку, и только после этого идем в дс к разрабу.
Такой метод гемомрнее, он позволит получить поддержку от разраба плагина, а это быстрее и лучше, тк разраб знает свой продукт.
В общем то в оффлайн моде я не вижу ничего плохого если сервер использует плагины без раток и пр, но вот разработчики ( в основном англоговорящие ) плагинов очень трясутся за то чтоб на сервере обязательно был включен online-mode: true.
И создавая запрос на оказание помощи ( как я сегодня ) вы можете столкнуться с тем что вам не только не помогут но и замутят на сервере пока не будет online-mode: true.
Расскажу на примере дискорда разраба citizens. Вот вы поставлили этот плагин, настроили, но иногда он выдает ошибки в лог сервера ( споилер ниже ) и вы не понимаете что с этим делать.
[07:32:47] [Server thread/ERROR]: Could not pass event NPCRightClickEvent to Citizens v2.0.30-SNAPSHOT (build 2875)
java.lang.NullPointerException: name cannot be null
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:907) ~[guava-31.1-jre.jar:?]
at net.citizensnpcs.npc.ai.speech.CitizensSpeechFactory.getVocalChord(CitizensSpeechFactory.java:38) ~[Citizens-2.jar:?]
at net.citizensnpcs.api.ai.speech.SimpleSpeechController.speak(SimpleSpeechController.java:33) ~[Citizens-2.jar:?]
at net.citizensnpcs.api.ai.speech.SimpleSpeechController.speak(SimpleSpeechController.java:23) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.sendText(Text.java:229) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.talk(Text.java:279) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.onRightClick(Text.java:158) ~[Citizens-2.jar:?]
at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1907]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:680) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at net.citizensnpcs.EventListen.onPlayerInteractEntity(EventListen.java:421) ~[Citizens-2.jar:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor417.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1907]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:680) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl$6.performInteraction(ServerGamePacketListenerImpl.java:2864) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl$6.a(ServerGamePacketListenerImpl.java:2914) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket$InteractionAction.dispatch(ServerboundInteractPacket.java:131) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.dispatch(ServerboundInteractPacket.java:80) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleInteract(ServerGamePacketListenerImpl.java:2853) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:67) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:12) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1368) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1345) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1338) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1316) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1204) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[purpur-1.19.3.jar:git-Purpur-1907]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
java.lang.NullPointerException: name cannot be null
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:907) ~[guava-31.1-jre.jar:?]
at net.citizensnpcs.npc.ai.speech.CitizensSpeechFactory.getVocalChord(CitizensSpeechFactory.java:38) ~[Citizens-2.jar:?]
at net.citizensnpcs.api.ai.speech.SimpleSpeechController.speak(SimpleSpeechController.java:33) ~[Citizens-2.jar:?]
at net.citizensnpcs.api.ai.speech.SimpleSpeechController.speak(SimpleSpeechController.java:23) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.sendText(Text.java:229) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.talk(Text.java:279) ~[Citizens-2.jar:?]
at net.citizensnpcs.trait.text.Text.onRightClick(Text.java:158) ~[Citizens-2.jar:?]
at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1907]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:680) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at net.citizensnpcs.EventListen.onPlayerInteractEntity(EventListen.java:421) ~[Citizens-2.jar:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor417.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1907]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:680) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl$6.performInteraction(ServerGamePacketListenerImpl.java:2864) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl$6.a(ServerGamePacketListenerImpl.java:2914) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket$InteractionAction.dispatch(ServerboundInteractPacket.java:131) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.dispatch(ServerboundInteractPacket.java:80) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleInteract(ServerGamePacketListenerImpl.java:2853) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:67) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundInteractPacket.handle(ServerboundInteractPacket.java:12) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1368) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1345) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1338) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1316) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1204) ~[purpur-1.19.3.jar:git-Purpur-1907]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[purpur-1.19.3.jar:git-Purpur-1907]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Плагин что вызывает ошибку понятен, цель куда писать ясна. Вот вы заходите в дс разработчика, находите форум с нажным плагином, описываете свою проблему, прикладываете лог и ждете.
По прошествии минуты приходит модератор и указывает вам что нужен полный лог сервера. Ладно, не проблема ( подумал я ) просто вырежу несколько строчек где сервер пишет что он работает в оффлайн режиме. Прикладываю отредаченнй лог, на что получаю мут и перекидывание в канал с требованием "Мы против пиратства, потому что TOS дискорда, включите онлайн мод или поддержка оказавыться не будет" и много другой белеберды.
Оказывается разраб плагина зашел дальше чем просто искать в логе "offline mode". Они сделали проверку UUID и от нее узнали что сервер работает в оффлайне.
Итог: Как исправить ошибку мы не узнали, получили мут и требование перейти на онлайн мод. Дальше я расскажу как с этим бороться и какие шаги проделать чтоб и поддержку получить и выйти сухим и воды.
Оптимальный путь содать видимость что вы белый и пушистый, но для него нужен пк который сможет одновременно запустить и игровой сервер и клинет майна. Обязательно нужен лицензионный аккаунт майна.
Я НЕ ПРОВЕРЯЛ ЭТОТ СПОСОБ, ДЕЙСТВУЙТЕ ТУТ НА СВОЙ СТРАХ И РИСК
В общем, можно попробовать использовать чей то никнейм от существующего акканута с лицензией ( только не популярный, те не брать там лололошку, пятерку, итд. И это все равно не основной аккаунт ваш, это только для теста и чтоб лог отправить )
Например, у меня игровой ник от лицензии _hapug, а на этом сайте ( https://minecraftuuid.com/?search= ) можно посмотреть какой реальный лицензионный UUID, у меня это 07ed2d73-ef57-4969-88c3-ad1b52da862e.
Дальше действем как написано ниже за исключением нескольких моментов, тк мы в данном случае будем запускать сервер в оффлайне то над удалить строчки где написано что сервер работает в оффлайне, и заменить все пиратские UUID на тот что мы взяли с сайта выше. Нужно делать все внимательно, и ничего не пропустить, иначе вас тоже замутят как и меня.
В общем, можно попробовать использовать чей то никнейм от существующего акканута с лицензией ( только не популярный, те не брать там лололошку, пятерку, итд. И это все равно не основной аккаунт ваш, это только для теста и чтоб лог отправить )
Например, у меня игровой ник от лицензии _hapug, а на этом сайте ( https://minecraftuuid.com/?search= ) можно посмотреть какой реальный лицензионный UUID, у меня это 07ed2d73-ef57-4969-88c3-ad1b52da862e.
Дальше действем как написано ниже за исключением нескольких моментов, тк мы в данном случае будем запускать сервер в оффлайне то над удалить строчки где написано что сервер работает в оффлайне, и заменить все пиратские UUID на тот что мы взяли с сайта выше. Нужно делать все внимательно, и ничего не пропустить, иначе вас тоже замутят как и меня.
Наши действия перед тем как создать тикет в поддержку с проблемой: выкачиваем свой сервер себе на пк как он есть ( можно без карты ). Удаляем плагины на скины ( SkinRestorer, HeadDatabase и тому подобные ), переключем сервер в онлайн мод ( обязательно ), запускаем сервер, вызываем интересующую нас ошибку, и только после этого идем в дс к разрабу.
Такой метод гемомрнее, он позволит получить поддержку от разраба плагина, а это быстрее и лучше, тк разраб знает свой продукт.
Последнее редактирование: