- Версия(и) Minecraft
- 1.7.10+
Вступление
При разработке мода бывают ситуации, когда вам необходимо вывести текстовую информацию, при этом контролируя форматирование (вроде цвета, шрифта и т.д.). Например, при создании GUI для вашей кастомной книги или, допустим, при выводе сообщения в чат. Ниже представлены некоторые примеры работы со строками.
Пример 1. Создание радужного текста
Этот метод я использую, чтобы создать радужный текст. Надеюсь, название говорит само за себя. Здесь нет ничего сложного: я просто узнаю длину строки, а затем в цикле чередую цвета радуги.
Пример 2. Динамическое форматирование (эффект золотого сияния)
Имеет место быть и форматирование с течением времени для создания эффекта анимации. В данном примере золотой цвет иногда будет перемещаться по тексту.
Создание гиперссылок
Вы можете использовать
Использование кастомных Unicode-шрифтов
Чтобы использовать собственный шрифт, вам нужно расширить
Фактический шрифт должен быть добавлен в формате .PNG;
Вы должны объявить его с модификатором
То есть, чтобы использовать ваш шрифт, вы просто используете ваш сохраненный экземпляр
Для примера можете посмотреть, как используется шрифт Aklo в исходниках AbyssalCraft
При разработке мода бывают ситуации, когда вам необходимо вывести текстовую информацию, при этом контролируя форматирование (вроде цвета, шрифта и т.д.). Например, при создании 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