aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorErymanthus[#5074] | (u/)RayDeeUx <51521765+RayDeeUx@users.noreply.github.com>2023-11-02 18:29:05 -0400
committerGitHub <noreply@github.com>2023-11-02 23:29:05 +0100
commitd3e11684c9efb0635f5199183f9b97ff748c54be (patch)
tree587168e150cf98898cbf1e6f51cdd68cc75175eb /src/main/java
parent5052aca0aada1d964117542b00220c2f200c6d74 (diff)
downloadskyhanni-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
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/GUIConfig.java22
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/InGameDateDisplay.kt27
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