Skip to content

Конфигурация ModMenu и YACL

Обзор

Stack Size Adjuster предоставляет опциональный графический интерфейс настроек через ModMenu и YetAnotherConfigLib (YACL v3) с использованием рефлексии (GuiHelper.getOptionalYaclFactory), что предотвращает сбои загрузчика классов на выделенных серверах без YACL.


⚙️ Спецификация файла конфигурации

  • Путь: config/stack-size-adjuster.json
  • Формат: JSON с отслеживанием версии схемы.

Схема JSON и значения по умолчанию:

json
{
  "configVersion": 1,
  "items64Limit": 128,
  "items16Limit": 32,
  "items1Limit": 1,
  "maxDropEntities": 8
}

🖥️ Архитектура экрана YACL 3.9.5

Экран настроек клиента создается через рефлексию в YaclScreenHelper:

java
public class YaclScreenHelper {
    public static ConfigScreenFactory<?> createScreen() {
        return YaclScreenHelper::buildScreen;
    }

    private static Screen buildScreen(Screen parent) {
        StackSizeConfig config = StackSizeConfig.get();

        return YetAnotherConfigLib.createBuilder()
            .title(Component.translatable("config.stacksizeadjuster.title"))
            .category(ConfigCategory.createBuilder()
                .name(Component.translatable("config.stacksizeadjuster.category.general"))
                .group(OptionGroup.createBuilder()
                    .name(Component.translatable("config.stacksizeadjuster.group.categories"))
                    .option(Option.<Integer>createBuilder()
                        .name(Component.translatable("config.stacksizeadjuster.option.limit_64"))
                        .description(val -> {
                            if (val > 39768215) {
                                return OptionDescription.of(Component.translatable("config.stacksizeadjuster.option.warning", val));
                            }
                            return OptionDescription.of(Component.translatable("config.stacksizeadjuster.option.limit_64.description"));
                        })
                        .binding(128, () -> config.items64Limit, val -> config.items64Limit = val)
                        .controller(opt -> IntegerFieldControllerBuilder.create(opt).min(1).max(Integer.MAX_VALUE))
                        .build()
                    )
                    ...
                )
                .group(OptionGroup.createBuilder()
                    .name(Component.translatable("config.stacksizeadjuster.group.container_drops"))
                    .option(Option.<Integer>createBuilder()
                        .name(Component.translatable("config.stacksizeadjuster.option.max_drop_entities"))
                        .binding(8, () -> config.maxDropEntities, val -> config.maxDropEntities = val)
                        .customController(opt -> new IntegerSliderController(opt, 1, 64, 1))
                        .build()
                    )
                )
                .build()
            )
            .save(StackSizeConfig::save)
            .build()
            .generateScreen(parent);
    }
}

Предупреждение безопасности

При вводе числа более $39,768,215$ YACL отображает всплывающее предупреждение о риске целочисленного переполнения в больших сундуках.

Official documentation & web portal for Dasik Igaijinn mods.