diff --git a/UIInfoSuite2/ModEntry.cs b/UIInfoSuite2/ModEntry.cs index da9ff268..64cf1f53 100644 --- a/UIInfoSuite2/ModEntry.cs +++ b/UIInfoSuite2/ModEntry.cs @@ -1,4 +1,5 @@ using System; +using System.Reflection; using StardewModdingAPI; using StardewModdingAPI.Events; using StardewValley; @@ -160,16 +161,36 @@ private static void HandleCalendarAndQuestKeyBindings(IModHelper helper) { if (_modConfig != null) { - if (Context.IsPlayerFree && _modConfig.OpenCalendarKeybind.JustPressed()) + if (_modConfig.OpenCalendarKeybind.JustPressed()) { helper.Input.SuppressActiveKeybinds(_modConfig.OpenCalendarKeybind); - Game1.activeClickableMenu = new Billboard(); + ToggleBillboard(false); } - else if (Context.IsPlayerFree && _modConfig.OpenQuestBoardKeybind.JustPressed()) + else if (_modConfig.OpenQuestBoardKeybind.JustPressed()) { helper.Input.SuppressActiveKeybinds(_modConfig.OpenQuestBoardKeybind); - Game1.RefreshQuestOfTheDay(); - Game1.activeClickableMenu = new Billboard(true); + ToggleBillboard(true); + } + } + } + + private static void ToggleBillboard(bool shouldShowDailyQuest) + { + if (Context.IsPlayerFree) + { + Game1.activeClickableMenu = new Billboard(shouldShowDailyQuest); + } + else if (Game1.activeClickableMenu is Billboard billboard) + { + bool isRequestedBillboardCurrentlyOpen = + (bool)( + typeof(Billboard) + .GetField("dailyQuestBoard", BindingFlags.NonPublic | BindingFlags.Instance) + ?.GetValue(billboard) ?? false + ) == shouldShowDailyQuest; + if (isRequestedBillboardCurrentlyOpen) + { + Game1.activeClickableMenu.exitThisMenu(); } } }