aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/garden/GardenConfig.java9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/inventory/LogBookStats.kt121
3 files changed, 133 insertions, 1 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 31ebf5420..22b0da2f6 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -204,6 +204,7 @@ import at.hannibal2.skyhanni.features.garden.fortuneguide.CaptureFarmingGear
import at.hannibal2.skyhanni.features.garden.inventory.AnitaExtraFarmingFortune
import at.hannibal2.skyhanni.features.garden.inventory.GardenCropMilestoneInventory
import at.hannibal2.skyhanni.features.garden.inventory.GardenInventoryNumbers
+import at.hannibal2.skyhanni.features.garden.inventory.LogBookStats
import at.hannibal2.skyhanni.features.garden.inventory.SkyMartCopperPrice
import at.hannibal2.skyhanni.features.garden.inventory.plots.GardenNextPlotPrice
import at.hannibal2.skyhanni.features.garden.inventory.plots.GardenPlotIcon
@@ -709,6 +710,8 @@ class SkyHanniMod {
loadModule(ServerRestartTitle())
loadModule(CityProjectFeatures())
loadModule(GardenPlotIcon)
+ loadModule(GardenPlotBorders)
+ loadModule(LogBookStats())
loadModule(PocketSackInASackDisplay())
loadModule(ShowFishingItemName())
loadModule(WarpTabComplete)
@@ -766,7 +769,6 @@ class SkyHanniMod {
loadModule(AccountUpgradeReminder())
loadModule(PetExpTooltip())
loadModule(Translator())
- loadModule(GardenPlotBorders)
loadModule(CosmeticFollowingLine())
loadModule(SuperpairsClicksAlert())
loadModule(PowderTracker)
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/garden/GardenConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/garden/GardenConfig.java
index 9d941c095..b19a706f0 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/garden/GardenConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/garden/GardenConfig.java
@@ -233,4 +233,13 @@ public class GardenConfig {
@ConfigEditorBoolean
@FeatureToggle
public boolean copyMilestoneData = true;
+
+ @Expose
+ @ConfigOption(name = "Log Book Stats", desc = "Show total visited/accepted/denied visitors stats.")
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean showLogBookStats = true;
+
+ @Expose
+ public Position logBookStatsPos = new Position(427, 92, false, true);
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/LogBookStats.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/LogBookStats.kt
new file mode 100644
index 000000000..cb409afdb
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/LogBookStats.kt
@@ -0,0 +1,121 @@
+package at.hannibal2.skyhanni.features.garden.inventory
+
+import at.hannibal2.skyhanni.events.GuiRenderEvent
+import at.hannibal2.skyhanni.events.InventoryCloseEvent
+import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
+import at.hannibal2.skyhanni.events.ProfileJoinEvent
+import at.hannibal2.skyhanni.features.garden.GardenAPI
+import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
+import at.hannibal2.skyhanni.utils.NumberUtil.formatLong
+import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables
+import at.hannibal2.skyhanni.utils.StringUtils.matchFirst
+import at.hannibal2.skyhanni.utils.renderables.Renderable
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
+import net.minecraft.init.Items
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class LogBookStats {
+
+ private val groupPattern = RepoPattern.group("garden.inventory.logbook")
+ private val visitedPattern by groupPattern.pattern(
+ "visited",
+ "§7Times Visited: §a(?<timesVisited>[0-9,.]+)"
+ )
+ private val acceptedPattern by groupPattern.pattern(
+ "accepted",
+ "§7Offers Accepted: §a(?<timesAccepted>[0-9,.]+)"
+ )
+ private val pagePattern by groupPattern.pattern(
+ "page.current",
+ "§ePage (?<page>\\d)"
+ )
+
+ private val config get() = GardenAPI.config
+ private var display = emptyList<Renderable>()
+ private val loggedVisitors = mutableMapOf<Int, List<VisitorInfo>>()
+ private var inInventory = false
+ private var currentPage = 0
+
+ @SubscribeEvent
+ fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
+ val inventoryName = event.inventoryName
+ if (inventoryName != "Visitor's Logbook") return
+
+ inInventory = true
+ checkPages(event)
+ val list = mutableListOf<VisitorInfo>()
+
+ for ((index, item) in event.inventoryItems) {
+ val visitorName = item.displayName ?: continue
+ var timesVisited = 0L
+ var timesAccepted = 0L
+ val lore = item.getLore()
+ lore.matchFirst(visitedPattern) {
+ timesVisited += group("timesVisited").formatLong()
+ }
+ lore.matchFirst(acceptedPattern) {
+ timesAccepted += group("timesAccepted").formatLong()
+ }
+
+ val visitor = VisitorInfo(index, visitorName, timesVisited, timesAccepted)
+ list.add(visitor)
+ }
+ loggedVisitors[currentPage] = list
+ display = buildList {
+ val visited = loggedVisitors.values.sumOf { it.sumOf { visitor -> visitor.timesVisited } }
+ val accepted = loggedVisitors.values.sumOf { it.sumOf { visitor -> visitor.timesAccepted } }
+ val visitingNow = VisitorAPI.getVisitors().size
+ val denied = visited - accepted - visitingNow
+ add(Renderable.string("§6Times Visited: §b${visited.addSeparators()}"))
+ add(Renderable.string("§6Times Accepted: §a${accepted.addSeparators()}"))
+ add(Renderable.string("§6Times Denied: §c${denied.addSeparators()}"))
+ }
+ }
+
+ @SubscribeEvent
+ fun onBackgroundDraw(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) {
+ if (inInventory && config.showLogBookStats) {
+ config.logBookStatsPos.renderRenderables(
+ display,
+ extraSpace = 5,
+ posLabel = "Visitor's LogBook Stats"
+ )
+ }
+ }
+
+ @SubscribeEvent
+ fun onProfileChange(event: ProfileJoinEvent) {
+ display = emptyList()
+ loggedVisitors.clear()
+ currentPage = 0
+ inInventory = false
+ }
+
+ @SubscribeEvent
+ fun onInventoryClosed(event: InventoryCloseEvent) {
+ inInventory = false
+ }
+
+ private fun checkPages(event: InventoryFullyOpenedEvent) {
+ val next = event.inventoryItems[53]
+ if (next?.item != Items.arrow) {
+ currentPage++
+ return
+ }
+ for (item in event.inventoryItems.values) {
+ if (item.displayName != "§aNext Page") continue
+ item.getLore().matchFirst(pagePattern) {
+ currentPage = group("page").toInt() - 1
+ }
+ }
+ }
+
+ data class VisitorInfo(
+ var index: Int = -1,
+ var displayName: String = "",
+ var timesVisited: Long = 0,
+ var timesAccepted: Long = 0,
+ )
+}