Непонятное поведение java.lang.String при входе в метод

Версия Minecraft
1.7.10
1,159
38
544
Добрый день, возникла очень странная проблема.

Я делаю реализацию "модификаторов". Это, грубо говоря, плюшки, которые различные шмодки дают игроку. Например, как в WoW: +1 к выносливости, +3 к интеллекту и т.д. Модификатор я храню в классе RollModifier, который представляет собой POJO-класс с двумя полями: int value (+1) и String description ("к выносливости").

Java:
package rsstats.utils;

import net.minecraft.util.StatCollector;
import rsstats.common.RSStats;

/**
 * Модификатора броска
 * @author RareScrap
 */
public class RollModifier {
    /** Значение модификатора */
    private int value;
    /** Описание модификатора */
    private String description;

    /**
     * Конструктор инициализирующий свои поля
     * @param value Значение модификатора
     * @param description Описание модификатора
     */
    public RollModifier(int value, String description) {
        this.value = value;
        this.description = description;
    }

    /**
     * Вывод модификатора в формате: (+4: За наличие интрументов)
     * @return Строкое представление модификатора
     */
    @Override
    public String toString() {
        String formatCode;
        if (value > 0) {
            formatCode = RSStats.config.modifierColorPositive;
        } else {
            formatCode = RSStats.config.modifierColorNegative;
        }

        String[] words = description.split(" "); // Получаем слова из описания

        // Присоединяем форматирование к каждому слову, если оно отсуствует
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < words.length; i++) {
            String word = words[i];
            if (word.isEmpty()) break;
            
            // TODO: Костыль. Стоит разобратся что за дичь творится с description, если убрать эту проверку
            if (word.charAt(0) != '§')
                stringBuilder.append("\u00A7" + formatCode) // Символ §
                        .append(word);

            // Предотвращаем наличие пробела в конце последнего слова
            if (i != words.length-1) {
                stringBuilder.append(" ");
            }

        }

        // Сохраняем форматированное описание
        description = stringBuilder.toString();

        // Форматируем выходную строку
        return StatCollector.translateToLocalFormatted("modifier.string", value > 0 ? "+"+value : String.valueOf(value), description, formatCode);

        /*formatCode + "(" +
                formatCode + (value > 0 ? "+"+value : value) +
                formatCode + ": " +
                description +
                formatCode + ")" +
                "§" + RSStats.config.textColorNormal;*/
    }

    /**
     * Геттер для {@link #value}
     * @return Значение модификатора
     */
    public int getValue() {
        return value;
    }

    /**
     * Геттер для {@link #description}
     * @return Описание модификатора
     */
    public String getDescription() {
        return description;
    }
}

В игре модификаторы хранятся в виде NBT тега, который можно приложить к любому итему. Он более известен как "tag" и включается в себя такие вещи, как "Lore" и "Display". При входе в игру я извлекаю модификаторы из tag'а и сохраняю их внутри IEEP:
Код:
    // Полный код не приводится в целях экономии места

    /**
     * Вытаскивает модификаторы из стака и добавляет их пользователю
     * @param itemStack предмет с модификаторами
     */
    public void extractModifiersFromItemStack(ItemStack itemStack) {
        if (itemStack != null && itemStack.getTagCompound() != null) { // извлекаем и сохраняем модификаторы
            NBTTagList modifiersList = itemStack.getTagCompound().getTagList("modifiers", Constants.NBT.TAG_COMPOUND);
            for (int i = 0; i < modifiersList.tagCount(); i++) {
                NBTTagCompound modifierTag = modifiersList.getCompoundTagAt(i);
                int value = modifierTag.getInteger("value");
                String description = modifierTag.getString("description");
                String to = modifierTag.getString("to");
                RollModifier modifier = new RollModifier(value, description);
                this.addModifier(to, modifier);
            }
        }
    }

Вся магия начинает во время вызова this.addModifier(to, modifier). Как вы можете видеть на скрине ниже, до захода отладчиков внутрь метода поле modifier.description заполненно корректно:
2018-02-16_21-22-42.png

Но как только я оказываюсь внутри addModifier(), все русские буквы куда-то деваются и остаются только пробелы
2018-02-16_21-23-05.png

Первый раз сталкиваюсь с таким необычным поведением обычного String'а. У кого-нибудь есть мысли как-так может получаться?
 
5,018
47
783
Да это не зло. Это грубая ошибка, мод просто так даже не скомпилируется с русскими символами. Там вроде чет вертеть надо, чтобы собралось
I18n используй для локализации. Только смотри не перепутай, клиентский надо
 
1,159
38
544
Сверху