Иконка ресурса

Перевод Форматирование текста

Версия(и) Minecraft
1.7.10+
Источник
http://jabelarminecraft.blogspot.com/p/minecraft-modding-text-formatting.html
Вступление
При разработке мода бывают ситуации, когда вам необходимо вывести текстовую информацию, при этом контролируя форматирование (вроде цвета, шрифта и т.д.). Например, при создании GUI для вашей кастомной книги или, допустим, при выводе сообщения в чат. Ниже представлены некоторые примеры работы со строками.

Пример 1. Создание радужного текста
Этот метод я использую, чтобы создать радужный текст. Надеюсь, название говорит само за себя. Здесь нет ничего сложного: я просто узнаю длину строки, а затем в цикле чередую цвета радуги.

Java:
public static String stringToRainbow(String parString, boolean parReturnToBlack) {
   int stringLength = parString.length();
   if (stringLength < 1)
      return "";
   String outputString = "";
   TextFormatting[] colorChar =
      {
         TextFormatting.RED,
         TextFormatting.GOLD,
         TextFormatting.YELLOW,
         TextFormatting.GREEN,
         TextFormatting.AQUA,
         TextFormatting.BLUE,
         TextFormatting.LIGHT_PURPLE,
         TextFormatting.DARK_PURPLE
      };
   for (int i = 0; i < stringLength; i++) {
      outputString = outputString + colorChar[i%8] + parString.substring(i, i+1);
   }
   // возвращает обычный цвет текста (в большинстве случаев - белый, но в GUI зачастую используется черный).
   if (parReturnToBlack)
      return outputString + TextFormatting.BLACK;
   return outputString + TextFormatting.WHITE;
}
Пример 2. Динамическое форматирование (эффект золотого сияния)
Имеет место быть и форматирование с течением времени для создания эффекта анимации. В данном примере золотой цвет иногда будет перемещаться по тексту.
Java:
public static String stringToGolden(String parString, int parShineLocation, boolean parReturnToBlack) {
   int stringLength = parString.length();
   if (stringLength < 1)
      return "";
   String outputString = "";
   for (int i = 0; i < stringLength; i++) {
      if ((i + parShineLocation + Minecraft.getSystemTime() / 20) % 88 == 0)
         outputString = outputString + TextFormatting.WHITE + parString.substring(i, i + 1);   
      else if ((i + parShineLocation + Minecraft.getSystemTime() / 20) % 88 == 1)
          outputString = outputString + TextFormatting.YELLOW + parString.substring(i, i + 1);   
      else if ((i + parShineLocation+Minecraft.getSystemTime() / 20) % 88 == 87)
         outputString = outputString + TextFormatting.YELLOW + parString.substring(i, i + 1);   
      else
         outputString = outputString + TextFormatting.GOLD + parString.substring(i, i + 1);       
   }
   // возвращает обычный цвет текста.
   if (parReturnToBlack)
      return outputString + TextFormatting.BLACK;
   return outputString + TextFormatting.WHITE;
}
Создание гиперссылок
Вы можете использовать ITextComponent.getStyle().setClickEvent для текстового компонента, чтобы сделать его кликабельным с любым нужным вам действием. Также вы можете использовать ForgeHooks.newChatWithLinks, который будет парсить строку на наличие ссылок и делать их кликабельными.

Использование кастомных Unicode-шрифтов
Чтобы использовать собственный шрифт, вам нужно расширить FontRenderer и переопределить метод FontRenderer.renderUnicodeChar()
Фактический шрифт должен быть добавлен в формате .PNG; ResourceLocation указанного файла используется при создании вашего FontRenderer.
Вы должны объявить его с модификатором final внутри вашего прокси и, когда нужно, вызывать его оттуда.
То есть, чтобы использовать ваш шрифт, вы просто используете ваш сохраненный экземпляр FontRenderer вместо обычного вызова Minecraft.fontRenderer и рендерите текст с помощью метода fontRenderer.drawString() или любого другого.

Для примера можете посмотреть, как используется шрифт Aklo в исходниках AbyssalCraft
Автор
link
Первый выпуск
Обновление
Оценка
4.33 звёзд 3 оценок

Другие ресурсы пользователя link

  • Работа с Git
    Работа с Git
    Разбираем основы работы с Git, интеграцию с GitHub и BitBucket.

Последние рецензии

Хорошо, добавить скринов и гуд
Отличный материал. Только скринов не хватает
Инфа полезная. Вот только сделай это с помощью StringBuffer, ибо генерирует тонны ненужных объектов строк каждый кадр.
link
link
Код не мой, я всего лишь перевел :) Может быть, когда-нибудь запилю что-нибудь свое, за отзыв спасибо!
Сверху