Improved button injection

This commit is contained in:
Martin Prokoph
2024-08-28 12:28:51 +02:00
parent 8039bf3fec
commit 545a845add
4 changed files with 32 additions and 25 deletions

View File

@@ -15,14 +15,15 @@ import java.util.List;
public class MidnightLib {
public static List<String> hiddenMods = new ArrayList<>();
public static final Logger LOGGER = LoggerFactory.getLogger("midnightlib");
public static final String MOD_ID = "midnightlib";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
@Environment(EnvType.CLIENT)
public static void onInitializeClient() {
System.setProperty("java.awt.headless", "false");
try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) { LOGGER.error("Error setting system look and feel", e); }
MidnightLibConfig.init("midnightlib", MidnightLibConfig.class);
MidnightLibConfig.init(MOD_ID, MidnightLibConfig.class);
}
@Environment(EnvType.SERVER)
public static void onInitializeServer() {

View File

@@ -6,10 +6,15 @@ import eu.midnightdust.lib.util.PlatformFunctions;
import java.util.Objects;
public class MidnightLibConfig extends MidnightConfig {
@Entry
public static ConfigButton config_screen_list = (PlatformFunctions.isModLoaded("modmenu") || Objects.equals(PlatformFunctions.getPlatformName(), "neoforge")) ? ConfigButton.MODMENU : ConfigButton.TRUE;
public static final boolean HAS_MODMENU = PlatformFunctions.isModLoaded("modmenu") || Objects.equals(PlatformFunctions.getPlatformName(), "neoforge");
@Entry public static ConfigButton config_screen_list = HAS_MODMENU ? ConfigButton.MODMENU : ConfigButton.TRUE;
public enum ConfigButton {
TRUE, FALSE, MODMENU
}
public static boolean shouldShowButton() {
return config_screen_list.equals(ConfigButton.TRUE) || (config_screen_list.equals(ConfigButton.MODMENU) && !HAS_MODMENU);
}
}

View File

@@ -1,9 +1,6 @@
package eu.midnightdust.core.mixin;
import eu.midnightdust.core.config.MidnightLibConfig;
import eu.midnightdust.core.screen.MidnightConfigOverviewScreen;
import eu.midnightdust.lib.util.PlatformFunctions;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.OptionsScreen;
import net.minecraft.client.gui.widget.TextIconButtonWidget;
@@ -20,30 +17,33 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Objects;
@Mixin(OptionsScreen.class)
public class MixinOptionsScreen extends Screen {
@Shadow @Final private ThreePartsLayoutWidget layout;
@Unique TextIconButtonWidget button = TextIconButtonWidget.builder(Text.translatable("midnightlib.overview.title"), (
buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(this)), true)
.texture(Identifier.of("midnightlib","icon/midnightlib"), 16, 16).dimension(20, 20).build();
@Unique boolean shouldShowButton = MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) || (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && !PlatformFunctions.isModLoaded("modmenu") && PlatformFunctions.getPlatformName() != "neoforge");
import static eu.midnightdust.core.MidnightLib.MOD_ID;
import static eu.midnightdust.core.config.MidnightLibConfig.shouldShowButton;
@Mixin(OptionsScreen.class)
public abstract class MixinOptionsScreen extends Screen {
@Shadow @Final private ThreePartsLayoutWidget layout;
@Unique TextIconButtonWidget midnightlib$button = TextIconButtonWidget.builder(Text.translatable("midnightlib.overview.title"), (
buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(this)), true)
.texture(Identifier.of(MOD_ID,"icon/"+MOD_ID), 16, 16).dimension(20, 20).build();
private MixinOptionsScreen(Text title) {super(title);}
protected MixinOptionsScreen(Text title) {super(title);}
@Inject(at = @At("HEAD"), method = "init")
public void midnightlib$onInit(CallbackInfo ci) {
if (shouldShowButton) {
this.midnightlib$setupButton();
this.addDrawableChild(button);
if (shouldShowButton()) {
this.midnightlib$setButtonPos();
this.addDrawableChild(midnightlib$button);
}
}
@Override
public void resize(MinecraftClient client, int width, int height) {
super.resize(client, width, height);
if (shouldShowButton) this.midnightlib$setupButton();
@Inject(at = @At("TAIL"), method = "initTabNavigation")
public void midnightlib$onResize(CallbackInfo ci) {
if (shouldShowButton()) this.midnightlib$setButtonPos();
}
@Unique
public void midnightlib$setupButton() {
button.setPosition(layout.getWidth() / 2 + 158, layout.getY() + layout.getFooterHeight() - 4);
public void midnightlib$setButtonPos() {
midnightlib$button.setPosition(layout.getWidth() / 2 + 158, layout.getY() + layout.getFooterHeight() - 4);
}
}

View File

@@ -15,6 +15,7 @@ import java.util.Objects;
public class AutoCommand {
public static List<LiteralArgumentBuilder<ServerCommandSource>> commands = new ArrayList<>();
final static String BASE = "midnightconfig";
final static String VALUE = "value";
final Field field;
final Class<?> type;
@@ -27,7 +28,7 @@ public class AutoCommand {
this.type = field.getType();
this.isList = field.getType() == List.class;
LiteralArgumentBuilder<ServerCommandSource> command = CommandManager.literal("midnightconfig").requires(source -> source.hasPermissionLevel(2)).then(
LiteralArgumentBuilder<ServerCommandSource> command = CommandManager.literal(BASE).requires(source -> source.hasPermissionLevel(2)).then(
CommandManager.literal(modid).then(CommandManager.literal(field.getName()).executes(this::getValue)));
if (type.isEnum()) {