чат лог майнкрафт где

Делаем лог-систему для Minecraft

Сегодня речь пойдет о мире, о который большинство из вас не знает, но при этом там крутятся многие отличные инженеры-разработчики и большие деньги. Да, как ни странно, речь пойдет о Minecraft.

Minecraft — игра-песочница и на мультиплеер-серверах остро стоит проблема гриферства (от англ. griefing — вредительство), когда игроки рушат чужие постройки. На серверах с этой проблемой справляются по-разному. На публичных используют плагин на ‘приват’, на остальных же все строится на доверии.

Еще один из способов предотвратить гриферство — бан всех гриферов. И для того чтобы вычислить их, приходиться логгировать установку и удаление блоков. Собственно, о процессе создания такой лог-системы и пойдет речь дальше.

Выбор базы данных

Итак, вот у нас массив данных и хорошо бы его куда-то сохранять. Умные люди давно придумали БД. Лично у меня требования к БД были такие:

Последний пункт появился из-за того, что не на всех хостингах есть возможность получить root-доступ или установить какой-либо пакет. К тому же, не хотелось усложнять процедуру установки, а остановиться на «Кинул и забыл».

Базы данных, которые удовлетворяли бы всем критериям я не нашел, поэтому решил сделать свою мини-БД на Java.

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Оптимизация места на жёстком диске

Основная проблема игры, как считают многие, — все её вычисления происходят в одном потоке. Это настоящая боль держателей серверов. Распараллелить изначально однопоточную архитектуру — надо постараться.

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Поэтому само логгирование пришлось вынести в отдельный поток. А чтобы система не захлебнулась от Event’ов в очереди, добавить поддержку воркеров. Количество воркеров настраеваемое.

В итоге получилось так, что само событие перехватывается в главном тике, потом отправляется в поток, который занят тем, что распределяет задачи между воркерами. Там мы получаем файл, в который надо занести наше событие и передаем уже воркеру, который прикреплен к этому файлу. И сама операция IO происходит в воркере.

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Оптимизация места на жёстком диске

Большое количество событий может привести к тому, что логи будут весить больше, чем сам мир. Этого нам допустить нельзя, поэтому будем думать.

Изначально строчка в логфайле выглядела так:

[2001-07-04T12:08:56.235-0700]Player PLACE to 128,128,128

При беглом взгляде можно заметить, что 2001-07-04T12:08:56.235-0700 можно сократить до Timestamp, а PLACE или REMOVE на символ ‘+’ и ‘-‘ соответственно. Ну и уберем нафиг ‘to’:

Не сложно заметить, что в логе будет часто повторятся nickname и blockid. Соответсвенно, их можно вынести в отдельный файл, а в лог писать только id

[123454678]1 + 1 128,128,128

В итоге я пришел к тому, что в строчке лога остались только числа и один символ. Мы сэкономим много места, если уберем разделители (пробелы) и числа будем записывать как байты, а не как символы. Сообственно, это привело меня к решению использовать байтовые логи.

Сама байтовая строка теперь выглядит так:

NameposXposYposZtypeactionplayeridblockidtimestamp
Field Length (bytes)4 byte4 byte4 byte1 byte (‘0’ for Remove, ‘1’ for Insert)4 byte8 byte8 byte

Итого мы имеем 35 байтов на строку фиксированно (1 байт для разделения строк).
Вначале был соблазн оставить 34 байта, но так как запись ведется в один файл, то в случае с фиксированной длинной, если побьется одна строка, весь файл станет нечитаемым.

Структура строки для blockname to id:

Nameidblockname
Field Length (bytes)8 byte1 byte per symbols

21 байтов на блок
Имя файла: blockmap.bytelog

Структура строки для nickname to id:

Nameidnickname
Field Length (bytes)4 byte1 byte per symbols

10 байтов на игрока
Имя файла: nickmap.bytelog

Оптимизация памяти

Чтобы быстро маппить blockname и nickname в id пришлось держать содержимое обоих файлов в памяти. Java не может в HashMap хранить примитивные типы, поэтому каждый Integer будет стоить нам

