Вопрос Перебор инвентарей игроков

Версия Minecraft
1.20.X

Wayfarer

Пользователь
Сообщения
262
Решения
2
В общем представим чисто гипотетическую ситуацию, которая ни в коем случае нигде не случилась. На сервере произошла утечка супер меча древнего короля глубин. И из-за этого у каждого активного игрока (их около 200 из 5т+ оффлайн игроков) имеется этот меч в инвентаре или в сундуке с миром 10_000 на 10_000.
1) Какими способами можно прочитать инвентарь оффлайн игрока?
2) Как лучше всего перебрать все чанки в мире на сундуки и ресурсы в нём?
Вайп не выход
 
в мир/playerdata/ инвентари имееются. там ечест и инвентарь лежит. прогруженные чанки, смотря в каких объёмах, чекни структуру .mca файла (это в region в папке мира) и посмотри что содержит, через либки/скрипт на питоне каком нибудь напиши чтобы перебирал и показывал в каком чанке что лежит. в 1 mca там 1024 чанка, в чанках уже показывает сундуки, а там уже содержимое сундука
 
Единственное, что приходит на ум - самопис, работающий напрямую с данными из world. Естественно при выключенном сервере, никак не плагином.
Для начала надо идентифицировать нужный тебе предмет, а после перебрать чанки и инвентари игроков, чтобы его оттуда удалить.
Принцип чтения данных из файлов можешь посмотреть напрямую в коде ядра. Также и в условном консольном приложении сделаешь, к примеру.

Если хочешь ускорить задачу - собираешь N данных (игроков или чанков) и делишь на асинхронные потоки. По 500 файлов на 1 поток, например
 
Последнее редактирование:
Единственное, что приходит на ум - самопис, работающий напрямую с данными из world. Естественно при выключенном сервере.
Для начала надо идентифицировать нужный тебе предмет, а после перебрать чанки и инвентари игроков, чтобы его оттуда удалить.
Принцип чтения данных из файлов можешь посмотреть напрямую в коде ядра. Также и в условном консольном приложении сделаешь, к примеру.

Если хочешь ускорить задачу - собираешь N данных (игроков или чанков) и делишь на асинхронные потоки. По 500 файлов на 1 поток, например
В API готовых решений нет (напр. инвентарь оффлайн игрока)?
 
В API готовых решений нет (напр. инвентарь оффлайн игрока)?
Можешь воспользоваться апи моего старого плагина - OfflineManager для инвентарей, если поддержка твоей версии есть. Но опять же, это ресурсозатратная операция будет.
 
Можешь воспользоваться апи моего старого плагина - OfflineManager для инвентарей, если поддержка твоей версии есть. Но опять же, это ресурсозатратная операция будет.
Просто так можно не выключая сервер сделать все операции, не сразу конечно...
 
Просто так можно не выключая сервер сделать все операции, не сразу конечно...
Ну инвентари ещё ладно, но вот чанки все перебрать и найти предмет X - задача уже посложнее и проще реализовать её консольным приложением, которое будет файлы напрямую перебирать и вносить изменения в них
 
Ну инвентари ещё ладно, но вот чанки все перебрать и найти предмет X - задача уже посложнее и проще реализовать её консольным приложением, которое будет файлы напрямую перебирать и вносить изменения в них
Ну вот да, я за чанки больше боюсь, что сервер будет несколько дней в простое, хотя 2б2т обновился за пару недель, но там и размеры огромные
 
В общем представим чисто гипотетическую ситуацию, которая ни в коем случае нигде не случилась. На сервере произошла утечка супер меча древнего короля глубин. И из-за этого у каждого активного игрока (их около 200 из 5т+ оффлайн игроков) имеется этот меч в инвентаре или в сундуке с миром 10_000 на 10_000.
1) Какими способами можно прочитать инвентарь оффлайн игрока?
2) Как лучше всего перебрать все чанки в мире на сундуки и ресурсы в нём?
Вайп не выход
Ну вот да, я за чанки больше боюсь, что сервер будет несколько дней в простое, хотя 2б2т обновился за пару недель, но там и размеры огромные

Не генерация мира же и размер мира не 1тб
А просто чтение и перебор тилей
Я так же склоняюсь к тому, что консольная аппка лучше будет

Узкое место будет - конкретно IO операции
Так что даже на петухончике аппка сделает это за адекватное время, и это не дни, а в худшем случае часы
Если написать на go-шке, и эффективно управлять памятью и IO операциями думаю, карту в 1тб оно просканирует (и внесет правки) меньше чем за минуту
 
Из инвентарей удалить не трудно, особенно если вся playerdata синхронизирована в бд. А вот с миром - ситуация неоднозначная. Будь это какой-то скайблок аля Hypixel со слайм миром, там тоже можно было через бд сделать и это было бы прям очень шустро. А тут обычный формат кубов, где самый нормальный способ через стороннее приложение проверять все регионы.

Либо добавить предмет в чёрный список и проверять когда его забирают из сундука, затем автоматически удалять. Но этот способ медленный и не автоматически, но раньше именно его и использовали сервера.
 
Назад
Сверху Снизу