From ebc2948e0f28f95cc27e1264a50ed275743b22ac Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Fri, 28 Feb 2025 22:33:14 +0000 Subject: [PATCH] feat: /optionsprofiles command (#34) --- .../optionsprofiles/OptionsProfilesMod.java | 14 ++++++++++++++ .../optionsprofiles/gui/ProfilesScreen.java | 11 +++++------ .../optionsprofiles/mixin/MixinOptionsScreen.java | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/OptionsProfilesMod.java b/common/src/main/java/net/trafficlunar/optionsprofiles/OptionsProfilesMod.java index c67be1e..5e56a97 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/OptionsProfilesMod.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/OptionsProfilesMod.java @@ -1,5 +1,9 @@ package net.trafficlunar.optionsprofiles; +import dev.architectury.event.events.common.CommandRegistrationEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.commands.Commands; +import net.trafficlunar.optionsprofiles.gui.ProfilesScreen; import net.trafficlunar.optionsprofiles.profiles.Profiles; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -26,5 +30,15 @@ public class OptionsProfilesMod { // Update / add configuration for existing profiles Profiles.updateProfiles(); + + // Add /optionsprofiles command + CommandRegistrationEvent.EVENT.register(((dispatcher, buildContext, selection) -> dispatcher.register( + Commands + .literal("optionsprofiles") + .executes(context -> { + Minecraft.getInstance().setScreen(new ProfilesScreen(null)); + return 1; + }) + ))); } } diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/gui/ProfilesScreen.java b/common/src/main/java/net/trafficlunar/optionsprofiles/gui/ProfilesScreen.java index 8906106..dd5ce20 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/gui/ProfilesScreen.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/gui/ProfilesScreen.java @@ -1,21 +1,20 @@ package net.trafficlunar.optionsprofiles.gui; -import net.trafficlunar.optionsprofiles.profiles.Profiles; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.layouts.LinearLayout; import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.options.OptionsScreen; import net.minecraft.client.gui.screens.options.OptionsSubScreen; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; +import net.trafficlunar.optionsprofiles.profiles.Profiles; public class ProfilesScreen extends OptionsSubScreen { - private Screen optionsLastScreen; + private final Screen lastScreen; public ProfilesList profilesList; - public ProfilesScreen(Screen lastScreen, Screen optionsLastScreen) { + public ProfilesScreen(Screen lastScreen) { super(lastScreen, null, Component.translatable("gui.optionsprofiles.profiles-menu")); - this.optionsLastScreen = optionsLastScreen; + this.lastScreen = lastScreen; } protected void addOptions() {} @@ -45,7 +44,7 @@ public class ProfilesScreen extends OptionsSubScreen { } public void onClose() { - this.minecraft.setScreen(new OptionsScreen(optionsLastScreen, this.minecraft.options)); + this.minecraft.setScreen(lastScreen); } protected void repositionElements() { diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/mixin/MixinOptionsScreen.java b/common/src/main/java/net/trafficlunar/optionsprofiles/mixin/MixinOptionsScreen.java index fb13de1..155e42c 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/mixin/MixinOptionsScreen.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/mixin/MixinOptionsScreen.java @@ -1,10 +1,10 @@ package net.trafficlunar.optionsprofiles.mixin; -import net.trafficlunar.optionsprofiles.gui.ProfilesScreen; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.options.OptionsScreen; import net.minecraft.network.chat.Component; +import net.trafficlunar.optionsprofiles.gui.ProfilesScreen; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -25,7 +25,7 @@ public class MixinOptionsScreen extends Screen { this.addRenderableWidget( Button.builder( Component.translatable("gui.optionsprofiles.profiles-menu"), - (button) -> this.minecraft.setScreen(new ProfilesScreen(this, lastScreen))) + (button) -> this.minecraft.setScreen(new ProfilesScreen(this))) .width(75) .pos(5, 5) .build()