50 байт в памяти, что очень много.

Решить эту проблему нам поможет библиотека trove.

Но каждый символ у нас занимает примерно 2 байта. Мы можем снизить потребления памяти с помощью самописного файла ASCIString, в котором символы хранятся в byte[], а не в char[].

Тестирование

В тестировании байтовой сериализации и десериализации ничего необычного нет, а вот для тестирования компонентов, к которым требовался многопоточный доступ пришлось использовать фреймворк от гугла Thread Weaver. Обычный тест с использованием этого фреймворка выглядит так:

Фреймворк стучит из обоих потоков с разным порядком, что позволяет выловить самые противные баги в асинхронном коде.

Заключение

Пока по количеству скачиваний будет понятно стоит ли развивать дальше этот мод и идею. Из примерных планов на будущее:

Источник

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Данный плагин упростит уход за вашим сервером. С его помощью, вы сможете узнать, кто и когда поставил, разрушил тот или иной блок, откатить действия игроков и многое другое. Проще говоря, он позволит просматривать логи и возвращать состояние блоков, территории, или всего вашего сервера к нужному вам промежутку времени.

Он не требует настроек, сразу же после установки его можно использовать.

Нажатие ЛКМ по верхней части блока, выведет информацию в чат, о том, кем и когда был разрушен блок, который находился над данным. Установив любой блок, вы узнаете информацию о всех блоках, находившиеся ранее на этих координатах.

П ри нажатии ПКМ на любое устройство (кнопка, рычаг, дверь и т.п.) вы узнаете ник игрока, последний использовавший его. Повторный ввод команды /co inspect заканчивает работу с данным плагином. чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Команда для отката изменения блоков: /co rollback u: t: b: e: r:

— u: ник игрока, относительно действий которого, произойдет откат

— b: блок, при указании ID откат затронет только эти блоки

— e: исключение, при указании ID, блок останется нетронутым

— r: радиус, относительно вашего положения, в котором произойдет откат

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Другие команды плагина :

/co lookup u: t: b: e: r: — просмотр логов по параметрам

/co purge — очистить информацию о блоках за один или несколько месяцев.

Источник

Чат на серверах Майнкрафт

чат лог майнкрафт где. Смотреть фото чат лог майнкрафт где. Смотреть картинку чат лог майнкрафт где. Картинка про чат лог майнкрафт где. Фото чат лог майнкрафт где

Чат на серверах Майнкрафт используется по двум причинам:

Эта статья поможет разобраться, чем отличается команда от сообщения, как писать в чат и как выполнять команды через чат на Майнкрафт сервере.

Как открыть чат в Майнкрафт?

Чат и на сервере и в одиночной игре открывается при помощи клавиши T на клавиатуре, (в одиночной игре чат для общения использовать не придется, только для прописывания команд). И не имеет значения, дело происходит на стационарном компьютере или на ноутбуке.

Если игроку нужно ввести команду в чате, то можно сразу использовать клавишу / (слэш) на клавиатуре, тогда не придется перед командой вводить слеш.

Как отправить сообщение в чат?

Для отправки сообщения в чат на Майнкрафт сервере необходимо:

После отправки сообщения в чат его уже нельзя будет отредактировать или удалить, оно запишется у всех игроков в логах клиента, а также сохранится и в логах на сервере.

Как выполнить команду?

Аналогично сообщению, только перед командой ставится слеш (например: /home ).

Как отключить чат на сервере?

Иногда общение других игроков на сервере может мешать и отвлекать от игрового процесса, для этого на некоторых Майнкрафт серверах предусмотрена специальная команда (везде она разная) для отключения возможности видеть как все сообщения разом, так и сообщения отдельных игроков.

Бывают ли Майнкрафт сервера с голосовым чатом?

Сервера Майнкрафт с голосовым чатом встречаются, но не очень часто, так как технология общения в реальном времени через игровой клиент Майнкрафт требует как дополнительных серверных мощностей, так и наличия собственного игрового лаунчера.

Зачастую для общения голосом используются различные сервисы для голосового общения, такие как Discord или Teamspeak.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *