diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt index af6a7dbfd..1404e685f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland @@ -13,13 +14,16 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.sorted import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.TimeUtils import io.github.moulberry.notenoughupdates.util.SkyBlockTime +import net.minecraft.entity.item.EntityArmorStand import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.Collections class KingTalismanHelper { - private val config get() = SkyHanniMod.feature.mining + private val config get() = SkyHanniMod.feature.mining.kingTalisman + private var currentOffset: Int? = null private val kingLocation = LorenzVec(129.6, 196.5, 194.1) private val kingCircles = listOf( @@ -33,10 +37,11 @@ class KingTalismanHelper { ) private var allKingsDisplay = emptyList<String>() - private var farDisplay = "" + private var farDisplay = "Visit the king to sync up." private var display = emptyList<String>() - fun isNearby() = LorenzUtils.skyBlockArea == "Royal Palace" && kingLocation.distanceToPlayer() < 10 + private fun isNearby() = IslandType.DWARVEN_MINES.isInIsland() && LorenzUtils.skyBlockArea == "Royal Palace" && + kingLocation.distanceToPlayer() < 10 @SubscribeEvent fun onTick(event: LorenzTickEvent) { @@ -46,17 +51,48 @@ class KingTalismanHelper { display = emptyList() return } + val nearby = isNearby() + if (nearby) { + if (currentOffset == null) { + checkOffset() + } + } + + if (currentOffset == null) return update() - display = if (isNearby()) allKingsDisplay else Collections.singletonList(farDisplay) + display = if (nearby) allKingsDisplay else Collections.singletonList(farDisplay) + } + + private fun checkOffset() { + val currentKing = getCurrentKing() + + val king = + EntityUtils.getEntitiesNearby<EntityArmorStand>(LorenzVec(129.6, 196.0, 196.7), 2.0) + .filter { it.name.startsWith("§6§lKing ") }.first() + val foundKing = "§6§lKing (?<name>.*)".toPattern().matchMatcher(king.name) { + group("name") + } ?: return + + println(" ") + + val currentId = kingCircles.indexOf(currentKing) + println("currentKing: $currentKing $currentId") + + val foundId = kingCircles.indexOf(foundKing) + println("currentKing: $foundKing $foundId") + + currentOffset = currentId - foundId } - fun isEnabled() = config.kingTalismanHelper && IslandType.DWARVEN_MINES.isInIsland() + fun isEnabled() = config.enabled && LorenzUtils.inSkyBlock + && (IslandType.DWARVEN_MINES.isInIsland() || config.outsideMines) @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (event.inventoryName != "Commissions") return if (!isEnabled()) return + if (currentOffset == null) return if (!isNearby()) return val profileSpecific = ProfileStorageData.profileSpecific ?: return @@ -120,12 +156,14 @@ class KingTalismanHelper { } private fun getKingTimes(): MutableMap<String, Long> { + val currentOffset = currentOffset ?: 0 val oneSbDay = 1000 * 60 * 20 val oneCircleTime = oneSbDay * kingCircles.size val kingTime = mutableMapOf<String, Long>() for ((index, king) in kingCircles.withIndex()) { - - val startTime = SkyBlockTime(day = index + 2 - kingCircles.size) +// val startTime = SkyBlockTime(day = index + 2 - kingCircles.size) +// val startTime = SkyBlockTime(day = index - kingCircles.size) + val startTime = SkyBlockTime(day = index + currentOffset - kingCircles.size) var timeNext = startTime.toMillis() while (timeNext < System.currentTimeMillis()) { timeNext += oneCircleTime @@ -140,8 +178,8 @@ class KingTalismanHelper { @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { - if (!config.kingTalismanHelper) return + if (!config.enabled) return - config.kingTalismanHelperPos.renderStrings(display, posLabel = "King Talisman Helper") + config.position.renderStrings(display, posLabel = "King Talisman Helper") } } |
