How to prepare craftbukkit to russian language compatibility (ru) - pages - cpfix - bukkit plugins

Коротка інструкція щодо вирішення проблеми з кодуваннями для сервера craftbukkit

Історія проблеми або навіщо це все потрібно

  1. Стандартний клієнт зі стандартною русифікацією і старою версією LWJGL (Windows) - якщо не докладати якихось зусиль, то він в принципі не зможе писати російською.
  2. Стандартний клієнт зі стандартною русифікацією і старою версією LWJGL (Linux) - наскільки знаю тут все добре, UTF-8 в чаті, на табличках і взагалі. Те що він пише бачать все.
  3. Стандартний клієнт c русифікатори методом font.txt і старою версією LWJGL (Windows) - клієнт пише в чат російською. Його не розуміють клієнти з п.1 та п.2, але розуміють всі клієнти з п.3
  4. Стандартний клієнт c оновленою версією LWJGL (Windows) - власне все нормально текст приймається в UTF-8, гравець бачить, що він пише і його текст зрозумілий усім.

Як з цим боротися

Природно самим координально і вірним рішенням було б усунення початкової проблеми - впровадженням виправленої версією LWJGL в клієнт Minecraft'а. Але поки це не зроблять розробники, це рішення буде неефективним. Доведеться контролювати гравців, змушувати їх або самостійно оновлювати злощасну LWJGL або ж посилено "впарювати" власний клієнт (з оновленою бібліотекою). У ряді випадків другий варіант може вирішити проблему, але з тих чи інших причин обмежувати гравців якимось спеціальним клієнтом не завжди представляється можливим (та й зручним). Тому, при поточній ситуації, сервер спрямований на повноцінну підтримку кирилиці в грі повинен вміти приводити до нормального вигляду текст в "кривої" кодуванні надходять від клієнта. Процедура "руссфікаціі" сервера в цьому випадку буде виглядати наступним чином.

Що потрібно для організації підтримки української мови

Власне, для організації підтримки української мови потрібно не так вже й багато:

  1. Переконатися, що при виклику Java для старту сервера, включена підтримка UTF-8 для файлів. Для цього при запуску повинен використовуватися ключ: -Dfile.encoding = UTF-8
  2. Необхідно впровадити "український" файл font.txt в craftbukkit.jar. Це необхідно для того, щоб українська мова почала підтримуватися в табличках (в чаті він і так сприймається нормально).
  3. Встановити плагін CPFix. який необхідний для того щоб приводити весь вступник в чат, таблички, книги текст в єдино-вірну кодування UTF-8. З цим плагіном навіть клієнти під Windows із застарілою LWJGL зможуть з горем навпіл писати російською мовою. Наприклад, слово "ïðèâåò", яке надійшло від такого клієнта, після перекодування перетвориться в "привіт".

А як же консоль?

З консоллю є кілька нюансів. Всі вони пов'язані з консоллю в Windows (в Linux наскільки я розумію з підтримкою кодування UTF-8 в консолі проблем ніяких немає). Тому все про що я буду говорити нижче відноситься до стандартної консолі Windows. Для того щоб консоль нормально відображала текст UTF-8 (тобто повідомлення гравців в чаті, текст виведений плагінами російською) необхідно включити в неї висновок в кодуванні UTF-8. Найпростіше це зробити викликавши команду chcp 65001. І вже після цієї команди запускати Java. Як приклад наводжу вміст cmd-файла, яким я запускаю свій "домашній тестовий" сервер:

Однак якщо вже дуже хочеться, то можна і змусити консоль "приймати" український текст. Для цього доведеться влаштувати невелику чехарду з кодуваннями. По-перше, треба буде відмовитися від кодування UTF8 в консолі. Тобто прибрати chcp 65001 з командного файлу, яким запускається сервер. Також необхідно буде відключити підтримку UTF-8 для файлів (тобто прибрати з рядка запуску Java ключ -Dfile.encoding = UTF-8). В результаті ми отримаємо ось такий файл:

Всі ці опції відключені за замовчуванням, але в файлі налаштувань присутні - потрібно включити і перезавантажити сервер. До речі, якщо ви використовуєте в консолі якусь іншу систему кодування, то можете підставити і її. Ну і до речі, кодування журнального файлу (server-log) може відрізнятися від кодування консолі: в консоль текст може виводитися в CP866, а в server.log при бажанні можна вести в UTF8.

Власне після цього можна буде вводити в консолі текст російською і сервером, а також плагінами він буде сприйматися адекватно. І команда / say Привіт! буде зрозуміла усіма :)

Що і де качати?