diff options
5 files changed, 66 insertions, 11 deletions
diff --git a/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java b/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java index 020413e..b644595 100644 --- a/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java +++ b/src/main/java/com/dulkirfabric/mixin/render/GameMenuScreenMixin.java @@ -45,7 +45,7 @@ public abstract class GameMenuScreenMixin extends ScreenMixin { */ @Inject(method = "initWidgets", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screen/GameMenuScreen;OPTIONS_TEXT:Lnet/minecraft/text/Text;"), locals = LocalCapture.CAPTURE_FAILEXCEPTION) private void initWidget(CallbackInfo ci, GridWidget gridWidget, GridWidget.Adder adder) { - adder.add(this.createButton(buttonText, DulkirConfig.INSTANCE::getScreen)); + adder.add(this.createButton(buttonText, new DulkirConfig()::getScreen)); } @Inject(method = "initWidgets", at = @At(value = "HEAD")) diff --git a/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt index c81cb63..0a66f69 100644 --- a/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt +++ b/src/main/kotlin/com/dulkirfabric/DulkirModFabric.kt @@ -17,7 +17,9 @@ import com.dulkirfabric.events.WidgetInitEvent import meteordevelopment.orbit.EventBus import meteordevelopment.orbit.EventHandler import net.fabricmc.api.ModInitializer +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents import net.minecraft.client.MinecraftClient +import net.minecraft.client.gui.screen.Screen import org.slf4j.LoggerFactory import java.lang.invoke.MethodHandles @@ -28,8 +30,8 @@ object DulkirModFabric : ModInitializer { val EVENT_BUS = EventBus() @JvmField val mc: MinecraftClient = MinecraftClient.getInstance() - var widgetLoadTime = 0L + var delayedScreen: Screen? = null override fun onInitialize() { logger.info("Initializing DulkirMod...") @@ -38,7 +40,16 @@ object DulkirModFabric : ModInitializer { lookupInMethod.invoke(null, klass, MethodHandles.lookup()) as MethodHandles.Lookup } - EVENT_BUS.subscribe(this) + // Register a tick event listener to delay the screen opening + ClientTickEvents.END_CLIENT_TICK.register(ClientTickEvents.EndTick { client: MinecraftClient? -> + if (delayedScreen != null) { + MinecraftClient.getInstance().setScreen(delayedScreen) + delayedScreen = null + } + }) + + Registrations.registerEventListeners() + Registrations.registerCommands() } @EventHandler @@ -52,4 +63,9 @@ object DulkirModFabric : ModInitializer { val time = System.nanoTime() - widgetLoadTime if (event.initialized) println("widgets initialized!!!!!, took: $time ns") } + + // Call this method when you want to open the new screen + fun openScreenDelayed(screen: Screen) { + delayedScreen = screen + } }
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/Registrations.kt b/src/main/kotlin/com/dulkirfabric/Registrations.kt new file mode 100644 index 0000000..101feca --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/Registrations.kt @@ -0,0 +1,24 @@ +package com.dulkirfabric + +import com.dulkirfabric.DulkirModFabric.EVENT_BUS +import com.dulkirfabric.commands.ConfigCommand +import com.mojang.brigadier.CommandDispatcher +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import net.minecraft.command.CommandRegistryAccess + +/** + * Collection of different mod registration stuff ran on initializing the mod. It is separated for readability + * purposes, as the list of features is planned to be quite large. + */ +object Registrations { + + fun registerCommands() { + val cre = ClientCommandRegistrationCallback.EVENT + cre.register(ConfigCommand::register) + } + + fun registerEventListeners() { + EVENT_BUS.subscribe(DulkirModFabric) + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/commands/ConfigCommand.kt b/src/main/kotlin/com/dulkirfabric/commands/ConfigCommand.kt new file mode 100644 index 0000000..81d5d07 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/commands/ConfigCommand.kt @@ -0,0 +1,20 @@ +package com.dulkirfabric.commands + +import com.dulkirfabric.DulkirModFabric +import com.dulkirfabric.DulkirModFabric.mc +import com.dulkirfabric.config.DulkirConfig +import com.google.common.eventbus.Subscribe +import com.mojang.brigadier.CommandDispatcher +import com.mojang.brigadier.builder.LiteralArgumentBuilder +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import net.minecraft.command.CommandRegistryAccess + +object ConfigCommand { + fun register(dispatcher: CommandDispatcher<FabricClientCommandSource>, registryAccess: CommandRegistryAccess) { + dispatcher.register(LiteralArgumentBuilder.literal<FabricClientCommandSource>("dulkir").executes { + println("command running") + DulkirModFabric.openScreenDelayed(DulkirConfig().screen) + return@executes 0 + }) + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt index 14c8c29..8e0be9e 100644 --- a/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt +++ b/src/main/kotlin/com/dulkirfabric/config/DulkirConfig.kt @@ -13,6 +13,7 @@ package com.dulkirfabric.config +import com.dulkirfabric.DulkirModFabric.mc import me.shedaniel.clothconfig2.api.ConfigBuilder import me.shedaniel.clothconfig2.api.Modifier import me.shedaniel.clothconfig2.api.ModifierKeyCode @@ -25,24 +26,18 @@ import net.minecraft.text.Text import net.minecraft.util.Formatting import net.minecraft.util.Identifier -object DulkirConfig { +class DulkirConfig { private val buttonText: Text = MutableText.of(LiteralTextContent("Dulkir")).formatted(Formatting.BOLD, Formatting.YELLOW) var screen: Screen init { - /*val builder = ConfigBuilder.create() - .setParentScreen(mc.currentScreen) - .setTitle(buttonText) - val entryBuilder = builder.entryBuilder() - - val general = builder.getOrCreateCategory(Text.of("General")) - val someSetting = general.addEntry(entryBuilder.)*/ val builder = ConfigBuilder.create().setTitle(buttonText) builder.setDefaultBackgroundTexture(Identifier("minecraft:textures/block/oak_planks.png")) builder.setGlobalized(true) builder.setGlobalizedExpanded(true) + builder.setParentScreen(mc.currentScreen) val entryBuilder = builder.entryBuilder() val testing = builder.getOrCreateCategory(Text.translatable("category.cloth-config.testing")) testing.addEntry( |