LibJF/libjf-config-ui-tiny/src/testmod/java/io/gitlab/jfronny/libjf/config/test/tiny/mixin/OptionsScreenMixin.java

39 lines
1.6 KiB
Java

package io.gitlab.jfronny.libjf.config.test.tiny.mixin;
import io.gitlab.jfronny.libjf.config.api.v2.ConfigHolder;
import io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.GridWidget;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.function.Supplier;
@Mixin(OptionsScreen.class)
public abstract class OptionsScreenMixin extends Screen {
@Shadow @Final private Screen parent;
@Shadow protected abstract ButtonWidget createButton(Text message, Supplier<Screen> screenSupplier);
protected OptionsScreenMixin(Text title) {
super(title);
}
@Inject(method = "init()V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/GridWidget;refreshPositions()V"), locals = LocalCapture.CAPTURE_FAILHARD)
void injectButton(CallbackInfo ci, GridWidget gridWidget, GridWidget.Adder adder) {
ConfigHolder.getInstance().getRegistered().forEach((key, config) -> {
adder.add(
createButton(Text.translatable(key + ".jfconfig.title"), () -> ConfigScreenFactory.getInstance()
.create(config, this)
.get())
);
});
}
}