39 lines
1.6 KiB
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())
|
|
);
|
|
});
|
|
}
|
|
}
|