Скачать MCFA — Minecraft Моды — MetaMods

Установок

0

Последнее обновление

6 месяцев назад
Клиент
Библиотеки

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);
                    }
                )
            )
        );
    }
}

Этот пример демонстрирует, как можно заменить текстовую константу в байт-коде, изменяя реальное отображение текста в игре на пользовательский вариант.

Участники проекта
gudenau

gudenau

Создан: 30 мар 2025

ID: 97426