MCFA
Небольшой вспомогательный мод, который предоставляет другим модификациям доступ к мощному инструменту - API работы с байт-кодом Java 24. Эта библиотека позволяет другим модам напрямую вносить изменения в программный код Java-классов в процессе их загрузки.
Как это работает?
Основной функционал MCFA заключается в предоставлении удобного механизма для работы с низкоуровневым байт-кодом. Разработчики других модов могут зарегистрировать свои преобразователи, которые автоматически применяются к указанным классам при их загрузке в игру.
Вот практический пример реализации:
public class Example implements McfaInitializer {
@Override
public void initializeTransformers(@NotNull Mcfa registry) {
registry.registerTransformer(
"net.minecraft.class_310",
ClassTransform.transformingMethods(
MethodTransform.transformingCode(
(builder, element) -> {
var result = switch(element) {
case ConstantInstruction instruction -> switch(instruction.typeKind()) {
case REFERENCE -> {
var value = instruction.constantValue();
// Пример замены текстовой константы
if(value.equals("Setting user: {}")) {
builder.ldc("Этот текст был изменён через API работы с байт-кодом :-) {}");
yield true;
}
yield false;
}
default -> false;
};
default -> false;
};
if(result) {
return;
}
builder.with(element);
}
)
)
);
}
}
Этот пример демонстрирует, как можно заменить текстовую константу в байт-коде, изменяя реальное отображение текста в игре на пользовательский вариант.