- Регистрация
- 16 Дек 2015
- Сообщения
- 1,737
- Лучшие ответы
- 0
- Репутация
- 499
Скачать с YD:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Описание:
История проблемы или зачем это всё нужно
Наверно каждый, кто включал русский язык в майнкрафте, обращал внимание на то, что при попытке набрать что-то в чат на сервер отправлялись какие-то кракозяблики их же можно было увидеть в книгах, а на табличках вместо русских букв появлялись непонятные знаки вопросов. Причина всего это проста. В стандартный клиент майнкрафта включена устаревшая версия библиотеки LWJGL, при вводе символов с клавиатуры, кодирует их не в кодировке UTF-8, а в какой-то безумной смеси: один байт от кодировки UTF-8, а второй - обычный символ в кодировке CP1251. В результате то тут, то там на серверах появляются таблички с "кривыми" символами, а все благодаря тому, что традиционная руссификация методом "подстановки" файла font.txt на самом деле не решает проблемы, а маскирует её: в клиентах, руссифицированных посредством font.txt (и соответствующего графического файла) на самом деле кодировка не исправлена, исправлено только её отображение, а на сервер символы попадают во все том же кривом отображении.
Таким образом, у потенциальных игроков на сервере может быть:
Стандартный клиент со стандартной руссификацией и старой версией LWJGL (Windows) — если не прилагать каких-то усилий, то он в принципе не сможет писать на русском.
Стандартный клиент со стандартной руссификацией и старой версией LWJGL (Linux) — насколько знаю тут всё хорошо, UTF-8 в чате, на табличках и вообще. То что он пишет видят все.
Стандартный клиент c руссификатором методом font.txt и старой версией LWJGL (Windows) — клиент пишет в чат на русском. Его не понимают клиенты из п.1 и п.2, но понимают все клиенты из п.3
Стандартный клиент c обновленной версией LWJGL (Windows) — собственно всё нормально текст принимается в UTF-8, игрок видит, что он пишет и его текст понятен всем.
Как с этим бороться
Естественно самым координальным и верным решением было бы устранение изначальной проблемы - внедрением исправленной версией LWJGL в клиент Minecraft'а. Но пока это не сделают разработчики, это решение будет неэффективным. Придется контроллировать игроков, заставлять их либо самостоятельно обновлять злосчастную LWJGL или же усиленно "впаривать" собственный клиент (с обновленной библиотекой). В ряде случаев второй вариант может решить проблему, но по тем или иным причинам ограничивать игроков каким-то специальным клиентом не всегда представляется возможным (да и удобным). Поэтому, при текущей ситуации, сервер направленный на полноценную поддержку кириллицы в игре должен уметь приводить к нормальному виду текст в "кривой" кодировке поступаемый от клиента. Процедура "руссфикации" сервера в этом случае будет выглядеть следующим образом.
Что нужно для организации поддержки русского языка
Собственно, для организации поддержки русского языка нужно не так уж и много:
Убедиться, что при вызове Java для старта сервера, включена поддержка UTF-8 для файлов. Для этого при запуске должен использоваться ключ: -Dfile.encoding=UTF-8
Необходимо внедрить "русский" файл font.txt в craftbukkit.jar (Ваше ядро сервера). Это необходимо для того, чтобы русский язык начал поддерживаться в табличках (в чате он и так воспринимается нормально).
Установить плагин CPFix, который необходим для того чтобы приводить весь поступающий в чат, таблички, книги текст в едино-верную кодировку UTF-8. С этим плагином даже клиенты под Windows с устаревшей LWJGL смогут с горем пополам писать на русском языке. К примеру, слово "ïðèâåò", поступившее от такого клиента, после перекодировки превратится в "привет".
А как же консоль?
С консолью есть несколько нюансов. Все они связаны с консолью в Windows (в Linux насколько я понимаю с поддержкой кодировки UTF-8 в консоли проблем никаких нет). Поэтому все о чем я буду говорить ниже относится к стандартной консоли Windows. Для того чтобы консоль нормально отображала текст UTF-8 (т.е. сообщения игроков в чате, текст выводимый плагинами на русском) необходимо включить в ней вывод в кодировке UTF-8. Проще всего это сделать вызвав команду chcp 65001. И уже после этой команды запускать Java. В качестве примера привожу содержимое cmd-файла, которым я запускаю свой "домашний тестовый" сервер:
PHP:
chcp 65001
"%ProgramFiles%\Java\jre7\bin\java.exe" -Xms1024M -Xmx1024M -Dfile.encoding=UTF-8 -jar craftbukkit.jar
pause
Однако если уж очень хочется, то можно и заставить консоль "принимать" русский текст. Для этого придется устроить небольшую чехарду с кодировками. Во-первых, надо будет отказаться от кодировки UTF8 в консоли. Т.е. убрать chcp 65001 из командного файла, которым запускается сервер. Также необходимо будет отключить поддержку UTF-8 для файлов (т.е. убрать из строки запуска Java ключ -Dfile.encoding=UTF-8). В результате мы получим вот такой файл:
PHP:
"%ProgramFiles%\Java\jre7\bin\java.exe" -Xms1024M -Xmx1024M -jar craftbukkit.jar
pause<</code>>
Теперь необходимо в настройках плагина CPFix (версии 0.2.0) настроить перекодирование текста из консоли:
PHP:
<<code yml>>output-recode:
console:
enable: true
code-page: CP866
server-log:
enable: true
code-page: CP866
input-recode:
enable: true
code-page: CP866
Собственно после этого можно будет вводить в консоли текст на русском и сервером, а также плагинами он будет восприниматься адекватно. И команда /say Привет! будет понята всеми
Команды:
PHP:
/cpfix — Показать текущую конфигурацию
/cpfix reload — Перезагрузить конфиг
Прав на плагин нету
Конфигурация файла:
PHP:
general:
# Проверять наличие новых версий на BukkitDev
check-updates: true
# Язык (По умолчанию русский)
language: russian
# Сохранить текущий язык в файле
language-save: false
code-page:
# Перекодировать сообщения в чате
chat-fix-enable: true
# Перекодировать команды
command-fix-enable: true
# Перекодировать таблички
sign-fix-enable: true
# Перекодировать книги
book-fix-enable: true
# Включить (true) кодирование предмета (отключено по умолчанию)
lore-fix-enable: false
# Информировать игрока, если он набирает неправильный символ в чате или на знаке (только один раз :))
inform-player: true
# Вызов консоли вывода и server.log
output-recode:
console:
enable: true
code-page: CP866
server-log:
enable: true
code-page: CP866
# Ввод перекодировки (только консоль)
input-recode:
enable: true
code-page: CP866