diff options
author | Erymanthus[#5074] | (u/)RayDeeUx <51521765+RayDeeUx@users.noreply.github.com> | 2023-11-02 18:29:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-02 23:29:05 +0100 |
commit | d3e11684c9efb0635f5199183f9b97ff748c54be (patch) | |
tree | 587168e150cf98898cbf1e6f51cdd68cc75175eb | |
parent | 5052aca0aada1d964117542b00220c2f200c6d74 (diff) | |
download | skyhanni-d3e11684c9efb0635f5199183f9b97ff748c54be.tar.gz skyhanni-d3e11684c9efb0635f5199183f9b97ff748c54be.tar.bz2 skyhanni-d3e11684c9efb0635f5199183f9b97ff748c54be.zip |
Feature(s): Add scoreboard as data source + sunmoon (#576)
In-Game Date: Adds support for reading the in-game scoreboard, and also allow sun/moon symbol customization. #576
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java | 22 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt | 27 |
2 files changed, 45 insertions, 4 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java index d7fd4625d..177c0b3ce 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java @@ -117,15 +117,33 @@ public class GUIConfig { @Expose @ConfigOption( + name = "Use Scoreboard for Date", + desc = "Uses the scoreboard instead to find the current month, date, and time. Greater \"accuracy\", depending on who's asking." + ) + @ConfigEditorBoolean + @FeatureToggle + public boolean useScoreboard = true; + + @Expose + @ConfigOption( + name = "Show Sun/Moon", + desc = "Show the sun or moon symbol seen on the scoreboard." + ) + @ConfigEditorBoolean + @FeatureToggle + public boolean includeSunMoon = true; + + @Expose + @ConfigOption( name = "Refresh Rate", - desc = "Change the time in seconds you would like to refresh the In-Game Date Display." + desc = "Change the time in seconds you would like to refresh the In-Game Date Display.\n§eNOTE: If \"Use Scoreboard for Date\" is enabled, this setting is ignored." ) @ConfigEditorSlider( minValue = 1, maxValue = 60, minStep = 1 ) - public int RefreshSeconds = 10; + public int refreshSeconds = 30; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt index 028b0edbc..1874d1143 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt @@ -1,28 +1,51 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RenderUtils.renderString +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeUtils.formatted import io.github.moulberry.notenoughupdates.util.SkyBlockTime import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class InGameDateDisplay { private val config get() = SkyHanniMod.feature.gui.inGameDateConfig + private val monthAndDatePattern = ".*((Early|Late) )?(Winter|Spring|Summer|Autumn) [0-9]{1,2}(nd|rd|th|st).*".toPattern() private var display = "" @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!isEnabled()) return - if (!event.repeatSeconds(config.RefreshSeconds)) return + if (!LorenzUtils.inSkyBlock) return + if (!config.useScoreboard && !event.repeatSeconds(config.refreshSeconds)) return + if (config.useScoreboard && !event.repeatSeconds(1)) return checkDate() } private fun checkDate() { - display = SkyBlockTime.now().formatted() + val date = SkyBlockTime.now() + var theBaseString: String + if (config.useScoreboard) { + val list = ScoreboardData.sidebarLinesFormatted //we need this to grab the moon/sun symbol + val year = "Year ${date.year}" + var monthAndDate = "??" //initalize as "??" as fallback value in case none of the scoreboard lines match + for (line in list) { monthAndDatePattern.matchMatcher(line) { monthAndDate = line } } + val time = list.find{ it.lowercase().contains("am ") || it.lowercase().contains("pm ") } ?: "??" + theBaseString = "$monthAndDate, $year ${time.trim()}".removeColor() + if (!config.includeSunMoon) theBaseString = theBaseString.replace("☽", "").replace("☀", "").replace("࿇", "") + } else { + theBaseString = date.formatted() + if (config.includeSunMoon) { + if ((date.hour >= 6) && (date.hour < 17)) theBaseString = "$theBaseString ☀" + else theBaseString = "$theBaseString ☽" + } + } + display = theBaseString } @SubscribeEvent |