mirror of
https://github.com/TeamMidnightDust/MidnightLib.git
synced 2025-12-15 17:05:09 +01:00
Improved button injection
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user